Version Notes
Fix facet with ampersand configuration for search engine > facets
Replace "-" with "&afs:feed" to separate feeds in url (compatibility with AFS 7.7)
Fix empty facet id sent when performing an empty query to afs to get facets list
Add description node for variants
Add cdata for variant name
Prevent to export empty categories node
Add cdata for variant name
Add variant details for grouped products
Download this release
Release Info
Developer | Antidot |
Extension | Antidot_Antidot |
Version | 1.2.3 |
Comparing to | |
See all releases |
Code changes from version 1.2.2 to 1.2.3
- app/code/community/MDN/Antidot/Block/Catalogsearch/Articles.php +70 -0
- app/code/community/MDN/Antidot/Block/Catalogsearch/Banner.php +6 -3
- app/code/community/MDN/Antidot/Block/Catalogsearch/Stores.php +70 -0
- app/code/community/MDN/Antidot/Block/System/Config/Button/PushStores.php +36 -0
- app/code/community/MDN/Antidot/Block/System/Config/Fieldset/Notice.php +3 -0
- app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/AcpFeeds.php +97 -0
- app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Facet.php +2 -1
- app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Tabs.php +95 -0
- app/code/community/MDN/Antidot/Helper/CatalogSearch/Data.php +12 -6
- app/code/community/MDN/Antidot/Helper/Data.php +47 -0
- app/code/community/MDN/Antidot/Helper/LogExport.php +1 -1
- app/code/community/MDN/Antidot/Model/Export/Abstract.php +58 -16
- app/code/community/MDN/Antidot/Model/Export/Article.php +136 -75
- app/code/community/MDN/Antidot/Model/Export/Context.php +6 -3
- app/code/community/MDN/Antidot/Model/Export/Product.php +1 -2
- app/code/community/MDN/Antidot/Model/Export/Store.php +33 -0
- app/code/community/MDN/Antidot/Model/Observer.php +108 -2
- app/code/community/MDN/Antidot/Model/Resource/Catalog/Product/Collection.php +48 -0
- app/code/community/MDN/Antidot/Model/Resource/Engine/Abstract.php +21 -0
- app/code/community/MDN/Antidot/Model/Resource/Engine/Antidot.php +36 -13
- app/code/community/MDN/Antidot/Model/Search/Search.php +24 -2
- app/code/community/MDN/Antidot/Model/Search/Suggest.php +54 -25
- app/code/community/MDN/Antidot/Model/Transport/Http.php +7 -2
- app/code/community/MDN/Antidot/Test/Block/System/Config/Form/Field/Array/AcpFeeds.php +52 -0
- app/code/community/MDN/Antidot/Test/Helper/Data.php +222 -4
- app/code/community/MDN/Antidot/Test/Helper/Data/fixtures/testGetActiveResultTabsCase1.yaml +2 -0
- app/code/community/MDN/Antidot/Test/Helper/Data/fixtures/testGetActiveResultTabsCase2.yaml +2 -0
- app/code/community/MDN/Antidot/Test/Model/Export/Abstract.php +12 -0
- app/code/community/MDN/Antidot/Test/Model/Export/Article.php +106 -0
- app/code/community/MDN/Antidot/Test/Model/Export/Article/fixtures/testWriteXml.yaml +117 -0
- app/code/community/MDN/Antidot/Test/Model/Export/Store.php +26 -0
- app/code/community/MDN/Antidot/Test/Model/Observer.php +30 -0
- app/code/community/MDN/Antidot/Test/Model/Search/Search.php +55 -0
- app/code/community/MDN/Antidot/Test/Model/Search/Suggest.php +59 -3
- app/code/community/MDN/Antidot/Test/Model/Search/Suggest/fixtures/testFeedConfig.yaml +36 -0
- app/code/community/MDN/Antidot/Test/Model/Transport/Http.php +47 -1
- app/code/community/MDN/Antidot/controllers/Adminhtml/Antidot/PushController.php +50 -0
- app/code/community/MDN/Antidot/etc/config.xml +46 -29
- app/code/community/MDN/Antidot/etc/system.xml +90 -91
- app/code/community/MDN/Antidot/sql/Antidot_setup/mysql4-upgrade-1.2.2-1.2.3.php +169 -0
- app/design/adminhtml/default/default/template/antidot/system/config/form/field/acpfeeds.phtml +58 -0
- app/design/adminhtml/default/default/template/antidot/system/config/form/field/tabs.phtml +58 -0
- app/design/frontend/base/default/layout/antidot.xml +11 -0
- app/design/frontend/base/default/template/antidot/catalogsearch/result/articles.phtml +17 -0
- app/design/frontend/base/default/template/antidot/catalogsearch/result/stores.phtml +22 -0
- app/design/frontend/base/default/template/antidot/page/antidot_results.phtml +112 -0
- app/design/frontend/rwd/default/template/antidot/page/antidot_results.phtml +129 -0
- app/locale/de_AT/MDN_Antidot.csv +24 -1
- app/locale/de_CH/MDN_Antidot.csv +24 -1
- app/locale/de_DE/MDN_Antidot.csv +24 -1
- app/locale/es_AR/MDN_Antidot.csv +24 -1
- app/locale/es_CL/MDN_Antidot.csv +24 -1
- app/locale/es_CO/MDN_Antidot.csv +24 -1
- app/locale/es_CR/MDN_Antidot.csv +24 -1
- app/locale/es_ES/MDN_Antidot.csv +24 -1
- app/locale/es_MX/MDN_Antidot.csv +24 -1
- app/locale/es_PA/MDN_Antidot.csv +24 -1
- app/locale/es_PE/MDN_Antidot.csv +24 -1
- app/locale/es_VE/MDN_Antidot.csv +24 -1
- app/locale/fr_CA/MDN_Antidot.csv +29 -5
- app/locale/fr_FR/MDN_Antidot.csv +26 -2
- lib/antidot/.travis.yml +1 -0
- lib/antidot/AFS/SEARCH/TEST/DATA/introspection_responses.php +468 -0
- lib/antidot/AFS/SEARCH/TEST/introspectionTest.php +115 -0
- lib/antidot/AFS/SEARCH/TEST/metadataHelperTest.php +106 -0
- lib/antidot/AFS/SEARCH/TEST/responseHelperTest.php +70 -0
- lib/antidot/AFS/SEARCH/afs_introspection.php +66 -0
- lib/antidot/AFS/SEARCH/afs_metadata_helper.php +144 -0
- lib/antidot/AFS/SEARCH/afs_response_helper.php +39 -0
- lib/antidot/AIF/TEST/authenticationTest.php +6 -1
- lib/antidot/AIF/TEST/pafConnectorTest.php +3 -3
- lib/antidot/AIF/afs_about_connector.php +1 -1
- lib/antidot/AIF/afs_authentication.php +2 -2
- lib/antidot/AIF/afs_bows_connector.php +1 -1
- lib/antidot/AIF/afs_paf_connector.php +40 -13
- lib/antidot/AIF/afs_paf_live_connector.php +5 -2
- lib/antidot/AIF/afs_token_authentication.php +10 -4
- lib/antidot/AIF/afs_user_authentication.php +14 -12
- lib/antidot/COMMON/afs_connector_base.php +6 -0
- lib/antidot/afs_lib.php +1 -1
- lib/antidot/afs_version.php +1 -1
- lib/antidot/doc/data/raw_example.php +338 -13
- package.xml +4 -4
- skin/frontend/base/default/css/antidot/CollapsibleLists.css +30 -0
- skin/frontend/base/default/css/antidot/catalogsearch.css +68 -0
- skin/frontend/base/default/css/mdn/antidot/CollapsibleLists.css +0 -44
- skin/frontend/base/default/images/{mdn/antidot → antidot}/button-closed.png +0 -0
- skin/frontend/base/default/images/{mdn/antidot → antidot}/button-open.png +0 -0
- skin/frontend/base/default/images/{mdn/antidot → antidot}/button.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/base.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/cd.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/empty.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/folder.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/folderopen.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/globe.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/imgfolder.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/join.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/joinbottom.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/line.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/list-item-contents.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/list-item-last-open.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/list-item-last.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/list-item-open.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/list-item-root.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/list-item.png +0 -0
- skin/frontend/base/default/images/mdn/antidot/minus.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/minusbottom.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/musicfolder.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/nolines_minus.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/nolines_plus.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/page.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/plus.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/plusbottom.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/question.gif +0 -0
- skin/frontend/base/default/images/mdn/antidot/trash.gif +0 -0
app/code/community/MDN/Antidot/Block/Catalogsearch/Articles.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_Catalogsearch_Articles extends Mage_Core_Block_Template
|
17 |
+
{
|
18 |
+
protected $_articles = null;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Return articles
|
22 |
+
* @return type
|
23 |
+
*/
|
24 |
+
public function getArticles()
|
25 |
+
{
|
26 |
+
if ($this->_articles == null)
|
27 |
+
{
|
28 |
+
$this->loadArticles();
|
29 |
+
}
|
30 |
+
return $this->_articles;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Return articles
|
35 |
+
* @return boolean
|
36 |
+
*/
|
37 |
+
public function hasArticle()
|
38 |
+
{
|
39 |
+
return count($this->getArticles())>0;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Load articles based on antidot results
|
44 |
+
*/
|
45 |
+
protected function loadArticles()
|
46 |
+
{
|
47 |
+
if ($this->getLayer()) {
|
48 |
+
$this->_articles = $this->getLayer()->getProductCollection()->getArticles();
|
49 |
+
} else {
|
50 |
+
$this->_articles = array();
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Returns current catalog layer.
|
57 |
+
*
|
58 |
+
* @return MDN_Antidot_Model_Catalogsearch_Layer|Mage_Catalog_Model_Layer
|
59 |
+
*/
|
60 |
+
public function getLayer()
|
61 |
+
{
|
62 |
+
$helper = Mage::helper('Antidot');
|
63 |
+
if ($helper->isActiveEngine()) {
|
64 |
+
return Mage::getSingleton('Antidot/catalogsearch_layer');
|
65 |
+
}
|
66 |
+
|
67 |
+
return null;
|
68 |
+
}
|
69 |
+
|
70 |
+
}
|
app/code/community/MDN/Antidot/Block/Catalogsearch/Banner.php
CHANGED
@@ -44,8 +44,11 @@ class MDN_Antidot_Block_Catalogsearch_Banner extends Mage_Core_Block_Template
|
|
44 |
*/
|
45 |
protected function loadBanners()
|
46 |
{
|
47 |
-
|
48 |
-
|
|
|
|
|
|
|
49 |
|
50 |
}
|
51 |
|
@@ -61,7 +64,7 @@ class MDN_Antidot_Block_Catalogsearch_Banner extends Mage_Core_Block_Template
|
|
61 |
return Mage::getSingleton('Antidot/catalogsearch_layer');
|
62 |
}
|
63 |
|
64 |
-
return
|
65 |
}
|
66 |
|
67 |
}
|
44 |
*/
|
45 |
protected function loadBanners()
|
46 |
{
|
47 |
+
if ($this->getLayer()) {
|
48 |
+
$this->_banners = $this->getLayer()->getProductCollection()->getBanners();
|
49 |
+
} else {
|
50 |
+
$this->_banners = array();
|
51 |
+
}
|
52 |
|
53 |
}
|
54 |
|
64 |
return Mage::getSingleton('Antidot/catalogsearch_layer');
|
65 |
}
|
66 |
|
67 |
+
return null;
|
68 |
}
|
69 |
|
70 |
}
|
app/code/community/MDN/Antidot/Block/Catalogsearch/Stores.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_Catalogsearch_Stores extends Mage_Core_Block_Template
|
17 |
+
{
|
18 |
+
protected $_stores = null;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Return stores
|
22 |
+
* @return type
|
23 |
+
*/
|
24 |
+
public function getStores()
|
25 |
+
{
|
26 |
+
if ($this->_stores == null)
|
27 |
+
{
|
28 |
+
$this->loadStores();
|
29 |
+
}
|
30 |
+
return $this->_stores;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Return stores
|
35 |
+
* @return boolean
|
36 |
+
*/
|
37 |
+
public function hasStore()
|
38 |
+
{
|
39 |
+
return count($this->getStores())>0;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Load stores based on antidot results
|
44 |
+
*/
|
45 |
+
protected function loadStores()
|
46 |
+
{
|
47 |
+
if ($this->getLayer()) {
|
48 |
+
$this->_stores = $this->getLayer()->getProductCollection()->getStores();
|
49 |
+
} else {
|
50 |
+
$this->_stores = array();
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Returns current catalog layer.
|
57 |
+
*
|
58 |
+
* @return MDN_Antidot_Model_Catalogsearch_Layer|Mage_Catalog_Model_Layer
|
59 |
+
*/
|
60 |
+
public function getLayer()
|
61 |
+
{
|
62 |
+
$helper = Mage::helper('Antidot');
|
63 |
+
if ($helper->isActiveEngine()) {
|
64 |
+
return Mage::getSingleton('Antidot/catalogsearch_layer');
|
65 |
+
}
|
66 |
+
|
67 |
+
return null;
|
68 |
+
}
|
69 |
+
|
70 |
+
}
|
app/code/community/MDN/Antidot/Block/System/Config/Button/PushStores.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_PushStores 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 = Mage::helper("adminhtml")->getUrl('adminhtml/antidot_push/store');
|
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/Fieldset/Notice.php
CHANGED
@@ -50,6 +50,9 @@ class MDN_Antidot_Block_System_Config_Fieldset_Notice
|
|
50 |
}
|
51 |
|
52 |
$html .= '</ul>';
|
|
|
|
|
|
|
53 |
$html .= '</div>';
|
54 |
return $html;
|
55 |
}
|
50 |
}
|
51 |
|
52 |
$html .= '</ul>';
|
53 |
+
$html .= '<ul style="margin-bottom:10px;margin-top:10px;margin-left:5px;"><li>';
|
54 |
+
$html .= '<a target="_blank "href="http://doc-store.antidot.net/book#!book;uri=aa77b81f03d5e6f1e553b7e6c6fd0e0c;breadcrumb=a909fa5b2c554e4d940a115a476a5fd5">'.$helper->__("Documentation").'</a>';
|
55 |
+
$html .= '</ul></li>';
|
56 |
$html .= '</div>';
|
57 |
return $html;
|
58 |
}
|
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/AcpFeeds.php
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_Form_Field_Array_AcpFeeds extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
|
17 |
+
{
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Check if columns are defined, set template
|
21 |
+
*
|
22 |
+
*/
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
parent::__construct();
|
26 |
+
$this->setTemplate('antidot/system/config/form/field/acpfeeds.phtml');
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* {@inherit}
|
31 |
+
*/
|
32 |
+
protected function _prepareToRender()
|
33 |
+
{
|
34 |
+
|
35 |
+
$this->addColumn('feed', array());
|
36 |
+
$this->addColumn('active', array());
|
37 |
+
$this->addColumn('suggest_number', array());
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Obtain existing data from form element
|
44 |
+
*
|
45 |
+
* Each row will be instance of Varien_Object
|
46 |
+
*
|
47 |
+
* @return array
|
48 |
+
*/
|
49 |
+
public function getArrayRows()
|
50 |
+
{
|
51 |
+
|
52 |
+
/** @var Varien_Data_Form_Element_Abstract */
|
53 |
+
$element = $this->getElement();
|
54 |
+
$elementValues = $element->getValue();
|
55 |
+
|
56 |
+
$resultTypes = array(
|
57 |
+
'categories' => Mage::helper('Antidot')->__('Categories'),
|
58 |
+
'products' => Mage::helper('Antidot')->__('Products'),
|
59 |
+
'brands' => Mage::helper('Antidot')->__('Brands'),
|
60 |
+
'articles' => Mage::helper('Antidot')->__('Articles'),
|
61 |
+
'stores' => Mage::helper('Antidot')->__('Stores')
|
62 |
+
);
|
63 |
+
|
64 |
+
$result=array();
|
65 |
+
if ($elementValues) {
|
66 |
+
foreach ($elementValues as $rowId => $elementValue) {
|
67 |
+
$tab = $elementValue['feed'];
|
68 |
+
$elementValue['name'] = $resultTypes[$tab];
|
69 |
+
$rowId = '_feeds_'.$tab;
|
70 |
+
$elementValue['_id'] = $rowId;
|
71 |
+
unset($resultTypes[$tab]);
|
72 |
+
$result[$rowId] = new Varien_Object($elementValue);
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* if no data : set values by default :
|
78 |
+
*/
|
79 |
+
foreach ($resultTypes as $typeResult => $label) {
|
80 |
+
$rowId = '_feeds_'.$typeResult;
|
81 |
+
$row = array();
|
82 |
+
$row['_id'] = $rowId;
|
83 |
+
$row['feed'] = $typeResult;
|
84 |
+
$row['name'] = $label;
|
85 |
+
|
86 |
+
//Add the values from element config
|
87 |
+
$row['active'] = '';
|
88 |
+
$row['suggest_number'] = '';
|
89 |
+
|
90 |
+
$result[$rowId] = new Varien_Object($row);
|
91 |
+
}
|
92 |
+
|
93 |
+
return $result;
|
94 |
+
|
95 |
+
}
|
96 |
+
|
97 |
+
}
|
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Facet.php
CHANGED
@@ -55,13 +55,14 @@ class MDN_Antidot_Block_System_Config_Form_Field_Array_Facet extends Mage_Adminh
|
|
55 |
return $this->_getOrderRenderer()
|
56 |
->setName($inputName)
|
57 |
->setTitle($columnName)
|
58 |
-
->
|
59 |
->setOptions(Mage::getModel("Antidot/System_Config_Number")->toOptionArray(10))
|
60 |
->toHtml();
|
61 |
case 'multiple':
|
62 |
return $this->_getMultipleRenderer()
|
63 |
->setName($inputName)
|
64 |
->setTitle($columnName)
|
|
|
65 |
->setOptions(Mage::getModel("Antidot/System_Config_DisableEnable")->toOptionArray())
|
66 |
->toHtml();
|
67 |
}
|
55 |
return $this->_getOrderRenderer()
|
56 |
->setName($inputName)
|
57 |
->setTitle($columnName)
|
58 |
+
->setExtraParams('style="width:50px"')
|
59 |
->setOptions(Mage::getModel("Antidot/System_Config_Number")->toOptionArray(10))
|
60 |
->toHtml();
|
61 |
case 'multiple':
|
62 |
return $this->_getMultipleRenderer()
|
63 |
->setName($inputName)
|
64 |
->setTitle($columnName)
|
65 |
+
->setExtraParams('style="width:100px"')
|
66 |
->setOptions(Mage::getModel("Antidot/System_Config_DisableEnable")->toOptionArray())
|
67 |
->toHtml();
|
68 |
}
|
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Tabs.php
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_Form_Field_Array_Tabs extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
|
17 |
+
{
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Check if columns are defined, set template
|
21 |
+
*
|
22 |
+
*/
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
parent::__construct();
|
26 |
+
$this->setTemplate('antidot/system/config/form/field/tabs.phtml');
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* {@inherit}
|
31 |
+
*/
|
32 |
+
protected function _prepareToRender()
|
33 |
+
{
|
34 |
+
|
35 |
+
$this->addColumn('tab', array());
|
36 |
+
$this->addColumn('active', array());
|
37 |
+
$this->addColumn('show_noresult', array());
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Obtain existing data from form element
|
44 |
+
*
|
45 |
+
* Each row will be instance of Varien_Object
|
46 |
+
*
|
47 |
+
* @return array
|
48 |
+
*/
|
49 |
+
public function getArrayRows()
|
50 |
+
{
|
51 |
+
|
52 |
+
/** @var Varien_Data_Form_Element_Abstract */
|
53 |
+
$element = $this->getElement();
|
54 |
+
$elementValues = $element->getValue();
|
55 |
+
|
56 |
+
$resultTypes = array(
|
57 |
+
'products' => Mage::helper('Antidot')->__('Products'),
|
58 |
+
'articles' => Mage::helper('Antidot')->__('Articles'),
|
59 |
+
'stores' => Mage::helper('Antidot')->__('Stores')
|
60 |
+
);
|
61 |
+
|
62 |
+
$result=array();
|
63 |
+
if ($elementValues) {
|
64 |
+
foreach ($elementValues as $rowId => $elementValue) {
|
65 |
+
$tab = $elementValue['tab'];
|
66 |
+
$elementValue['name'] = $resultTypes[$tab];
|
67 |
+
$rowId = '_result_tab_'.$tab;
|
68 |
+
$elementValue['_id'] = $rowId;
|
69 |
+
unset($resultTypes[$tab]);
|
70 |
+
$result[$rowId] = new Varien_Object($elementValue);
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* if no data : set values by default :
|
76 |
+
*/
|
77 |
+
foreach ($resultTypes as $typeResult => $label) {
|
78 |
+
$rowId = '_result_tab_'.$typeResult;
|
79 |
+
$row = array();
|
80 |
+
$row['_id'] = $rowId;
|
81 |
+
$row['tab'] = $typeResult;
|
82 |
+
$row['name'] = $label;
|
83 |
+
|
84 |
+
//Add the values from element config
|
85 |
+
$row['active'] = '';
|
86 |
+
$row['show_noresult'] = '';
|
87 |
+
|
88 |
+
$result[$rowId] = new Varien_Object($row);
|
89 |
+
}
|
90 |
+
|
91 |
+
return $result;
|
92 |
+
|
93 |
+
}
|
94 |
+
|
95 |
+
}
|
app/code/community/MDN/Antidot/Helper/CatalogSearch/Data.php
CHANGED
@@ -29,12 +29,18 @@ class MDN_Antidot_Helper_CatalogSearch_Data extends Mage_CatalogSearch_Helper_Da
|
|
29 |
/**
|
30 |
* {@inherit}
|
31 |
*/
|
32 |
-
public function getResultUrl($query = null, $store = null)
|
33 |
{
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
}
|
40 |
}
|
29 |
/**
|
30 |
* {@inherit}
|
31 |
*/
|
32 |
+
public function getResultUrl($query = null, $store = null, $useSid = null)
|
33 |
{
|
34 |
+
$params = array('_query' => array(self::QUERY_VAR_NAME => $query),
|
35 |
+
'_secure' => Mage::app()->getFrontController()->getRequest()->isSecure(),
|
36 |
+
'_store' => $store);
|
37 |
+
|
38 |
+
if ($useSid===null) {
|
39 |
+
$useSid = Mage::app()->getUseSessionInUrl();
|
40 |
+
}
|
41 |
+
if (!$useSid) {
|
42 |
+
$params['_nosid'] = true;
|
43 |
+
}
|
44 |
+
return $this->_getUrl('catalogsearch/result', $params);
|
45 |
}
|
46 |
}
|
app/code/community/MDN/Antidot/Helper/Data.php
CHANGED
@@ -300,4 +300,51 @@ class MDN_Antidot_Helper_Data extends Mage_Core_Helper_Abstract
|
|
300 |
}
|
301 |
return $mageEdition;
|
302 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
303 |
}
|
300 |
}
|
301 |
return $mageEdition;
|
302 |
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* Return if there is at least one active tab
|
306 |
+
*
|
307 |
+
* @return boolean
|
308 |
+
*/
|
309 |
+
public function hasResultTabs() {
|
310 |
+
return count($this->getActiveResultTabs())>0;
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Return the active tabs array
|
315 |
+
*
|
316 |
+
* @param $collection MDN_Antidot_Model_Resource_Catalog_Product_Collection
|
317 |
+
* @return array
|
318 |
+
*/
|
319 |
+
public function getActiveResultTabs($collection = null) {
|
320 |
+
|
321 |
+
$resultTypes = array(
|
322 |
+
'products' => Mage::helper('Antidot')->__('Products'),
|
323 |
+
'articles' => Mage::helper('Antidot')->__('Articles'),
|
324 |
+
'stores' => Mage::helper('Antidot')->__('Stores')
|
325 |
+
);
|
326 |
+
|
327 |
+
$activeTabs = array();
|
328 |
+
$tabs = unserialize(Mage::getStoreConfig('antidot/engine/result_tabs'));
|
329 |
+
$selectFirst = true;
|
330 |
+
if ($tabs) {
|
331 |
+
foreach($tabs as $tab) {
|
332 |
+
if (isset($tab['active'])) { //if the tab is set active in BO
|
333 |
+
if (!$collection || isset($tab['show_noresult']) //if the tab is set show if no result in BO
|
334 |
+
|| $collection->getTotalResult($tab['tab'])>0 // if there's result on this tab
|
335 |
+
|| ($collection->getTotalResult() == 0 && $tab['tab']=='products')) { // if there's no result in any tab and the tab is products
|
336 |
+
$tab['name'] = $resultTypes[$tab['tab']];
|
337 |
+
//select the first tab with result (or product tab if no results at all)
|
338 |
+
if ($selectFirst && $collection && ($collection->getTotalResult($tab['tab'])>0
|
339 |
+
|| ($collection->getTotalResult() == 0 && $tab['tab']=='products'))) {
|
340 |
+
$tab['selected'] = $selectFirst;
|
341 |
+
$selectFirst = false;
|
342 |
+
}
|
343 |
+
$activeTabs[] = $tab;
|
344 |
+
}
|
345 |
+
}
|
346 |
+
}
|
347 |
+
}
|
348 |
+
return $activeTabs;
|
349 |
+
}
|
350 |
}
|
app/code/community/MDN/Antidot/Helper/LogExport.php
CHANGED
@@ -21,7 +21,7 @@ class MDN_Antidot_Helper_LogExport extends Mage_Core_Helper_Abstract
|
|
21 |
*
|
22 |
* @param string $uid Reference to
|
23 |
* @param string $type FULL|INC
|
24 |
-
* @param string $element CATALOG|CATEGORY
|
25 |
* @param string $begin
|
26 |
* @param string $end
|
27 |
* @param int $items
|
21 |
*
|
22 |
* @param string $uid Reference to
|
23 |
* @param string $type FULL|INC
|
24 |
+
* @param string $element CATALOG|CATEGORY|STORE|ARTICLE
|
25 |
* @param string $begin
|
26 |
* @param string $end
|
27 |
* @param int $items
|
app/code/community/MDN/Antidot/Model/Export/Abstract.php
CHANGED
@@ -36,6 +36,11 @@ abstract class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstrac
|
|
36 |
'description'
|
37 |
);
|
38 |
|
|
|
|
|
|
|
|
|
|
|
39 |
/**
|
40 |
* The name of the PAF export
|
41 |
*
|
@@ -43,6 +48,18 @@ abstract class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstrac
|
|
43 |
*/
|
44 |
abstract public function getPafName();
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
/**
|
47 |
* Init the xml writer
|
48 |
*/
|
@@ -59,19 +76,42 @@ abstract class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstrac
|
|
59 |
* Extract the exact uri from an url
|
60 |
* (When executed from cron script magento can generate url whith the script name instead of index.php)
|
61 |
* (MCNX-253)
|
|
|
62 |
*
|
63 |
* @param string $url
|
64 |
-
* $param boolean $onlyPath
|
65 |
* @return string
|
66 |
*/
|
67 |
protected function getExactUrl($url, $onlyPath = true)
|
68 |
{
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
}
|
73 |
-
|
74 |
-
return preg_replace('#\/antidotExport(.*)\.php#', '/index.php', $url);
|
75 |
}
|
76 |
|
77 |
/**
|
@@ -83,19 +123,21 @@ abstract class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstrac
|
|
83 |
{
|
84 |
$this->fields = array();
|
85 |
$values = Mage::getStoreConfig('antidot/fields_'.$section);
|
86 |
-
|
87 |
-
|
88 |
-
$
|
89 |
-
|
90 |
-
|
91 |
-
$
|
92 |
-
|
93 |
-
|
|
|
|
|
94 |
}
|
|
|
95 |
}
|
96 |
-
|
97 |
}
|
98 |
-
$this->fields[$key] = $value;
|
99 |
}
|
100 |
}
|
101 |
|
36 |
'description'
|
37 |
);
|
38 |
|
39 |
+
/**
|
40 |
+
* @var boolean isIncremental
|
41 |
+
*/
|
42 |
+
protected $isIncremental = false;
|
43 |
+
|
44 |
/**
|
45 |
* The name of the PAF export
|
46 |
*
|
48 |
*/
|
49 |
abstract public function getPafName();
|
50 |
|
51 |
+
/**
|
52 |
+
* Is an incremental export
|
53 |
+
*
|
54 |
+
* @return string
|
55 |
+
*/
|
56 |
+
public function getIsIncremental() {
|
57 |
+
return $this->isIncremental;
|
58 |
+
}
|
59 |
+
|
60 |
+
public function setIsIncremental($bool) {
|
61 |
+
$this->isIncremental = $bool;
|
62 |
+
}
|
63 |
/**
|
64 |
* Init the xml writer
|
65 |
*/
|
76 |
* Extract the exact uri from an url
|
77 |
* (When executed from cron script magento can generate url whith the script name instead of index.php)
|
78 |
* (MCNX-253)
|
79 |
+
* Remove also SID param
|
80 |
*
|
81 |
* @param string $url
|
82 |
+
* $param boolean $onlyPath (remove http://domain.com )
|
83 |
* @return string
|
84 |
*/
|
85 |
protected function getExactUrl($url, $onlyPath = true)
|
86 |
{
|
87 |
+
$urls = parse_url($url);
|
88 |
+
$url = '';
|
89 |
+
if (!$onlyPath) {
|
90 |
+
//add scheme, host
|
91 |
+
$url.=$urls['scheme'].'://';
|
92 |
+
$url.=$urls['host'];
|
93 |
+
}
|
94 |
+
|
95 |
+
$path = $urls['path'];
|
96 |
+
//replace all antidotExport*.php script by index.php in uri (in case of cron export) :
|
97 |
+
$path = preg_replace('#\/antidotExport(.*)\.php#', '/index.php', $path);
|
98 |
+
$url .= $path;
|
99 |
+
|
100 |
+
if (isset($urls['query'])) {
|
101 |
+
//construct query string without SID
|
102 |
+
$query = array();
|
103 |
+
parse_str($urls['query'], $query);
|
104 |
+
$queryStr = '';
|
105 |
+
foreach ($query as $key => $value) {
|
106 |
+
if ($key!='SID'){
|
107 |
+
$queryStr .= $key . '=' . $value;
|
108 |
+
}
|
109 |
+
}
|
110 |
+
if ($queryStr) {
|
111 |
+
$url .= '?' . $queryStr;
|
112 |
+
}
|
113 |
}
|
114 |
+
return $url;
|
|
|
115 |
}
|
116 |
|
117 |
/**
|
123 |
{
|
124 |
$this->fields = array();
|
125 |
$values = Mage::getStoreConfig('antidot/fields_'.$section);
|
126 |
+
if ($values) {
|
127 |
+
foreach ($values as $key => $value) {
|
128 |
+
if (in_array($key, $this->fieldsSerialized) && $value = @unserialize($value)) {
|
129 |
+
$values = array_values($value);
|
130 |
+
foreach ($values as $value) {
|
131 |
+
if ($key !== 'properties') {
|
132 |
+
$this->fields[$key][] = $value['value'];
|
133 |
+
} else {
|
134 |
+
$this->fields[$key][] = $value;
|
135 |
+
}
|
136 |
}
|
137 |
+
continue;
|
138 |
}
|
139 |
+
$this->fields[$key] = $value;
|
140 |
}
|
|
|
141 |
}
|
142 |
}
|
143 |
|
app/code/community/MDN/Antidot/Model/Export/Article.php
CHANGED
@@ -13,18 +13,17 @@
|
|
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
|
|
|
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';
|
25 |
|
26 |
-
const ARTICLE_LIMIT = 1000;
|
27 |
-
|
28 |
/**
|
29 |
* {@inherit}
|
30 |
*/
|
@@ -37,89 +36,151 @@ class MDN_Antidot_Model_Export_Article extends MDN_Antidot_Model_Export_Product
|
|
37 |
*
|
38 |
* @param array $context
|
39 |
* @param string $filename
|
|
|
40 |
*/
|
41 |
-
public function writeXml($context, $filename)
|
42 |
{
|
43 |
-
|
44 |
-
$
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
$
|
50 |
-
|
51 |
-
$
|
52 |
-
|
53 |
-
|
54 |
-
$
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
|
85 |
$this->writePart($this->xml->flush());
|
86 |
}
|
87 |
-
|
88 |
-
$this->xml->pop();
|
89 |
-
|
90 |
-
$this->writePart($this->xml->flush(), true);
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Write the article identifiers
|
95 |
-
*
|
96 |
-
* @param Product $article
|
97 |
-
*/
|
98 |
-
protected function writeBrands($article)
|
99 |
-
{
|
100 |
-
if ($manufacturer = $this->getField($article, 'manufacturer')) {
|
101 |
-
$this->xml->push('brands');
|
102 |
-
$brandUrl = Mage::getModel('Antidot/export_brand')->getUrl($article->getAttributeText('manufacturer'));
|
103 |
-
$this->xml->element('brand', $this->xml->encloseCData($article->getAttributeText('manufacturer')), array('id' => $manufacturer, 'url' => $brandUrl));
|
104 |
$this->xml->pop();
|
|
|
|
|
|
|
105 |
}
|
|
|
|
|
106 |
}
|
107 |
|
108 |
/**
|
109 |
-
*
|
110 |
-
*
|
111 |
-
* @param
|
112 |
-
* @param int $
|
113 |
-
* @param int $limit
|
114 |
-
* @return array
|
115 |
*/
|
116 |
-
protected function
|
117 |
{
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
->setPage($page, $limit)
|
123 |
-
;
|
124 |
}
|
|
|
125 |
}
|
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 FILE_PATH_CONF = 'articles';
|
21 |
+
const FILENAME_XML = 'articles-%s-%s-%s.xml';
|
22 |
const FILENAME_ZIP = '%s_full_%s_articles.zip';
|
23 |
const XSD = 'http://ref.antidot.net/store/latest/articles.xsd';
|
24 |
|
25 |
const imagePrefix = 'media/catalog/article';
|
26 |
|
|
|
|
|
27 |
/**
|
28 |
* {@inherit}
|
29 |
*/
|
36 |
*
|
37 |
* @param array $context
|
38 |
* @param string $filename
|
39 |
+
* @param string $type Incremantal or full
|
40 |
*/
|
41 |
+
public function writeXml($context, $filename, $type)
|
42 |
{
|
43 |
+
|
44 |
+
if (count($context->getStoreIds()) == 0) {
|
45 |
+
return 0;
|
46 |
+
}
|
47 |
+
|
48 |
+
Mage::log('Starting article XML export, filename = '.$filename, null, 'antidot.log');
|
49 |
+
$articlesExported = 0;
|
50 |
+
|
51 |
+
$pageResource = Mage::getResourceModel('cms/page');
|
52 |
+
$articles = Mage::getModel('cms/page')
|
53 |
+
->getCollection()
|
54 |
+
->addStoreFilter($context->getStoreIds())
|
55 |
+
->addFieldToFilter('identifier', array('nin' => array('home', 'no-route')))
|
56 |
+
->addFieldToFilter('is_active', 1)
|
57 |
+
->addFieldToSelect('*')
|
58 |
+
;
|
59 |
+
|
60 |
+
$chunkSize = 100;
|
61 |
+
$articles->setPageSize($chunkSize);
|
62 |
+
|
63 |
+
$articlesCount = $articles->getSize();
|
64 |
+
Mage::log('Articles to export : '.$articlesCount, null, 'antidot.log');
|
65 |
+
$chunkCount = $articles->getLastPageNumber();
|
66 |
+
|
67 |
+
if ($articlesCount > 0) {
|
68 |
+
|
69 |
+
$this->initXml();
|
70 |
+
$this->initFields('article');
|
71 |
+
$this->setFilename($filename);
|
72 |
+
|
73 |
+
$this->xml->push('articles', array('xmlns' => "http://ref.antidot.net/store/afs#"));
|
74 |
+
$this->writeHeader($context);
|
75 |
+
$this->writePart($this->xml->flush());
|
76 |
+
|
77 |
+
$lastExecutionTime = time();
|
78 |
+
Mage::log(
|
79 |
+
'Process chunk # 0 / '.$chunkCount.' - memory usage = '.memory_get_usage(),
|
80 |
+
null,
|
81 |
+
'antidot.log'
|
82 |
+
);
|
83 |
+
for ($chunkId = 1; $chunkId <= $chunkCount; $chunkId++) {
|
84 |
+
$articles->setCurPage($chunkId);
|
85 |
+
|
86 |
+
|
87 |
+
foreach ($articles as $article) {
|
88 |
+
|
89 |
+
//Get stores affected on the page :
|
90 |
+
$storeIds = $pageResource->lookupStoreIds($article->getId());
|
91 |
+
$websites = array();
|
92 |
+
//get the corresponding websites
|
93 |
+
foreach ($storeIds as $storeId) {
|
94 |
+
if ($storeId == 0) {
|
95 |
+
$websites = $context->getWebsites();
|
96 |
+
} else {
|
97 |
+
$website = $context->getWebSiteByStore($storeId);
|
98 |
+
if ($website) { //ad dthe website only if the store of the page is in the export context
|
99 |
+
$websites[$website->getId()] = $website;
|
100 |
+
}
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
//Write 1 article by website
|
105 |
+
foreach ($websites as $website) {
|
106 |
+
|
107 |
+
$this->xml->push(
|
108 |
+
'article',
|
109 |
+
array('id' => $article->getId().'_'.$website->getId(), 'xml:lang' => $context->getLang())
|
110 |
+
);
|
111 |
+
|
112 |
+
//write websites
|
113 |
+
$this->xml->push('websites');
|
114 |
+
$this->xml->element(
|
115 |
+
'website',
|
116 |
+
$website->getName(),
|
117 |
+
array('id' => $website->getId())
|
118 |
+
);
|
119 |
+
$this->xml->pop();
|
120 |
+
|
121 |
+
//$this->xml->element('created_at', $article->getCreationTime());
|
122 |
+
//$this->xml->element('last_updated_at', $article->getUpdateTime());
|
123 |
+
$this->xml->push('identifiers');
|
124 |
+
$this->xml->element(
|
125 |
+
'identifier',
|
126 |
+
$this->xml->encloseCData($this->getField($article, 'identifier')),
|
127 |
+
array('type' => 'identifier')
|
128 |
+
);
|
129 |
+
$this->xml->pop();
|
130 |
+
|
131 |
+
$this->xml->element('title', $this->xml->encloseCData($this->getField($article, 'title')));
|
132 |
+
$this->xml->element(
|
133 |
+
'subtitle',
|
134 |
+
$this->xml->encloseCData($this->getField($article, 'content_heading'))
|
135 |
+
);
|
136 |
+
$this->xml->element('text', $this->xml->encloseCData($this->getField($article, 'content')));
|
137 |
+
|
138 |
+
$urlStoreId = $website->getDefaultStore()->getId();
|
139 |
+
if (!in_array($urlStoreId, $storeIds) && count($storeIds) && $storeIds[0]!=0) {
|
140 |
+
$urlStoreId=$storeIds[0];
|
141 |
+
}
|
142 |
+
$this->writeUrl($article, $urlStoreId);
|
143 |
+
|
144 |
+
$articlesExported++;
|
145 |
+
|
146 |
+
$this->xml->pop();
|
147 |
+
}
|
148 |
}
|
149 |
+
$articles->clear();
|
150 |
+
|
151 |
+
Mage::log(
|
152 |
+
'Process chunk # '.$chunkId.' / '.$chunkCount.' - memory usage = '.memory_get_usage(
|
153 |
+
).' - took '.(time() - $lastExecutionTime).' sec',
|
154 |
+
null,
|
155 |
+
'antidot.log'
|
156 |
+
);
|
157 |
+
$lastExecutionTime = time();
|
158 |
+
|
159 |
|
160 |
$this->writePart($this->xml->flush());
|
161 |
}
|
162 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
$this->xml->pop();
|
164 |
+
|
165 |
+
$this->writePart($this->xml->flush(), true);
|
166 |
+
|
167 |
}
|
168 |
+
|
169 |
+
return $articlesExported;
|
170 |
}
|
171 |
|
172 |
/**
|
173 |
+
* Write the product urls
|
174 |
+
*
|
175 |
+
* @param Mage_Cms_Model_Page $article
|
176 |
+
* @param int $storeId
|
|
|
|
|
177 |
*/
|
178 |
+
protected function writeUrl($article, $storeId)
|
179 |
{
|
180 |
+
$this->xml->element('url', $this->xml->encloseCData(Mage::getUrl($article->getIdentifier(), array(
|
181 |
+
'_store' => $storeId,
|
182 |
+
'_nosid' => true
|
183 |
+
))));
|
|
|
|
|
184 |
}
|
185 |
+
|
186 |
}
|
app/code/community/MDN/Antidot/Model/Export/Context.php
CHANGED
@@ -246,10 +246,13 @@ class MDN_Antidot_Model_Export_Context extends Mage_Core_Model_Abstract
|
|
246 |
return $this->categoryTrees;
|
247 |
}
|
248 |
|
249 |
-
|
|
|
|
|
|
|
250 |
function getWebsites() {
|
251 |
-
$this->websites;
|
252 |
-
}
|
253 |
|
254 |
/**
|
255 |
* Get the list of the pair website/store of the current context
|
246 |
return $this->categoryTrees;
|
247 |
}
|
248 |
|
249 |
+
/**
|
250 |
+
* Get the list of websites
|
251 |
+
* @return array
|
252 |
+
*/
|
253 |
function getWebsites() {
|
254 |
+
return $this->websites;
|
255 |
+
}
|
256 |
|
257 |
/**
|
258 |
* Get the list of the pair website/store of the current context
|
app/code/community/MDN/Antidot/Model/Export/Product.php
CHANGED
@@ -498,8 +498,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
|
|
498 |
if(!empty($manufacturer)) {
|
499 |
$field = empty($this->fields['manufacturer']) ? 'manufacturer' : $this->fields['manufacturer'];
|
500 |
$brand = mb_substr($product->getAttributeText($field), 0, self::BRAND_MAX_LENGTH, 'UTF-8');
|
501 |
-
$brandUrl = Mage::helper('catalogsearch')->getResultUrl($brand, $product->getStoreId());
|
502 |
-
$brandUrl = parse_url($brandUrl, PHP_URL_PATH).'?'.parse_url($brandUrl, PHP_URL_QUERY);
|
503 |
$brandUrl = $this->getExactUrl($brandUrl);
|
504 |
if(!empty($brand)) {
|
505 |
$this->xml->element('brand', $this->xml->encloseCData($brand), array('id' => $manufacturer, 'url' => $brandUrl));
|
498 |
if(!empty($manufacturer)) {
|
499 |
$field = empty($this->fields['manufacturer']) ? 'manufacturer' : $this->fields['manufacturer'];
|
500 |
$brand = mb_substr($product->getAttributeText($field), 0, self::BRAND_MAX_LENGTH, 'UTF-8');
|
501 |
+
$brandUrl = Mage::helper('catalogsearch')->getResultUrl($brand, $product->getStoreId(), false);
|
|
|
502 |
$brandUrl = $this->getExactUrl($brandUrl);
|
503 |
if(!empty($brand)) {
|
504 |
$this->xml->element('brand', $this->xml->encloseCData($brand), array('id' => $manufacturer, 'url' => $brandUrl));
|
app/code/community/MDN/Antidot/Model/Export/Store.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
*
|
12 |
+
* @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
|
13 |
+
* @author : Antidot devmagento@antidot.net
|
14 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
15 |
+
*/
|
16 |
+
class MDN_Antidot_Model_Export_Store extends MDN_Antidot_Model_Export_Abstract
|
17 |
+
{
|
18 |
+
|
19 |
+
const TYPE = 'STORE';
|
20 |
+
const FILE_PATH_CONF = 'stores';
|
21 |
+
const FILENAME_XML = 'stores-%s-%s-%s.xml';
|
22 |
+
const FILENAME_ZIP = '%s_full_%s_stores.zip';
|
23 |
+
const XSD = 'http://ref.antidot.net/store/latest/stores.xsd';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* {@inherit}
|
27 |
+
*/
|
28 |
+
public function getPafName() {
|
29 |
+
return "Stores";
|
30 |
+
}
|
31 |
+
|
32 |
+
|
33 |
+
}
|
app/code/community/MDN/Antidot/Model/Observer.php
CHANGED
@@ -113,12 +113,33 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
|
|
113 |
{
|
114 |
return $this->generate(Mage::getModel('Antidot/export_category'), self::GENERATE_FULL, $runContext);
|
115 |
}
|
116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
/**
|
118 |
* Generate files
|
119 |
*
|
120 |
* @param Antidot/Export_* $exportModel
|
121 |
* @param string $type
|
|
|
122 |
* @throws Exception
|
123 |
*/
|
124 |
protected function generate($exportModel, $type, $runContext)
|
@@ -176,7 +197,12 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
|
|
176 |
$log['reference'] = 'unknown';
|
177 |
if(!empty($files)) {
|
178 |
$this->log('Compress files');
|
179 |
-
|
|
|
|
|
|
|
|
|
|
|
180 |
$filenameZip = sprintf($filenameZip, date('YmdHis'), $ownerForFilename);
|
181 |
$filename = $this->compress($files, $filenameZip);
|
182 |
$log['reference'] = md5($filename);
|
@@ -221,6 +247,86 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
|
|
221 |
return $log['items'];
|
222 |
}
|
223 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
/**
|
225 |
* Move file with error to another directory $tmp/antidot/error
|
226 |
*
|
113 |
{
|
114 |
return $this->generate(Mage::getModel('Antidot/export_category'), self::GENERATE_FULL, $runContext);
|
115 |
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Generate the articles file
|
119 |
+
*/
|
120 |
+
public function articlesFullExport($runContext)
|
121 |
+
{
|
122 |
+
if (Mage::getStoreConfig('antidot/articles/index_cms', Mage_Core_Model_App::ADMIN_STORE_ID)) {
|
123 |
+
return $this->generate(Mage::getModel('Antidot/export_article'), self::GENERATE_FULL, $runContext);
|
124 |
+
} else {
|
125 |
+
return $this->sendExternalFile(Mage::getModel('Antidot/export_article'), $runContext);
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Generate the stores file
|
131 |
+
*/
|
132 |
+
public function storesFullExport($runContext)
|
133 |
+
{
|
134 |
+
return $this->sendExternalFile(Mage::getModel('Antidot/export_store'), $runContext);
|
135 |
+
}
|
136 |
+
|
137 |
/**
|
138 |
* Generate files
|
139 |
*
|
140 |
* @param Antidot/Export_* $exportModel
|
141 |
* @param string $type
|
142 |
+
* @param $runContext
|
143 |
* @throws Exception
|
144 |
*/
|
145 |
protected function generate($exportModel, $type, $runContext)
|
197 |
$log['reference'] = 'unknown';
|
198 |
if(!empty($files)) {
|
199 |
$this->log('Compress files');
|
200 |
+
if ( $type === self::GENERATE_INC ) {
|
201 |
+
$filenameZip = $exportModel::FILENAME_ZIP_INC;
|
202 |
+
$exportModel->setIsIncremental(true);
|
203 |
+
} else {
|
204 |
+
$filenameZip = $exportModel::FILENAME_ZIP;
|
205 |
+
}
|
206 |
$filenameZip = sprintf($filenameZip, date('YmdHis'), $ownerForFilename);
|
207 |
$filename = $this->compress($files, $filenameZip);
|
208 |
$log['reference'] = md5($filename);
|
247 |
return $log['items'];
|
248 |
}
|
249 |
|
250 |
+
/**
|
251 |
+
* Generate files
|
252 |
+
*
|
253 |
+
* @param Antidot/Export_* $exportModel
|
254 |
+
* @throws Exception
|
255 |
+
*/
|
256 |
+
protected function sendExternalFile($exportModel)
|
257 |
+
{
|
258 |
+
|
259 |
+
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
|
260 |
+
|
261 |
+
$this->type = $exportModel::TYPE;
|
262 |
+
$this->log('start sendExternalFile');
|
263 |
+
$log['begin'] = time();
|
264 |
+
$log['items'] = 1;
|
265 |
+
$log['error'] = array();
|
266 |
+
$log['reference'] = '';
|
267 |
+
|
268 |
+
try
|
269 |
+
{
|
270 |
+
$filepath = Mage::getStoreConfig('antidot/'.$exportModel::FILE_PATH_CONF.'/file_path', Mage_Core_Model_App::ADMIN_STORE_ID);
|
271 |
+
if (strpos($filepath, '/') !==0) {
|
272 |
+
$filepath = Mage::getBaseDir() . DS . $filepath;
|
273 |
+
}
|
274 |
+
|
275 |
+
$owner = Mage::getStoreConfig('antidot/general/owner', Mage_Core_Model_App::ADMIN_STORE_ID);
|
276 |
+
$ownerForFilename = $this->getOwnerForFilename($owner);
|
277 |
+
$filenameZipPattern = sprintf($exportModel::FILENAME_ZIP, '*', $ownerForFilename);
|
278 |
+
|
279 |
+
$lastFileModif = 0;
|
280 |
+
$filenameZip = '';
|
281 |
+
foreach (glob($filepath . DS . $filenameZipPattern) as $filename) {
|
282 |
+
$filetime = filemtime ($filename);
|
283 |
+
if ($lastFileModif<$filetime) {
|
284 |
+
$filenameZip = $filename;
|
285 |
+
$lastFileModif = $filetime;
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
$log['reference'] = 'unknown';
|
290 |
+
if($filenameZip) {
|
291 |
+
$log['reference'] = md5($filenameZip);
|
292 |
+
$this->send($filenameZip, $exportModel);
|
293 |
+
|
294 |
+
$log['status'] = 'SUCCESS';
|
295 |
+
} else {
|
296 |
+
$log['items'] = 0;
|
297 |
+
$log['status'] = 'FAILED';
|
298 |
+
$log['error'][] = Mage::helper('Antidot')->__('There\'s no file corresponding to the pattern %s in %s', $filenameZipPattern, $filepath);
|
299 |
+
}
|
300 |
+
|
301 |
+
if(file_exists($filenameZip)) {
|
302 |
+
$this->log('Unlink file');
|
303 |
+
unlink($filenameZip);
|
304 |
+
}
|
305 |
+
}
|
306 |
+
catch(Exception $ex)
|
307 |
+
{
|
308 |
+
Mage::log($ex->__toString(), Zend_Log::ERR, 'antidot.log');
|
309 |
+
$log['error'][] = $ex->getMessage();
|
310 |
+
$log['status'] = 'FAILED';
|
311 |
+
$log['items'] = 0;
|
312 |
+
}
|
313 |
+
|
314 |
+
$log['end'] = time();
|
315 |
+
$this->log('send external file '.$exportModel::TYPE.' '.$exportModel->getOwner());
|
316 |
+
$this->log('end');
|
317 |
+
|
318 |
+
Mage::helper('Antidot/logExport')->add($log['reference'], self::GENERATE_FULL, $exportModel::TYPE, $log['begin'], $log['end'], $log['items'], $log['status'], implode(',', $log['error']));
|
319 |
+
|
320 |
+
if ( count($log['error']) ) {
|
321 |
+
//send error alert mail
|
322 |
+
Mage::helper('Antidot')->sendMail('Export failed', print_r($log['error'], true));
|
323 |
+
//throw Exception in order to dispay error message in UI
|
324 |
+
Mage::throwException(implode(',', $log['error']));
|
325 |
+
}
|
326 |
+
|
327 |
+
return $log['items'];
|
328 |
+
}
|
329 |
+
|
330 |
/**
|
331 |
* Move file with error to another directory $tmp/antidot/error
|
332 |
*
|
app/code/community/MDN/Antidot/Model/Resource/Catalog/Product/Collection.php
CHANGED
@@ -231,6 +231,26 @@ class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog
|
|
231 |
return $this->_banners;
|
232 |
}
|
233 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
234 |
/**
|
235 |
* Returns collection size
|
236 |
*
|
@@ -352,9 +372,37 @@ class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog
|
|
352 |
$this->_categoryIds = isset($this->queryResult['category_ids']) ? $this->queryResult['category_ids'] : array();
|
353 |
$this->_banners = isset($this->queryResult['banners']) ? $this->queryResult['banners'] : array();
|
354 |
$this->_spellcheck = isset($this->queryResult['spellcheck']) ? $this->queryResult['spellcheck'] : false;
|
|
|
|
|
355 |
}
|
356 |
}
|
357 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
358 |
/**
|
359 |
* Retrieves parameters.
|
360 |
*
|
231 |
return $this->_banners;
|
232 |
}
|
233 |
|
234 |
+
/**
|
235 |
+
* Returh the articles
|
236 |
+
*
|
237 |
+
* @return array
|
238 |
+
*/
|
239 |
+
public function getArticles()
|
240 |
+
{
|
241 |
+
return $this->_articles;
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Returh the stores
|
246 |
+
*
|
247 |
+
* @return array
|
248 |
+
*/
|
249 |
+
public function getStores()
|
250 |
+
{
|
251 |
+
return $this->_stores;
|
252 |
+
}
|
253 |
+
|
254 |
/**
|
255 |
* Returns collection size
|
256 |
*
|
372 |
$this->_categoryIds = isset($this->queryResult['category_ids']) ? $this->queryResult['category_ids'] : array();
|
373 |
$this->_banners = isset($this->queryResult['banners']) ? $this->queryResult['banners'] : array();
|
374 |
$this->_spellcheck = isset($this->queryResult['spellcheck']) ? $this->queryResult['spellcheck'] : false;
|
375 |
+
$this->_articles = isset($this->queryResult['articles']) ? $this->queryResult['articles'] : array();
|
376 |
+
$this->_stores = isset($this->queryResult['stores']) ? $this->queryResult['stores'] : array();
|
377 |
}
|
378 |
}
|
379 |
|
380 |
+
/**
|
381 |
+
* Return the number of result given the tab
|
382 |
+
* If tab is not define it return the total number of result on every tabs
|
383 |
+
*
|
384 |
+
* @param null $tab
|
385 |
+
* @return int
|
386 |
+
*/
|
387 |
+
public function getTotalResult($tab = null) {
|
388 |
+
$this->initQueryResult($this->_getQuery(), $this->_getParams());
|
389 |
+
switch ($tab) {
|
390 |
+
case 'products':
|
391 |
+
return (int)$this->_totalRecords;
|
392 |
+
break;
|
393 |
+
case 'articles':
|
394 |
+
return count($this->_articles);
|
395 |
+
break;
|
396 |
+
case 'stores':
|
397 |
+
return count($this->_stores);
|
398 |
+
break;
|
399 |
+
case null;
|
400 |
+
return (int)$this->_totalRecords + count($this->_articles) + count($this->_stores);
|
401 |
+
|
402 |
+
}
|
403 |
+
|
404 |
+
|
405 |
+
}
|
406 |
/**
|
407 |
* Retrieves parameters.
|
408 |
*
|
app/code/community/MDN/Antidot/Model/Resource/Engine/Abstract.php
CHANGED
@@ -98,6 +98,24 @@ abstract class MDN_Antidot_Model_Resource_Engine_Abstract
|
|
98 |
}
|
99 |
}
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
$this->_idsByQuery[$paramsHash] = array(
|
102 |
'ids' => $ids,
|
103 |
'total_count' => (isset($resultTmp['total_count'])) ? $resultTmp['total_count'] : null,
|
@@ -105,7 +123,10 @@ abstract class MDN_Antidot_Model_Resource_Engine_Abstract
|
|
105 |
'category_ids' => (isset($resultTmp['category_ids'])) ? $resultTmp['category_ids'] : array(),
|
106 |
'banners' => (isset($resultTmp['banners'])) ? $resultTmp['banners'] : array(),
|
107 |
'spellcheck' => (isset($resultTmp['spellcheck'])) ? $resultTmp['spellcheck'] : false,
|
|
|
|
|
108 |
);
|
|
|
109 |
}
|
110 |
|
111 |
return $this->_idsByQuery[$paramsHash];
|
98 |
}
|
99 |
}
|
100 |
|
101 |
+
$articles=array();
|
102 |
+
if (isset($resultTmp['Articles'])) {
|
103 |
+
foreach ($resultTmp['Articles'] as $articleA) {
|
104 |
+
$article = new Varien_Object();
|
105 |
+
$article->setData($articleA);
|
106 |
+
$articles[] = $article;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
$stores=array();
|
111 |
+
if (isset($resultTmp['Stores'])) {
|
112 |
+
foreach ($resultTmp['Stores'] as $storeA) {
|
113 |
+
$store = new Varien_Object();
|
114 |
+
$store->setData($storeA);
|
115 |
+
$stores[] = $store;
|
116 |
+
}
|
117 |
+
}
|
118 |
+
|
119 |
$this->_idsByQuery[$paramsHash] = array(
|
120 |
'ids' => $ids,
|
121 |
'total_count' => (isset($resultTmp['total_count'])) ? $resultTmp['total_count'] : null,
|
123 |
'category_ids' => (isset($resultTmp['category_ids'])) ? $resultTmp['category_ids'] : array(),
|
124 |
'banners' => (isset($resultTmp['banners'])) ? $resultTmp['banners'] : array(),
|
125 |
'spellcheck' => (isset($resultTmp['spellcheck'])) ? $resultTmp['spellcheck'] : false,
|
126 |
+
'articles' => $articles,
|
127 |
+
'stores' => $stores,
|
128 |
);
|
129 |
+
|
130 |
}
|
131 |
|
132 |
return $this->_idsByQuery[$paramsHash];
|
app/code/community/MDN/Antidot/Model/Resource/Engine/Antidot.php
CHANGED
@@ -230,22 +230,37 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
|
|
230 |
*/
|
231 |
protected function prepareQueryResponse($response, $type = 'Catalog')
|
232 |
{
|
233 |
-
|
234 |
-
|
235 |
-
$
|
236 |
-
|
237 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
}
|
239 |
|
240 |
-
return $result;
|
241 |
-
}
|
242 |
-
|
243 |
-
foreach ($response->get_replies() as $reply) {
|
244 |
-
$reply = $this->getDataFromReply($reply);
|
245 |
-
$result[] = $reply['id'];
|
246 |
}
|
247 |
-
|
248 |
return $result;
|
|
|
249 |
}
|
250 |
|
251 |
/**
|
@@ -269,7 +284,6 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
|
|
269 |
$data[$field->getName()] = (string)$field;
|
270 |
}
|
271 |
}
|
272 |
-
|
273 |
return $data;
|
274 |
}
|
275 |
|
@@ -371,6 +385,15 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
|
|
371 |
$result['category_ids'] = $this->prepareQueryResponse($resultAntidot->replysetCategories, 'Categories');
|
372 |
}
|
373 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
374 |
if(isset($resultAntidot->promote) && $resultAntidot->promote && $replies = $resultAntidot->promote->get_replies()) {
|
375 |
if((Mage::getStoreConfig('antidot/promote/redirect') === 'no_result' && $result['total_count'] == 0) || Mage::getStoreConfig('antidot/promote/redirect') === 'always') {
|
376 |
$promote = current($replies);
|
230 |
*/
|
231 |
protected function prepareQueryResponse($response, $type = 'Catalog')
|
232 |
{
|
233 |
+
$result = array();
|
234 |
+
if ($response) {
|
235 |
+
if ($type === 'Categories') {
|
236 |
+
foreach ($response->get_replies() as $reply) {
|
237 |
+
$reply = $this->getDataFromReply($reply);
|
238 |
+
$result[] = $reply['id'];
|
239 |
+
}
|
240 |
+
|
241 |
+
return $result;
|
242 |
+
}
|
243 |
+
|
244 |
+
if ($type === 'Catalog') {
|
245 |
+
$this->_lastNumFound = (int)$response->get_meta()->get_total_replies();
|
246 |
+
foreach ($response->get_replies() as $reply) {
|
247 |
+
$result[] = $this->_objectToArray($this->getDataFromReply($reply));
|
248 |
+
}
|
249 |
+
}
|
250 |
+
|
251 |
+
if ($type === 'Articles' || $type === 'Stores') {
|
252 |
+
foreach ($response->get_replies() as $reply) {
|
253 |
+
$data = $this->getDataFromReply($reply);
|
254 |
+
$data['title'] = $reply->get_title();
|
255 |
+
$data['abstract'] = $reply->get_abstract();
|
256 |
+
$result[] = $data;
|
257 |
+
}
|
258 |
}
|
259 |
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
}
|
261 |
+
|
262 |
return $result;
|
263 |
+
|
264 |
}
|
265 |
|
266 |
/**
|
284 |
$data[$field->getName()] = (string)$field;
|
285 |
}
|
286 |
}
|
|
|
287 |
return $data;
|
288 |
}
|
289 |
|
385 |
$result['category_ids'] = $this->prepareQueryResponse($resultAntidot->replysetCategories, 'Categories');
|
386 |
}
|
387 |
|
388 |
+
if (isset($resultAntidot->additionalReplyset) && is_array($resultAntidot->additionalReplyset)) {
|
389 |
+
foreach ($resultAntidot->additionalReplyset as $additionalFeed => $additionalReplyset) {
|
390 |
+
$result[$additionalFeed] = $this->prepareQueryResponse(
|
391 |
+
$additionalReplyset,
|
392 |
+
$additionalFeed
|
393 |
+
);
|
394 |
+
}
|
395 |
+
}
|
396 |
+
|
397 |
if(isset($resultAntidot->promote) && $resultAntidot->promote && $replies = $resultAntidot->promote->get_replies()) {
|
398 |
if((Mage::getStoreConfig('antidot/promote/redirect') === 'no_result' && $result['total_count'] == 0) || Mage::getStoreConfig('antidot/promote/redirect') === 'always') {
|
399 |
$promote = current($replies);
|
app/code/community/MDN/Antidot/Model/Search/Search.php
CHANGED
@@ -37,6 +37,11 @@ class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
|
|
37 |
*/
|
38 |
protected $facets;
|
39 |
|
|
|
|
|
|
|
|
|
|
|
40 |
/**
|
41 |
* {@inherit}
|
42 |
*/
|
@@ -48,11 +53,20 @@ class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
|
|
48 |
$this->lang = $lang;
|
49 |
|
50 |
foreach (Mage::getStoreConfig('antidot/engine') as $field => $value) {
|
|
|
51 |
if (substr($field, 0, 4) === 'feed' && $value === '1') {
|
52 |
$this->feeds[] = ucfirst(substr($field, 5));
|
53 |
}
|
54 |
}
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
|
57 |
if ($this->isConfigured) {
|
58 |
$this->afsSearch = new AfsSearch($this->afsHost, $this->afsService, $this->afsStatus);
|
@@ -100,6 +114,11 @@ class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
|
|
100 |
$resultAntidot->promote = $this->getPromoteFromResult($results);
|
101 |
$resultAntidot->replyset = $this->getReplySetFromResult($results);
|
102 |
$resultAntidot->replysetCategories = $this->getReplySetFromResult($results, 'Categories');
|
|
|
|
|
|
|
|
|
|
|
103 |
$resultAntidot->isOrchestrated = $this->getOrchestratedFromResult($results);
|
104 |
|
105 |
//save translations
|
@@ -235,7 +254,10 @@ class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
|
|
235 |
foreach ($params['filters'] as $filter) {
|
236 |
if (is_array($filter)) {
|
237 |
foreach ($filter as $key => $values) {
|
238 |
-
$query = $query->
|
|
|
|
|
|
|
239 |
}
|
240 |
} else {
|
241 |
//$query = $query->add_filter($key, $value);
|
37 |
*/
|
38 |
protected $facets;
|
39 |
|
40 |
+
/**
|
41 |
+
* @var array additionalFeeds;
|
42 |
+
*/
|
43 |
+
protected $additionalFeeds = array();
|
44 |
+
|
45 |
/**
|
46 |
* {@inherit}
|
47 |
*/
|
53 |
$this->lang = $lang;
|
54 |
|
55 |
foreach (Mage::getStoreConfig('antidot/engine') as $field => $value) {
|
56 |
+
//If category search is enabled, add it to feeds
|
57 |
if (substr($field, 0, 4) === 'feed' && $value === '1') {
|
58 |
$this->feeds[] = ucfirst(substr($field, 5));
|
59 |
}
|
60 |
}
|
61 |
+
|
62 |
+
//Add Articles and Stores feeds if corresponding tabs are activated in BO
|
63 |
+
foreach (Mage::helper('Antidot')->getActiveResultTabs() as $tab) {
|
64 |
+
if ($tab['tab'] !== 'products') { //articles or stores
|
65 |
+
$this->additionalFeeds[] = ucfirst($tab['tab']);
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
$this->feeds = array_unique(array_merge($this->feeds, $this->additionalFeeds));
|
70 |
|
71 |
if ($this->isConfigured) {
|
72 |
$this->afsSearch = new AfsSearch($this->afsHost, $this->afsService, $this->afsStatus);
|
114 |
$resultAntidot->promote = $this->getPromoteFromResult($results);
|
115 |
$resultAntidot->replyset = $this->getReplySetFromResult($results);
|
116 |
$resultAntidot->replysetCategories = $this->getReplySetFromResult($results, 'Categories');
|
117 |
+
$resultAntidot->additionalReplyset = array();
|
118 |
+
foreach ($this->additionalFeeds as $additionalFeed) {
|
119 |
+
$resultAntidot->additionalReplyset[$additionalFeed] = $this->getReplySetFromResult($results, $additionalFeed);
|
120 |
+
}
|
121 |
+
|
122 |
$resultAntidot->isOrchestrated = $this->getOrchestratedFromResult($results);
|
123 |
|
124 |
//save translations
|
254 |
foreach ($params['filters'] as $filter) {
|
255 |
if (is_array($filter)) {
|
256 |
foreach ($filter as $key => $values) {
|
257 |
+
$query = $query->add_filter_on_feed($key, $values, 'Catalog');
|
258 |
+
if ($key == "website") {
|
259 |
+
$query = $query->add_filter_on_feed($key, $values, 'Articles');
|
260 |
+
}
|
261 |
}
|
262 |
} else {
|
263 |
//$query = $query->add_filter($key, $value);
|
app/code/community/MDN/Antidot/Model/Search/Suggest.php
CHANGED
@@ -66,24 +66,29 @@ class MDN_Antidot_Model_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
|
|
66 |
{
|
67 |
parent::_construct();
|
68 |
|
69 |
-
$
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
|
|
|
|
|
|
|
|
83 |
}
|
|
|
84 |
}
|
85 |
}
|
86 |
-
|
87 |
$this->loadFacetAutocomplete();
|
88 |
$this->loadAdditionalFeeds();
|
89 |
|
@@ -155,7 +160,7 @@ class MDN_Antidot_Model_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
|
|
155 |
Mage::log(print_r(libxml_get_errors(), true), null, 'antidot.log');
|
156 |
return "";
|
157 |
}
|
158 |
-
|
159 |
$xml = $this->postProcessXml($xml);
|
160 |
|
161 |
if($format === 'xml') {
|
@@ -174,8 +179,18 @@ class MDN_Antidot_Model_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
|
|
174 |
*/
|
175 |
private function postProcessXml(&$xml)
|
176 |
{
|
177 |
-
|
178 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
foreach ($xml->children($ns['afs'])->replySet as $replySet) {
|
180 |
|
181 |
$type = (string)$replySet->attributes()->name;
|
@@ -189,6 +204,23 @@ class MDN_Antidot_Model_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
|
|
189 |
unset($replySet->reply[$i]);
|
190 |
}
|
191 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
}
|
193 |
|
194 |
return $xml;
|
@@ -306,16 +338,13 @@ class MDN_Antidot_Model_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
|
|
306 |
return '';
|
307 |
}
|
308 |
|
309 |
-
|
310 |
-
$xsl = simplexml_load_string($this->template);
|
311 |
-
if ($xsl === false) {
|
312 |
-
Mage::log('Error loading xsl template (suggest) : ', null, 'antidot.log');
|
313 |
-
Mage::log(print_r(libxml_get_errors(), true), null, 'antidot.log');
|
314 |
return '';
|
315 |
}
|
316 |
-
|
|
|
317 |
$xslt = new XSLTProcessor();
|
318 |
-
$xslt->importStylesheet($
|
319 |
|
320 |
$xml = $xslt->transformToXml($xml);
|
321 |
if ($xml === false) {
|
66 |
{
|
67 |
parent::_construct();
|
68 |
|
69 |
+
$template = Mage::getStoreConfig('antidot/suggest/template');
|
70 |
+
libxml_use_internal_errors(true);
|
71 |
+
$this->template = simplexml_load_string(trim($template));
|
72 |
+
if ($this->template === false) {
|
73 |
+
Mage::log('Error loading xsl template (suggest) : ', null, 'antidot.log');
|
74 |
+
Mage::log(print_r(libxml_get_errors(), true), null, 'antidot.log');
|
75 |
+
}
|
76 |
+
|
77 |
+
if ($feeds = Mage::getStoreConfig('antidot/suggest/feeds')) {
|
78 |
+
$feeds = unserialize($feeds);
|
79 |
+
$i = 1;
|
80 |
+
foreach ($feeds as $configFeed) {
|
81 |
+
$feed = $configFeed['feed'];
|
82 |
+
if (isset($this->feed[$feed]) && !isset($configFeed['active'])) {
|
83 |
+
unset($this->feed[$feed]);
|
84 |
+
} else {
|
85 |
+
$this->feed[$feed]['number'] = (int)$configFeed['suggest_number'];
|
86 |
+
$this->feed[$feed]['order'] = $i;
|
87 |
}
|
88 |
+
$i++;
|
89 |
}
|
90 |
}
|
91 |
+
|
92 |
$this->loadFacetAutocomplete();
|
93 |
$this->loadAdditionalFeeds();
|
94 |
|
160 |
Mage::log(print_r(libxml_get_errors(), true), null, 'antidot.log');
|
161 |
return "";
|
162 |
}
|
163 |
+
|
164 |
$xml = $this->postProcessXml($xml);
|
165 |
|
166 |
if($format === 'xml') {
|
179 |
*/
|
180 |
private function postProcessXml(&$xml)
|
181 |
{
|
182 |
+
|
183 |
+
$thumbWidth = 40;
|
184 |
+
if ($this->template) {
|
185 |
+
/* Exctract thumbWidth from the xslt template */
|
186 |
+
$xpath = $this->template->xpath("//xsl:variable[@name='thumbnail_width']");
|
187 |
+
if (isset($xpath[0])) {
|
188 |
+
$thumbWidth = $xpath[0]->__toString();
|
189 |
+
}
|
190 |
+
}
|
191 |
+
|
192 |
+
|
193 |
+
$ns = $xml->getNamespaces(true);
|
194 |
foreach ($xml->children($ns['afs'])->replySet as $replySet) {
|
195 |
|
196 |
$type = (string)$replySet->attributes()->name;
|
204 |
unset($replySet->reply[$i]);
|
205 |
}
|
206 |
}
|
207 |
+
|
208 |
+
//PRE-PROCESSING OF URL THUMBNAILS : resize base images to the size defined in xslt template
|
209 |
+
foreach ($replySet->reply as $reply) {
|
210 |
+
foreach ($reply->option as $option) {
|
211 |
+
if ($option->attributes()->key == 'url_thumbnail') {
|
212 |
+
|
213 |
+
$thumb = $option->attributes()->value;
|
214 |
+
$thumb = basename($thumb);
|
215 |
+
$product = Mage::getModel('catalog/product');
|
216 |
+
$product->setData('thumbnail', '/'.$thumb[0].'/'.$thumb[1].'/'.$thumb);
|
217 |
+
$thumb = Mage::helper('catalog/image')->init($product, 'thumbnail')->resize($thumbWidth)->__toString();
|
218 |
+
|
219 |
+
$option->attributes()->value = $thumb;
|
220 |
+
|
221 |
+
}
|
222 |
+
}
|
223 |
+
}
|
224 |
}
|
225 |
|
226 |
return $xml;
|
338 |
return '';
|
339 |
}
|
340 |
|
341 |
+
if (!$this->template) {
|
|
|
|
|
|
|
|
|
342 |
return '';
|
343 |
}
|
344 |
+
|
345 |
+
libxml_use_internal_errors(true);
|
346 |
$xslt = new XSLTProcessor();
|
347 |
+
$xslt->importStylesheet($this->template);
|
348 |
|
349 |
$xml = $xslt->transformToXml($xml);
|
350 |
if ($xml === false) {
|
app/code/community/MDN/Antidot/Model/Transport/Http.php
CHANGED
@@ -68,12 +68,17 @@ class MDN_Antidot_Model_Transport_Http extends MDN_Antidot_Model_Transport_Abstr
|
|
68 |
|
69 |
$service = new AfsService($this->afsService, $this->afsStatus);
|
70 |
|
71 |
-
$doc = new AfsDocument(
|
|
|
72 |
|
73 |
$connector = new AfsPafConnector($this->afsHost, $service, $exportModel->getPafName(), $auth, AFS_SCHEME_HTTPS, $curlConnector);
|
74 |
|
|
|
|
|
|
|
|
|
75 |
/** @var AfsPafUploadReply $result */
|
76 |
-
$result = $connector->upload_doc($doc);
|
77 |
|
78 |
if ($result->in_error()) {
|
79 |
throw new Exception("Can't send the file (".$result->get_error().")");
|
68 |
|
69 |
$service = new AfsService($this->afsService, $this->afsStatus);
|
70 |
|
71 |
+
$doc = new AfsDocument();
|
72 |
+
$doc->set_content_from_file($file);
|
73 |
|
74 |
$connector = new AfsPafConnector($this->afsHost, $service, $exportModel->getPafName(), $auth, AFS_SCHEME_HTTPS, $curlConnector);
|
75 |
|
76 |
+
$pafMode=PaFMode::Full;
|
77 |
+
if ( $exportModel->getIsIncremental()) {
|
78 |
+
$pafMode=PaFMode::Incremental;
|
79 |
+
}
|
80 |
/** @var AfsPafUploadReply $result */
|
81 |
+
$result = $connector->upload_doc($doc, null, $pafMode);
|
82 |
|
83 |
if ($result->in_error()) {
|
84 |
throw new Exception("Can't send the file (".$result->get_error().")");
|
app/code/community/MDN/Antidot/Test/Block/System/Config/Form/Field/Array/AcpFeeds.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_Form_Field_Array_AcpFeeds extends EcomDev_PHPUnit_Test_Case
|
17 |
+
{
|
18 |
+
|
19 |
+
/**
|
20 |
+
*
|
21 |
+
*/
|
22 |
+
public function testGetArrayRows()
|
23 |
+
{
|
24 |
+
/* @var $block MDN_Antidot_Block_System_Config_Form_Field_Array_AcpFeeds */
|
25 |
+
$block = Mage::app()->getLayout()->createBlock('Antidot/system_config_form_field_array_acpFeeds');
|
26 |
+
|
27 |
+
|
28 |
+
$element = new Varien_Object();
|
29 |
+
$element->setValue(array('1' => array('feed'=>'products'),
|
30 |
+
'2' => array('feed'=>'categories'),
|
31 |
+
'3' => array('feed'=>'brands'),
|
32 |
+
'4' => array('feed'=>'articles'),
|
33 |
+
'5' => array('feed'=>'stores'),
|
34 |
+
));
|
35 |
+
$block->setElement($element);
|
36 |
+
|
37 |
+
$rows = $block->getArrayRows();
|
38 |
+
|
39 |
+
$this->assertEquals(
|
40 |
+
5,
|
41 |
+
count($rows)
|
42 |
+
);
|
43 |
+
$this->assertTrue(isset($rows['_feeds_products']));
|
44 |
+
$this->assertTrue(isset($rows['_feeds_categories']));
|
45 |
+
$this->assertTrue(isset($rows['_feeds_brands']));
|
46 |
+
$this->assertTrue(isset($rows['_feeds_articles']));
|
47 |
+
$this->assertTrue(isset($rows['_feeds_stores']));
|
48 |
+
|
49 |
+
}
|
50 |
+
|
51 |
+
|
52 |
+
}
|
app/code/community/MDN/Antidot/Test/Helper/Data.php
CHANGED
@@ -16,21 +16,239 @@ class MDN_Antidot_Test_Helper_Data extends EcomDev_PHPUnit_Test_Case
|
|
16 |
{
|
17 |
|
18 |
/**
|
19 |
-
* Test method
|
20 |
*/
|
21 |
function testReturnBytes()
|
22 |
{
|
23 |
-
/** @var $observer
|
24 |
$helper = Mage::helper('Antidot');
|
25 |
|
26 |
foreach (array("2048M" => "2147483648", "512M" => "536870912", "4G" => "4294967296") as $value => $expected) {
|
27 |
$result = $helper->returnBytes($value);
|
28 |
$this->assertEquals(
|
29 |
-
$
|
30 |
-
$
|
31 |
);
|
32 |
}
|
33 |
|
34 |
}
|
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
}
|
16 |
{
|
17 |
|
18 |
/**
|
19 |
+
* Test method MDN_Antidot_Helper_Data returnBytes
|
20 |
*/
|
21 |
function testReturnBytes()
|
22 |
{
|
23 |
+
/** @var $observer MDN_Antidot_Helper_Data */
|
24 |
$helper = Mage::helper('Antidot');
|
25 |
|
26 |
foreach (array("2048M" => "2147483648", "512M" => "536870912", "4G" => "4294967296") as $value => $expected) {
|
27 |
$result = $helper->returnBytes($value);
|
28 |
$this->assertEquals(
|
29 |
+
$expected,
|
30 |
+
$result
|
31 |
);
|
32 |
}
|
33 |
|
34 |
}
|
35 |
|
36 |
+
/**
|
37 |
+
* Test method MDN_Antidot_Helper_Data getActiveResultTabs Case 0 :
|
38 |
+
* No fixture, Mage::getStoreConfig('antidot/engine/result_tabs') return empty
|
39 |
+
* No tabs are configured in BO
|
40 |
+
*
|
41 |
+
*/
|
42 |
+
function testGetActiveResultTabsCase0()
|
43 |
+
{
|
44 |
+
/** @var $observer MDN_Antidot_Helper_Data */
|
45 |
+
$helper = Mage::helper('Antidot');
|
46 |
+
|
47 |
+
// Create a stub for simulate MDN_Antidot_Model_Resource_Catalog_Product_Collection getTotalResult
|
48 |
+
$mockCollection = $this->getMockBuilder('MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock')
|
49 |
+
->getMock();
|
50 |
+
|
51 |
+
//There's results in the 3 tabs
|
52 |
+
$mockCollection->expects($this->any())->method('getTotalResult')
|
53 |
+
->will($this->returnValueMap(
|
54 |
+
array(
|
55 |
+
array('products', 10),
|
56 |
+
array('articles', 11),
|
57 |
+
array('stores', 12),
|
58 |
+
array(null, 33),
|
59 |
+
)
|
60 |
+
));
|
61 |
+
|
62 |
+
$tabs = $helper->getActiveResultTabs($mockCollection);
|
63 |
+
|
64 |
+
//must return no tabs
|
65 |
+
$this->assertEquals(
|
66 |
+
0,
|
67 |
+
count($tabs)
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Test method MDN_Antidot_Helper_Data getActiveResultTabs Case 1 :
|
73 |
+
*
|
74 |
+
* In the fixture all tabs are configured, actives, with show_noresult=true
|
75 |
+
*
|
76 |
+
* @loadFixture
|
77 |
+
*/
|
78 |
+
function testGetActiveResultTabsCase1()
|
79 |
+
{
|
80 |
+
/** @var $observer MDN_Antidot_Helper_Data */
|
81 |
+
$helper = Mage::helper('Antidot');
|
82 |
+
|
83 |
+
// Create a stub for simulate MDN_Antidot_Model_Resource_Catalog_Product_Collection getTotalResult
|
84 |
+
$mockCollection = $this->getMockBuilder('MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock')
|
85 |
+
->getMock();
|
86 |
+
|
87 |
+
//There's results in the 3 tabs
|
88 |
+
$mockCollection->expects($this->any())->method('getTotalResult')
|
89 |
+
->will($this->returnValueMap(
|
90 |
+
array(
|
91 |
+
array('products', 10),
|
92 |
+
array('articles', 11),
|
93 |
+
array('stores', 12),
|
94 |
+
array(null, 33),
|
95 |
+
)
|
96 |
+
));
|
97 |
+
|
98 |
+
$tabs = $helper->getActiveResultTabs($mockCollection);
|
99 |
+
|
100 |
+
//must return 3 tabs, there're all configured in BO
|
101 |
+
$this->assertEquals(
|
102 |
+
3,
|
103 |
+
count($tabs)
|
104 |
+
);
|
105 |
+
$this->assertTrue($tabs[0]['selected']);
|
106 |
+
$this->assertFalse(isset($tabs[1]['selected']));
|
107 |
+
$this->assertFalse(isset($tabs[2]['selected']));
|
108 |
+
|
109 |
+
// Create a stub for simulate MDN_Antidot_Model_Resource_Catalog_Product_Collection getTotalResult
|
110 |
+
$mockCollection = $this->getMockBuilder('MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock')
|
111 |
+
->getMock();
|
112 |
+
|
113 |
+
//There's no results in any tabs
|
114 |
+
$mockCollection->expects($this->any())->method('getTotalResult')
|
115 |
+
->will($this->returnValueMap(
|
116 |
+
array(
|
117 |
+
array('products', 0),
|
118 |
+
array('articles', 0),
|
119 |
+
array('stores', 0),
|
120 |
+
array(null, 0),
|
121 |
+
)
|
122 |
+
));
|
123 |
+
|
124 |
+
$tabs = $helper->getActiveResultTabs($mockCollection);
|
125 |
+
|
126 |
+
//must return 3 tabs, there're all configured in BO, with show_noresult=true
|
127 |
+
$this->assertEquals(
|
128 |
+
3,
|
129 |
+
count($tabs)
|
130 |
+
);
|
131 |
+
$this->assertTrue($tabs[0]['selected']);
|
132 |
+
$this->assertFalse(isset($tabs[1]['selected']));
|
133 |
+
$this->assertFalse(isset($tabs[2]['selected']));
|
134 |
+
|
135 |
+
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Test method MDN_Antidot_Helper_Data getActiveResultTabs Case 2 :
|
140 |
+
*
|
141 |
+
* In the fixture only product and articles tabs are configured actives, without show_noresult=true
|
142 |
+
*
|
143 |
+
* @loadFixture
|
144 |
+
*/
|
145 |
+
function testGetActiveResultTabsCase2()
|
146 |
+
{
|
147 |
+
/** @var $observer MDN_Antidot_Helper_Data */
|
148 |
+
$helper = Mage::helper('Antidot');
|
149 |
+
|
150 |
+
// Create a stub for simulate MDN_Antidot_Model_Resource_Catalog_Product_Collection getTotalResult
|
151 |
+
$mockCollection = $this->getMockBuilder('MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock')
|
152 |
+
->getMock();
|
153 |
+
|
154 |
+
//There's results in the 3 tabs
|
155 |
+
$mockCollection->expects($this->any())->method('getTotalResult')
|
156 |
+
->will($this->returnValueMap(
|
157 |
+
array(
|
158 |
+
array('products', 10),
|
159 |
+
array('articles', 11),
|
160 |
+
array('stores', 12),
|
161 |
+
array(null, 33),
|
162 |
+
)
|
163 |
+
));
|
164 |
+
|
165 |
+
$tabs = $helper->getActiveResultTabs($mockCollection);
|
166 |
+
|
167 |
+
//must return the 2 tabs actived in BO , only products and articles
|
168 |
+
$this->assertEquals(
|
169 |
+
2,
|
170 |
+
count($tabs)
|
171 |
+
);
|
172 |
+
|
173 |
+
$this->assertEquals(
|
174 |
+
'products',
|
175 |
+
$tabs[0]['tab']
|
176 |
+
);
|
177 |
+
$this->assertEquals(
|
178 |
+
'articles',
|
179 |
+
$tabs[1]['tab']
|
180 |
+
);
|
181 |
+
$this->assertTrue($tabs[0]['selected']);
|
182 |
+
$this->assertFalse(isset($tabs[1]['selected']));
|
183 |
+
|
184 |
+
// Create a stub for simulate MDN_Antidot_Model_Resource_Catalog_Product_Collection getTotalResult
|
185 |
+
$mockCollection = $this->getMockBuilder('MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock')
|
186 |
+
->getMock();
|
187 |
+
|
188 |
+
//There's no results in any tabs
|
189 |
+
$mockCollection->expects($this->any())->method('getTotalResult')
|
190 |
+
->will($this->returnValueMap(
|
191 |
+
array(
|
192 |
+
array('products', 0),
|
193 |
+
array('articles', 0),
|
194 |
+
array('stores', 0),
|
195 |
+
array(null, 0),
|
196 |
+
)
|
197 |
+
));
|
198 |
+
|
199 |
+
$tabs = $helper->getActiveResultTabs($mockCollection);
|
200 |
+
|
201 |
+
// only the first tab product is displayed, for messaing
|
202 |
+
$this->assertEquals(
|
203 |
+
1,
|
204 |
+
count($tabs)
|
205 |
+
);
|
206 |
+
|
207 |
+
$this->assertEquals(
|
208 |
+
'products',
|
209 |
+
$tabs[0]['tab']
|
210 |
+
);
|
211 |
+
|
212 |
+
$this->assertTrue($tabs[0]['selected']);
|
213 |
+
|
214 |
+
|
215 |
+
// Create a stub for simulate MDN_Antidot_Model_Resource_Catalog_Product_Collection getTotalResult
|
216 |
+
$mockCollection = $this->getMockBuilder('MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock')
|
217 |
+
->getMock();
|
218 |
+
|
219 |
+
//There's only result on articles
|
220 |
+
$mockCollection->expects($this->any())->method('getTotalResult')
|
221 |
+
->will($this->returnValueMap(
|
222 |
+
array(
|
223 |
+
array('products', 0),
|
224 |
+
array('articles', 12),
|
225 |
+
array('stores', 0),
|
226 |
+
array(null, 12),
|
227 |
+
)
|
228 |
+
));
|
229 |
+
|
230 |
+
$tabs = $helper->getActiveResultTabs($mockCollection);
|
231 |
+
|
232 |
+
//must return the 2 tabs actived in BO without show_noresult => only the first tab product is displayed
|
233 |
+
$this->assertEquals(
|
234 |
+
1,
|
235 |
+
count($tabs)
|
236 |
+
);
|
237 |
+
|
238 |
+
$this->assertEquals(
|
239 |
+
'articles',
|
240 |
+
$tabs[0]['tab']
|
241 |
+
);
|
242 |
+
|
243 |
+
$this->assertTrue($tabs[0]['selected']);
|
244 |
+
|
245 |
+
}
|
246 |
+
|
247 |
+
|
248 |
+
}
|
249 |
+
|
250 |
+
class MDN_Antidot_Model_Resource_Catalog_Product_Collection_Mock {
|
251 |
+
public function getTotalResult($tab = null) {
|
252 |
+
return;
|
253 |
+
}
|
254 |
}
|
app/code/community/MDN/Antidot/Test/Helper/Data/fixtures/testGetActiveResultTabsCase1.yaml
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
config:
|
2 |
+
default/antidot/engine/result_tabs: a:3:{s:20:"_result_tab_products";a:3:{s:3:"tab";s:8:"products";s:6:"active";s:2:"on";s:13:"show_noresult";s:4:"true";}s:20:"_result_tab_articles";a:3:{s:3:"tab";s:8:"articles";s:6:"active";s:2:"on";s:13:"show_noresult";s:4:"true";}s:18:"_result_tab_stores";a:3:{s:3:"tab";s:6:"stores";s:6:"active";s:2:"on";s:13:"show_noresult";s:4:"true";}}
|
app/code/community/MDN/Antidot/Test/Helper/Data/fixtures/testGetActiveResultTabsCase2.yaml
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
config:
|
2 |
+
default/antidot/engine/result_tabs: a:3:{s:20:"_result_tab_products";a:2:{s:3:"tab";s:8:"products";s:6:"active";s:2:"on";}s:20:"_result_tab_articles";a:2:{s:3:"tab";s:8:"articles";s:6:"active";s:2:"on";}s:18:"_result_tab_stores";a:2:{s:3:"tab";s:6:"stores";s:13:"show_noresult";s:4:"true";}}
|
app/code/community/MDN/Antidot/Test/Model/Export/Abstract.php
CHANGED
@@ -56,6 +56,18 @@ class MDN_Antidot_Test_Model_Export_Abstract extends EcomDev_PHPUnit_Test_Case
|
|
56 |
$url = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'getExactUrl', array($url, false));
|
57 |
$this->assertEquals("http://magento.jmale.local.amg-dev.fr/index.php/essai-1.html", $url);
|
58 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
}
|
61 |
}
|
56 |
$url = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'getExactUrl', array($url, false));
|
57 |
$this->assertEquals("http://magento.jmale.local.amg-dev.fr/index.php/essai-1.html", $url);
|
58 |
|
59 |
+
$url = "http://magento.jmale.local.amg-dev.fr/catalogsearch/result/?q=TEST";
|
60 |
+
$url = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'getExactUrl', array($url));
|
61 |
+
$this->assertEquals("/catalogsearch/result/?q=TEST", $url);
|
62 |
+
|
63 |
+
$url = "http://magento.jmale.local.amg-dev.fr/catalogsearch/result/?SID=c9kg93cu6721ahmt774e2sb7n0&q=TEST";
|
64 |
+
$url = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'getExactUrl', array($url));
|
65 |
+
$this->assertEquals("/catalogsearch/result/?q=TEST", $url);
|
66 |
+
|
67 |
+
$url = "http://magento.jmale.local.amg-dev.fr/catalogsearch/result/?q=TEST&SID=c9kg93cu6721ahmt774e2sb7n0";
|
68 |
+
$url = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'getExactUrl', array($url));
|
69 |
+
$this->assertEquals("/catalogsearch/result/?q=TEST", $url);
|
70 |
+
|
71 |
|
72 |
}
|
73 |
}
|
app/code/community/MDN/Antidot/Test/Model/Export/Article.php
CHANGED
@@ -4,6 +4,22 @@
|
|
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 |
*/
|
@@ -22,4 +38,94 @@ class MDN_Antidot_Test_Model_Export_Article extends EcomDev_PHPUnit_Test_Case
|
|
22 |
|
23 |
}
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
}
|
4 |
class MDN_Antidot_Test_Model_Export_Article extends EcomDev_PHPUnit_Test_Case
|
5 |
{
|
6 |
|
7 |
+
public static function setUpBeforeClass()
|
8 |
+
{
|
9 |
+
//avoid errors when session_start is called during the test
|
10 |
+
@session_start();
|
11 |
+
|
12 |
+
$setup = Mage::getResourceModel('core/setup', 'core_setup');
|
13 |
+
$setup->startSetup();
|
14 |
+
|
15 |
+
$table = $setup->getTable('cms_page');
|
16 |
+
|
17 |
+
$setup->run("DELETE FROM $table");
|
18 |
+
|
19 |
+
$setup->endSetup();
|
20 |
+
|
21 |
+
}
|
22 |
+
|
23 |
/*
|
24 |
* MCNX-56 add version number and run context in the feed tag
|
25 |
*/
|
38 |
|
39 |
}
|
40 |
|
41 |
+
/**
|
42 |
+
* Test Full file export
|
43 |
+
* @test
|
44 |
+
* @loadFixture
|
45 |
+
*/
|
46 |
+
public function testWriteXml() {
|
47 |
+
|
48 |
+
/* @var $export \MDN_Antidot_Model_Export_Article */
|
49 |
+
$export = Mage::getModel('Antidot/export_article');
|
50 |
+
|
51 |
+
$context = Mage::getModel('Antidot/export_context', array('fr', 'PHPUNIT'));
|
52 |
+
//Store id 3 : site FR, id5 : site FR discount
|
53 |
+
$context->addStore(Mage::getModel('core/store')->load(3));
|
54 |
+
$context->addStore(Mage::getModel('core/store')->load(5));
|
55 |
+
|
56 |
+
$type = MDN_Antidot_Model_Observer::GENERATE_FULL;
|
57 |
+
|
58 |
+
$filename = sys_get_temp_dir().DS.sprintf(MDN_Antidot_Model_Export_Article::FILENAME_XML, 'jetpulp', $type, $context->getLang());
|
59 |
+
|
60 |
+
$items = $export->writeXml($context, $filename, $type);
|
61 |
+
|
62 |
+
/*
|
63 |
+
* test three articles are exported, number returned by the method: 2 articles, one one 2 websites => 3 article exported
|
64 |
+
*/
|
65 |
+
$this->assertEquals(3, $items);
|
66 |
+
|
67 |
+
//replace generated_at by the one in the expected result
|
68 |
+
$result = file_get_contents($filename);
|
69 |
+
|
70 |
+
/**
|
71 |
+
* test the xml contains the correct owner tag
|
72 |
+
*/
|
73 |
+
$xml = new SimpleXMLElement($result);
|
74 |
+
$this->assertEquals("JETPULP", (string)$xml->header->owner);
|
75 |
+
|
76 |
+
/**
|
77 |
+
* test the xml contains the correct feed tag
|
78 |
+
*/
|
79 |
+
$this->assertEquals('article PHPUNIT v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version, (string)$xml->header->feed);
|
80 |
+
|
81 |
+
/**
|
82 |
+
* test the xml contains the correct websites tag
|
83 |
+
*/
|
84 |
+
$this->assertEquals('3', $xml->article[0]->websites->website[0]['id']);
|
85 |
+
$this->assertEquals('French Website', (string)$xml->article[0]->websites->website[0]);
|
86 |
+
$this->assertEquals('3', $xml->article[1]->websites->website[0]['id']);
|
87 |
+
$this->assertEquals('French Website', (string)$xml->article[1]->websites->website[0]);
|
88 |
+
$this->assertEquals('5', $xml->article[2]->websites->website[0]['id']);
|
89 |
+
$this->assertEquals('France Website_discount', (string)$xml->article[2]->websites->website[0]);
|
90 |
+
|
91 |
+
/**
|
92 |
+
* test the xml contains the correct name tag
|
93 |
+
*/
|
94 |
+
$this->assertEquals('Article A', (string)$xml->article[0]->title);
|
95 |
+
$this->assertEquals('Article B', (string)$xml->article[1]->title);
|
96 |
+
$this->assertEquals('Article B', (string)$xml->article[2]->title);
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* test the xml contains the correct text tag
|
101 |
+
*/
|
102 |
+
$this->assertEquals('test contenu A<br>test', (string)$xml->article[0]->text);
|
103 |
+
$this->assertEquals('test contenu B<br>test', (string)$xml->article[1]->text);
|
104 |
+
$this->assertEquals('test contenu B<br>test', (string)$xml->article[2]->text);
|
105 |
+
|
106 |
+
|
107 |
+
/**
|
108 |
+
* test the xml contains the correct url tags
|
109 |
+
*/
|
110 |
+
$this->assertEquals('http://www.monsiteweb.fr/AA/', (string)$xml->article[0]->url);
|
111 |
+
$this->assertEquals('http://www.monsiteweb.fr/BB/', (string)$xml->article[1]->url);
|
112 |
+
$this->assertEquals('http://www.monsitediscount.fr/BB/', (string)$xml->article[2]->url);
|
113 |
+
|
114 |
+
|
115 |
+
/**
|
116 |
+
* test the xml contains the identifier
|
117 |
+
*/
|
118 |
+
$this->assertEquals('identifier', $xml->article[0]->identifiers->identifier[0]['type']);
|
119 |
+
$this->assertEquals('identifier', $xml->article[1]->identifiers->identifier[0]['type']);
|
120 |
+
$this->assertEquals('identifier', $xml->article[2]->identifiers->identifier[0]['type']);
|
121 |
+
$this->assertEquals('AA', $xml->article[0]->identifiers->identifier[0]);
|
122 |
+
$this->assertEquals('BB', $xml->article[1]->identifiers->identifier[0]);
|
123 |
+
$this->assertEquals('BB', $xml->article[2]->identifiers->identifier[0]);
|
124 |
+
|
125 |
+
|
126 |
+
|
127 |
+
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
}
|
app/code/community/MDN/Antidot/Test/Model/Export/Article/fixtures/testWriteXml.yaml
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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/general/owner: JETPULP
|
68 |
+
default/antidot/fields_product/properties: a:2:{s:18:"_1426953698813_813";a:2:{s:5:"value";s:7:"authors";s:12:"autocomplete";s:1:"0";}s:18:"_1426953714346_346";a:2:{s:5:"value";s:6:"editor";s:12:"autocomplete";s:1:"0";}}
|
69 |
+
default/web/secure/base_url: http://www.mywebsite.com/
|
70 |
+
default/web/unsecure/base_url: http://www.mywebsite.com/
|
71 |
+
default/general/locale/code: zz_ZZ
|
72 |
+
stores/usa/web/secure/base_url: http://www.mywebsite.com/
|
73 |
+
stores/usa/web/unsecure/base_url: http://www.mywebsite.com/
|
74 |
+
stores/usa/general/locale/code: en_US
|
75 |
+
stores/france/web/secure/base_url: http://www.monsiteweb.fr/
|
76 |
+
stores/france/web/unsecure/base_url: http://www.monsiteweb.fr/
|
77 |
+
stores/france/general/locale/code: fr_FR
|
78 |
+
stores/germany/web/secure/base_url: http://www.meinwebseite.de/
|
79 |
+
stores/germany/web/unsecure/base_url: http://www.meinwebseite.de/
|
80 |
+
stores/germany/general/locale/code: de_DE
|
81 |
+
stores/france_discount/web/secure/base_url: http://www.monsitediscount.fr/
|
82 |
+
stores/france_discount/web/unsecure/base_url: http://www.monsitediscount.fr/
|
83 |
+
stores/france_discount/general/locale/code: fr_FR
|
84 |
+
stores/france/currency/options/default: EUR
|
85 |
+
|
86 |
+
tables:
|
87 |
+
cms_page:
|
88 |
+
- page_id: 1
|
89 |
+
title: Article A
|
90 |
+
identifier: AA
|
91 |
+
content: test contenu A<br>test
|
92 |
+
is_active: 1
|
93 |
+
- page_id: 2
|
94 |
+
title: Article B
|
95 |
+
identifier: BB
|
96 |
+
content: test contenu B<br>test
|
97 |
+
is_active: 1
|
98 |
+
- page_id: 3
|
99 |
+
title: Article C
|
100 |
+
identifier: CC
|
101 |
+
content: test contenu C<br>test
|
102 |
+
is_active: 0
|
103 |
+
- page_id: 4
|
104 |
+
title: No route 404
|
105 |
+
identifier: no-route
|
106 |
+
content: oups
|
107 |
+
is_active: 1
|
108 |
+
cms_page_store:
|
109 |
+
- page_id: 1
|
110 |
+
store_id: 3
|
111 |
+
- page_id: 2
|
112 |
+
store_id: 0
|
113 |
+
- page_id: 3
|
114 |
+
store_id: 0
|
115 |
+
- page_id: 4
|
116 |
+
store_id: 0
|
117 |
+
|
app/code/community/MDN/Antidot/Test/Model/Export/Store.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
class MDN_Antidot_Test_Model_Export_Store 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_store');
|
13 |
+
|
14 |
+
$context = Mage::getModel('Antidot/export_context', array('fr', 'phpunit'));
|
15 |
+
|
16 |
+
$feed = $export->getFeed($context);
|
17 |
+
|
18 |
+
$this->assertEquals(
|
19 |
+
'store phpunit v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version,
|
20 |
+
$feed
|
21 |
+
);
|
22 |
+
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
}
|
app/code/community/MDN/Antidot/Test/Model/Observer.php
CHANGED
@@ -130,4 +130,34 @@ class MDN_Antidot_Test_Model_Observer extends EcomDev_PHPUnit_Test_Case
|
|
130 |
|
131 |
unlink($filename);
|
132 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
}
|
130 |
|
131 |
unlink($filename);
|
132 |
}
|
133 |
+
|
134 |
+
|
135 |
+
/**
|
136 |
+
* MCNX-81 : Add export for Magento Stores
|
137 |
+
*/
|
138 |
+
function testStoresFullExport() {
|
139 |
+
|
140 |
+
/** @var $observer MDN_Antidot_Model_Observer */
|
141 |
+
$observer = Mage::getModel('Antidot/observer');
|
142 |
+
|
143 |
+
$filepath = Mage::getStoreConfig('antidot/'.MDN_Antidot_Model_Export_Store::FILE_PATH_CONF.'/file_path', Mage_Core_Model_App::ADMIN_STORE_ID);
|
144 |
+
if (strpos($filepath, '/') !==0) {
|
145 |
+
$filepath = Mage::getBaseDir() . DS . $filepath;
|
146 |
+
}
|
147 |
+
$filename = $filepath .DS . 'unittest_full_magento_stores.zip';
|
148 |
+
file_put_contents($filename, 'testStoresFullExport');
|
149 |
+
|
150 |
+
$mock = $this->getModelMock('Antidot/transport', array('send'));
|
151 |
+
$mock->expects($this->once())
|
152 |
+
->method('send')
|
153 |
+
->willReturn(true);
|
154 |
+
|
155 |
+
$this->replaceByMock('model', 'Antidot/transport', $mock);
|
156 |
+
|
157 |
+
$observer->storesFullExport('phpunit');
|
158 |
+
|
159 |
+
$this->assertTrue(!file_exists($filename));
|
160 |
+
|
161 |
+
}
|
162 |
+
|
163 |
}
|
app/code/community/MDN/Antidot/Test/Model/Search/Search.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_Model_Search_Search extends EcomDev_PHPUnit_Test_Case
|
17 |
+
{
|
18 |
+
|
19 |
+
public static function setUpBeforeClass()
|
20 |
+
{
|
21 |
+
//avoid errors when session_start is called during the test
|
22 |
+
@session_start();
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Check the filters genrated for each feed
|
27 |
+
* @test
|
28 |
+
*/
|
29 |
+
public function testGetQuery() {
|
30 |
+
|
31 |
+
|
32 |
+
/** @var $search MDN_Antidot_Model_Search_Search */
|
33 |
+
$search = Mage::getModel('Antidot/search_search');
|
34 |
+
|
35 |
+
$params = array( 'page' => 1, 'limit'=>9, 'lang'=>'fr', 'sort'=>array("afs:relevance,DESC"));
|
36 |
+
$params['filters'] = array(array('store'=>'"5"', 'website'=>'"2"'));
|
37 |
+
$afsQuery = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($search, 'getQuery', array("test", $params));
|
38 |
+
|
39 |
+
$filtersCatalog = $afsQuery->get_filters('Catalog');
|
40 |
+
$this->assertEquals(
|
41 |
+
array('store','website'),
|
42 |
+
$filtersCatalog
|
43 |
+
);
|
44 |
+
|
45 |
+
$filtersArticles = $afsQuery->get_filters('Articles');
|
46 |
+
$this->assertEquals(
|
47 |
+
array('website'),
|
48 |
+
$filtersArticles
|
49 |
+
);
|
50 |
+
|
51 |
+
|
52 |
+
|
53 |
+
}
|
54 |
+
|
55 |
+
}
|
app/code/community/MDN/Antidot/Test/Model/Search/Suggest.php
CHANGED
@@ -26,15 +26,71 @@ class MDN_Antidot_Test_Model_Search_Suggest extends EcomDev_PHPUnit_Test_Case
|
|
26 |
|
27 |
Mage::app()->setCurrentStore(5);
|
28 |
|
29 |
-
/** @var $
|
30 |
$suggest = Mage::getModel('Antidot/search_suggest');
|
31 |
|
32 |
-
$feeds = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($suggest, 'getFeeds', array(
|
33 |
|
34 |
$this->assertEquals(
|
35 |
-
'featured_products_5_fr&afs:feed=categories_3_fr&afs:feed=brands_3_fr
|
36 |
$feeds
|
37 |
);
|
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
}
|
40 |
}
|
26 |
|
27 |
Mage::app()->setCurrentStore(5);
|
28 |
|
29 |
+
/** @var $suggest MDN_Antidot_Model_Search_Suggest */
|
30 |
$suggest = Mage::getModel('Antidot/search_suggest');
|
31 |
|
32 |
+
$feeds = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($suggest, 'getFeeds', array());
|
33 |
|
34 |
$this->assertEquals(
|
35 |
+
'featured_products_5_fr&afs:feed=categories_3_fr&afs:feed=brands_3_fr',
|
36 |
$feeds
|
37 |
);
|
38 |
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
*
|
44 |
+
* @test
|
45 |
+
* @loadFixture
|
46 |
+
*/
|
47 |
+
public function testFeedConfig() {
|
48 |
+
|
49 |
+
Mage::app()->setCurrentStore(5);
|
50 |
+
|
51 |
+
/** @var $suggest MDN_Antidot_Model_Search_Suggest */
|
52 |
+
$suggest = Mage::getModel('Antidot/search_suggest');
|
53 |
+
|
54 |
+
$feeds = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($suggest, 'getFeeds', array());
|
55 |
+
|
56 |
+
$this->assertEquals(
|
57 |
+
'featured_products_5_fr&afs:feed=categories_3_fr&afs:feed=articles_3_fr',
|
58 |
+
$feeds
|
59 |
+
);
|
60 |
+
|
61 |
+
$feedOrder = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($suggest, 'getFeedOrder', array('products'));
|
62 |
+
|
63 |
+
$this->assertEquals(
|
64 |
+
'featured_products_5_fr,categories_3_fr,articles_3_fr',
|
65 |
+
$feedOrder
|
66 |
+
);
|
67 |
+
|
68 |
+
|
69 |
+
}
|
70 |
+
|
71 |
+
public function testPostProcessXml() {
|
72 |
+
|
73 |
+
Mage::app()->setCurrentStore(1);
|
74 |
+
|
75 |
+
/** @var $suggest MDN_Antidot_Model_Search_Suggest */
|
76 |
+
$suggest = Mage::getModel('Antidot/search_suggest');
|
77 |
+
|
78 |
+
$xml = new SimpleXMLElement('<afs:replies xmlns:afs="http://ref.antidot.net/v7/afs#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ref.antidot.net/v7/afs# http://ref.antidot.net/v7.8/acp-reply.xsd" status="true">
|
79 |
+
<afs:header>
|
80 |
+
<afs:query textQuery="test"/>
|
81 |
+
</afs:header>
|
82 |
+
<afs:replySet name="featured_products_1_en">
|
83 |
+
<afs:meta uri="featured_products_1_en" totalItems="1" producer="acp"/>
|
84 |
+
<afs:reply label="Gaming Computer">
|
85 |
+
<afs:option key="url_thumbnail" value="http://magento.antidot.com/media/catalog/product/g/a/gaming-computer.jpg"/>
|
86 |
+
</afs:reply>
|
87 |
+
</afs:replySet>
|
88 |
+
</afs:replies>');
|
89 |
+
$xmlProcessed = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($suggest, 'postProcessXml', array(&$xml));
|
90 |
+
|
91 |
+
|
92 |
+
$this->assertRegExp('#media\/catalog\/product\/cache\/1\/thumbnail\/40x\/#', $xmlProcessed->asXML());
|
93 |
+
|
94 |
+
|
95 |
}
|
96 |
}
|
app/code/community/MDN/Antidot/Test/Model/Search/Suggest/fixtures/testFeedConfig.yaml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
scope:
|
2 |
+
website: # Initialize websites
|
3 |
+
- website_id: 3
|
4 |
+
code: french_website
|
5 |
+
name: French Website
|
6 |
+
default_group_id: 3
|
7 |
+
group: # Initializes store groups
|
8 |
+
- group_id: 3
|
9 |
+
website_id: 3
|
10 |
+
name: French Store Group
|
11 |
+
default_store_id: 3
|
12 |
+
root_category_id: 2 # Default Category
|
13 |
+
- group_id: 5
|
14 |
+
website_id: 3
|
15 |
+
name: French Store Group Discount
|
16 |
+
default_store_id: 5
|
17 |
+
root_category_id: 2 # Default Category
|
18 |
+
store: # Initializes store views
|
19 |
+
- store_id: 3
|
20 |
+
website_id: 3
|
21 |
+
group_id: 3
|
22 |
+
code: france
|
23 |
+
name: France Store
|
24 |
+
is_active: 1
|
25 |
+
- store_id: 5
|
26 |
+
website_id: 3
|
27 |
+
group_id: 5
|
28 |
+
code: france_discount
|
29 |
+
name: France Store Discount
|
30 |
+
is_active: 1
|
31 |
+
config:
|
32 |
+
default/general/locale/code: zz_ZZ
|
33 |
+
default/antidot/suggest/feeds: a:5:{s:15:"_feeds_products";a:3:{s:4:"feed";s:8:"products";s:6:"active";s:2:"on";s:14:"suggest_number";s:1:"5";}s:17:"_feeds_categories";a:3:{s:4:"feed";s:10:"categories";s:6:"active";s:2:"on";s:14:"suggest_number";s:1:"3";}s:13:"_feeds_brands";a:2:{s:4:"feed";s:6:"brands";s:14:"suggest_number";s:2:"10";}s:15:"_feeds_articles";a:3:{s:4:"feed";s:8:"articles";s:6:"active";s:2:"on";s:14:"suggest_number";s:1:"6";}s:13:"_feeds_stores";a:2:{s:4:"feed";s:6:"stores";s:14:"suggest_number";s:2:"10";}}
|
34 |
+
stores/france/general/locale/code: fr_FR
|
35 |
+
stores/france_discount/general/locale/code: fr_FR
|
36 |
+
stores/france_discount/antidot/suggest/feeds: a:5:{s:15:"_feeds_products";a:3:{s:4:"feed";s:8:"products";s:6:"active";s:2:"on";s:14:"suggest_number";s:1:"5";}s:17:"_feeds_categories";a:3:{s:4:"feed";s:10:"categories";s:6:"active";s:2:"on";s:14:"suggest_number";s:1:"3";}s:13:"_feeds_brands";a:2:{s:4:"feed";s:6:"brands";s:14:"suggest_number";s:2:"10";}s:15:"_feeds_articles";a:3:{s:4:"feed";s:8:"articles";s:6:"active";s:2:"on";s:14:"suggest_number";s:1:"6";}s:13:"_feeds_stores";a:2:{s:4:"feed";s:6:"stores";s:14:"suggest_number";s:2:"10";}}
|
app/code/community/MDN/Antidot/Test/Model/Transport/Http.php
CHANGED
@@ -23,11 +23,55 @@ class MDN_Antidot_Test_Model_Transport_Http extends EcomDev_PHPUnit_Test_Case
|
|
23 |
/** @var $observer MDN_Antidot_Model_Transport_Http */
|
24 |
$transport = Mage::getModel('Antidot/transport_http');
|
25 |
|
26 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
file_put_contents($file,"<categories xmlns=\"http://ref.antidot.net/store/afs#\"></categories>");
|
28 |
|
29 |
$exportModel = Mage::getModel('Antidot/export_product');
|
30 |
$curlConnector = new SAI_CurlStub();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
//Set response for upload
|
32 |
$pafLiveResponse = <<<JSON
|
33 |
{"x:type":"ws.response","query":{"x:type":"ws.response.query","locale":"*","parameters":{"x:type":"collection","x:values":[]},"properties":{"x:type":"x:dynamic"}},"result":{"x:type":"PushPafContentReply","jobId":3641,"started":true,"uuid":"e4fe5bfa-dcc7-409d-b688-288cc62e314e"}}
|
@@ -38,6 +82,8 @@ JSON;
|
|
38 |
|
39 |
$this->assertNull($result);
|
40 |
|
|
|
|
|
41 |
}
|
42 |
|
43 |
}
|
23 |
/** @var $observer MDN_Antidot_Model_Transport_Http */
|
24 |
$transport = Mage::getModel('Antidot/transport_http');
|
25 |
|
26 |
+
$baseDirectory = sys_get_temp_dir().DS;
|
27 |
+
if (Mage::getStoreConfig('antidot/ftp/working_directory'))
|
28 |
+
$baseDirectory = Mage::getStoreConfig('antidot/ftp/working_directory').DS;
|
29 |
+
|
30 |
+
$tmpDirectory = $baseDirectory.'antidot'.DS;
|
31 |
+
|
32 |
+
if(!is_dir($tmpDirectory)) {
|
33 |
+
mkdir($tmpDirectory, 0775, true);
|
34 |
+
}
|
35 |
+
|
36 |
+
$file = $tmpDirectory . DS . "unittest_send.xml";
|
37 |
file_put_contents($file,"<categories xmlns=\"http://ref.antidot.net/store/afs#\"></categories>");
|
38 |
|
39 |
$exportModel = Mage::getModel('Antidot/export_product');
|
40 |
$curlConnector = new SAI_CurlStub();
|
41 |
+
|
42 |
+
//Set BO response for AboutConnector
|
43 |
+
$aboutRequestOpts = array(CURLOPT_URL => "https://bo-store.afs-antidot.net/bo-ws/about");
|
44 |
+
$aboutResponse = <<<JSON
|
45 |
+
{
|
46 |
+
"x:type":"ws.response",
|
47 |
+
"query":{
|
48 |
+
"x:type":"ws.response.query",
|
49 |
+
"parameters":{
|
50 |
+
"x:type":"collection",
|
51 |
+
"x:values":[
|
52 |
+
|
53 |
+
]
|
54 |
+
},
|
55 |
+
"properties":{
|
56 |
+
"x:type":"x:dynamic"
|
57 |
+
}
|
58 |
+
},
|
59 |
+
"result":{
|
60 |
+
"x:type":"bows.about",
|
61 |
+
"boWsVersion":{
|
62 |
+
"x:type":"AfsVersion",
|
63 |
+
"build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e",
|
64 |
+
"gen":"7.7",
|
65 |
+
"major":"4",
|
66 |
+
"minor":"0",
|
67 |
+
"motto":"Pink Dolphin"
|
68 |
+
},
|
69 |
+
"copyright":"Copyright (C) 1999-2013 Antidot"
|
70 |
+
}
|
71 |
+
}
|
72 |
+
JSON;
|
73 |
+
$curlConnector->setResponse($aboutResponse, $aboutRequestOpts);
|
74 |
+
|
75 |
//Set response for upload
|
76 |
$pafLiveResponse = <<<JSON
|
77 |
{"x:type":"ws.response","query":{"x:type":"ws.response.query","locale":"*","parameters":{"x:type":"collection","x:values":[]},"properties":{"x:type":"x:dynamic"}},"result":{"x:type":"PushPafContentReply","jobId":3641,"started":true,"uuid":"e4fe5bfa-dcc7-409d-b688-288cc62e314e"}}
|
82 |
|
83 |
$this->assertNull($result);
|
84 |
|
85 |
+
unlink($file);
|
86 |
+
|
87 |
}
|
88 |
|
89 |
}
|
app/code/community/MDN/Antidot/controllers/Adminhtml/Antidot/PushController.php
CHANGED
@@ -73,4 +73,54 @@ class MDN_Antidot_Adminhtml_Antidot_PushController extends Mage_Adminhtml_Contro
|
|
73 |
}
|
74 |
$this->_redirectReferer();
|
75 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
73 |
}
|
74 |
$this->_redirectReferer();
|
75 |
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Generate the articles file, call from back office
|
79 |
+
*/
|
80 |
+
public function articleAction()
|
81 |
+
{
|
82 |
+
try {
|
83 |
+
if (Mage::getModel('Antidot/observer')->articlesFullExport('UI')) {
|
84 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
85 |
+
Mage::helper('Antidot')->__('Articles exported')
|
86 |
+
);
|
87 |
+
} else {
|
88 |
+
Mage::getSingleton('adminhtml/session')->addWarning(
|
89 |
+
Mage::helper('Antidot')->__('No Article to export')
|
90 |
+
);
|
91 |
+
}
|
92 |
+
}
|
93 |
+
catch(Exception $ex) {
|
94 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
95 |
+
Mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage())
|
96 |
+
);
|
97 |
+
}
|
98 |
+
$this->_redirectReferer();
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Generate the stores file, call from back office
|
104 |
+
*/
|
105 |
+
public function storeAction()
|
106 |
+
{
|
107 |
+
try {
|
108 |
+
if (Mage::getModel('Antidot/observer')->storesFullExport('UI')) {
|
109 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
110 |
+
Mage::helper('Antidot')->__('Stores exported')
|
111 |
+
);
|
112 |
+
} else {
|
113 |
+
Mage::getSingleton('adminhtml/session')->addWarning(
|
114 |
+
Mage::helper('Antidot')->__('No store to export')
|
115 |
+
);
|
116 |
+
}
|
117 |
+
}
|
118 |
+
catch(Exception $ex) {
|
119 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
120 |
+
Mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage())
|
121 |
+
);
|
122 |
+
}
|
123 |
+
$this->_redirectReferer();
|
124 |
+
}
|
125 |
+
|
126 |
}
|
app/code/community/MDN/Antidot/etc/config.xml
CHANGED
@@ -14,11 +14,19 @@
|
|
14 |
<schedule><cron_expr>00 21 * * *</cron_expr></schedule>
|
15 |
<run><model>Antidot/Observer::categoriesFullExport</model></run>
|
16 |
</antidot_categories_full_export>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
</jobs>
|
18 |
</crontab>
|
19 |
<modules>
|
20 |
<MDN_Antidot>
|
21 |
-
<version>1.2.
|
22 |
</MDN_Antidot>
|
23 |
</modules>
|
24 |
<global>
|
@@ -196,23 +204,21 @@
|
|
196 |
</engine>
|
197 |
<suggest>
|
198 |
<enable>1</enable>
|
199 |
-
<products
|
200 |
-
<brands>1</brands>
|
201 |
-
<categories>1</categories>
|
202 |
-
<products_displayed>10</products_displayed>
|
203 |
-
<brands_displayed>10</brands_displayed>
|
204 |
-
<categories_displayed>10</categories_displayed>
|
205 |
<template>
|
206 |
<![CDATA[
|
207 |
<?xml version="1.0" encoding="UTF-8"?>
|
208 |
<xsl:stylesheet xmlns:afs="http://ref.antidot.net/v7/afs#"
|
209 |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
|
|
210 |
<!-- Titles to translate in localized storeviews -->
|
211 |
<xsl:variable name="see-more-products">See more products</xsl:variable>
|
212 |
<!-- Column titles -->
|
213 |
<xsl:variable name="products-title">Products</xsl:variable>
|
214 |
<xsl:variable name="categories-title">Categories</xsl:variable>
|
215 |
<xsl:variable name="brands-title">Brands</xsl:variable>
|
|
|
|
|
216 |
<!-- Thumbnail settings -->
|
217 |
<xsl:variable name="thumbnail_width">40</xsl:variable>
|
218 |
<!-- Price settings -->
|
@@ -229,12 +235,14 @@
|
|
229 |
<xsl:variable name="display_promo" select="true()"/>
|
230 |
<xsl:variable name="display_price_off" select="true()"/>
|
231 |
<xsl:variable name="promo_text">PROMO</xsl:variable>
|
232 |
-
|
233 |
<!-- Main HTML template -->
|
234 |
<xsl:template match="afs:replies">
|
235 |
<xsl:if test="afs:replySet">
|
236 |
<ul class="ajax-search">
|
237 |
-
<li class="search-container-top"
|
|
|
|
|
238 |
<xsl:apply-templates select="afs:replySet"/>
|
239 |
<a style="float:right;">
|
240 |
<xsl:attribute name="href"><xsl:value-of select="$searchUrl"/><xsl:value-of
|
@@ -244,7 +252,6 @@
|
|
244 |
</ul>
|
245 |
</xsl:if>
|
246 |
</xsl:template>
|
247 |
-
|
248 |
<!-- Suggestions column main template -->
|
249 |
<xsl:template match="afs:replySet">
|
250 |
<xsl:variable name="title">
|
@@ -259,6 +266,12 @@
|
|
259 |
<xsl:when test="starts-with(@name,'brands')">
|
260 |
<xsl:value-of select="$brands-title"/>
|
261 |
</xsl:when>
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
<xsl:when test="starts-with(@name,'property_')">
|
263 |
<xsl:call-template name="upperCaseFirstLetter">
|
264 |
<xsl:with-param name="str">
|
@@ -284,15 +297,29 @@
|
|
284 |
</xsl:otherwise>
|
285 |
</xsl:choose>
|
286 |
</xsl:variable>
|
287 |
-
<xsl:
|
288 |
-
<xsl:
|
289 |
-
|
290 |
-
<xsl:
|
|
|
|
|
291 |
</xsl:element>
|
292 |
-
|
293 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
</xsl:template>
|
295 |
-
|
296 |
<!-- Template common to basic and products replies -->
|
297 |
<xsl:template match="afs:reply">
|
298 |
<xsl:variable name="parent" select="parent::afs:replySet/@name"/>
|
@@ -303,6 +330,8 @@
|
|
303 |
<xsl:when test="starts-with($parent,'categories')">category</xsl:when>
|
304 |
<xsl:when test="starts-with($parent,'featured_products')">product</xsl:when>
|
305 |
<xsl:when test="starts-with($parent,'brands')">brand</xsl:when>
|
|
|
|
|
306 |
<xsl:when test="starts-with($parent,'property_')">
|
307 |
<xsl:value-of
|
308 |
select="substring(substring-after($parent,'property_'),1,string-length($parent)-14)"
|
@@ -385,7 +414,6 @@
|
|
385 |
<div style="clear:both;"/>
|
386 |
</xsl:element>
|
387 |
</xsl:template>
|
388 |
-
|
389 |
<!-- Price discount percentage -->
|
390 |
<xsl:template match="afs:option" mode="price_off">
|
391 |
<xsl:element name="span">
|
@@ -405,7 +433,6 @@
|
|
405 |
</xsl:choose>
|
406 |
</xsl:element>
|
407 |
</xsl:template>
|
408 |
-
|
409 |
<!-- Thumbnail display -->
|
410 |
<xsl:template match="afs:option" mode="url_thumbnail">
|
411 |
<xsl:element name="div">
|
@@ -426,14 +453,12 @@
|
|
426 |
</xsl:element>
|
427 |
</xsl:element>
|
428 |
</xsl:template>
|
429 |
-
|
430 |
<!-- Creates href link -->
|
431 |
<xsl:template match="afs:option" mode="href">
|
432 |
<xsl:attribute name="href">
|
433 |
<xsl:apply-templates select="@value"/>
|
434 |
</xsl:attribute>
|
435 |
</xsl:template>
|
436 |
-
|
437 |
<!-- Basic suggestion template with a custom rendering for categories -->
|
438 |
<xsl:template match="afs:reply" mode="basic">
|
439 |
<xsl:element name="div">
|
@@ -446,7 +471,6 @@
|
|
446 |
</xsl:if>
|
447 |
</xsl:element>
|
448 |
</xsl:template>
|
449 |
-
|
450 |
<!-- Display parent category -->
|
451 |
<xsl:template match="afs:option" mode="parent">
|
452 |
<xsl:text>(</xsl:text>
|
@@ -455,7 +479,6 @@
|
|
455 |
<xsl:value-of select="@value"/>
|
456 |
<xsl:text>)</xsl:text>
|
457 |
</xsl:template>
|
458 |
-
|
459 |
<!-- Product rich template: uses custom metadata like price -->
|
460 |
<xsl:template match="afs:reply" mode="product">
|
461 |
<xsl:element name="div">
|
@@ -481,7 +504,6 @@
|
|
481 |
</xsl:if>
|
482 |
</xsl:element>
|
483 |
</xsl:template>
|
484 |
-
|
485 |
<!-- Display price using regional settings -->
|
486 |
<xsl:template match="afs:option" mode="price_display">
|
487 |
<xsl:variable name="currency">
|
@@ -515,7 +537,6 @@
|
|
515 |
</xsl:otherwise>
|
516 |
</xsl:choose>
|
517 |
</xsl:template>
|
518 |
-
|
519 |
<!-- Translate first letter of a string into a upper case if it was lower -->
|
520 |
<xsl:template name="upperCaseFirstLetter">
|
521 |
<xsl:param name="str"/>
|
@@ -524,7 +545,6 @@
|
|
524 |
<xsl:value-of
|
525 |
select="concat(translate(substring($str,1,1),$vLower,$vUpper),substring($str,2))"/>
|
526 |
</xsl:template>
|
527 |
-
|
528 |
</xsl:stylesheet>
|
529 |
]]>
|
530 |
</template>
|
@@ -580,9 +600,6 @@
|
|
580 |
</feeds>
|
581 |
]]>
|
582 |
</suggest_xml>
|
583 |
-
<order_1>categories</order_1>
|
584 |
-
<order_2>products</order_2>
|
585 |
-
<order_3>brands</order_3>
|
586 |
</suggest>
|
587 |
<fields_category>
|
588 |
<name>name</name>
|
14 |
<schedule><cron_expr>00 21 * * *</cron_expr></schedule>
|
15 |
<run><model>Antidot/Observer::categoriesFullExport</model></run>
|
16 |
</antidot_categories_full_export>
|
17 |
+
<antidot_articles_full_export>
|
18 |
+
<schedule><cron_expr>00 26 * * *</cron_expr></schedule>
|
19 |
+
<run><model>Antidot/Observer::articlesFullExport</model></run>
|
20 |
+
</antidot_articles_full_export>
|
21 |
+
<antidot_stores_full_export>
|
22 |
+
<schedule><cron_expr>00 31 * * *</cron_expr></schedule>
|
23 |
+
<run><model>Antidot/Observer::storesFullExport</model></run>
|
24 |
+
</antidot_stores_full_export>
|
25 |
</jobs>
|
26 |
</crontab>
|
27 |
<modules>
|
28 |
<MDN_Antidot>
|
29 |
+
<version>1.2.3</version>
|
30 |
</MDN_Antidot>
|
31 |
</modules>
|
32 |
<global>
|
204 |
</engine>
|
205 |
<suggest>
|
206 |
<enable>1</enable>
|
207 |
+
<feeds>a:5:{s:17:"_feeds_categories";a:3:{s:4:"feed";s:10:"categories";s:6:"active";s:2:"on";s:14:"suggest_number";s:2:"10";}s:15:"_feeds_products";a:3:{s:4:"feed";s:8:"products";s:6:"active";s:2:"on";s:14:"suggest_number";s:2:"10";}s:13:"_feeds_brands";a:3:{s:4:"feed";s:6:"brands";s:6:"active";s:2:"on";s:14:"suggest_number";s:2:"10";}s:15:"_feeds_articles";a:2:{s:4:"feed";s:8:"articles";s:14:"suggest_number";s:2:"10";}s:13:"_feeds_stores";a:2:{s:4:"feed";s:6:"stores";s:14:"suggest_number";s:2:"10";}}</feeds>
|
|
|
|
|
|
|
|
|
|
|
208 |
<template>
|
209 |
<![CDATA[
|
210 |
<?xml version="1.0" encoding="UTF-8"?>
|
211 |
<xsl:stylesheet xmlns:afs="http://ref.antidot.net/v7/afs#"
|
212 |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
213 |
+
<xsl:output indent="yes"/>
|
214 |
<!-- Titles to translate in localized storeviews -->
|
215 |
<xsl:variable name="see-more-products">See more products</xsl:variable>
|
216 |
<!-- Column titles -->
|
217 |
<xsl:variable name="products-title">Products</xsl:variable>
|
218 |
<xsl:variable name="categories-title">Categories</xsl:variable>
|
219 |
<xsl:variable name="brands-title">Brands</xsl:variable>
|
220 |
+
<xsl:variable name="articles-title">Articles</xsl:variable>
|
221 |
+
<xsl:variable name="stores-title">Stores</xsl:variable>
|
222 |
<!-- Thumbnail settings -->
|
223 |
<xsl:variable name="thumbnail_width">40</xsl:variable>
|
224 |
<!-- Price settings -->
|
235 |
<xsl:variable name="display_promo" select="true()"/>
|
236 |
<xsl:variable name="display_price_off" select="true()"/>
|
237 |
<xsl:variable name="promo_text">PROMO</xsl:variable>
|
238 |
+
<xsl:variable name="display_block" select="false()"/>
|
239 |
<!-- Main HTML template -->
|
240 |
<xsl:template match="afs:replies">
|
241 |
<xsl:if test="afs:replySet">
|
242 |
<ul class="ajax-search">
|
243 |
+
<li class="search-container-top">
|
244 |
+
<div class="empty_column"/>
|
245 |
+
</li>
|
246 |
<xsl:apply-templates select="afs:replySet"/>
|
247 |
<a style="float:right;">
|
248 |
<xsl:attribute name="href"><xsl:value-of select="$searchUrl"/><xsl:value-of
|
252 |
</ul>
|
253 |
</xsl:if>
|
254 |
</xsl:template>
|
|
|
255 |
<!-- Suggestions column main template -->
|
256 |
<xsl:template match="afs:replySet">
|
257 |
<xsl:variable name="title">
|
266 |
<xsl:when test="starts-with(@name,'brands')">
|
267 |
<xsl:value-of select="$brands-title"/>
|
268 |
</xsl:when>
|
269 |
+
<xsl:when test="starts-with(@name,'articles')">
|
270 |
+
<xsl:value-of select="$articles-title"/>
|
271 |
+
</xsl:when>
|
272 |
+
<xsl:when test="starts-with(@name,'stores')">
|
273 |
+
<xsl:value-of select="$stores-title"/>
|
274 |
+
</xsl:when>
|
275 |
<xsl:when test="starts-with(@name,'property_')">
|
276 |
<xsl:call-template name="upperCaseFirstLetter">
|
277 |
<xsl:with-param name="str">
|
297 |
</xsl:otherwise>
|
298 |
</xsl:choose>
|
299 |
</xsl:variable>
|
300 |
+
<xsl:variable name="block_content">
|
301 |
+
<xsl:element name="li">
|
302 |
+
<xsl:attribute name="class">title</xsl:attribute>
|
303 |
+
<xsl:element name="span">
|
304 |
+
<xsl:value-of select="$title"/>
|
305 |
+
</xsl:element>
|
306 |
</xsl:element>
|
307 |
+
<xsl:apply-templates select="afs:reply"/>
|
308 |
+
</xsl:variable>
|
309 |
+
<xsl:choose>
|
310 |
+
<xsl:when test="$display_block">
|
311 |
+
<div>
|
312 |
+
<xsl:attribute name="class">
|
313 |
+
<xsl:value-of select="concat('column_',format-number(position(),'00'))"/>
|
314 |
+
</xsl:attribute>
|
315 |
+
<xsl:copy-of select="$block_content"/>
|
316 |
+
</div>
|
317 |
+
</xsl:when>
|
318 |
+
<xsl:otherwise>
|
319 |
+
<xsl:copy-of select="$block_content"/>
|
320 |
+
</xsl:otherwise>
|
321 |
+
</xsl:choose>
|
322 |
</xsl:template>
|
|
|
323 |
<!-- Template common to basic and products replies -->
|
324 |
<xsl:template match="afs:reply">
|
325 |
<xsl:variable name="parent" select="parent::afs:replySet/@name"/>
|
330 |
<xsl:when test="starts-with($parent,'categories')">category</xsl:when>
|
331 |
<xsl:when test="starts-with($parent,'featured_products')">product</xsl:when>
|
332 |
<xsl:when test="starts-with($parent,'brands')">brand</xsl:when>
|
333 |
+
<xsl:when test="starts-with($parent,'articles')">article</xsl:when>
|
334 |
+
<xsl:when test="starts-with($parent,'stores')">store</xsl:when>
|
335 |
<xsl:when test="starts-with($parent,'property_')">
|
336 |
<xsl:value-of
|
337 |
select="substring(substring-after($parent,'property_'),1,string-length($parent)-14)"
|
414 |
<div style="clear:both;"/>
|
415 |
</xsl:element>
|
416 |
</xsl:template>
|
|
|
417 |
<!-- Price discount percentage -->
|
418 |
<xsl:template match="afs:option" mode="price_off">
|
419 |
<xsl:element name="span">
|
433 |
</xsl:choose>
|
434 |
</xsl:element>
|
435 |
</xsl:template>
|
|
|
436 |
<!-- Thumbnail display -->
|
437 |
<xsl:template match="afs:option" mode="url_thumbnail">
|
438 |
<xsl:element name="div">
|
453 |
</xsl:element>
|
454 |
</xsl:element>
|
455 |
</xsl:template>
|
|
|
456 |
<!-- Creates href link -->
|
457 |
<xsl:template match="afs:option" mode="href">
|
458 |
<xsl:attribute name="href">
|
459 |
<xsl:apply-templates select="@value"/>
|
460 |
</xsl:attribute>
|
461 |
</xsl:template>
|
|
|
462 |
<!-- Basic suggestion template with a custom rendering for categories -->
|
463 |
<xsl:template match="afs:reply" mode="basic">
|
464 |
<xsl:element name="div">
|
471 |
</xsl:if>
|
472 |
</xsl:element>
|
473 |
</xsl:template>
|
|
|
474 |
<!-- Display parent category -->
|
475 |
<xsl:template match="afs:option" mode="parent">
|
476 |
<xsl:text>(</xsl:text>
|
479 |
<xsl:value-of select="@value"/>
|
480 |
<xsl:text>)</xsl:text>
|
481 |
</xsl:template>
|
|
|
482 |
<!-- Product rich template: uses custom metadata like price -->
|
483 |
<xsl:template match="afs:reply" mode="product">
|
484 |
<xsl:element name="div">
|
504 |
</xsl:if>
|
505 |
</xsl:element>
|
506 |
</xsl:template>
|
|
|
507 |
<!-- Display price using regional settings -->
|
508 |
<xsl:template match="afs:option" mode="price_display">
|
509 |
<xsl:variable name="currency">
|
537 |
</xsl:otherwise>
|
538 |
</xsl:choose>
|
539 |
</xsl:template>
|
|
|
540 |
<!-- Translate first letter of a string into a upper case if it was lower -->
|
541 |
<xsl:template name="upperCaseFirstLetter">
|
542 |
<xsl:param name="str"/>
|
545 |
<xsl:value-of
|
546 |
select="concat(translate(substring($str,1,1),$vLower,$vUpper),substring($str,2))"/>
|
547 |
</xsl:template>
|
|
|
548 |
</xsl:stylesheet>
|
549 |
]]>
|
550 |
</template>
|
600 |
</feeds>
|
601 |
]]>
|
602 |
</suggest_xml>
|
|
|
|
|
|
|
603 |
</suggest>
|
604 |
<fields_category>
|
605 |
<name>name</name>
|
app/code/community/MDN/Antidot/etc/system.xml
CHANGED
@@ -133,7 +133,6 @@
|
|
133 |
<sort_order>6</sort_order>
|
134 |
<show_in_default>1</show_in_default>
|
135 |
<comment>Local directory to use to generate xml files. If empty, /tmp will be used</comment>
|
136 |
-
<depends><upload_type>ftp</upload_type></depends>
|
137 |
</working_directory>
|
138 |
</fields>
|
139 |
</ftp>
|
@@ -404,66 +403,16 @@
|
|
404 |
<show_in_store>1</show_in_store>
|
405 |
<comment>Select Magento or AFS@Store (recommended) autocomplete engine. Rollback to Magento only if you experience issues</comment>
|
406 |
</enable>
|
407 |
-
<
|
408 |
-
<label>
|
409 |
-
<
|
410 |
-
<
|
411 |
-
<sort_order>
|
412 |
-
<show_in_default>1</show_in_default>
|
413 |
-
<show_in_website>1</show_in_website>
|
414 |
-
<show_in_store>1</show_in_store>
|
415 |
-
<comment>Display products in auto complete results</comment>
|
416 |
-
</products>
|
417 |
-
<products_displayed translate="label">
|
418 |
-
<label>Number of products displayed</label>
|
419 |
-
<frontend_type>text</frontend_type>
|
420 |
-
<validate>validate-digits</validate>
|
421 |
-
<sort_order>21</sort_order>
|
422 |
-
<show_in_default>1</show_in_default>
|
423 |
-
<show_in_website>1</show_in_website>
|
424 |
-
<show_in_store>1</show_in_store>
|
425 |
-
<comment>Select the maximum number of products to display</comment>
|
426 |
-
</products_displayed>
|
427 |
-
<brands translate="label">
|
428 |
-
<label>Display brands</label>
|
429 |
-
<frontend_type>select</frontend_type>
|
430 |
-
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
431 |
-
<sort_order>30</sort_order>
|
432 |
-
<show_in_default>1</show_in_default>
|
433 |
-
<show_in_website>1</show_in_website>
|
434 |
-
<show_in_store>1</show_in_store>
|
435 |
-
<comment>Display brands in auto complete results</comment>
|
436 |
-
</brands>
|
437 |
-
<brands_displayed translate="label">
|
438 |
-
<label>Number of brands displayed</label>
|
439 |
-
<frontend_type>text</frontend_type>
|
440 |
-
<validate>validate-digits</validate>
|
441 |
-
<sort_order>31</sort_order>
|
442 |
-
<show_in_default>1</show_in_default>
|
443 |
-
<show_in_website>1</show_in_website>
|
444 |
-
<show_in_store>1</show_in_store>
|
445 |
-
<comment>Select the maximum number of brands to display</comment>
|
446 |
-
</brands_displayed>
|
447 |
-
<categories translate="label">
|
448 |
-
<label>Categories</label>
|
449 |
-
<frontend_type>select</frontend_type>
|
450 |
-
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
451 |
-
<sort_order>40</sort_order>
|
452 |
-
<show_in_default>1</show_in_default>
|
453 |
-
<show_in_website>1</show_in_website>
|
454 |
-
<show_in_store>1</show_in_store>
|
455 |
-
<comment>Display categories in auto complete results</comment>
|
456 |
-
</categories>
|
457 |
-
<categories_displayed translate="label">
|
458 |
-
<label>Number of categories displayed</label>
|
459 |
-
<frontend_type>text</frontend_type>
|
460 |
-
<validate>validate-digits</validate>
|
461 |
-
<sort_order>41</sort_order>
|
462 |
<show_in_default>1</show_in_default>
|
463 |
<show_in_website>1</show_in_website>
|
464 |
<show_in_store>1</show_in_store>
|
465 |
-
<comment>
|
466 |
-
</
|
467 |
<template translate="label">
|
468 |
<label>Template</label>
|
469 |
<frontend_type>textarea</frontend_type>
|
@@ -502,34 +451,6 @@
|
|
502 |
<show_in_store>0</show_in_store>
|
503 |
<comment>Restore the default XSLT template (usefull if you broke it !)</comment>
|
504 |
</restore_template>
|
505 |
-
<order_1 translate="label">
|
506 |
-
<label>Sort order</label>
|
507 |
-
<frontend_type>select</frontend_type>
|
508 |
-
<source_model>Antidot/System_Config_Suggest_Type</source_model>
|
509 |
-
<sort_order>42</sort_order>
|
510 |
-
<show_in_default>1</show_in_default>
|
511 |
-
<show_in_website>1</show_in_website>
|
512 |
-
<show_in_store>1</show_in_store>
|
513 |
-
<comment>First collection to display in suggest</comment>
|
514 |
-
</order_1>
|
515 |
-
<order_2 translate="label">
|
516 |
-
<frontend_type>select</frontend_type>
|
517 |
-
<source_model>Antidot/System_Config_Suggest_Type</source_model>
|
518 |
-
<sort_order>43</sort_order>
|
519 |
-
<show_in_default>1</show_in_default>
|
520 |
-
<show_in_website>1</show_in_website>
|
521 |
-
<show_in_store>1</show_in_store>
|
522 |
-
<comment>Second collection to display in suggest</comment>
|
523 |
-
</order_2>
|
524 |
-
<order_3 translate="label">
|
525 |
-
<frontend_type>select</frontend_type>
|
526 |
-
<source_model>Antidot/System_Config_Suggest_Type</source_model>
|
527 |
-
<sort_order>44</sort_order>
|
528 |
-
<show_in_default>1</show_in_default>
|
529 |
-
<show_in_website>1</show_in_website>
|
530 |
-
<show_in_store>1</show_in_store>
|
531 |
-
<comment>Third collection to display in suggest</comment>
|
532 |
-
</order_3>
|
533 |
</fields>
|
534 |
</suggest>
|
535 |
|
@@ -552,6 +473,16 @@
|
|
552 |
<show_in_store>1</show_in_store>
|
553 |
<comment>Select Magento or AFS@Store (recommended) search engine. Rollback to Magento only if you experience issues</comment>
|
554 |
</engine>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
555 |
<feed_categories translate="label">
|
556 |
<label>Display categories</label>
|
557 |
<frontend_type>select</frontend_type>
|
@@ -662,16 +593,66 @@
|
|
662 |
</redirect>
|
663 |
</fields>
|
664 |
</promote>
|
665 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
666 |
<action>
|
667 |
<label>On-demand Data Upload</label>
|
668 |
<frontend_type>text</frontend_type>
|
669 |
-
<sort_order>
|
670 |
<show_in_default>1</show_in_default>
|
671 |
<show_in_website>0</show_in_website>
|
672 |
<show_in_store>0</show_in_store>
|
673 |
<fields>
|
674 |
-
<push_products>
|
675 |
<label>Push products</label>
|
676 |
<frontend_model>Antidot/System_Config_Button_PushProducts</frontend_model>
|
677 |
<sort_order>2</sort_order>
|
@@ -680,15 +661,33 @@
|
|
680 |
<show_in_store>0</show_in_store>
|
681 |
<comment>Manually push products index to AFS@Store (usefull when you change configuration above)</comment>
|
682 |
</push_products>
|
683 |
-
<push_categories>
|
684 |
<label>Push categories</label>
|
685 |
<frontend_model>Antidot/System_Config_Button_PushCategories</frontend_model>
|
686 |
<sort_order>1</sort_order>
|
687 |
<show_in_default>1</show_in_default>
|
688 |
<show_in_website>0</show_in_website>
|
689 |
<show_in_store>0</show_in_store>
|
690 |
-
<comment>Manually push
|
691 |
</push_categories>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
692 |
</fields>
|
693 |
</action>
|
694 |
|
133 |
<sort_order>6</sort_order>
|
134 |
<show_in_default>1</show_in_default>
|
135 |
<comment>Local directory to use to generate xml files. If empty, /tmp will be used</comment>
|
|
|
136 |
</working_directory>
|
137 |
</fields>
|
138 |
</ftp>
|
403 |
<show_in_store>1</show_in_store>
|
404 |
<comment>Select Magento or AFS@Store (recommended) autocomplete engine. Rollback to Magento only if you experience issues</comment>
|
405 |
</enable>
|
406 |
+
<feeds translate="label">
|
407 |
+
<label>Feeds</label>
|
408 |
+
<frontend_model>Antidot/system_config_form_field_array_acpFeeds</frontend_model>
|
409 |
+
<backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
|
410 |
+
<sort_order>2</sort_order>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
411 |
<show_in_default>1</show_in_default>
|
412 |
<show_in_website>1</show_in_website>
|
413 |
<show_in_store>1</show_in_store>
|
414 |
+
<comment>Définissez l'ordre des flux en les faisant glisser en drag'n drop, définissez pour chaque flux si ils doivent apparaitre, et le nombre de résultats à afficher</comment>
|
415 |
+
</feeds>
|
416 |
<template translate="label">
|
417 |
<label>Template</label>
|
418 |
<frontend_type>textarea</frontend_type>
|
451 |
<show_in_store>0</show_in_store>
|
452 |
<comment>Restore the default XSLT template (usefull if you broke it !)</comment>
|
453 |
</restore_template>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
454 |
</fields>
|
455 |
</suggest>
|
456 |
|
473 |
<show_in_store>1</show_in_store>
|
474 |
<comment>Select Magento or AFS@Store (recommended) search engine. Rollback to Magento only if you experience issues</comment>
|
475 |
</engine>
|
476 |
+
<result_tabs translate="label">
|
477 |
+
<label>Result Tabs</label>
|
478 |
+
<frontend_model>Antidot/system_config_form_field_array_tabs</frontend_model>
|
479 |
+
<backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
|
480 |
+
<sort_order>30</sort_order>
|
481 |
+
<show_in_default>1</show_in_default>
|
482 |
+
<show_in_website>1</show_in_website>
|
483 |
+
<show_in_store>1</show_in_store>
|
484 |
+
<comment>Définissez l'ordre des onglets en les faisant glisser en drag'n drop, définissez pour chaque onglet si ils doivent apparaitre, et leur ordre de priorité</comment>
|
485 |
+
</result_tabs>
|
486 |
<feed_categories translate="label">
|
487 |
<label>Display categories</label>
|
488 |
<frontend_type>select</frontend_type>
|
593 |
</redirect>
|
594 |
</fields>
|
595 |
</promote>
|
596 |
+
|
597 |
+
<articles>
|
598 |
+
<label>Articles</label>
|
599 |
+
<frontend_type>text</frontend_type>
|
600 |
+
<sort_order>9</sort_order>
|
601 |
+
<show_in_default>1</show_in_default>
|
602 |
+
<show_in_website>0</show_in_website>
|
603 |
+
<show_in_store>0</show_in_store>
|
604 |
+
<fields>
|
605 |
+
<index_cms translate="label">
|
606 |
+
<label>Index magento CMS pages</label>
|
607 |
+
<frontend_type>select</frontend_type>
|
608 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
609 |
+
<sort_order>1</sort_order>
|
610 |
+
<show_in_default>1</show_in_default>
|
611 |
+
<show_in_website>0</show_in_website>
|
612 |
+
<show_in_store>0</show_in_store>
|
613 |
+
</index_cms>
|
614 |
+
<file_path translate="label,comment">
|
615 |
+
<label>Articles directory</label>
|
616 |
+
<frontend_type>text</frontend_type>
|
617 |
+
<sort_order>2</sort_order>
|
618 |
+
<show_in_default>1</show_in_default>
|
619 |
+
<show_in_website>0</show_in_website>
|
620 |
+
<show_in_store>0</show_in_store>
|
621 |
+
<comment>Local directory where the articles zip file is expected</comment>
|
622 |
+
<depends><index_cms>0</index_cms></depends>
|
623 |
+
</file_path>
|
624 |
+
</fields>
|
625 |
+
</articles>
|
626 |
+
|
627 |
+
<stores>
|
628 |
+
<label>Stores</label>
|
629 |
+
<frontend_type>text</frontend_type>
|
630 |
+
<sort_order>10</sort_order>
|
631 |
+
<show_in_default>1</show_in_default>
|
632 |
+
<show_in_website>0</show_in_website>
|
633 |
+
<show_in_store>0</show_in_store>
|
634 |
+
<fields>
|
635 |
+
<file_path translate="label,comment">
|
636 |
+
<label>Stores directory</label>
|
637 |
+
<frontend_type>text</frontend_type>
|
638 |
+
<sort_order>2</sort_order>
|
639 |
+
<show_in_default>1</show_in_default>
|
640 |
+
<show_in_website>0</show_in_website>
|
641 |
+
<show_in_store>0</show_in_store>
|
642 |
+
<comment>Local directory where the stores zip file is expected</comment>
|
643 |
+
</file_path>
|
644 |
+
</fields>
|
645 |
+
</stores>
|
646 |
+
|
647 |
<action>
|
648 |
<label>On-demand Data Upload</label>
|
649 |
<frontend_type>text</frontend_type>
|
650 |
+
<sort_order>11</sort_order>
|
651 |
<show_in_default>1</show_in_default>
|
652 |
<show_in_website>0</show_in_website>
|
653 |
<show_in_store>0</show_in_store>
|
654 |
<fields>
|
655 |
+
<push_products translate="label,comment">
|
656 |
<label>Push products</label>
|
657 |
<frontend_model>Antidot/System_Config_Button_PushProducts</frontend_model>
|
658 |
<sort_order>2</sort_order>
|
661 |
<show_in_store>0</show_in_store>
|
662 |
<comment>Manually push products index to AFS@Store (usefull when you change configuration above)</comment>
|
663 |
</push_products>
|
664 |
+
<push_categories translate="label,comment">
|
665 |
<label>Push categories</label>
|
666 |
<frontend_model>Antidot/System_Config_Button_PushCategories</frontend_model>
|
667 |
<sort_order>1</sort_order>
|
668 |
<show_in_default>1</show_in_default>
|
669 |
<show_in_website>0</show_in_website>
|
670 |
<show_in_store>0</show_in_store>
|
671 |
+
<comment>Manually push categories index to AFS@Store</comment>
|
672 |
</push_categories>
|
673 |
+
<push_articles translate="label,comment">
|
674 |
+
<label>Push articles</label>
|
675 |
+
<frontend_model>Antidot/System_Config_Button_PushArticles</frontend_model>
|
676 |
+
<sort_order>3</sort_order>
|
677 |
+
<show_in_default>1</show_in_default>
|
678 |
+
<show_in_website>0</show_in_website>
|
679 |
+
<show_in_store>0</show_in_store>
|
680 |
+
<comment>Manually push articles index to AFS@Store</comment>
|
681 |
+
</push_articles>
|
682 |
+
<push_stores translate="label,comment">
|
683 |
+
<label>Push stores</label>
|
684 |
+
<frontend_model>Antidot/System_Config_Button_PushStores</frontend_model>
|
685 |
+
<sort_order>4</sort_order>
|
686 |
+
<show_in_default>1</show_in_default>
|
687 |
+
<show_in_website>0</show_in_website>
|
688 |
+
<show_in_store>0</show_in_store>
|
689 |
+
<comment>Manually push stores index to AFS@Store</comment>
|
690 |
+
</push_stores>
|
691 |
</fields>
|
692 |
</action>
|
693 |
|
app/code/community/MDN/Antidot/sql/Antidot_setup/mysql4-upgrade-1.2.2-1.2.3.php
ADDED
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$installer = $this;
|
4 |
+
|
5 |
+
$installer->startSetup();
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Alter table 'antidot/export'
|
9 |
+
*/
|
10 |
+
$installer->run("
|
11 |
+
ALTER TABLE `antidot_export` CHANGE COLUMN `element` `element` ENUM('CATALOG', 'CATEGORY', 'STORE', 'ARTICLE') NOT NULL ;
|
12 |
+
");
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Upgrade core_config_data vars fro suggest config
|
16 |
+
* replace olds vars by the new antidot/suggest/feeds one
|
17 |
+
*/
|
18 |
+
|
19 |
+
$storeIds = array(Mage_Core_Model_App::ADMIN_STORE_ID);
|
20 |
+
$storeCollection = Mage::getModel('core/store')->getCollection();
|
21 |
+
foreach ($storeCollection as $store) {
|
22 |
+
$storeIds[] = $store->getId();
|
23 |
+
}
|
24 |
+
foreach ($storeIds as $storeId) {
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Get the old config var directly in database because, cache has been flushed and is not yet reloaded when upgrade modules is precessed
|
28 |
+
*
|
29 |
+
* First : get ADMIN scope value
|
30 |
+
* Second : override with store scope value
|
31 |
+
*/
|
32 |
+
$coll = Mage::getResourceModel('core/config_data_collection')
|
33 |
+
->addScopeFilter('default', Mage_Core_Model_App::ADMIN_STORE_ID, 'antidot/suggest');
|
34 |
+
|
35 |
+
foreach ($coll as $config) {
|
36 |
+
switch ($config->getPath()) {
|
37 |
+
case 'antidot/suggest/products':
|
38 |
+
$products = $config->getValue();
|
39 |
+
break;
|
40 |
+
case 'antidot/suggest/categories':
|
41 |
+
$categories = $config->getValue();
|
42 |
+
break;
|
43 |
+
case 'antidot/suggest/brands':
|
44 |
+
$brands = $config->getValue();
|
45 |
+
break;
|
46 |
+
case 'antidot/suggest/products_displayed':
|
47 |
+
$products_displayed = $config->getValue();
|
48 |
+
break;
|
49 |
+
case 'antidot/suggest/categories_displayed':
|
50 |
+
$categories_displayed = $config->getValue();
|
51 |
+
break;
|
52 |
+
case 'antidot/suggest/brands_displayed':
|
53 |
+
$brands_displayed = $config->getValue();
|
54 |
+
break;
|
55 |
+
case 'antidot/suggest/order1':
|
56 |
+
$order1 = $config->getValue();
|
57 |
+
break;
|
58 |
+
case 'antidot/suggest/order2':
|
59 |
+
$order2 = $config->getValue();
|
60 |
+
break;
|
61 |
+
case 'antidot/suggest/order3':
|
62 |
+
$order3 = $config->getValue();
|
63 |
+
break;
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
$coll = Mage::getResourceModel('core/config_data_collection')
|
68 |
+
->addScopeFilter($storeId==Mage_Core_Model_App::ADMIN_STORE_ID?'default':'stores', $storeId, 'antidot/suggest');
|
69 |
+
|
70 |
+
foreach ($coll as $config) {
|
71 |
+
switch ($config->getPath()) {
|
72 |
+
case 'antidot/suggest/products':
|
73 |
+
$products = $config->getValue();
|
74 |
+
break;
|
75 |
+
case 'antidot/suggest/categories':
|
76 |
+
$categories = $config->getValue();
|
77 |
+
break;
|
78 |
+
case 'antidot/suggest/brands':
|
79 |
+
$brands = $config->getValue();
|
80 |
+
break;
|
81 |
+
case 'antidot/suggest/products_displayed':
|
82 |
+
$products_displayed = $config->getValue();
|
83 |
+
break;
|
84 |
+
case 'antidot/suggest/categories_displayed':
|
85 |
+
$categories_displayed = $config->getValue();
|
86 |
+
break;
|
87 |
+
case 'antidot/suggest/brands_displayed':
|
88 |
+
$brands_displayed = $config->getValue();
|
89 |
+
break;
|
90 |
+
case 'antidot/suggest/order1':
|
91 |
+
$order1 = $config->getValue();
|
92 |
+
break;
|
93 |
+
case 'antidot/suggest/order2':
|
94 |
+
$order2 = $config->getValue();
|
95 |
+
break;
|
96 |
+
case 'antidot/suggest/order3':
|
97 |
+
$order3 = $config->getValue();
|
98 |
+
break;
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
if (!isset($order1)) { //In case of installation not upgrade, default values :
|
103 |
+
$order1='categories';
|
104 |
+
$categories=1;
|
105 |
+
$categories_displayed='10';
|
106 |
+
}
|
107 |
+
if (!isset($order2)) { //In case of installation not upgrade, default values :
|
108 |
+
$order2='products';
|
109 |
+
$products=1;
|
110 |
+
$products_displayed='10';
|
111 |
+
}
|
112 |
+
if (!isset($order3)) { //In case of installation not upgrade, default values :
|
113 |
+
$order3='brands';
|
114 |
+
$brands=1;
|
115 |
+
$brands_displayed='10';
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* construct the antidot/suggest/feeds array
|
120 |
+
*/
|
121 |
+
$categoriesArray = array('feed' => 'categories');
|
122 |
+
if ($categories) {
|
123 |
+
$categoriesArray['active'] = 'on';
|
124 |
+
}
|
125 |
+
$categoriesArray['suggest_number'] = $categories_displayed;
|
126 |
+
$productsArray = array('feed' => 'products');
|
127 |
+
if ($products) {
|
128 |
+
$productsArray['active'] = 'on';
|
129 |
+
}
|
130 |
+
$productsArray['suggest_number'] = $products_displayed;
|
131 |
+
$brandsArray = array('feed' => 'brands');
|
132 |
+
if ($brands) {
|
133 |
+
$brandsArray['active'] = 'on';
|
134 |
+
}
|
135 |
+
$brandsArray['suggest_number'] = $brands_displayed;
|
136 |
+
$articlesArray = array('feed' => 'articles', 'suggest_number' => '10');
|
137 |
+
$storesArray = array('feed' => 'stores', 'suggest_number' => '10');
|
138 |
+
|
139 |
+
$finalArray = array();
|
140 |
+
foreach (array($order1, $order2, $order3) as $order) {
|
141 |
+
switch ($order) {
|
142 |
+
case 'categories':
|
143 |
+
$finalArray[] = $categoriesArray;
|
144 |
+
break;
|
145 |
+
case 'products':
|
146 |
+
$finalArray[] = $productsArray;
|
147 |
+
break;
|
148 |
+
case 'brands':
|
149 |
+
$finalArray[] = $brandsArray;
|
150 |
+
break;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
$finalArray[] = $articlesArray;
|
154 |
+
$finalArray[] = $storesArray;
|
155 |
+
$final = serialize($finalArray);
|
156 |
+
|
157 |
+
if ($storeId == Mage_Core_Model_App::ADMIN_STORE_ID) {
|
158 |
+
$finalAdmin = $final;
|
159 |
+
// Save on admin scope
|
160 |
+
Mage::getConfig()->saveConfig('antidot/suggest/feeds', $finalAdmin, 'default', Mage_Core_Model_App::ADMIN_STORE_ID);
|
161 |
+
} else {
|
162 |
+
if ($final != $finalAdmin) {
|
163 |
+
// Save on scopes that are different from admin
|
164 |
+
Mage::getConfig()->saveConfig('antidot/suggest/feeds', $final, 'stores', $storeId);
|
165 |
+
}
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/template/antidot/system/config/form/field/acpfeeds.phtml
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magento.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
|
28 |
+
<?php
|
29 |
+
$_htmlId = $this->getHtmlId() ? $this->getHtmlId() : '_' . uniqid();
|
30 |
+
|
31 |
+
?>
|
32 |
+
|
33 |
+
<div class="grid" id="grid<?php echo $_htmlId ?>">
|
34 |
+
|
35 |
+
<ul id="feeds-container-<?php echo $_htmlId ?>" class="super-attributes">
|
36 |
+
<?php foreach ($this->getArrayRows() as $_rowId => $_row): ?>
|
37 |
+
<?php $inputName = $this->getElement()->getName().'['.$_row['_id'].']'; ?>
|
38 |
+
<li id="<?php echo $_rowId ?>" class="sortable-row attribute">
|
39 |
+
<div class="attribute-name-container left"><?php echo $_row['name'] ?><input type="hidden" name="<?php echo $inputName ?>[feed]" value="<?php echo $_row['feed'] ?>" /></div>
|
40 |
+
<div class="values-container right" >
|
41 |
+
<label><?php echo Mage::helper('Antidot')->__('Active') ?> : <input type="checkbox" name="<?php echo $inputName; ?>[active]" <?php if ($_row['active']): ?>checked="checked<?php endif; ?> value="true" style="width: 50px"></label>
|
42 |
+
<label><?php echo Mage::helper('Antidot')->__('Number of suggestions') ?> : <input type="text" name="<?php echo $inputName; ?>[suggest_number]" value="<?php echo $_row['suggest_number'] ?>" style="width: 50px" class="input-text validate-digits"></label>
|
43 |
+
</div>
|
44 |
+
</li>
|
45 |
+
<?php endforeach;?>
|
46 |
+
</ul>
|
47 |
+
|
48 |
+
</div>
|
49 |
+
<script type="text/javascript">
|
50 |
+
//<![CDATA[
|
51 |
+
|
52 |
+
Sortable.create($('feeds-container-<?php echo $_htmlId ?>'), {
|
53 |
+
handle :'sortable-row',
|
54 |
+
onUpdate : function() {alert(this)}
|
55 |
+
});
|
56 |
+
|
57 |
+
//]]>
|
58 |
+
</script>
|
app/design/adminhtml/default/default/template/antidot/system/config/form/field/tabs.phtml
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magento.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package default_default
|
23 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
|
28 |
+
<?php
|
29 |
+
$_htmlId = $this->getHtmlId() ? $this->getHtmlId() : '_' . uniqid();
|
30 |
+
|
31 |
+
?>
|
32 |
+
|
33 |
+
<div class="grid" id="grid<?php echo $_htmlId ?>">
|
34 |
+
|
35 |
+
<ul id="tabs-container-<?php echo $_htmlId ?>" class="super-attributes">
|
36 |
+
<?php foreach ($this->getArrayRows() as $_rowId => $_row): ?>
|
37 |
+
<?php $inputName = $this->getElement()->getName().'['.$_row['_id'].']'; ?>
|
38 |
+
<li id="<?php echo $_rowId ?>" class="sortable-row attribute">
|
39 |
+
<div class="attribute-name-container left"><?php echo $_row['name'] ?><input type="hidden" name="<?php echo $inputName ?>[tab]" value="<?php echo $_row['tab'] ?>" /></div>
|
40 |
+
<div class="values-container right" >
|
41 |
+
<label><?php echo Mage::helper('Antidot')->__('Active') ?> : <input type="checkbox" name="<?php echo $inputName; ?>[active]" <?php if ($_row['active']): ?>checked="checked<?php endif; ?> value="true" style="width: 50px"></label>
|
42 |
+
<label><?php echo Mage::helper('Antidot')->__('Show even without result') ?> : <input type="checkbox" name="<?php echo $inputName; ?>[show_noresult]" <?php if ($_row['show_noresult']): ?>checked="checked<?php endif; ?> value="true" style="width: 50px"></label>
|
43 |
+
</div>
|
44 |
+
</li>
|
45 |
+
<?php endforeach;?>
|
46 |
+
</ul>
|
47 |
+
|
48 |
+
</div>
|
49 |
+
<script type="text/javascript">
|
50 |
+
//<![CDATA[
|
51 |
+
|
52 |
+
Sortable.create($('tabs-container-<?php echo $_htmlId ?>'), {
|
53 |
+
handle :'sortable-row',
|
54 |
+
onUpdate : function() {alert(this)}
|
55 |
+
});
|
56 |
+
|
57 |
+
//]]>
|
58 |
+
</script>
|
app/design/frontend/base/default/layout/antidot.xml
CHANGED
@@ -3,6 +3,17 @@
|
|
3 |
<layout version="0.1.0">
|
4 |
|
5 |
<catalogsearch_result_index>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
<reference name="search.result">
|
7 |
<action method="setTemplate"><template>antidot/catalogsearch/result.phtml</template></action>
|
8 |
<block type="Antidot/catalogsearch_category" name="search_result_category" as="search_result_category" template="antidot/catalogsearch/result/category.phtml" />
|
3 |
<layout version="0.1.0">
|
4 |
|
5 |
<catalogsearch_result_index>
|
6 |
+
|
7 |
+
<reference name="head">
|
8 |
+
<action method="addCss"><stylesheet>css/antidot/catalogsearch.css</stylesheet></action>
|
9 |
+
</reference>
|
10 |
+
|
11 |
+
<reference name="root" >
|
12 |
+
<action method="setTemplate"><template>antidot/page/antidot_results.phtml</template></action>
|
13 |
+
<block type="Antidot/catalogsearch_articles" name="search_result_articles" as="search_result_articles" template="antidot/catalogsearch/result/articles.phtml" />
|
14 |
+
<block type="Antidot/catalogsearch_stores" name="search_result_stores" as="search_result_stores" template="antidot/catalogsearch/result/stores.phtml" />
|
15 |
+
</reference>
|
16 |
+
|
17 |
<reference name="search.result">
|
18 |
<action method="setTemplate"><template>antidot/catalogsearch/result.phtml</template></action>
|
19 |
<block type="Antidot/catalogsearch_category" name="search_result_category" as="search_result_category" template="antidot/catalogsearch/result/category.phtml" />
|
app/design/frontend/base/default/template/antidot/catalogsearch/result/articles.phtml
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ($this->hasArticle()): ?>
|
2 |
+
<ul>
|
3 |
+
<?php foreach ($this->getArticles() as $article): ?>
|
4 |
+
<li>
|
5 |
+
<h2><a href="<?php if (strpos($article->getUrl(), 'http') !== 0) : echo $this->getUrl($article->getUrl()); else: echo $article->getUrl(); endif; ?>" ><?php echo $article->getTitle(); ?></a></h2>
|
6 |
+
<span><?php echo $article->getSubtitle(); ?></span>
|
7 |
+
<span><?php echo $article->getPublishedAt(); ?></span>
|
8 |
+
<p><?php echo $article->getAbstract(); ?></p>
|
9 |
+
<?php if ($article->getUrlThumbnail()) : ?>
|
10 |
+
<img src="<?php echo $article->getUrlThumbnail(); ?>" />
|
11 |
+
<?php endif; ?>
|
12 |
+
</li>
|
13 |
+
<?php endforeach; ?>
|
14 |
+
</ul>
|
15 |
+
<?php else: ?>
|
16 |
+
<?php echo $this->__('No Article Found'); ?>
|
17 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/antidot/catalogsearch/result/stores.phtml
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ($this->hasStore()): ?>
|
2 |
+
<ul>
|
3 |
+
<?php foreach ($this->getStores() as $store): ?>
|
4 |
+
<li>
|
5 |
+
<h2><a href="<?php echo $store->getUrl(); ?>" ><?php echo $store->getName(); ?></a></h2>
|
6 |
+
<p><?php echo $store->getAddress() ?><br/>
|
7 |
+
<?php echo $store->getZipcode().' '.$store->getCity().' '.$store->getCountry(); ?>
|
8 |
+
</p>
|
9 |
+
<?php if ($store->getDescriptions()):
|
10 |
+
foreach ($store->getDescriptions() as $desc) : ?>
|
11 |
+
<p><?php echo $desc ?></p>
|
12 |
+
<?php endforeach; ?>
|
13 |
+
<?php endif; ?>
|
14 |
+
<?php if ($store->getUrlThumbnail()) : ?>
|
15 |
+
<img src="<?php echo $store->getUrlThumbnail(); ?>" />
|
16 |
+
<?php endif; ?>
|
17 |
+
</li>
|
18 |
+
<?php endforeach; ?>
|
19 |
+
</ul>
|
20 |
+
<?php else: ?>
|
21 |
+
<?php echo $this->__('No Store Found'); ?>
|
22 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/antidot/page/antidot_results.phtml
ADDED
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magento.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package base_default
|
23 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php
|
28 |
+
/**
|
29 |
+
* Template for Mage_Page_Block_Html
|
30 |
+
*/
|
31 |
+
?>
|
32 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
33 |
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->getLang() ?>" lang="<?php echo $this->getLang() ?>">
|
34 |
+
<head>
|
35 |
+
<?php echo $this->getChildHtml('head') ?>
|
36 |
+
</head>
|
37 |
+
<body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
|
38 |
+
<?php echo $this->getChildHtml('after_body_start') ?>
|
39 |
+
<div class="wrapper">
|
40 |
+
<?php echo $this->getChildHtml('global_notices') ?>
|
41 |
+
<div class="page">
|
42 |
+
<?php echo $this->getChildHtml('header') ?>
|
43 |
+
<div class="main-container col3-layout">
|
44 |
+
<div class="main">
|
45 |
+
<?php echo $this->getChildHtml('breadcrumbs') ?>
|
46 |
+
<?php
|
47 |
+
//the layer bloc must be called first, in order to generate antidot WS call with facets
|
48 |
+
$_left = $this->getChildHtml('left');
|
49 |
+
|
50 |
+
$helper = $this->helper('Antidot');
|
51 |
+
if ($helper->isActiveEngine() && $helper->hasResultTabs()):
|
52 |
+
$collection = Mage::getSingleton('Antidot/catalogsearch_layer')->getProductCollection();
|
53 |
+
$tabs = $helper->getActiveResultTabs($collection);
|
54 |
+
?>
|
55 |
+
<div class="antidot-tabs">
|
56 |
+
<?php foreach($tabs as $tab): ?>
|
57 |
+
<input type="radio" name="antidot_tabs" id="antidot-tab-<?php echo $tab['tab'] ?>" <?php if (isset($tab['selected'])) : ?>checked<?php endif; ?> >
|
58 |
+
<label for="antidot-tab-<?php echo $tab['tab'] ?>">
|
59 |
+
<i class="fa fa-html5"><span><?php echo $tab['name'] ?> (<?php echo $collection->getTotalResult($tab['tab']);?>)</span></i>
|
60 |
+
</label>
|
61 |
+
<?php endforeach; ?>
|
62 |
+
<?php foreach($tabs as $tab): ?>
|
63 |
+
<div id="antidot-tab-content-<?php echo $tab['tab'] ?>" class="antidot-tab-content">
|
64 |
+
<?php switch ($tab['tab']) :
|
65 |
+
case 'products': ?>
|
66 |
+
<div class="col-wrapper">
|
67 |
+
<div class="col-main">
|
68 |
+
<?php echo $this->getChildHtml('global_messages') ?>
|
69 |
+
<?php echo $this->getChildHtml('content') ?>
|
70 |
+
</div>
|
71 |
+
<div class="col-left sidebar"><?php echo $_left ?></div>
|
72 |
+
</div>
|
73 |
+
<div class="col-right sidebar"><?php echo $this->getChildHtml('right') ?></div>
|
74 |
+
<?php break;
|
75 |
+
case 'articles': ?>
|
76 |
+
<div class="col-wrapper">
|
77 |
+
<div class="col-main">
|
78 |
+
<?php echo $this->getChildHtml('search_result_articles') ?>
|
79 |
+
</div>
|
80 |
+
</div>
|
81 |
+
<?php break;
|
82 |
+
case 'stores': ?>
|
83 |
+
<div class="col-wrapper">
|
84 |
+
<div class="col-main">
|
85 |
+
<?php echo $this->getChildHtml('search_result_stores') ?>
|
86 |
+
</div>
|
87 |
+
</div>
|
88 |
+
<?php break; ?>
|
89 |
+
<?php endswitch; ?>
|
90 |
+
</div>
|
91 |
+
<?php endforeach; ?>
|
92 |
+
</div>
|
93 |
+
<?php else: ?>
|
94 |
+
<div class="col-wrapper">
|
95 |
+
<div class="col-main">
|
96 |
+
<?php echo $this->getChildHtml('global_messages') ?>
|
97 |
+
<?php echo $this->getChildHtml('content') ?>
|
98 |
+
</div>
|
99 |
+
<div class="col-left sidebar"><?php echo $this->getChildHtml('left') ?></div>
|
100 |
+
</div>
|
101 |
+
<div class="col-right sidebar"><?php echo $this->getChildHtml('right') ?></div>
|
102 |
+
<?php endif; ?>
|
103 |
+
</div>
|
104 |
+
</div>
|
105 |
+
<?php echo $this->getChildHtml('footer') ?>
|
106 |
+
<?php echo $this->getChildHtml('global_cookie_notice') ?>
|
107 |
+
<?php echo $this->getChildHtml('before_body_end') ?>
|
108 |
+
</div>
|
109 |
+
</div>
|
110 |
+
<?php echo $this->getAbsoluteFooter() ?>
|
111 |
+
</body>
|
112 |
+
</html>
|
app/design/frontend/rwd/default/template/antidot/page/antidot_results.phtml
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magento.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magento.com for more information.
|
20 |
+
*
|
21 |
+
* @category design
|
22 |
+
* @package rwd_default
|
23 |
+
* @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
|
24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
25 |
+
*/
|
26 |
+
?>
|
27 |
+
<?php
|
28 |
+
/**
|
29 |
+
* Template for Mage_Page_Block_Html
|
30 |
+
*/
|
31 |
+
?>
|
32 |
+
|
33 |
+
<!DOCTYPE html>
|
34 |
+
|
35 |
+
<!--[if lt IE 7 ]> <html lang="<?php echo $this->getLang(); ?>" id="top" class="no-js ie6"> <![endif]-->
|
36 |
+
<!--[if IE 7 ]> <html lang="<?php echo $this->getLang(); ?>" id="top" class="no-js ie7"> <![endif]-->
|
37 |
+
<!--[if IE 8 ]> <html lang="<?php echo $this->getLang(); ?>" id="top" class="no-js ie8"> <![endif]-->
|
38 |
+
<!--[if IE 9 ]> <html lang="<?php echo $this->getLang(); ?>" id="top" class="no-js ie9"> <![endif]-->
|
39 |
+
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="<?php echo $this->getLang(); ?>" id="top" class="no-js"> <!--<![endif]-->
|
40 |
+
|
41 |
+
<head>
|
42 |
+
<?php echo $this->getChildHtml('head') ?>
|
43 |
+
</head>
|
44 |
+
<body<?php echo $this->getBodyClass()?' class="'.$this->getBodyClass().'"':'' ?>>
|
45 |
+
<?php echo $this->getChildHtml('after_body_start') ?>
|
46 |
+
<div class="wrapper">
|
47 |
+
<?php echo $this->getChildHtml('global_notices') ?>
|
48 |
+
<div class="page">
|
49 |
+
<?php echo $this->getChildHtml('header') ?>
|
50 |
+
<div class="main-container col3-layout">
|
51 |
+
<div class="main">
|
52 |
+
<?php echo $this->getChildHtml('breadcrumbs') ?>
|
53 |
+
<?php
|
54 |
+
//the layer bloc must be called first, in order to generate antidot WS call with facets
|
55 |
+
$_leftContent = $this->getChildHtml('left_first');
|
56 |
+
|
57 |
+
$helper = $this->helper('Antidot');
|
58 |
+
|
59 |
+
if ($helper->isActiveEngine() && $helper->hasResultTabs()) :
|
60 |
+
$collection = Mage::getSingleton('Antidot/catalogsearch_layer')->getProductCollection();
|
61 |
+
$tabs = $helper->getActiveResultTabs($collection);
|
62 |
+
?>
|
63 |
+
<div class="antidot-tabs">
|
64 |
+
<?php foreach($tabs as $tab): ?>
|
65 |
+
<input type="radio" name="antidot_tabs" id="antidot-tab-<?php echo $tab['tab'] ?>" <?php if (isset($tab['selected'])) : ?>checked<?php endif; ?> >
|
66 |
+
<label for="antidot-tab-<?php echo $tab['tab'] ?>">
|
67 |
+
<i class="fa fa-html5"><span><?php echo $tab['name'] ?> (<?php echo $collection->getTotalResult($tab['tab']);?>)</span></i>
|
68 |
+
</label>
|
69 |
+
<?php endforeach; ?>
|
70 |
+
<?php foreach($tabs as $tab): ?>
|
71 |
+
<div id="antidot-tab-content-<?php echo $tab['tab'] ?>" class="antidot-tab-content">
|
72 |
+
<?php switch ($tab['tab']) :
|
73 |
+
case 'products': ?>
|
74 |
+
<div class="col-wrapper">
|
75 |
+
<?php // This left_first block will display above the main content on smaller viewports ?>
|
76 |
+
<?php if ($_leftContent): ?>
|
77 |
+
<div class="col-left sidebar col-left-first"><?php echo $_leftContent; ?></div>
|
78 |
+
<?php endif; ?>
|
79 |
+
<div class="col-main">
|
80 |
+
<?php echo $this->getChildHtml('global_messages') ?>
|
81 |
+
<?php echo $this->getChildHtml('content') ?>
|
82 |
+
</div>
|
83 |
+
<div class="col-left sidebar"><?php echo $this->getChildHtml('left') ?></div>
|
84 |
+
</div>
|
85 |
+
<div class="col-right sidebar"><?php echo $this->getChildHtml('right') ?></div>
|
86 |
+
<?php break;
|
87 |
+
case 'articles': ?>
|
88 |
+
<div class="col-wrapper">
|
89 |
+
<div class="col-main">
|
90 |
+
<?php echo $this->getChildHtml('search_result_articles') ?>
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
+
<?php break;
|
94 |
+
case 'stores': ?>
|
95 |
+
<div class="col-wrapper">
|
96 |
+
<div class="col-main">
|
97 |
+
<?php echo $this->getChildHtml('search_result_stores') ?>
|
98 |
+
</div>
|
99 |
+
</div>
|
100 |
+
<?php break; ?>
|
101 |
+
<?php endswitch; ?>
|
102 |
+
</div>
|
103 |
+
<?php endforeach; ?>
|
104 |
+
</div>
|
105 |
+
<?php else: ?>
|
106 |
+
<div class="col-wrapper">
|
107 |
+
<?php // This left_first block will display above the main content on smaller viewports ?>
|
108 |
+
<?php if ($_leftContent = $this->getChildHtml('left_first')): ?>
|
109 |
+
<div class="col-left sidebar col-left-first"><?php echo $_leftContent; ?></div>
|
110 |
+
<?php endif; ?>
|
111 |
+
<div class="col-main">
|
112 |
+
<?php echo $this->getChildHtml('global_messages') ?>
|
113 |
+
<?php echo $this->getChildHtml('content') ?>
|
114 |
+
</div>
|
115 |
+
<div class="col-left sidebar"><?php echo $this->getChildHtml('left') ?></div>
|
116 |
+
</div>
|
117 |
+
<div class="col-right sidebar"><?php echo $this->getChildHtml('right') ?></div>
|
118 |
+
<?php endif; ?>
|
119 |
+
</div>
|
120 |
+
</div>
|
121 |
+
<?php echo $this->getChildHtml('footer_before') ?>
|
122 |
+
<?php echo $this->getChildHtml('footer') ?>
|
123 |
+
<?php echo $this->getChildHtml('global_cookie_notice') ?>
|
124 |
+
<?php echo $this->getChildHtml('before_body_end') ?>
|
125 |
+
</div>
|
126 |
+
</div>
|
127 |
+
<?php echo $this->getAbsoluteFooter() ?>
|
128 |
+
</body>
|
129 |
+
</html>
|
app/locale/de_AT/MDN_Antidot.csv
CHANGED
@@ -153,4 +153,27 @@ Price,Preis
|
|
153 |
"In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
|
154 |
"Always","Immer"
|
155 |
"Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
|
156 |
-
"Never","Nie"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
"In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
|
154 |
"Always","Immer"
|
155 |
"Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
|
156 |
+
"Never","Nie"
|
157 |
+
"Result Tabs","Ergebnis Tabs"
|
158 |
+
"Active","Aktiv"
|
159 |
+
"Show even without result","Zeigen Sie sogar noch ohne Ergebnis"
|
160 |
+
"Products","Produkte"
|
161 |
+
"Articles","Artikel"
|
162 |
+
"Stores","Geschäfte"
|
163 |
+
"No Article Found","keine Artikel gefunden"
|
164 |
+
"No Store Found","keine Geschäfte gefunden"
|
165 |
+
"Index magento CMS pages","Index der Seiten Magento CMS"
|
166 |
+
"Articles directory","Artikel-Verzeichnis"
|
167 |
+
"Stores directory","Geschäfte-Verzeichnis"
|
168 |
+
"Local directory where the articles zip file is expected","Pfad, wo die Zip-Datei Artikel erwartet wird"
|
169 |
+
"Local directory where the stores zip file is expected","Pfad, wo die Zip-Datei Geschäfte erwartet wird"
|
170 |
+
"Push articles","senden Artikel"
|
171 |
+
"Manually push categories index to AFS@Store","Kategorien der manuellen Versand für die Indizierung AFS@Shop"
|
172 |
+
"Manually push articles index to AFS@Store","Artikel der manuellen Versand für die Indizierung AFS@Shop"
|
173 |
+
"Push stores","senden Geschäfte"
|
174 |
+
"Manually push stores index to AFS@Store","Geschäfte der manuellen Versand für die Indizierung AFS@Shop"
|
175 |
+
"Articles exported","Artikel exportiert"
|
176 |
+
"No Article to export","Kein Artikel Export"
|
177 |
+
"Stores exported","Geschäfte exportiert"
|
178 |
+
"No store to export","Kein Geschäfte Export"
|
179 |
+
"Number of suggestions","viele Vorschläge"
|
app/locale/de_CH/MDN_Antidot.csv
CHANGED
@@ -153,4 +153,27 @@ Price,Preis
|
|
153 |
"In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
|
154 |
"Always","Immer"
|
155 |
"Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
|
156 |
-
"Never","Nie"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
"In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
|
154 |
"Always","Immer"
|
155 |
"Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
|
156 |
+
"Never","Nie"
|
157 |
+
"Result Tabs","Ergebnis Tabs"
|
158 |
+
"Active","Aktiv"
|
159 |
+
"Show even without result","Zeigen Sie sogar noch ohne Ergebnis"
|
160 |
+
"Products","Produkte"
|
161 |
+
"Articles","Artikel"
|
162 |
+
"Stores","Geschäfte"
|
163 |
+
"No Article Found","keine Artikel gefunden"
|
164 |
+
"No Store Found","keine Geschäfte gefunden"
|
165 |
+
"Index magento CMS pages","Index der Seiten Magento CMS"
|
166 |
+
"Articles directory","Artikel-Verzeichnis"
|
167 |
+
"Stores directory","Geschäfte-Verzeichnis"
|
168 |
+
"Local directory where the articles zip file is expected","Pfad, wo die Zip-Datei Artikel erwartet wird"
|
169 |
+
"Local directory where the stores zip file is expected","Pfad, wo die Zip-Datei Geschäfte erwartet wird"
|
170 |
+
"Push articles","senden Artikel"
|
171 |
+
"Manually push categories index to AFS@Store","Kategorien der manuellen Versand für die Indizierung AFS@Shop"
|
172 |
+
"Manually push articles index to AFS@Store","Artikel der manuellen Versand für die Indizierung AFS@Shop"
|
173 |
+
"Push stores","senden Geschäfte"
|
174 |
+
"Manually push stores index to AFS@Store","Geschäfte der manuellen Versand für die Indizierung AFS@Shop"
|
175 |
+
"Articles exported","Artikel exportiert"
|
176 |
+
"No Article to export","Kein Artikel Export"
|
177 |
+
"Stores exported","Geschäfte exportiert"
|
178 |
+
"No store to export","Kein Geschäfte Export"
|
179 |
+
"Number of suggestions","viele Vorschläge"
|
app/locale/de_DE/MDN_Antidot.csv
CHANGED
@@ -153,4 +153,27 @@ Price,Preis
|
|
153 |
"In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
|
154 |
"Always","Immer"
|
155 |
"Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
|
156 |
-
"Never","Nie"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
"In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
|
154 |
"Always","Immer"
|
155 |
"Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
|
156 |
+
"Never","Nie"
|
157 |
+
"Result Tabs","Ergebnis Tabs"
|
158 |
+
"Active","Aktiv"
|
159 |
+
"Show even without result","Zeigen Sie sogar noch ohne Ergebnis"
|
160 |
+
"Products","Produkte"
|
161 |
+
"Articles","Artikel"
|
162 |
+
"Stores","Geschäfte"
|
163 |
+
"No Article Found","keine Artikel gefunden"
|
164 |
+
"No Store Found","keine Geschäfte gefunden"
|
165 |
+
"Index magento CMS pages","Index der Seiten Magento CMS"
|
166 |
+
"Articles directory","Artikel-Verzeichnis"
|
167 |
+
"Stores directory","Geschäfte-Verzeichnis"
|
168 |
+
"Local directory where the articles zip file is expected","Pfad, wo die Zip-Datei Artikel erwartet wird"
|
169 |
+
"Local directory where the stores zip file is expected","Pfad, wo die Zip-Datei Geschäfte erwartet wird"
|
170 |
+
"Push articles","senden Artikel"
|
171 |
+
"Manually push categories index to AFS@Store","Kategorien der manuellen Versand für die Indizierung AFS@Shop"
|
172 |
+
"Manually push articles index to AFS@Store","Artikel der manuellen Versand für die Indizierung AFS@Shop"
|
173 |
+
"Push stores","senden Geschäfte"
|
174 |
+
"Manually push stores index to AFS@Store","Geschäfte der manuellen Versand für die Indizierung AFS@Shop"
|
175 |
+
"Articles exported","Artikel exportiert"
|
176 |
+
"No Article to export","Kein Artikel Export"
|
177 |
+
"Stores exported","Geschäfte exportiert"
|
178 |
+
"No store to export","Kein Geschäfte Export"
|
179 |
+
"Number of suggestions","viele Vorschläge"
|
app/locale/es_AR/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_CL/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_CO/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_CR/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_ES/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_MX/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_PA/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_PE/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/es_VE/MDN_Antidot.csv
CHANGED
@@ -152,4 +152,27 @@ Price,Precio
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
-
"Never","Nunca"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
"In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
|
153 |
"Always","Siempre"
|
154 |
"Unless there's a spellcheck","Menos Hay una corrección ortográfica"
|
155 |
+
"Never","Nunca"
|
156 |
+
"Result Tabs","Pestaña resultados"
|
157 |
+
"Active","Activo"
|
158 |
+
"Show even without result","Mostrar incluso sin resultado"
|
159 |
+
"Products","Productos"
|
160 |
+
"Articles","Páginas"
|
161 |
+
"Stores","Tiendas"
|
162 |
+
"No Article Found","No se encontró la página"
|
163 |
+
"No Store Found","No se encontraron tienda"
|
164 |
+
"Index magento CMS pages","Índice de las páginas CMS Magento"
|
165 |
+
"Articles directory","Páginas Directorio"
|
166 |
+
"Stores directory","Tiendas Directorio"
|
167 |
+
"Local directory where the articles zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
168 |
+
"Local directory where the stores zip file is expected","Ruta del directorio en las páginas del archivo zip espera"
|
169 |
+
"Push articles","Enviar páginas"
|
170 |
+
"Manually push categories index to AFS@Store","Manual de envío de categorías de AFS@Store de indexación"
|
171 |
+
"Manually push articles index to AFS@Store","Manual de envío de páginas de AFS@Store de indexación"
|
172 |
+
"Push stores","Enviar tiendas"
|
173 |
+
"Manually push stores index to AFS@Store","Manual de envío de tiendas de AFS@Store de indexación"
|
174 |
+
"Articles exported","Páginas exportadas"
|
175 |
+
"No Article to export","No hay páginas para exportar"
|
176 |
+
"Stores exported","Tiendas exportadas"
|
177 |
+
"No store to export","No hay tiendas para exportar"
|
178 |
+
"Number of suggestions","Número de sugerencias"
|
app/locale/fr_CA/MDN_Antidot.csv
CHANGED
@@ -76,7 +76,7 @@ Enable,"Moteur d'autocomplétion"
|
|
76 |
"Display brands in auto complete results","Affiche les marques dans les suggestions"
|
77 |
"Number of brands displayed","Nombre de marques à afficher"
|
78 |
"Select the maximum number of brands to display","Choisissez le nombre maximal de marques à afficher"
|
79 |
-
Categories,"
|
80 |
"Display categories in auto complete results","Affiche les catégories dans les suggestions"
|
81 |
"Number of categories displayed","Nombre de catégories à afficher"
|
82 |
"Select the maximum number of categories to display","Choisissez le nombre maximal de catégories à afficher"
|
@@ -146,11 +146,35 @@ Price,Prix
|
|
146 |
"The curl php extension is not installed, it's required to upload export files","L'extension php curl n'est pas installée, elle est nécéssaire à l'upload des fichiers d'export"
|
147 |
"The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","L'extension php curl ne supporte pas le protocol https, libcurl doit être mis à jour sur le système, sinon l'upload des fichiers d'export ne se fera pas"
|
148 |
"Upload Type","Type d'envoi"
|
|
|
|
|
|
|
149 |
"Redirect to the product page","Rediriger vers la page prdouit"
|
150 |
"In case there's only one result : redirect to product page","Dans le cas où il n'y a qu'un seul résultat : rediriger vers la page produit"
|
151 |
"Always","Toujours"
|
152 |
"Unless there's a spellcheck","Sauf si il y a une suggestion orthographique"
|
153 |
-
"Never","Jamais"
|
154 |
-
"
|
155 |
-
"
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
"Display brands in auto complete results","Affiche les marques dans les suggestions"
|
77 |
"Number of brands displayed","Nombre de marques à afficher"
|
78 |
"Select the maximum number of brands to display","Choisissez le nombre maximal de marques à afficher"
|
79 |
+
Categories,"Catégories"
|
80 |
"Display categories in auto complete results","Affiche les catégories dans les suggestions"
|
81 |
"Number of categories displayed","Nombre de catégories à afficher"
|
82 |
"Select the maximum number of categories to display","Choisissez le nombre maximal de catégories à afficher"
|
146 |
"The curl php extension is not installed, it's required to upload export files","L'extension php curl n'est pas installée, elle est nécéssaire à l'upload des fichiers d'export"
|
147 |
"The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","L'extension php curl ne supporte pas le protocol https, libcurl doit être mis à jour sur le système, sinon l'upload des fichiers d'export ne se fera pas"
|
148 |
"Upload Type","Type d'envoi"
|
149 |
+
"Query Spellcheck sentence","Phrase de recherche basée sur la suggestion orthographique"
|
150 |
+
"Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalité"
|
151 |
+
"No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","Aucun résultat trouvé à partir de votre recherche initiale '{originalQuery}'. Voici les résultats pour la recherche '{spellcheck}'."
|
152 |
"Redirect to the product page","Rediriger vers la page prdouit"
|
153 |
"In case there's only one result : redirect to product page","Dans le cas où il n'y a qu'un seul résultat : rediriger vers la page produit"
|
154 |
"Always","Toujours"
|
155 |
"Unless there's a spellcheck","Sauf si il y a une suggestion orthographique"
|
156 |
+
"Never","Jamais"
|
157 |
+
"Result Tabs","Onglets Résultats"
|
158 |
+
"Active","Actif"
|
159 |
+
"Show even without result","Afficher même sans résultat"
|
160 |
+
"Products","Produits"
|
161 |
+
"Articles","Articles"
|
162 |
+
"Stores","Magasins"
|
163 |
+
"No Article Found","Aucun article trouvé"
|
164 |
+
"No Store Found","Aucun magasin trouvé"
|
165 |
+
"Index magento CMS pages","Indexer les pages CMS magento"
|
166 |
+
"Articles directory","Répertoire articles"
|
167 |
+
"Stores directory","Répertoire magasins"
|
168 |
+
"Local directory where the articles zip file is expected","Chemin du répertoire où le fichier zip des articles est attendu"
|
169 |
+
"Local directory where the stores zip file is expected","Chemin du répertoire où le fichier zip des magasins est attendu"
|
170 |
+
"Push articles","Envoyez les articles"
|
171 |
+
"Manually push categories index to AFS@Store","Envoi manuel des categories pour l'indexation AFS@Store"
|
172 |
+
"Manually push articles index to AFS@Store","Envoi manuel des articles pour l'indexation AFS@Store"
|
173 |
+
"Push stores","Envoyez les magasins"
|
174 |
+
"Manually push stores index to AFS@Store","Envoi manuel des magasins pour l'indexation AFS@Store"
|
175 |
+
"Articles exported","Articles exportés"
|
176 |
+
"No Article to export","Aucun article à exporter"
|
177 |
+
"Stores exported","Magasins exportés"
|
178 |
+
"No store to export","Aucun magasin à exporter"
|
179 |
+
"Feeds","Flux"
|
180 |
+
"Number of suggestions","Nombre de suggestions"
|
app/locale/fr_FR/MDN_Antidot.csv
CHANGED
@@ -76,7 +76,7 @@ Enable,"Moteur d'autocomplétion"
|
|
76 |
"Display brands in auto complete results","Affiche les marques dans les suggestions"
|
77 |
"Number of brands displayed","Nombre de marques à afficher"
|
78 |
"Select the maximum number of brands to display","Choisissez le nombre maximal de marques à afficher"
|
79 |
-
Categories,"
|
80 |
"Display categories in auto complete results","Affiche les catégories dans les suggestions"
|
81 |
"Number of categories displayed","Nombre de catégories à afficher"
|
82 |
"Select the maximum number of categories to display","Choisissez le nombre maximal de catégories à afficher"
|
@@ -153,4 +153,28 @@ Price,Prix
|
|
153 |
"In case there's only one result : redirect to product page","Dans le cas où il n'y a qu'un seul résultat : rediriger vers la page produit"
|
154 |
"Always","Toujours"
|
155 |
"Unless there's a spellcheck","Sauf si il y a une suggestion orthographique"
|
156 |
-
"Never","Jamais"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
"Display brands in auto complete results","Affiche les marques dans les suggestions"
|
77 |
"Number of brands displayed","Nombre de marques à afficher"
|
78 |
"Select the maximum number of brands to display","Choisissez le nombre maximal de marques à afficher"
|
79 |
+
Categories,"Catégories"
|
80 |
"Display categories in auto complete results","Affiche les catégories dans les suggestions"
|
81 |
"Number of categories displayed","Nombre de catégories à afficher"
|
82 |
"Select the maximum number of categories to display","Choisissez le nombre maximal de catégories à afficher"
|
153 |
"In case there's only one result : redirect to product page","Dans le cas où il n'y a qu'un seul résultat : rediriger vers la page produit"
|
154 |
"Always","Toujours"
|
155 |
"Unless there's a spellcheck","Sauf si il y a une suggestion orthographique"
|
156 |
+
"Never","Jamais"
|
157 |
+
"Result Tabs","Onglets Résultats"
|
158 |
+
"Active","Actif"
|
159 |
+
"Show even without result","Afficher même sans résultat"
|
160 |
+
"Products","Produits"
|
161 |
+
"Articles","Articles"
|
162 |
+
"Stores","Magasins"
|
163 |
+
"No Article Found","Aucun article trouvé"
|
164 |
+
"No Store Found","Aucun magasin trouvé"
|
165 |
+
"Index magento CMS pages","Indexer les pages CMS magento"
|
166 |
+
"Articles directory","Répertoire articles"
|
167 |
+
"Stores directory","Répertoire magasins"
|
168 |
+
"Local directory where the articles zip file is expected","Chemin du répertoire où le fichier zip des articles est attendu"
|
169 |
+
"Local directory where the stores zip file is expected","Chemin du répertoire où le fichier zip des magasins est attendu"
|
170 |
+
"Push articles","Envoyez les articles"
|
171 |
+
"Manually push categories index to AFS@Store","Envoi manuel des categories pour l'indexation AFS@Store"
|
172 |
+
"Manually push articles index to AFS@Store","Envoi manuel des articles pour l'indexation AFS@Store"
|
173 |
+
"Push stores","Envoyez les magasins"
|
174 |
+
"Manually push stores index to AFS@Store","Envoi manuel des magasins pour l'indexation AFS@Store"
|
175 |
+
"Articles exported","Articles exportés"
|
176 |
+
"No Article to export","Aucun article à exporter"
|
177 |
+
"Stores exported","Magasins exportés"
|
178 |
+
"No store to export","Aucun magasin à exporter"
|
179 |
+
"Feeds","Flux"
|
180 |
+
"Number of suggestions","Nombre de suggestions"
|
lib/antidot/.travis.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
language: php
|
2 |
|
3 |
php:
|
|
|
4 |
- 5.5
|
5 |
- 5.4
|
6 |
- 5.3
|
1 |
language: php
|
2 |
|
3 |
php:
|
4 |
+
- 5.6
|
5 |
- 5.5
|
6 |
- 5.4
|
7 |
- 5.3
|
lib/antidot/AFS/SEARCH/TEST/DATA/introspection_responses.php
ADDED
@@ -0,0 +1,468 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PhpStorm.
|
4 |
+
* User: ct
|
5 |
+
* Date: 11/18/15
|
6 |
+
* Time: 2:03 PM
|
7 |
+
*/
|
8 |
+
|
9 |
+
define('RESULT_WITHOUT_FACETS', '{
|
10 |
+
"header": {
|
11 |
+
"query": {
|
12 |
+
"userId": "249716644",
|
13 |
+
"userId": "368eca82-7270-4770-8751-860d57e4a696",
|
14 |
+
"date": "2015-11-11T12:00:12+0100",
|
15 |
+
"queryParam": [
|
16 |
+
{
|
17 |
+
"name": "afs:service",
|
18 |
+
"value": "7123"
|
19 |
+
},
|
20 |
+
{
|
21 |
+
"name": "afs:status",
|
22 |
+
"value": "stable"
|
23 |
+
},
|
24 |
+
{
|
25 |
+
"name": "afs:what",
|
26 |
+
"value": "meta"
|
27 |
+
},
|
28 |
+
{
|
29 |
+
"name": "afs:output",
|
30 |
+
"value": "json,2"
|
31 |
+
},
|
32 |
+
{
|
33 |
+
"name": "afs:facetDefault",
|
34 |
+
"value": "replies=100"
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"name": "afs:replies",
|
38 |
+
"value": "20"
|
39 |
+
},
|
40 |
+
{
|
41 |
+
"name": "afs:sort",
|
42 |
+
"value": "afs:relevance,DESC;category_level,ASC;category_broader_length,ASC;category_name_length,ASC"
|
43 |
+
}
|
44 |
+
],
|
45 |
+
"mainCtx": {
|
46 |
+
"textquery": ""
|
47 |
+
},
|
48 |
+
"textquery": ""
|
49 |
+
},
|
50 |
+
"metadata": [
|
51 |
+
{
|
52 |
+
"uri": "Catalog",
|
53 |
+
"meta": {
|
54 |
+
"producer": [],
|
55 |
+
"info": {
|
56 |
+
"sizeKb": 409093,
|
57 |
+
"date": 1447110000,
|
58 |
+
"searchFeedInfo": {
|
59 |
+
"nbDocs": 33210,
|
60 |
+
"nbShards": 1,
|
61 |
+
"setInfos": []
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
]
|
67 |
+
}
|
68 |
+
}');
|
69 |
+
|
70 |
+
define('RESULT_WITH_FACETS_FLAT', '{
|
71 |
+
"header": {
|
72 |
+
"query": {
|
73 |
+
"userId": "249716644",
|
74 |
+
"userId": "368eca82-7270-4770-8751-860d57e4a696",
|
75 |
+
"date": "2015-11-11T12:00:12+0100",
|
76 |
+
"queryParam": [
|
77 |
+
{
|
78 |
+
"name": "afs:service",
|
79 |
+
"value": "7123"
|
80 |
+
},
|
81 |
+
{
|
82 |
+
"name": "afs:status",
|
83 |
+
"value": "stable"
|
84 |
+
},
|
85 |
+
{
|
86 |
+
"name": "afs:what",
|
87 |
+
"value": "meta"
|
88 |
+
},
|
89 |
+
{
|
90 |
+
"name": "afs:output",
|
91 |
+
"value": "json,2"
|
92 |
+
},
|
93 |
+
{
|
94 |
+
"name": "afs:facetDefault",
|
95 |
+
"value": "replies=100"
|
96 |
+
},
|
97 |
+
{
|
98 |
+
"name": "afs:replies",
|
99 |
+
"value": "20"
|
100 |
+
},
|
101 |
+
{
|
102 |
+
"name": "afs:sort",
|
103 |
+
"value": "afs:relevance,DESC;category_level,ASC;category_broader_length,ASC;category_name_length,ASC"
|
104 |
+
}
|
105 |
+
],
|
106 |
+
"mainCtx": {
|
107 |
+
"textquery": ""
|
108 |
+
},
|
109 |
+
"textquery": ""
|
110 |
+
}
|
111 |
+
},
|
112 |
+
"metadata": [
|
113 |
+
{
|
114 |
+
"uri": "Catalog",
|
115 |
+
"meta": {
|
116 |
+
"producer": [],
|
117 |
+
"info": {
|
118 |
+
"sizeKb": 409093,
|
119 |
+
"date": 1447110000,
|
120 |
+
"searchFeedInfo": {
|
121 |
+
"nbDocs": 33210,
|
122 |
+
"nbShards": 1,
|
123 |
+
"setInfos": [
|
124 |
+
{
|
125 |
+
"setId": "Antidot_Root_Field",
|
126 |
+
"childrenInfos": [],
|
127 |
+
"facetInfos": [
|
128 |
+
{
|
129 |
+
"afs:t": "FacetTree",
|
130 |
+
"layout": "TREE",
|
131 |
+
"type": "INTEGER",
|
132 |
+
"id": "product_id",
|
133 |
+
"sticky": false,
|
134 |
+
"filter": true
|
135 |
+
},
|
136 |
+
{
|
137 |
+
"afs:t": "FacetTree",
|
138 |
+
"layout": "TREE",
|
139 |
+
"type": "STRING",
|
140 |
+
"id": "name",
|
141 |
+
"sticky": false,
|
142 |
+
"filter": true
|
143 |
+
},
|
144 |
+
{
|
145 |
+
"afs:t": "FacetTree",
|
146 |
+
"layout": "TREE",
|
147 |
+
"type": "REAL",
|
148 |
+
"id": "price_from",
|
149 |
+
"sticky": false,
|
150 |
+
"filter": true
|
151 |
+
}
|
152 |
+
]
|
153 |
+
}
|
154 |
+
]
|
155 |
+
}
|
156 |
+
}
|
157 |
+
}
|
158 |
+
}
|
159 |
+
]
|
160 |
+
}');
|
161 |
+
|
162 |
+
define('RESULT_WITH_FACETS_MULTILEVEL', '{
|
163 |
+
"header": {
|
164 |
+
"query": {
|
165 |
+
"userId": "249716644",
|
166 |
+
"userId": "368eca82-7270-4770-8751-860d57e4a696",
|
167 |
+
"date": "2015-11-11T12:00:12+0100",
|
168 |
+
"queryParam": [
|
169 |
+
{
|
170 |
+
"name": "afs:service",
|
171 |
+
"value": "7123"
|
172 |
+
},
|
173 |
+
{
|
174 |
+
"name": "afs:status",
|
175 |
+
"value": "stable"
|
176 |
+
},
|
177 |
+
{
|
178 |
+
"name": "afs:what",
|
179 |
+
"value": "meta"
|
180 |
+
},
|
181 |
+
{
|
182 |
+
"name": "afs:output",
|
183 |
+
"value": "json,2"
|
184 |
+
},
|
185 |
+
{
|
186 |
+
"name": "afs:facetDefault",
|
187 |
+
"value": "replies=100"
|
188 |
+
},
|
189 |
+
{
|
190 |
+
"name": "afs:replies",
|
191 |
+
"value": "20"
|
192 |
+
},
|
193 |
+
{
|
194 |
+
"name": "afs:sort",
|
195 |
+
"value": "afs:relevance,DESC;category_level,ASC;category_broader_length,ASC;category_name_length,ASC"
|
196 |
+
}
|
197 |
+
],
|
198 |
+
"mainCtx": {
|
199 |
+
"textquery": ""
|
200 |
+
},
|
201 |
+
"textquery": ""
|
202 |
+
}
|
203 |
+
},
|
204 |
+
"metadata": [
|
205 |
+
{
|
206 |
+
"uri": "Catalog",
|
207 |
+
"meta": {
|
208 |
+
"producer": [],
|
209 |
+
"info": {
|
210 |
+
"sizeKb": 409093,
|
211 |
+
"date": 1447110000,
|
212 |
+
"searchFeedInfo": {
|
213 |
+
"nbDocs": 33210,
|
214 |
+
"nbShards": 1,
|
215 |
+
"setInfos": [
|
216 |
+
{
|
217 |
+
"setId": "Antidot_Root_Field",
|
218 |
+
"childrenInfos": [
|
219 |
+
{
|
220 |
+
"setId": "variant",
|
221 |
+
"childrenInfos": [],
|
222 |
+
"facetInfos": [
|
223 |
+
{
|
224 |
+
"afs:t": "FacetTree",
|
225 |
+
"layout": "TREE",
|
226 |
+
"type": "STRING",
|
227 |
+
"id": "product",
|
228 |
+
"sticky": false,
|
229 |
+
"filter": true
|
230 |
+
},
|
231 |
+
{
|
232 |
+
"afs:t": "FacetTree",
|
233 |
+
"layout": "TREE",
|
234 |
+
"type": "STRING",
|
235 |
+
"id": "model",
|
236 |
+
"labels": [
|
237 |
+
{
|
238 |
+
"lang": "FR",
|
239 |
+
"label": "Modèle"
|
240 |
+
},
|
241 |
+
{
|
242 |
+
"lang": "NL",
|
243 |
+
"label": "model"
|
244 |
+
}
|
245 |
+
],
|
246 |
+
"sticky": false,
|
247 |
+
"filter": false
|
248 |
+
}
|
249 |
+
]
|
250 |
+
}
|
251 |
+
],
|
252 |
+
"facetInfos": [
|
253 |
+
{
|
254 |
+
"afs:t": "FacetTree",
|
255 |
+
"layout": "TREE",
|
256 |
+
"type": "INTEGER",
|
257 |
+
"id": "product_id",
|
258 |
+
"sticky": false,
|
259 |
+
"filter": true
|
260 |
+
},
|
261 |
+
{
|
262 |
+
"afs:t": "FacetTree",
|
263 |
+
"layout": "TREE",
|
264 |
+
"type": "STRING",
|
265 |
+
"id": "name",
|
266 |
+
"sticky": false,
|
267 |
+
"filter": true
|
268 |
+
},
|
269 |
+
{
|
270 |
+
"afs:t": "FacetTree",
|
271 |
+
"layout": "TREE",
|
272 |
+
"type": "REAL",
|
273 |
+
"id": "price_from",
|
274 |
+
"sticky": false,
|
275 |
+
"filter": true
|
276 |
+
}
|
277 |
+
]
|
278 |
+
}
|
279 |
+
]
|
280 |
+
}
|
281 |
+
}
|
282 |
+
}
|
283 |
+
}
|
284 |
+
]
|
285 |
+
}');
|
286 |
+
|
287 |
+
define('RESPONSE_FACETS_MULTIFEED', '{
|
288 |
+
"header": {
|
289 |
+
"query": {
|
290 |
+
"userId": "249716644",
|
291 |
+
"userId": "368eca82-7270-4770-8751-860d57e4a696",
|
292 |
+
"date": "2015-11-11T12:00:12+0100",
|
293 |
+
"queryParam": [
|
294 |
+
{
|
295 |
+
"name": "afs:service",
|
296 |
+
"value": "7123"
|
297 |
+
},
|
298 |
+
{
|
299 |
+
"name": "afs:status",
|
300 |
+
"value": "stable"
|
301 |
+
},
|
302 |
+
{
|
303 |
+
"name": "afs:what",
|
304 |
+
"value": "meta"
|
305 |
+
},
|
306 |
+
{
|
307 |
+
"name": "afs:output",
|
308 |
+
"value": "json,2"
|
309 |
+
},
|
310 |
+
{
|
311 |
+
"name": "afs:facetDefault",
|
312 |
+
"value": "replies=100"
|
313 |
+
},
|
314 |
+
{
|
315 |
+
"name": "afs:replies",
|
316 |
+
"value": "20"
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"name": "afs:sort",
|
320 |
+
"value": "afs:relevance,DESC;category_level,ASC;category_broader_length,ASC;category_name_length,ASC"
|
321 |
+
}
|
322 |
+
],
|
323 |
+
"mainCtx": {
|
324 |
+
"textquery": ""
|
325 |
+
},
|
326 |
+
"textquery": ""
|
327 |
+
}
|
328 |
+
},
|
329 |
+
"metadata": [
|
330 |
+
{
|
331 |
+
"uri": "Catalog",
|
332 |
+
"meta": {
|
333 |
+
"producer": [],
|
334 |
+
"info": {
|
335 |
+
"sizeKb": 409093,
|
336 |
+
"date": 1447110000,
|
337 |
+
"searchFeedInfo": {
|
338 |
+
"nbDocs": 33210,
|
339 |
+
"nbShards": 1,
|
340 |
+
"setInfos": [
|
341 |
+
{
|
342 |
+
"setId": "Antidot_Root_Field",
|
343 |
+
"childrenInfos": [
|
344 |
+
{
|
345 |
+
"setId": "variant",
|
346 |
+
"childrenInfos": [],
|
347 |
+
"facetInfos": [
|
348 |
+
{
|
349 |
+
"afs:t": "FacetTree",
|
350 |
+
"layout": "TREE",
|
351 |
+
"type": "STRING",
|
352 |
+
"id": "product",
|
353 |
+
"sticky": false,
|
354 |
+
"filter": true
|
355 |
+
},
|
356 |
+
{
|
357 |
+
"afs:t": "FacetTree",
|
358 |
+
"layout": "TREE",
|
359 |
+
"type": "STRING",
|
360 |
+
"id": "model",
|
361 |
+
"labels": [
|
362 |
+
{
|
363 |
+
"lang": "FR",
|
364 |
+
"label": "Modèle"
|
365 |
+
},
|
366 |
+
{
|
367 |
+
"lang": "NL",
|
368 |
+
"label": "model"
|
369 |
+
}
|
370 |
+
],
|
371 |
+
"sticky": false,
|
372 |
+
"filter": false
|
373 |
+
}
|
374 |
+
]
|
375 |
+
}
|
376 |
+
],
|
377 |
+
"facetInfos": [
|
378 |
+
{
|
379 |
+
"afs:t": "FacetTree",
|
380 |
+
"layout": "TREE",
|
381 |
+
"type": "INTEGER",
|
382 |
+
"id": "product_id",
|
383 |
+
"sticky": false,
|
384 |
+
"filter": true
|
385 |
+
},
|
386 |
+
{
|
387 |
+
"afs:t": "FacetTree",
|
388 |
+
"layout": "TREE",
|
389 |
+
"type": "STRING",
|
390 |
+
"id": "name",
|
391 |
+
"sticky": false,
|
392 |
+
"filter": true
|
393 |
+
},
|
394 |
+
{
|
395 |
+
"afs:t": "FacetTree",
|
396 |
+
"layout": "TREE",
|
397 |
+
"type": "REAL",
|
398 |
+
"id": "price_from",
|
399 |
+
"sticky": false,
|
400 |
+
"filter": true
|
401 |
+
}
|
402 |
+
]
|
403 |
+
}
|
404 |
+
]
|
405 |
+
}
|
406 |
+
}
|
407 |
+
}
|
408 |
+
},
|
409 |
+
{
|
410 |
+
"uri": "Categories",
|
411 |
+
"meta": {
|
412 |
+
"producer": [],
|
413 |
+
"info": {
|
414 |
+
"sizeKb": 409093,
|
415 |
+
"date": 1447110000,
|
416 |
+
"searchFeedInfo": {
|
417 |
+
"nbDocs": 33210,
|
418 |
+
"nbShards": 1,
|
419 |
+
"setInfos": [
|
420 |
+
{
|
421 |
+
"setId": "Antidot_Root_Field",
|
422 |
+
"childrenInfos": [],
|
423 |
+
"facetInfos": [
|
424 |
+
{
|
425 |
+
"afs:t": "FacetTree",
|
426 |
+
"layout": "TREE",
|
427 |
+
"type": "INTEGER",
|
428 |
+
"id": "category_id",
|
429 |
+
"sticky": false,
|
430 |
+
"filter": true
|
431 |
+
}
|
432 |
+
]
|
433 |
+
}
|
434 |
+
]
|
435 |
+
}
|
436 |
+
}
|
437 |
+
}
|
438 |
+
}
|
439 |
+
]
|
440 |
+
}');
|
441 |
+
|
442 |
+
define('ABOUT_RESPONSE', '{
|
443 |
+
"x:type":"ws.response",
|
444 |
+
"query":{
|
445 |
+
"x:type":"ws.response.query",
|
446 |
+
"parameters":{
|
447 |
+
"x:type":"collection",
|
448 |
+
"x:values":[
|
449 |
+
|
450 |
+
]
|
451 |
+
},
|
452 |
+
"properties":{
|
453 |
+
"x:type":"x:dynamic"
|
454 |
+
}
|
455 |
+
},
|
456 |
+
"result":{
|
457 |
+
"x:type":"bows.about",
|
458 |
+
"boWsVersion":{
|
459 |
+
"x:type":"AfsVersion",
|
460 |
+
"build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e",
|
461 |
+
"gen":"7.6",
|
462 |
+
"major":"4",
|
463 |
+
"minor":"0",
|
464 |
+
"motto":"Pink Dolphin"
|
465 |
+
},
|
466 |
+
"copyright":"Copyright (C) 1999-2013 Antidot"
|
467 |
+
}
|
468 |
+
}');
|
lib/antidot/AFS/SEARCH/TEST/introspectionTest.php
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PhpStorm.
|
4 |
+
* User: ct
|
5 |
+
* "date": 11/11/15
|
6 |
+
* Time: 11:48 AM
|
7 |
+
*/
|
8 |
+
require_once('AFS/SEARCH/afs_introspection.php');
|
9 |
+
require_once('AFS/SEARCH/afs_search.php');
|
10 |
+
require_once('COMMON/php-SAI/lib/CurlStub.php');
|
11 |
+
require_once('AIF/afs_user_authentication.php');
|
12 |
+
require_once('AFS/SEARCH/TEST/DATA/introspection_responses.php');
|
13 |
+
|
14 |
+
|
15 |
+
class IntrospectionTest extends PHPUnit_Framework_TestCase {
|
16 |
+
|
17 |
+
public function testGetFeedListBasics() {
|
18 |
+
$introspector = $this->init_introspector(RESPONSE_FACETS_MULTIFEED);
|
19 |
+
$expected_feeds_list = array('Categories', 'Catalog');
|
20 |
+
$actual_feed_list = $introspector->get_feeds_list();
|
21 |
+
$this->assertEquals(sort($expected_feeds_list), sort($actual_feed_list));
|
22 |
+
}
|
23 |
+
|
24 |
+
public function testHasFeedBasic() {
|
25 |
+
$intropsector = $this->init_introspector(RESULT_WITH_FACETS_FLAT);
|
26 |
+
$this->assertTrue($intropsector->has_feed('Catalog'));
|
27 |
+
$this->assertFalse($intropsector->has_feed('Categories'));
|
28 |
+
}
|
29 |
+
|
30 |
+
public function testGetFeedMetadataShouldReturnNull() {
|
31 |
+
$introspector = $this->init_introspector(RESULT_WITHOUT_FACETS);
|
32 |
+
$this->assertEquals($introspector->get_feed_metadata('toto'), null);
|
33 |
+
}
|
34 |
+
|
35 |
+
public function testGetAllMetadataBasic() {
|
36 |
+
$intropsector = $this->init_introspector(RESULT_WITH_FACETS_FLAT);
|
37 |
+
$all_metadata = $intropsector->get_all_metadata();
|
38 |
+
$this->assertEquals(count($all_metadata), 1);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function testIntrospectionWithNoFacets() {
|
42 |
+
$intropsector = $this->init_introspector(RESULT_WITHOUT_FACETS);
|
43 |
+
$all_meta= $intropsector->get_all_metadata();
|
44 |
+
$this->assertEquals(count($all_meta), 0);
|
45 |
+
}
|
46 |
+
|
47 |
+
public function testIntrospectionWithFlatFacets() {
|
48 |
+
$intropsector = $this->init_introspector(RESULT_WITH_FACETS_FLAT);
|
49 |
+
$catalog_metadata= $intropsector->get_feed_metadata('Catalog');
|
50 |
+
$catalog_filters_info = $catalog_metadata->get_filters_info();
|
51 |
+
$this->assertEquals(count($catalog_filters_info), 3);
|
52 |
+
|
53 |
+
$product= $catalog_filters_info['product_id'];
|
54 |
+
$this->check_facet_info($product, 'product_id', false, true, 'INTEGER', 'TREE');
|
55 |
+
|
56 |
+
$name = $catalog_filters_info['name'];
|
57 |
+
$this->check_facet_info($name, 'name', false, true, 'STRING', 'TREE');
|
58 |
+
|
59 |
+
$price_from = $catalog_filters_info['price_from'];
|
60 |
+
$this->check_facet_info($price_from, 'price_from', false, true, 'REAL', 'TREE');
|
61 |
+
}
|
62 |
+
|
63 |
+
public function testIntrospectionWithMultiLevelFacets() {
|
64 |
+
$intropsector = $this->init_introspector(RESULT_WITH_FACETS_MULTILEVEL);
|
65 |
+
$all_meta= $intropsector->get_all_metadata();
|
66 |
+
$this->assertEquals(count($all_meta), 1);
|
67 |
+
$catalog_facets_info = $all_meta['Catalog']->get_facets_and_filters_info();
|
68 |
+
$this->assertEquals(count($catalog_facets_info), 5);
|
69 |
+
|
70 |
+
$product= $catalog_facets_info['product_id'];
|
71 |
+
$this->check_facet_info($product, 'product_id', false, true, 'INTEGER', 'TREE');
|
72 |
+
|
73 |
+
$name = $catalog_facets_info['name'];
|
74 |
+
$this->check_facet_info($name, 'name', false, true, 'STRING', 'TREE');
|
75 |
+
|
76 |
+
$price_from = $catalog_facets_info['price_from'];
|
77 |
+
$this->check_facet_info($price_from, 'price_from', false, true, 'REAL', 'TREE');
|
78 |
+
|
79 |
+
$product= $catalog_facets_info['product'];
|
80 |
+
$this->check_facet_info($product, 'product', false, true, 'STRING', 'TREE');
|
81 |
+
|
82 |
+
$model= $catalog_facets_info['model'];
|
83 |
+
$expected_labels = array('FR' => 'Modèle', 'NL' => 'model');
|
84 |
+
$this->check_facet_info($model, 'model', false, false, 'STRING', 'TREE', $expected_labels);
|
85 |
+
}
|
86 |
+
|
87 |
+
private function check_facet_info($facet_info, $expected_name, $is_sticky, $is_filter, $expected_type,
|
88 |
+
$expected_layout, $expected_labels=null)
|
89 |
+
{
|
90 |
+
$this->assertEquals($facet_info->get_id(), $expected_name);
|
91 |
+
$this->assertEquals($facet_info->is_sticky(), $is_sticky);
|
92 |
+
$this->assertEquals($facet_info->is_filter(), $is_filter);
|
93 |
+
$this->assertEquals($facet_info->get_type(), $expected_type);
|
94 |
+
$this->assertEquals($facet_info->get_layout(), $expected_layout);
|
95 |
+
if (! is_null($expected_labels)) {
|
96 |
+
$this->assertEquals($facet_info->get_labels(), $expected_labels);
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
private function init_introspector($response)
|
101 |
+
{
|
102 |
+
$curlConnector = new SAI_CurlStub();
|
103 |
+
$mockBaseUrl = "localhost";
|
104 |
+
$aboutRequestOpts = array(CURLOPT_URL => "http://$mockBaseUrl/bo-ws/about");
|
105 |
+
$aboutResponse = ABOUT_RESPONSE;
|
106 |
+
|
107 |
+
$curlConnector->setResponse($aboutResponse, $aboutRequestOpts);
|
108 |
+
$curlConnector->setResponse($response);
|
109 |
+
$search = new AfsSearch($mockBaseUrl, '71003', AfsServiceStatus::STABLE, $curlConnector);
|
110 |
+
|
111 |
+
$intropsector = new AfsIntrospection($search);
|
112 |
+
return $intropsector;
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
lib/antidot/AFS/SEARCH/TEST/metadataHelperTest.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Created by PhpStorm.
|
4 |
+
* User: ct
|
5 |
+
* Date: 11/13/15
|
6 |
+
* Time: 1:47 PM
|
7 |
+
*/
|
8 |
+
require_once 'AFS/SEARCH/afs_metadata_helper.php';
|
9 |
+
|
10 |
+
class MetadataHelperTest extends PHPUnit_Framework_TestCase {
|
11 |
+
|
12 |
+
private $metadata = null;
|
13 |
+
|
14 |
+
public function setup() {
|
15 |
+
$this->metadata = json_decode('
|
16 |
+
{
|
17 |
+
"uri": "Catalog",
|
18 |
+
"meta": {
|
19 |
+
"producer": [],
|
20 |
+
"info": {
|
21 |
+
"sizeKb": 409093,
|
22 |
+
"date": 1447110000,
|
23 |
+
"searchFeedInfo": {
|
24 |
+
"nbDocs": 33210,
|
25 |
+
"nbShards": 1,
|
26 |
+
"setInfos": [
|
27 |
+
{
|
28 |
+
"setId": "Antidot_Root_Field",
|
29 |
+
"childrenInfos": [],
|
30 |
+
"facetInfos": [
|
31 |
+
{
|
32 |
+
"afs:t": "FacetTree",
|
33 |
+
"layout": "TREE",
|
34 |
+
"type": "INTEGER",
|
35 |
+
"id": "product_id",
|
36 |
+
"sticky": false,
|
37 |
+
"filter": true
|
38 |
+
},
|
39 |
+
{
|
40 |
+
"afs:t": "FacetTree",
|
41 |
+
"layout": "TREE",
|
42 |
+
"type": "STRING",
|
43 |
+
"id": "name",
|
44 |
+
"sticky": false,
|
45 |
+
"filter": true
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"afs:t": "FacetTree",
|
49 |
+
"layout": "TREE",
|
50 |
+
"type": "REAL",
|
51 |
+
"id": "price_from",
|
52 |
+
"sticky": false,
|
53 |
+
"filter": false
|
54 |
+
}
|
55 |
+
]
|
56 |
+
}
|
57 |
+
]
|
58 |
+
}
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
');
|
63 |
+
}
|
64 |
+
|
65 |
+
public function testFiltersList() {
|
66 |
+
$metadata_helper = new AfsMetadataHelper($this->metadata);
|
67 |
+
$filters_info = $metadata_helper->get_filters_info();
|
68 |
+
$this->assertEquals(count($filters_info), 2);
|
69 |
+
}
|
70 |
+
|
71 |
+
public function testFacetslist() {
|
72 |
+
$metadata_helper = new AfsMetadataHelper($this->metadata);
|
73 |
+
$filters_info = $metadata_helper->get_facets_info();
|
74 |
+
$this->assertEquals(count($filters_info), 1);
|
75 |
+
}
|
76 |
+
|
77 |
+
public function testFacetsInfoData() {
|
78 |
+
$metadata_helper = new AfsMetadataHelper($this->metadata);
|
79 |
+
$facets_info = $metadata_helper->get_facets_and_filters_info();
|
80 |
+
$this->assertEquals(count($facets_info), 3);
|
81 |
+
|
82 |
+
$this->assertTrue(array_key_exists('product_id', $facets_info));
|
83 |
+
$product_id = $facets_info['product_id'];
|
84 |
+
$this->assertEquals($product_id->get_id(), 'product_id');
|
85 |
+
$this->assertFalse($product_id->is_sticky());
|
86 |
+
$this->assertTrue($product_id->is_filter());
|
87 |
+
$this->assertEquals($product_id->get_type(), 'INTEGER');
|
88 |
+
$this->assertEquals($product_id->get_layout(), 'TREE');
|
89 |
+
|
90 |
+
$this->assertTrue(array_key_exists('name', $facets_info));
|
91 |
+
$name = $facets_info['name'];
|
92 |
+
$this->assertEquals($name->get_id(), 'name');
|
93 |
+
$this->assertFalse($name->is_sticky());
|
94 |
+
$this->assertTrue($name->is_filter());
|
95 |
+
$this->assertEquals($name->get_type(), 'STRING');
|
96 |
+
$this->assertEquals($name->get_layout(), 'TREE');
|
97 |
+
|
98 |
+
$this->assertTrue(array_key_exists('price_from', $facets_info));
|
99 |
+
$price_from = $facets_info['price_from'];
|
100 |
+
$this->assertEquals($price_from->get_id(), 'price_from');
|
101 |
+
$this->assertFalse($price_from->is_sticky());
|
102 |
+
$this->assertFalse($price_from->is_filter());
|
103 |
+
$this->assertEquals($price_from->get_type(), 'REAL');
|
104 |
+
$this->assertEquals($price_from->get_layout(), 'TREE');
|
105 |
+
}
|
106 |
+
}
|
lib/antidot/AFS/SEARCH/TEST/responseHelperTest.php
CHANGED
@@ -536,6 +536,76 @@ class ResponseHelperTest extends PHPUnit_Framework_TestCase
|
|
536 |
$this->assertEquals(AfsOrigin::FACET, $elements[0]->query->get_from());
|
537 |
|
538 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
539 |
}
|
540 |
|
541 |
|
536 |
$this->assertEquals(AfsOrigin::FACET, $elements[0]->query->get_from());
|
537 |
|
538 |
}
|
539 |
+
|
540 |
+
public function testIntrospectionResponseShouldInitializeMetadata() {
|
541 |
+
$input = json_decode('{
|
542 |
+
"header": {
|
543 |
+
"query": {
|
544 |
+
"userId": "afd070b6-4315-40cc-975d-747e28bf132a",
|
545 |
+
"sessionId": "5bf5642d-a262-4608-9901-45aa6e87325d"
|
546 |
+
},
|
547 |
+
"performance": {
|
548 |
+
"durationMs": 666
|
549 |
+
}
|
550 |
+
},
|
551 |
+
"metadata": [
|
552 |
+
{
|
553 |
+
"uri": "Catalog",
|
554 |
+
"meta": {
|
555 |
+
"producer": [],
|
556 |
+
"info": {
|
557 |
+
"sizeKb": 409093,
|
558 |
+
"date": 1447110000,
|
559 |
+
"searchFeedInfo": {
|
560 |
+
"nbDocs": 33210,
|
561 |
+
"nbShards": 1,
|
562 |
+
"setInfos": [
|
563 |
+
{
|
564 |
+
"setId": "Antidot_Root_Field",
|
565 |
+
"childrenInfos": [],
|
566 |
+
"facetInfos": [
|
567 |
+
{
|
568 |
+
"afs:t": "FacetTree",
|
569 |
+
"layout": "TREE",
|
570 |
+
"type": "INTEGER",
|
571 |
+
"id": "product_id",
|
572 |
+
"sticky": false,
|
573 |
+
"filter": true
|
574 |
+
},
|
575 |
+
{
|
576 |
+
"afs:t": "FacetTree",
|
577 |
+
"layout": "TREE",
|
578 |
+
"type": "STRING",
|
579 |
+
"id": "name",
|
580 |
+
"sticky": false,
|
581 |
+
"filter": true
|
582 |
+
},
|
583 |
+
{
|
584 |
+
"afs:t": "FacetTree",
|
585 |
+
"layout": "TREE",
|
586 |
+
"type": "REAL",
|
587 |
+
"id": "price_from",
|
588 |
+
"sticky": false,
|
589 |
+
"filter": true
|
590 |
+
}
|
591 |
+
]
|
592 |
+
}
|
593 |
+
]
|
594 |
+
}
|
595 |
+
}
|
596 |
+
}
|
597 |
+
}
|
598 |
+
]
|
599 |
+
}');
|
600 |
+
|
601 |
+
$config = new AfsHelperConfiguration();
|
602 |
+
$config->set_helper_format(AfsHelperFormat::HELPERS);
|
603 |
+
$response_helper = new AfsResponseHelper($input, new AfsQuery(), $config);
|
604 |
+
|
605 |
+
$this->assertNotEmpty($response_helper->get_all_metadata());
|
606 |
+
$this->assertTrue($response_helper->has_metadata('Catalog'));
|
607 |
+
$this->assertNotNull($response_helper->get_feed_metadata('Catalog'));
|
608 |
+
}
|
609 |
}
|
610 |
|
611 |
|
lib/antidot/AFS/SEARCH/afs_introspection.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Created by PhpStorm.
|
5 |
+
* User: ct
|
6 |
+
* Date: 11/10/15
|
7 |
+
* Time: 5:00 PM
|
8 |
+
*/
|
9 |
+
class AfsIntrospection {
|
10 |
+
private $feeds_metadata = array();
|
11 |
+
|
12 |
+
public function __construct($search) {
|
13 |
+
$this->build_metadata($search);
|
14 |
+
}
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @param $feed
|
18 |
+
* @return bool: true if there is metadata for given feed, otherwise false
|
19 |
+
*/
|
20 |
+
public function has_feed($feed) {
|
21 |
+
return array_key_exists($feed, $this->feeds_metadata);
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @return array: list of available feed's metadata
|
26 |
+
*/
|
27 |
+
public function get_feeds_list() {
|
28 |
+
return array_keys($this->feeds_metadata);
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @return array: list of feed's metadata (AfsMetadataHelper)
|
33 |
+
*/
|
34 |
+
public function get_all_metadata() {
|
35 |
+
return $this->feeds_metadata;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @param $feed_name
|
40 |
+
* @return AfsMetadata: metadata for given feed name, or null if there is no metadata for given feed name
|
41 |
+
*/
|
42 |
+
public function get_feed_metadata($feed_name) {
|
43 |
+
if (array_key_exists($feed_name, $this->feeds_metadata)) {
|
44 |
+
return $this->feeds_metadata[$feed_name];
|
45 |
+
} else {
|
46 |
+
return null;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
private function build_metadata($search) {
|
51 |
+
$params = array('afs:what' => 'meta');
|
52 |
+
$query = AfsQuery::create_from_parameters($params);
|
53 |
+
$result = $search->execute($query);
|
54 |
+
$this->feeds_metadata = $result->get_all_metadata();
|
55 |
+
}
|
56 |
+
|
57 |
+
private function setup_feeds_filters($search) {
|
58 |
+
$query = AfsQuery::create_from_parameters(array());
|
59 |
+
$result = $search->execute($query);
|
60 |
+
if (property_exists($result, 'replysets')) {
|
61 |
+
foreach ($this->feeds_metadata as $metadata_feed => $metadata_helper) {
|
62 |
+
$this->setup_feed_filters($result->replysets, $metadata_feed, $metadata_helper);
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
}
|
lib/antidot/AFS/SEARCH/afs_metadata_helper.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Created by PhpStorm.
|
5 |
+
* User: ct
|
6 |
+
* Date: 11/11/15
|
7 |
+
* Time: 10:38 AM
|
8 |
+
*/
|
9 |
+
class AfsMetadataHelper {
|
10 |
+
|
11 |
+
private $facetsInfo = array();
|
12 |
+
|
13 |
+
public function __construct($data) {
|
14 |
+
$this->initialize_facets_info($data);
|
15 |
+
}
|
16 |
+
|
17 |
+
private function initialize_facets_info($meta) {
|
18 |
+
$this->initialize_facets_info_rec($meta->meta->info->searchFeedInfo->setInfos);
|
19 |
+
}
|
20 |
+
|
21 |
+
private function initialize_facets_info_rec($setInfos) {
|
22 |
+
foreach ($setInfos as $setInfo) {
|
23 |
+
foreach ($setInfo->facetInfos as $facetInfo) {
|
24 |
+
$this->facetsInfo[$facetInfo->id] = new AfsFacetInfoHelper($facetInfo);
|
25 |
+
}
|
26 |
+
if (property_exists($setInfo, 'childrenInfos')) {
|
27 |
+
$this->initialize_facets_info_rec($setInfo->childrenInfos);
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @brief retreives only facets info
|
34 |
+
* @return array of AfsFacetInfo objects
|
35 |
+
*/
|
36 |
+
public function get_facets_info() {
|
37 |
+
return array_filter($this->facetsInfo, function($facet_info) {
|
38 |
+
return ! $facet_info->is_filter();
|
39 |
+
});
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @brief retreives only filters info
|
44 |
+
* @return array of AfsFacetInfo objects
|
45 |
+
*/
|
46 |
+
public function get_filters_info() {
|
47 |
+
return array_filter($this->facetsInfo, function($facet_info) {
|
48 |
+
return $facet_info->is_filter();
|
49 |
+
});
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @brief retrieves all facets and filters info
|
54 |
+
* @return array of AfsFacetInfo objects
|
55 |
+
*/
|
56 |
+
public function get_facets_and_filters_info() {
|
57 |
+
return $this->facetsInfo;
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
class AfsFacetInfoHelper {
|
64 |
+
|
65 |
+
private $labels = array();
|
66 |
+
private $is_sticky = null;
|
67 |
+
private $is_filter = null;
|
68 |
+
private $type = null;
|
69 |
+
private $layout = null;
|
70 |
+
private $id = null;
|
71 |
+
|
72 |
+
public function __construct($facetInfo) {
|
73 |
+
$this->type = $facetInfo->type;
|
74 |
+
if (property_exists($facetInfo, 'labels')) {
|
75 |
+
foreach ($facetInfo->labels as $label) {
|
76 |
+
if (property_exists($label, 'lang')) {
|
77 |
+
$this->labels[$label->lang] = $label->label;
|
78 |
+
} elseif (property_exists($label, 'label')) {
|
79 |
+
$this->labels[$label->label] = $label->label;
|
80 |
+
}
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
if (property_exists($facetInfo, 'filter')) {
|
85 |
+
$this->is_filter = $facetInfo->filter;
|
86 |
+
}
|
87 |
+
if (property_exists($facetInfo, 'sticky')) {
|
88 |
+
$this->is_sticky = $facetInfo->sticky;
|
89 |
+
}
|
90 |
+
$this->id = $facetInfo->id;
|
91 |
+
$this->layout = $facetInfo->layout;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* @brief retrieves all facet's labels
|
96 |
+
* @return array of labels of language => label
|
97 |
+
*/
|
98 |
+
public function get_labels() {
|
99 |
+
return $this->labels;
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* @return boolean: true if current facet is sticky
|
104 |
+
*/
|
105 |
+
public function is_sticky() {
|
106 |
+
return $this->is_sticky;
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* @return boolean: true if current facet is a filter, otherwise false
|
111 |
+
*/
|
112 |
+
public function is_filter() {
|
113 |
+
return $this->is_filter;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @param $value
|
118 |
+
*/
|
119 |
+
public function set_is_filter($value) {
|
120 |
+
$this->is_filter = $value;
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* @return integer: current facet's ID
|
125 |
+
*/
|
126 |
+
public function get_id() {
|
127 |
+
return $this->id;
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* @return string: current facet's type
|
132 |
+
*/
|
133 |
+
public function get_type() {
|
134 |
+
return $this->type;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* @return string: current facet's layout
|
139 |
+
*/
|
140 |
+
public function get_layout() {
|
141 |
+
return $this->layout;
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
lib/antidot/AFS/SEARCH/afs_response_helper.php
CHANGED
@@ -9,6 +9,7 @@ require_once 'AFS/SEARCH/afs_producer.php';
|
|
9 |
require_once 'AFS/SEARCH/afs_helper_configuration.php';
|
10 |
require_once 'AFS/SEARCH/afs_response_exception.php';
|
11 |
require_once 'COMMON/afs_helper_format.php';
|
|
|
12 |
|
13 |
/** @brief Main helper for AFS search reply.
|
14 |
*
|
@@ -21,8 +22,10 @@ class AfsResponseHelper extends AfsResponseHelperBase
|
|
21 |
{
|
22 |
private $config = null;
|
23 |
private $has_reply = false;
|
|
|
24 |
private $header = null;
|
25 |
private $replysets = array();
|
|
|
26 |
private $spellcheck_mgr = null;
|
27 |
private $promote = null;
|
28 |
private $concepts = null;
|
@@ -54,11 +57,20 @@ class AfsResponseHelper extends AfsResponseHelperBase
|
|
54 |
$this->concepts = new AfsConceptManager();
|
55 |
|
56 |
$this->initialize_replysets($response->replySet, $query, $config);
|
|
|
|
|
|
|
57 |
} elseif ($this->header->in_error()) {
|
58 |
$this->set_error_msg($this->header->get_error());
|
59 |
}
|
60 |
}
|
61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
private function initialize_replysets($replysets, AfsQuery $query,
|
63 |
AfsHelperConfiguration $config)
|
64 |
{
|
@@ -181,6 +193,33 @@ class AfsResponseHelper extends AfsResponseHelperBase
|
|
181 |
$this->check_reply('spellcheck_mgr');
|
182 |
return $this->spellcheck_mgr->get_spellcheck($feed);
|
183 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
/** @} */
|
185 |
|
186 |
/** @name Promote
|
9 |
require_once 'AFS/SEARCH/afs_helper_configuration.php';
|
10 |
require_once 'AFS/SEARCH/afs_response_exception.php';
|
11 |
require_once 'COMMON/afs_helper_format.php';
|
12 |
+
require_once 'AFS/SEARCH/afs_metadata_helper.php';
|
13 |
|
14 |
/** @brief Main helper for AFS search reply.
|
15 |
*
|
22 |
{
|
23 |
private $config = null;
|
24 |
private $has_reply = false;
|
25 |
+
private $has_metadata = false;
|
26 |
private $header = null;
|
27 |
private $replysets = array();
|
28 |
+
private $metadata = array();
|
29 |
private $spellcheck_mgr = null;
|
30 |
private $promote = null;
|
31 |
private $concepts = null;
|
57 |
$this->concepts = new AfsConceptManager();
|
58 |
|
59 |
$this->initialize_replysets($response->replySet, $query, $config);
|
60 |
+
} elseif (property_exists($response, 'metadata')) {
|
61 |
+
$this->has_metadata = true;
|
62 |
+
$this->initialize_metadata($response->metadata);
|
63 |
} elseif ($this->header->in_error()) {
|
64 |
$this->set_error_msg($this->header->get_error());
|
65 |
}
|
66 |
}
|
67 |
|
68 |
+
private function initialize_metadata($metadata) {
|
69 |
+
foreach ($metadata as $meta) {
|
70 |
+
$this->metadata[$meta->uri] = new AfsMetadataHelper($meta);
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
private function initialize_replysets($replysets, AfsQuery $query,
|
75 |
AfsHelperConfiguration $config)
|
76 |
{
|
193 |
$this->check_reply('spellcheck_mgr');
|
194 |
return $this->spellcheck_mgr->get_spellcheck($feed);
|
195 |
}
|
196 |
+
|
197 |
+
/** @brief Retrieves metadata for all feeds */
|
198 |
+
public function get_all_metadata() {
|
199 |
+
return $this->metadata;
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* @brief Retrieves metadata for given feed
|
204 |
+
* @param $feed
|
205 |
+
*/
|
206 |
+
public function get_feed_metadata($feed=null) {
|
207 |
+
return $this->metadata[$feed];
|
208 |
+
}
|
209 |
+
|
210 |
+
/**@brief Check if metadata is defined in response stream
|
211 |
+
* @param $feed. If not null, check if metadata is defined for this feed.
|
212 |
+
* If null, check if at least one feed contains metadata.
|
213 |
+
* @return bool
|
214 |
+
*/
|
215 |
+
public function has_metadata($feed=null)
|
216 |
+
{
|
217 |
+
if (! is_null($feed)) {
|
218 |
+
return array_key_exists($feed, $this->metadata);
|
219 |
+
} else {
|
220 |
+
return $this->has_metadata;
|
221 |
+
}
|
222 |
+
}
|
223 |
/** @} */
|
224 |
|
225 |
/** @name Promote
|
lib/antidot/AIF/TEST/authenticationTest.php
CHANGED
@@ -16,7 +16,12 @@ class AuthenticationTest extends PHPUnit_Framework_TestCase
|
|
16 |
$this->assertEquals(array('Authorization' => 'Basic ' . base64_encode('foo:bar')), $auth->format_as_header_param());
|
17 |
}
|
18 |
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
20 |
{
|
21 |
$auth = new AfsTokenAuthentication('foo');
|
22 |
$this->assertEquals(array('access-token' => 'foo'), $auth->format_as_header_param());
|
16 |
$this->assertEquals(array('Authorization' => 'Basic ' . base64_encode('foo:bar')), $auth->format_as_header_param());
|
17 |
}
|
18 |
|
19 |
+
public function testTokenAuthenticationFormat76()
|
20 |
+
{
|
21 |
+
$auth = new AfsTokenAuthentication('foo');
|
22 |
+
$this->assertEquals(array('afs:login' => 'login://foo@SSO'), $auth->format_as_url_param('7.6'));
|
23 |
+
}
|
24 |
+
public function testTokenAuthenticationFormatNew()
|
25 |
{
|
26 |
$auth = new AfsTokenAuthentication('foo');
|
27 |
$this->assertEquals(array('access-token' => 'foo'), $auth->format_as_header_param());
|
lib/antidot/AIF/TEST/pafConnectorTest.php
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
<?php ob_start();
|
2 |
require_once('AIF/afs_paf_connector.php');
|
3 |
-
require_once('AIF/afs_user_authentication.php');
|
4 |
|
5 |
|
6 |
class PafConnectorTest extends PHPUnit_Framework_TestCase
|
7 |
{
|
8 |
public function testOneShot()
|
9 |
{
|
|
|
10 |
$auth = new AfsUserAuthentication('antidot', 'change_on_install', AFS_AUTH_ANTIDOT);
|
11 |
-
$service = new AfsService(42
|
12 |
$content = '<?xml version="1.0"?><root><uri>http://generated.doc.<?php ob_start();</uri><title>Generated doc</title><content>Generated content</content></root>';
|
13 |
$doc = new AfsDocument($content);
|
14 |
-
$connector = new AfsPafConnector('
|
15 |
$result = $connector->upload_doc($doc);
|
16 |
$this->assertTrue($result->has_result());
|
17 |
$this->assertFalse($result->in_error());
|
1 |
<?php ob_start();
|
2 |
require_once('AIF/afs_paf_connector.php');
|
|
|
3 |
|
4 |
|
5 |
class PafConnectorTest extends PHPUnit_Framework_TestCase
|
6 |
{
|
7 |
public function testOneShot()
|
8 |
{
|
9 |
+
return;
|
10 |
$auth = new AfsUserAuthentication('antidot', 'change_on_install', AFS_AUTH_ANTIDOT);
|
11 |
+
$service = new AfsService(42);
|
12 |
$content = '<?xml version="1.0"?><root><uri>http://generated.doc.<?php ob_start();</uri><title>Generated doc</title><content>Generated content</content></root>';
|
13 |
$doc = new AfsDocument($content);
|
14 |
+
$connector = new AfsPafConnector('quigon', $service, 'TestPaF', $auth);
|
15 |
$result = $connector->upload_doc($doc);
|
16 |
$this->assertTrue($result->has_result());
|
17 |
$this->assertFalse($result->in_error());
|
lib/antidot/AIF/afs_about_connector.php
CHANGED
@@ -7,7 +7,7 @@ require_once 'AIF/afs_bows_information.php';
|
|
7 |
/** @brief Simple connector to retrieve AFS Back Office information. */
|
8 |
class AfsAboutConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterface
|
9 |
{
|
10 |
-
public function __construct($host, AfsService $service=null, $scheme=AFS_SCHEME_HTTP, SAI_CurlInterface $curlConnector=null
|
11 |
{
|
12 |
parent::__construct($host, $service, $scheme, $curlConnector);
|
13 |
}
|
7 |
/** @brief Simple connector to retrieve AFS Back Office information. */
|
8 |
class AfsAboutConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterface
|
9 |
{
|
10 |
+
public function __construct($host, AfsService $service=null, $scheme=AFS_SCHEME_HTTP, SAI_CurlInterface $curlConnector=null)
|
11 |
{
|
12 |
parent::__construct($host, $service, $scheme, $curlConnector);
|
13 |
}
|
lib/antidot/AIF/afs_authentication.php
CHANGED
@@ -24,14 +24,14 @@ interface AfsAuthentication
|
|
24 |
* version information.
|
25 |
* @return string representing authentication.
|
26 |
*/
|
27 |
-
public function format_as_url_param();
|
28 |
|
29 |
/** @brief Formats authentication parameters.
|
30 |
* @param $version [in] Format string representation according to provided
|
31 |
* version information.
|
32 |
* @return array representing authentication.
|
33 |
*/
|
34 |
-
public function format_as_header_param();
|
35 |
}
|
36 |
|
37 |
|
24 |
* version information.
|
25 |
* @return string representing authentication.
|
26 |
*/
|
27 |
+
public function format_as_url_param($version=null);
|
28 |
|
29 |
/** @brief Formats authentication parameters.
|
30 |
* @param $version [in] Format string representation according to provided
|
31 |
* version information.
|
32 |
* @return array representing authentication.
|
33 |
*/
|
34 |
+
public function format_as_header_param($version=null);
|
35 |
}
|
36 |
|
37 |
|
lib/antidot/AIF/afs_bows_connector.php
CHANGED
@@ -105,7 +105,7 @@ abstract class AfsBOWSConnector extends AfsConnectorBase
|
|
105 |
throw new Exception("Code : " . $r->error->code . "\nMessage : " .$r->error->message . "\nDescription : " . $r->error->description);
|
106 |
}
|
107 |
$this->curlConnector->curl_close($request);
|
108 |
-
|
109 |
return $result;
|
110 |
}
|
111 |
|
105 |
throw new Exception("Code : " . $r->error->code . "\nMessage : " .$r->error->message . "\nDescription : " . $r->error->description);
|
106 |
}
|
107 |
$this->curlConnector->curl_close($request);
|
108 |
+
|
109 |
return $result;
|
110 |
}
|
111 |
|
lib/antidot/AIF/afs_paf_connector.php
CHANGED
@@ -5,12 +5,22 @@ require_once 'AIF/afs_paf_upload_reply.php';
|
|
5 |
require_once 'AIF/afs_bows_information_cache.php';
|
6 |
require_once 'COMMON/afs_connector_base.php';
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
/** @brief AFS PaF connector.
|
9 |
*/
|
10 |
class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterface
|
11 |
{
|
12 |
private $paf_name;
|
13 |
private $authentication;
|
|
|
14 |
|
15 |
/** @brief Construct new PaF connector.
|
16 |
*
|
@@ -40,11 +50,11 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
|
|
40 |
*
|
41 |
* @exception see @a upload_docs method.
|
42 |
*/
|
43 |
-
public function upload_doc(AfsDocument $doc, $comment=null)
|
44 |
{
|
45 |
$mgr = new AfsDocumentManager();
|
46 |
$mgr->add_document($doc);
|
47 |
-
return $this->upload_docs($mgr, $comment);
|
48 |
}
|
49 |
|
50 |
/** @brief Upload one or more documents through document manager.
|
@@ -57,13 +67,14 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
|
|
57 |
* @exception Exception when error occured while initializing or executing
|
58 |
* request.
|
59 |
*/
|
60 |
-
public function upload_docs(AfsDocumentManager $mgr, $comment=null)
|
61 |
{
|
|
|
62 |
if (! $mgr->has_document())
|
63 |
throw new InvalidArgumentException('No document to be sent');
|
64 |
|
65 |
-
|
66 |
-
$context = new AfsPafConnectorContext($mgr, $comment);
|
67 |
return new AfsPafUploadReply(json_decode($this->query($context)));
|
68 |
}
|
69 |
|
@@ -76,13 +87,14 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
|
|
76 |
{
|
77 |
$url = parent::get_base_url('service');
|
78 |
|
79 |
-
|
|
|
80 |
if (! is_null($context->comment))
|
81 |
$params['comment'] = $context->comment;
|
82 |
|
83 |
return sprintf($url . '/%d/instance/%s/paf/%s/upload?%s',
|
84 |
$this->service->id, $this->service->status, $this->paf_name,
|
85 |
-
$this->format_parameters(
|
86 |
}
|
87 |
|
88 |
/** @brief Retrieves authentication as HTTP header for new authentication policy (>=v7.7)
|
@@ -91,7 +103,7 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
|
|
91 |
*/
|
92 |
public function get_http_headers($context=null)
|
93 |
{
|
94 |
-
return $this->authentication->format_as_header_param();
|
95 |
}
|
96 |
|
97 |
public function set_post_content(&$request, $context)
|
@@ -100,11 +112,26 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
|
|
100 |
$doc_no = 1;
|
101 |
$documents = array();
|
102 |
foreach ($mgr->get_documents() as $doc) {
|
103 |
-
|
104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
$doc_no++;
|
106 |
}
|
107 |
-
|
|
|
|
|
|
|
108 |
throw new Exception('Cannot set documents to be sent');
|
109 |
}
|
110 |
}
|
@@ -140,9 +167,9 @@ class AfsPafConnectorContext
|
|
140 |
* sent to Back Office.
|
141 |
* @param $comment [in] Optional comment for uploaded files.
|
142 |
*/
|
143 |
-
public function __construct(AfsDocumentManager $doc_mgr, $comment)
|
144 |
{
|
145 |
-
|
146 |
$this->doc_mgr = $doc_mgr;
|
147 |
$this->comment = $comment;
|
148 |
}
|
5 |
require_once 'AIF/afs_bows_information_cache.php';
|
6 |
require_once 'COMMON/afs_connector_base.php';
|
7 |
|
8 |
+
|
9 |
+
abstract class PaFMode
|
10 |
+
{
|
11 |
+
const Full = 'FULL';
|
12 |
+
const Incremental = 'INCREMENTAL';
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
|
17 |
/** @brief AFS PaF connector.
|
18 |
*/
|
19 |
class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterface
|
20 |
{
|
21 |
private $paf_name;
|
22 |
private $authentication;
|
23 |
+
private $paf_mode = PaFMode::Incremental;
|
24 |
|
25 |
/** @brief Construct new PaF connector.
|
26 |
*
|
50 |
*
|
51 |
* @exception see @a upload_docs method.
|
52 |
*/
|
53 |
+
public function upload_doc(AfsDocument $doc, $comment=null, $paf_mode=PaFMode::Incremental)
|
54 |
{
|
55 |
$mgr = new AfsDocumentManager();
|
56 |
$mgr->add_document($doc);
|
57 |
+
return $this->upload_docs($mgr, $comment, $paf_mode);
|
58 |
}
|
59 |
|
60 |
/** @brief Upload one or more documents through document manager.
|
67 |
* @exception Exception when error occured while initializing or executing
|
68 |
* request.
|
69 |
*/
|
70 |
+
public function upload_docs(AfsDocumentManager $mgr, $comment=null, $paf_mode=PaFMode::Incremental)
|
71 |
{
|
72 |
+
$this->paf_mode = $paf_mode;
|
73 |
if (! $mgr->has_document())
|
74 |
throw new InvalidArgumentException('No document to be sent');
|
75 |
|
76 |
+
$version = $this->get_bo_version();
|
77 |
+
$context = new AfsPafConnectorContext($version, $mgr, $comment, $paf_mode);
|
78 |
return new AfsPafUploadReply(json_decode($this->query($context)));
|
79 |
}
|
80 |
|
87 |
{
|
88 |
$url = parent::get_base_url('service');
|
89 |
|
90 |
+
$params = $this->authentication->format_as_url_param($context->version);
|
91 |
+
$params['afs:type'] = $this->paf_mode;
|
92 |
if (! is_null($context->comment))
|
93 |
$params['comment'] = $context->comment;
|
94 |
|
95 |
return sprintf($url . '/%d/instance/%s/paf/%s/upload?%s',
|
96 |
$this->service->id, $this->service->status, $this->paf_name,
|
97 |
+
$this->format_parameters($params));
|
98 |
}
|
99 |
|
100 |
/** @brief Retrieves authentication as HTTP header for new authentication policy (>=v7.7)
|
103 |
*/
|
104 |
public function get_http_headers($context=null)
|
105 |
{
|
106 |
+
return $this->authentication->format_as_header_param($context->version);
|
107 |
}
|
108 |
|
109 |
public function set_post_content(&$request, $context)
|
112 |
$doc_no = 1;
|
113 |
$documents = array();
|
114 |
foreach ($mgr->get_documents() as $doc) {
|
115 |
+
|
116 |
+
// PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax
|
117 |
+
// See: https://wiki.php.net/rfc/curl-file-upload
|
118 |
+
if (function_exists('curl_file_create')) {
|
119 |
+
$documents['file'.$doc_no] = curl_file_create(
|
120 |
+
$doc->get_filename(),
|
121 |
+
$doc->get_mime_type(),
|
122 |
+
basename($doc->get_filename())
|
123 |
+
);
|
124 |
+
} else {
|
125 |
+
$documents['file'.$doc_no] = '@'.$doc->get_filename().';type='
|
126 |
+
.$doc->get_mime_type().';filename='.basename($doc->get_filename());
|
127 |
+
}
|
128 |
+
|
129 |
$doc_no++;
|
130 |
}
|
131 |
+
$opts = array(CURLOPT_POSTFIELDS => $documents);
|
132 |
+
$this->post_add_opts($opts);
|
133 |
+
|
134 |
+
if ($this->curlConnector->curl_setopt_array($request, $opts) === false) {
|
135 |
throw new Exception('Cannot set documents to be sent');
|
136 |
}
|
137 |
}
|
167 |
* sent to Back Office.
|
168 |
* @param $comment [in] Optional comment for uploaded files.
|
169 |
*/
|
170 |
+
public function __construct($version, AfsDocumentManager $doc_mgr, $comment)
|
171 |
{
|
172 |
+
$this->version = $version;
|
173 |
$this->doc_mgr = $doc_mgr;
|
174 |
$this->comment = $comment;
|
175 |
}
|
lib/antidot/AIF/afs_paf_live_connector.php
CHANGED
@@ -42,7 +42,7 @@ class AfsPafLiveConnector extends AfsBOWSConnector implements AfsBOWSConnectorIn
|
|
42 |
{
|
43 |
$url = parent::get_base_url('service');
|
44 |
|
45 |
-
$params =
|
46 |
$params['afs:layers'] = $context['layers'];
|
47 |
|
48 |
return sprintf($url . '/%d/instance/%s/paf/%s/process?%s',
|
@@ -70,7 +70,10 @@ class AfsPafLiveConnector extends AfsBOWSConnector implements AfsBOWSConnectorIn
|
|
70 |
$doc = $context['document'];
|
71 |
$document = '@' . $doc->get_filename() . ';type='
|
72 |
. $doc->get_mime_type();
|
73 |
-
|
|
|
|
|
|
|
74 |
throw new Exception('Cannot set documents to be sent');
|
75 |
}
|
76 |
}
|
42 |
{
|
43 |
$url = parent::get_base_url('service');
|
44 |
|
45 |
+
$params = $this->authentication->format_as_url_param($context['version']);
|
46 |
$params['afs:layers'] = $context['layers'];
|
47 |
|
48 |
return sprintf($url . '/%d/instance/%s/paf/%s/process?%s',
|
70 |
$doc = $context['document'];
|
71 |
$document = '@' . $doc->get_filename() . ';type='
|
72 |
. $doc->get_mime_type();
|
73 |
+
|
74 |
+
$opts = array(CURLOPT_POSTFIELDS => array($document));
|
75 |
+
$this->post_add_opts($opts);
|
76 |
+
if ($this->curlConnector->curl_setopt_array($request, $opts) === false) {
|
77 |
throw new Exception('Cannot set documents to be sent');
|
78 |
}
|
79 |
}
|
lib/antidot/AIF/afs_token_authentication.php
CHANGED
@@ -24,17 +24,23 @@ class AfsTokenAuthentication implements AfsAuthentication
|
|
24 |
* version information.
|
25 |
* @return array representing authentication.
|
26 |
*/
|
27 |
-
public function format_as_url_param()
|
28 |
{
|
29 |
-
|
|
|
|
|
|
|
30 |
}
|
31 |
/** @brief Formats authentication parameters.
|
32 |
* @param $version [in] Format string representation according to provided
|
33 |
* version information.
|
34 |
* @return array representing authentication.
|
35 |
*/
|
36 |
-
public function format_as_header_param()
|
37 |
{
|
38 |
-
|
|
|
|
|
|
|
39 |
}
|
40 |
}
|
24 |
* version information.
|
25 |
* @return array representing authentication.
|
26 |
*/
|
27 |
+
public function format_as_url_param($version=null)
|
28 |
{
|
29 |
+
if ('7.6' == $version)
|
30 |
+
return array('afs:login' => sprintf('login://%s@%s', $this->token, AFS_AUTH_SSO));
|
31 |
+
else
|
32 |
+
return array();
|
33 |
}
|
34 |
/** @brief Formats authentication parameters.
|
35 |
* @param $version [in] Format string representation according to provided
|
36 |
* version information.
|
37 |
* @return array representing authentication.
|
38 |
*/
|
39 |
+
public function format_as_header_param($version=null)
|
40 |
{
|
41 |
+
if ('7.6' == $version)
|
42 |
+
return array();
|
43 |
+
else
|
44 |
+
return array('access-token' => $this->token);
|
45 |
}
|
46 |
}
|
lib/antidot/AIF/afs_user_authentication.php
CHANGED
@@ -33,25 +33,27 @@ class AfsUserAuthentication implements AfsAuthentication
|
|
33 |
* version information.
|
34 |
* @return array representing authentication.
|
35 |
*/
|
36 |
-
public function format_as_url_param()
|
37 |
{
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
// // }
|
47 |
}
|
48 |
/** @brief Formats authentication parameters.
|
49 |
* @param $version [in] Format string representation according to provided
|
50 |
* version information.
|
51 |
* @return array representing authentication.
|
52 |
*/
|
53 |
-
public function format_as_header_param()
|
54 |
{
|
55 |
-
|
|
|
|
|
|
|
56 |
}
|
57 |
}
|
33 |
* version information.
|
34 |
* @return array representing authentication.
|
35 |
*/
|
36 |
+
public function format_as_url_param($version=null)
|
37 |
{
|
38 |
+
if ('7.6' == $version) {
|
39 |
+
if (is_null($this->authority))
|
40 |
+
throw new InvalidArgumentException('In version ' . $version
|
41 |
+
. ' authority parameter is mandatory!');
|
42 |
+
return array('afs:login' => sprintf('login://%s:%s@%s', $this->user, $this->password, $this->authority));
|
43 |
+
} else {
|
44 |
+
return array();
|
45 |
+
}
|
|
|
46 |
}
|
47 |
/** @brief Formats authentication parameters.
|
48 |
* @param $version [in] Format string representation according to provided
|
49 |
* version information.
|
50 |
* @return array representing authentication.
|
51 |
*/
|
52 |
+
public function format_as_header_param($version=null)
|
53 |
{
|
54 |
+
if ('7.6' == $version)
|
55 |
+
return array();
|
56 |
+
else
|
57 |
+
return array('Authorization' => 'Basic ' . base64_encode($this->user . ':' . $this->password));
|
58 |
}
|
59 |
}
|
lib/antidot/COMMON/afs_connector_base.php
CHANGED
@@ -74,6 +74,12 @@ abstract class AfsConnectorBase
|
|
74 |
{
|
75 |
return urlencode($key) . '=' . urlencode($value);
|
76 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
|
79 |
|
74 |
{
|
75 |
return urlencode($key) . '=' . urlencode($value);
|
76 |
}
|
77 |
+
|
78 |
+
protected function post_add_opts(&$opts) {
|
79 |
+
if (strpos(phpversion(), '5.6') !== false) {
|
80 |
+
$opts[CURLOPT_SAFE_UPLOAD] = false;
|
81 |
+
}
|
82 |
+
}
|
83 |
}
|
84 |
|
85 |
|
lib/antidot/afs_lib.php
CHANGED
@@ -10,7 +10,7 @@ require_once 'AFS/SEARCH/afs_response_helper.php';
|
|
10 |
require_once 'AFS/SEARCH/afs_query_coder.php';
|
11 |
|
12 |
require_once 'AFS/SEARCH/afs_text_visitor.php';
|
13 |
-
|
14 |
require_once 'AFS/SEARCH/afs_search.php';
|
15 |
require_once 'AFS/SEARCH/FILTER/afs_filter.php';
|
16 |
|
10 |
require_once 'AFS/SEARCH/afs_query_coder.php';
|
11 |
|
12 |
require_once 'AFS/SEARCH/afs_text_visitor.php';
|
13 |
+
require_once 'AFS/SEARCH/afs_introspection.php';
|
14 |
require_once 'AFS/SEARCH/afs_search.php';
|
15 |
require_once 'AFS/SEARCH/FILTER/afs_filter.php';
|
16 |
|
lib/antidot/afs_version.php
CHANGED
@@ -15,7 +15,7 @@ define('AFS_API_VERSION_MINOR', 16);
|
|
15 |
/** @brief API fix version number.
|
16 |
*
|
17 |
* You should increase this number as soon as a bug is fixed.*/
|
18 |
-
define('AFS_API_VERSION_FIX',
|
19 |
|
20 |
/** @brief API full version number. */
|
21 |
define('AFS_API_VERSION', implode('.', array(AFS_API_VERSION_MAJOR, AFS_API_VERSION_MINOR, AFS_API_VERSION_FIX)));
|
15 |
/** @brief API fix version number.
|
16 |
*
|
17 |
* You should increase this number as soon as a bug is fixed.*/
|
18 |
+
define('AFS_API_VERSION_FIX', 6);
|
19 |
|
20 |
/** @brief API full version number. */
|
21 |
define('AFS_API_VERSION', implode('.', array(AFS_API_VERSION_MAJOR, AFS_API_VERSION_MINOR, AFS_API_VERSION_FIX)));
|
lib/antidot/doc/data/raw_example.php
CHANGED
@@ -2,30 +2,355 @@
|
|
2 |
/** @file raw_example.php
|
3 |
* @example raw_example.php
|
4 |
*/
|
5 |
-
require_once "
|
6 |
-
$search = new AfsSearch('
|
7 |
$query = $search->build_query_from_url_parameters();
|
8 |
$query = $query->set_lang('fr'); // language is set manually in order to get spellcheck results
|
9 |
$query = $query->set_multi_selection_facets('classification');
|
10 |
$query = $query->set_mono_selection_facets('afs:lang', 'has_variants', 'has_image');
|
11 |
$query = $query->set_facet_order('price_eur', 'marketing', 'classification', 'has_variants', 'has_image');
|
12 |
$query = $query->set_facets_values_sort_order(AfsFacetValuesSortMode::ITEMS, AfsSortOrder::DESC);
|
13 |
-
$query = $query->set_page(2, 'Catalog');
|
14 |
$helper = $search->execute($query);
|
15 |
$generated_url = $search->get_generated_url();
|
16 |
$clustering_is_active = $query->has_cluster();
|
|
|
|
|
17 |
|
18 |
-
$reply_set = $helper->get_replyset('Catalog');
|
19 |
-
$pager = $reply_set->get_pager();
|
20 |
-
$pages = $pager->get_all_pages();
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
if ($helper->has_replyset()) {
|
23 |
-
$replyset = $helper->get_replyset(
|
24 |
if ($replyset->has_facet()) {
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
}
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
/** @file raw_example.php
|
3 |
* @example raw_example.php
|
4 |
*/
|
5 |
+
require_once "PHP_API/afs_lib.php";
|
6 |
+
$search = new AfsSearch('eval.partners.antidot.net', 48000);
|
7 |
$query = $search->build_query_from_url_parameters();
|
8 |
$query = $query->set_lang('fr'); // language is set manually in order to get spellcheck results
|
9 |
$query = $query->set_multi_selection_facets('classification');
|
10 |
$query = $query->set_mono_selection_facets('afs:lang', 'has_variants', 'has_image');
|
11 |
$query = $query->set_facet_order('price_eur', 'marketing', 'classification', 'has_variants', 'has_image');
|
12 |
$query = $query->set_facets_values_sort_order(AfsFacetValuesSortMode::ITEMS, AfsSortOrder::DESC);
|
|
|
13 |
$helper = $search->execute($query);
|
14 |
$generated_url = $search->get_generated_url();
|
15 |
$clustering_is_active = $query->has_cluster();
|
16 |
+
$nsmap = array('ns' => 'http://ref.antidot.net/store/afs#');
|
17 |
+
?>
|
18 |
|
|
|
|
|
|
|
19 |
|
20 |
+
<html>
|
21 |
+
<head>
|
22 |
+
<title>Antidot PHP API - Raw example</title>
|
23 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
24 |
+
<meta charset="UTF-8">
|
25 |
+
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
|
26 |
+
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css">
|
27 |
+
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
28 |
+
<!--[if lt IE 9]>
|
29 |
+
<script src="../../assets/js/html5shiv.js"></script>
|
30 |
+
<script src="../../assets/js/respond.min.js"></script>
|
31 |
+
<![endif]-->
|
32 |
+
</head>
|
33 |
+
<body>
|
34 |
+
<div>
|
35 |
+
<a href="<?php echo $generated_url; ?>" target="_blank"><?php echo $generated_url; ?></a>
|
36 |
+
</div>
|
37 |
+
<div class="page-header">
|
38 |
+
<h1>Raw example <small>based on the Antidot PHP API</small></h1>
|
39 |
+
</div>
|
40 |
+
<!-- ####################### Search box ########################### -->
|
41 |
+
<div class="row">
|
42 |
+
<div class="col-md-5"></div>
|
43 |
+
<div class="input-group col-md-2">
|
44 |
+
<form method="get" action="" role="form" class="input-group">
|
45 |
+
<span class="input-group-addon">Search</span>
|
46 |
+
<input type="search" name="query" class="form-control" placeholder="Keywords" />
|
47 |
+
<span class="input-group-btn">
|
48 |
+
<button class="btn btn-primary" type="submit"><span class="glyphicon glyphicon-search"></span></button>
|
49 |
+
</span>
|
50 |
+
</form>
|
51 |
+
</div>
|
52 |
+
</div>
|
53 |
+
|
54 |
+
<!-- ####################### Current filter parameters ########################### -->
|
55 |
+
<?php
|
56 |
+
$params = $query->get_parameters(false);
|
57 |
+
if (array_key_exists('filter', $params) && is_array($params['filter'])) {
|
58 |
+
echo '
|
59 |
+
<div class="row">
|
60 |
+
<div class="col-md-8">';
|
61 |
+
foreach ($params['filter'] as $filter => $values) {
|
62 |
+
echo '
|
63 |
+
<ul>Filter: <strong>' . $filter . '</strong>';
|
64 |
+
foreach ($values as $value) {
|
65 |
+
echo '
|
66 |
+
<li>Value: ' . $value . '</li>';
|
67 |
+
}
|
68 |
+
echo '
|
69 |
+
</ul>';
|
70 |
+
}
|
71 |
+
echo '
|
72 |
+
</div>
|
73 |
+
</div>';
|
74 |
+
} ?>
|
75 |
+
|
76 |
+
<!-- ####################### Promote ########################### -->
|
77 |
+
<?php
|
78 |
+
if ($helper->has_promote()) {
|
79 |
+
echo '
|
80 |
+
<div class="row">
|
81 |
+
<div class="col-md-3"></div>';
|
82 |
+
foreach ($helper->get_promotes() as $promote) {
|
83 |
+
echo '
|
84 |
+
<div class="col-md-2">
|
85 |
+
<h4><span class="label label-danger">' . $promote->get_title() . '</span></h4>
|
86 |
+
<p>' . $promote->get_abstract() . '</p>
|
87 |
+
<ul>Some custom data:
|
88 |
+
<li>tag: ' . $promote->get_custom_data('tag') . '</li>
|
89 |
+
<li>identifier: ' . $promote->get_custom_data('id') . '</li>
|
90 |
+
</ul>
|
91 |
+
<ul>Or loop on custom data:';
|
92 |
+
foreach ($promote->get_custom_data() as $key => $value) {
|
93 |
+
echo '
|
94 |
+
<li><strong>' . $key . '</strong>: ' . $value . '</li>';
|
95 |
+
}
|
96 |
+
echo '
|
97 |
+
</ul>
|
98 |
+
</div>';
|
99 |
+
}
|
100 |
+
echo '
|
101 |
+
</div>
|
102 |
+
</div>';
|
103 |
+
} ?>
|
104 |
+
|
105 |
+
<?php
|
106 |
+
// checks whether there is at least one replyset
|
107 |
if ($helper->has_replyset()) {
|
108 |
+
$replyset = $helper->get_replyset(); // Retrieves only first replyset
|
109 |
if ($replyset->has_facet()) {
|
110 |
+
/* if (in_array('facets', $replyset)) */
|
111 |
+
?>
|
112 |
+
<div class="row">
|
113 |
+
<div class="col-md-3">
|
114 |
+
<h2>Filters</h2>
|
115 |
+
<!-- ####################### Filters ########################### -->
|
116 |
+
<?php
|
117 |
+
foreach ($replyset->get_facets() as $facet) {
|
118 |
+
/* foreach ($replyset->facets->facet as $facet) */
|
119 |
+
?>
|
120 |
+
<div class="panel panel-default">
|
121 |
+
<div class="panel-heading"><?php echo $facet->get_label() ?></div> <!-- $facet->labels[0]->label -->
|
122 |
+
<div class="panel-body">
|
123 |
+
<div class="list-group">
|
124 |
+
<div class="list-group">
|
125 |
+
<?php
|
126 |
+
foreach ($facet->get_elements() as $value) {
|
127 |
+
/* $item = null;
|
128 |
+
* if ($facet->{'afs:t'} == 'FacetTree') {
|
129 |
+
* $item = 'node';
|
130 |
+
* } elif ($facet->{'afs:t'} == 'FacetInterval') {
|
131 |
+
* $item = 'interval;
|
132 |
+
* } else {
|
133 |
+
* throw new Exception('Unknown facet layout: ' . $facet->{'afs:t'});
|
134 |
+
* }
|
135 |
+
* foreach ($facet->$item as $value) */
|
136 |
+
?>
|
137 |
+
<a class="list-group-item <?php echo ($value->active ? 'active' : '') ?>" href="<?php echo $value->link ?>"><?php echo $value->label ?><span class="badge"><?php echo $value->count ?></span></a>
|
138 |
+
<!-- $active = $query->has_filter($facet->id, $value->key);
|
139 |
+
...
|
140 |
+
-->
|
141 |
+
<?php } ?>
|
142 |
+
</div>
|
143 |
+
</div>
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
<?php } ?>
|
147 |
+
</div>
|
148 |
+
<?php } ?>
|
149 |
+
|
150 |
+
<div class="col-md-9">
|
151 |
+
<div class="row page-header">
|
152 |
+
<div class="col-md-1"></div>
|
153 |
+
<div class="col-md-2">
|
154 |
+
<h2>Results <span class="label label-success"><?php echo $replyset->get_meta()->get_total_replies() ?></span></h2>
|
155 |
+
<h4><span class="label label-info">Duration <?php echo $replyset->get_meta()->get_duration() ?> ms</span></h4>
|
156 |
+
</div>
|
157 |
+
<div class="col-md-1"></div>
|
158 |
+
<div class="col-md-2">
|
159 |
+
<!-- ####################### Relevance ########################### -->
|
160 |
+
<?php
|
161 |
+
if ($query->has_sort(AfsSortBuiltins::RELEVANCE)) {
|
162 |
+
if ($query->get_sort_order(AfsSortBuiltins::RELEVANCE) == AfsSortOrder::ASC) {
|
163 |
+
$relevance_icon = 'glyphicon-arrow-up';
|
164 |
+
$relevance_query = $query->add_sort(AfsSortBuiltins::RELEVANCE, AfsSortOrder::DESC);
|
165 |
+
} else {
|
166 |
+
$relevance_icon = 'glyphicon-arrow-down';
|
167 |
+
$relevance_query = $query->add_sort(AfsSortBuiltins::RELEVANCE, AfsSortOrder::ASC);
|
168 |
+
}
|
169 |
+
} else {
|
170 |
+
$relevance_query = $query->add_sort(AfsSortBuiltins::RELEVANCE, AfsSortOrder::ASC);
|
171 |
+
$relevance_icon = 'glyphicon-arrow-down';
|
172 |
+
}
|
173 |
+
$relevance_link = $search->get_helpers_configuration()->get_query_coder()->generate_link($relevance_query);
|
174 |
+
?>
|
175 |
+
<a href="<?php echo $relevance_link ?>" class="btn btn-default btn-lg active" role="button"><span class="glyphicon <?php echo $relevance_icon; ?>"></span> Relevance</a>
|
176 |
+
</div>
|
177 |
+
<div class="col-md-2">
|
178 |
+
<?php
|
179 |
+
$query_coder = $search->get_helpers_configuration()->get_query_coder();
|
180 |
+
if ($clustering_is_active) {
|
181 |
+
$cluster_query = $query->unset_cluster();
|
182 |
+
$cluster_link = $query_coder->generate_link($query->unset_cluster());
|
183 |
+
$cluster_label = 'Remove clusters';
|
184 |
+
} else {
|
185 |
+
$cluster_link = $query_coder->generate_link($query->set_cluster('marketing', 1)->set_overspill());
|
186 |
+
$cluster_label = 'Create cluster on "marketing" filter';
|
187 |
+
} ?>
|
188 |
+
<a href="<?php echo $cluster_link ?>" class="btn btn-default btn-lg active" role="button"><?php echo $cluster_label ?></a>
|
189 |
+
</div>
|
190 |
+
</div>
|
191 |
+
|
192 |
+
<!-- ####################### Clusters ########################### -->
|
193 |
+
<?php
|
194 |
+
if ($clustering_is_active) {
|
195 |
+
foreach ($replyset->get_clusters() as $cluster) {
|
196 |
+
echo '
|
197 |
+
<div class="row">
|
198 |
+
<div class="col-md-1"></div>
|
199 |
+
<div class="col-md-5">
|
200 |
+
<h3>
|
201 |
+
<span class="label label-success">
|
202 |
+
<a href="' . $query_coder->generate_link($cluster->get_query()) . '">' . $cluster->get_label() . '<a>
|
203 |
+
</span>
|
204 |
+
</h3>
|
205 |
+
</div>
|
206 |
+
</div>
|
207 |
+
<ul class="list-unstyled">';
|
208 |
+
foreach ($cluster->get_replies() as $reply) {
|
209 |
+
echo '
|
210 |
+
<li>
|
211 |
+
<h3>' . $reply->get_title() . '</h3>
|
212 |
+
<p><a href="' . $reply->get_uri() . '">' . $reply->get_uri() . '</a></p>
|
213 |
+
<p>' . $reply->get_abstract() . '</p>
|
214 |
+
<p>Some client data:
|
215 |
+
<ul>
|
216 |
+
<li>Name: ' . $reply->get_clientdata()->get_value('/ns:product/ns:name', $nsmap) . '</li>
|
217 |
+
<li>Availability: ' . $reply->get_clientdata()->get_value('/ns:product/ns:is_available', $nsmap) . '</li>
|
218 |
+
<li>Prices:
|
219 |
+
<ul>';
|
220 |
+
// Here multiple values are retrieved from client data
|
221 |
+
foreach ($reply->get_clientdata()->get_values('/ns:product/ns:prices/ns:price', $nsmap) as $value)
|
222 |
+
echo '<li>' . $value . '</li>';
|
223 |
+
echo '
|
224 |
+
</ul>
|
225 |
+
</li>
|
226 |
+
</ul>
|
227 |
+
</p>
|
228 |
+
</li>';
|
229 |
+
}
|
230 |
+
echo '
|
231 |
+
</ul>';
|
232 |
}
|
233 |
+
echo '
|
234 |
+
<div class="row">
|
235 |
+
<div class="col-md-1"></div>
|
236 |
+
<div class="col-md-5">
|
237 |
+
<h3><span class="label label-success">Other results</span></h3>
|
238 |
+
</div>
|
239 |
+
</div>';
|
240 |
+
} ?>
|
241 |
+
|
242 |
+
<!-- ####################### Replies ########################### -->
|
243 |
+
<?php
|
244 |
+
echo '
|
245 |
+
<ul class="list-unstyled">';
|
246 |
+
foreach ($replyset->get_replies() as $reply) {
|
247 |
+
?>
|
248 |
+
<li>
|
249 |
+
<h3><?php echo $reply->get_title() ?></h3>
|
250 |
+
<p><a href="<?php echo $reply->get_uri() ?>"><?php echo $reply->get_uri() ?></a></p>
|
251 |
+
<p><?php echo $reply->get_abstract() ?></p>
|
252 |
+
<p>Some client data:
|
253 |
+
<ul>
|
254 |
+
<li>Name: <?php echo $reply->get_clientdata()->get_value('/ns:product/ns:name', $nsmap) ?></li>
|
255 |
+
<li>Availability: <?php echo $reply->get_clientdata()->get_value('/ns:product/ns:is_available', $nsmap) ?></li>
|
256 |
+
<li>Prices:
|
257 |
+
<ul>
|
258 |
+
<?php
|
259 |
+
// Here multiple values are retrieved from client data
|
260 |
+
foreach ($reply->get_clientdata()->get_values('/ns:product/ns:prices/ns:price', $nsmap) as $value) {
|
261 |
+
echo '<li>' . $value . '</li>';
|
262 |
+
} ?>
|
263 |
+
</ul>
|
264 |
+
</li>
|
265 |
+
</ul>
|
266 |
+
</p>
|
267 |
+
</li>
|
268 |
+
<?php } ?>
|
269 |
+
</ul>
|
270 |
+
</div>
|
271 |
+
</div>
|
272 |
+
|
273 |
+
<!-- ####################### Pager ########################### -->
|
274 |
+
<?php
|
275 |
+
if ($replyset->has_pager()) {
|
276 |
+
$pager = $replyset->get_pager();
|
277 |
+
?>
|
278 |
+
<div class="row">
|
279 |
+
<div class="row">
|
280 |
+
<div class="col-md-5"></div>
|
281 |
+
<div class="input-group col-md-3">
|
282 |
+
<ul class="pagination">
|
283 |
+
<?php
|
284 |
+
foreach ($pager->get_all_pages() as $page => $url) {
|
285 |
+
if ($page == $pager->get_current_no()) {
|
286 |
+
$active = 'active';
|
287 |
+
} else {
|
288 |
+
$active = '';
|
289 |
+
}
|
290 |
+
?>
|
291 |
+
<li class="<?php echo $active ?>"><a href="<?php echo $url ?>"><?php echo $page ?></a></li>
|
292 |
+
<?php } ?>
|
293 |
+
|
294 |
+
</ul>
|
295 |
+
</div>
|
296 |
+
</div>
|
297 |
+
<?php } ?>
|
298 |
+
|
299 |
+
</div>
|
300 |
+
|
301 |
+
<!-- ####################### Spellcheck ########################### -->
|
302 |
+
<?php } elseif ($helper->has_spellcheck()) { // if no replyset, let's check spellcheck ?>
|
303 |
+
<div class="row">
|
304 |
+
<div class="col-md-9">
|
305 |
+
<div class="row">
|
306 |
+
<div class="col-md-1"></div>
|
307 |
+
<div class="col-md-4">
|
308 |
+
<h2>Typo ?</h2>
|
309 |
+
</div>
|
310 |
+
</div>
|
311 |
+
<?php
|
312 |
+
foreach ($helper->get_spellchecks() as $feed => $suggestions) {
|
313 |
+
?>
|
314 |
+
<div class="row">
|
315 |
+
<div class="col-md-6">
|
316 |
+
<h4><?php echo $feed ?></h4>
|
317 |
+
<ul class="list-unstyled">
|
318 |
+
<?php
|
319 |
+
foreach ($suggestions as $suggest) {
|
320 |
+
?>
|
321 |
+
<li>
|
322 |
+
<h3>Did you mean...</h3>
|
323 |
+
<p><a href="<?php echo $suggest->get_link() ?>"><?php echo $suggest->get_formatted_text() ?></a></p>
|
324 |
+
</li>
|
325 |
+
<?php } ?>
|
326 |
+
</ul>
|
327 |
+
</div>
|
328 |
+
</div>
|
329 |
+
<?php } ?>
|
330 |
+
</div>
|
331 |
+
</div>
|
332 |
+
<!-- ####################### Error ########################### -->
|
333 |
+
<?php } elseif ($helper->in_error()) { // no spellcheck... is there any error? ?>
|
334 |
+
<div class="row">
|
335 |
+
<div class="col-md-9">
|
336 |
+
<div class="row">
|
337 |
+
<div class="col-md-1"></div>
|
338 |
+
<div class="col-md-4">
|
339 |
+
<h2>Really bad error occured</h2>
|
340 |
+
</div>
|
341 |
+
</div>
|
342 |
+
<div class="row">
|
343 |
+
<div class="col-md-10">
|
344 |
+
<h2><?php echo $helper->get_error_msg() ?></h2>
|
345 |
+
</div>
|
346 |
+
</div>
|
347 |
+
</div>
|
348 |
+
</div>
|
349 |
+
<?php } ?>
|
350 |
+
|
351 |
+
<!-- jQuery (necessary for Bootstrap\'s JavaScript plugins) -->
|
352 |
+
<script src="//code.jquery.com/jquery.js"></script>
|
353 |
+
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
354 |
+
<script src="js/bootstrap.min.js"></script>
|
355 |
+
</body>
|
356 |
+
</html>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Antidot_Antidot</name>
|
4 |
-
<version>1.2.
|
5 |
<stability>stable</stability>
|
6 |
<license>LGPL</license>
|
7 |
<channel>community</channel>
|
@@ -17,9 +17,9 @@ Prevent to export empty categories node&#xD;
|
|
17 |
Add cdata for variant name&#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>
|
21 |
-
<time>
|
22 |
-
<contents><target name="mage"><dir name="shell"><file name="antidotExport.php" hash="a4e184cdf1add5d42484e6997ea6f59c"/><file name="antidotExportCategory.php" hash="10de34988223fc8ca26e6f30c4070733"/><file name="antidotExportInc.php" hash="18f1b60b93245e2daf423c614dcd7efa"/><file name="antidotExportProduct.php" hash="9ddd7f0ba8e54b24665a32d26e5231b4"/></dir><dir name="i18n"><file name="de_DE" hash="f166a5ff29213a44fca77277b053897e"/><file name="en_US" hash="63c821044fda6f7c2a26dc84670b25bd"/><file name="es_ES" hash="f9319039054998955d63d51ed0930f3f"/><file name="fr_FR" hash="632367797f2fa9fef06e0b0c69377e01"/><file name="i18n.php" hash="0780b44563432f6e70de78f7a9d60f54"/></dir></target><target name="magecommunity"><dir name="MDN"><dir name="Antidot"><dir name="Block"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2158b991ccdf394c8cd47cab00829e4d"/><file name="Boolean.php" hash="d17b08e1ec9047cf4050442ababd0808"/><file name="Category.php" hash="78cb53233ad74a2b5496d6f7857d8837"/><file name="Decimal.php" hash="75b31617bca2a8f20ee7fe113e3534f2"/><file name="Price.php" hash="244068a33e8ba64423c126baf883d2b5"/></dir><file name="View.php" hash="bbdd9bb31663415001ab3751c6737cde"/></dir></dir><dir name="Catalogsearch"><file name="Banner.php" hash="cfc866a6c1cfb2ee9cb690bed84781fe"/><file name="Category.php" hash="e9605415ba85929115a443b1b4f00ab0"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2b274bf7d8f8dbd915bdf73f65e694fc"/></dir></dir><file name="Layer.php" hash="3ba32c0f20c4b7447229843f45b06d3f"/><file name="Result.php" hash="887530a08ce375d1722fc327eebc64fc"/></dir><dir name="Html"><file name="Select.php" hash="fc7fb19df1dd378d4e9e0860d2d47d07"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="4f00570d46d27d1cf89785e8db42a332"/><file name="Forward.php" hash="3917a1882c3d55837138782e60791167"/><file name="PushArticles.php" hash="c7d0ce7326c7f706c0432a2ffb57fee2"/><file name="PushCategories.php" hash="2caeb40ae6a5abe77be2ca666c01ed81"/><file name="PushProducts.php" hash="3eb6538ab55257b0a83021ff1ecbf632"/><file name="RestoreTemplate.php" hash="ffbbb0a73ff1ede611262a6a4da1a188"/><file name="ShowXml.php" hash="417ba0c9c62d8070b63f90397887dcc0"/></dir><dir name="Fieldset"><file name="Notice.php" hash="47601ca6e7732a9d22ecd25f3f1cd7bb"/></dir><dir name="Form"><dir name="Field"><dir name="Array"><file name="Additional.php" hash="d62316e3631c1c2b6a0119134c8002a8"/><file name="AdditionalFeed.php" hash="dcfb6d37d765a10e4a07465e70133dda"/><file name="ArticleAdditional.php" hash="38c62d610f585c460151841f7350348b"/><file name="ArticleIdentifier.php" hash="ec9479fd1ca087a1fe924795cc9ff5f6"/><file name="DefaultSort.php" hash="4989d99a73f57bed1fb994060cc38a72"/><file name="Facet.php" hash="7217f2296afaf11f514e4212a7a82cb9"/><file name="Identifier.php" hash="a9fa99227182bd72e59c9a315d580247"/><file name="ProductAdditionalFacet.php" hash="8d46e427d9efbac7e6ba04fdc88d4728"/><file name="ProductAdditionalField.php" hash="9c9f9c9c1c940963e1a24c039a392cc4"/><file name="ProductIdentifier.php" hash="d30809119cb35018697533075f7ee485"/><file name="Sort.php" hash="f986fbb048bf3f6aec813cdc1c70ec15"/></dir><file name="CategoryAttribute.php" hash="c119ca65f23950e7abb1f0d60e8b4755"/><file name="ProductAttribute.php" hash="6a61b98a9f6ac883a5e162e3edab300d"/></dir></dir><dir name="Html"><file name="Export.php" hash="f36beeca11c51e1a2e9678955d8cf1b8"/><file name="ShowXml.php" hash="7b70f39937aa9d24336edde6bdbdf97c"/><file name="Version.php" hash="34c624c382f3061cf322cfed52c416ac"/></dir></dir></dir></dir><dir name="Helper"><file name="Antidot.php" hash="7bbd2866c65a847e1415badb1ef0d015"/><dir name="CatalogSearch"><file name="Data.php" hash="81cc908609e68035d5714488f913e688"/></dir><file name="Compress.php" hash="12fa64a9c9f519a3f249954ab780e01c"/><file name="Data.php" hash="db586edb739ad7f7b0281a887e252a61"/><dir name="Enterprise"><dir name="Search"><file name="Data.php" hash="8bfe0146c64511f86cb796638b65112f"/></dir></dir><file name="LogExport.php" hash="6d6b262327bf1d920fc2b5b112edfef6"/><dir name="ManaFilters"><file name="Data.php" hash="f4f4e92c5e33c6142904cf27a75f6d23"/></dir><file name="Url.php" hash="1d2ee02a8e135bfc4b866f5219f62acd"/><file name="XmlWriter.php" hash="66cf65d950caddf895c823c5575a1912"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="3cd18414abccea60c5497931bc95e21e"/><file name="Boolean.php" hash="dd0414e0d96833bec6e32aac321c2763"/><file name="Category.php" hash="4dea470cb36708e0ae4b95bd0a24a85f"/><file name="Decimal.php" hash="b9b1e2cff1d0332fab77d101dca4c3d2"/><file name="Item.php" hash="c89bbca267af18a0447e0daf3e7cc8eb"/><file name="Price.php" hash="7529be0313a19896993f92eeb9dfc8a9"/></dir></dir><file name="Layer.php" hash="706000dd944a45f30826eccba2942862"/></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="a83d6761a949c8196cba33948a48c8bf"/></dir></dir><file name="Layer.php" hash="b5aa8e2cc24f1b1362749049f1cdec32"/><dir name="Resource"><file name="Attribute.php" hash="80d2a34d746f307109b6bf910b0f2958"/></dir></dir><dir name="Export"><file name="Abstract.php" hash="76d9e775c5cbdcb45c02cd2af1779b60"/><file name="Article.php" hash="3fd18081b1013360d2f151931e16a4eb"/><file name="Category.php" hash="e4c1f09bd75f6cda693ab6aab084e5b4"/><file name="Context.php" hash="d63d33f2dfa968e90ed11a6f76f41a34"/><dir name="Model"><dir name="Product"><file name="Link.php" hash="6f764a25fcde9b315d10f46189a428d1"/><dir name="Type"><file name="Configurable.php" hash="4bb627c1f5d1fbadd37a6b54e681406f"/><file name="Grouped.php" hash="8770d1ddf8228a2db136325da494de51"/></dir></dir><file name="Product.php" hash="a56c7e50bbd95c57570e38d911976962"/></dir><file name="Product.php" hash="008cb58f7dab43f01ec5a2ef65dd7d58"/></dir><file name="Observer.php" hash="dbe10b9c6996878f06db435b6321d8f2"/><dir name="Resource"><file name="Advanced.php" hash="989026021706cbcfb269451187002c19"/><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="a761f935c0e3c4da1fec329c2c80f5b1"/></dir></dir><dir name="Engine"><file name="Abstract.php" hash="a341a04e6c7fe367a7da0e91ce205034"/><file name="Antidot.php" hash="eda85b16354da0f3d87cb4186c5bad43"/></dir><dir name="Export"><dir name="Product"><file name="Collection.php" hash="dfa31e927797fb1887aec5fcec2747d1"/><dir name="Link"><dir name="Product"><file name="Collection.php" hash="a50b67c39520422770b4b16d4ab51ba0"/></dir></dir><dir name="Type"><dir name="Configurable"><dir name="Product"><file name="Collection.php" hash="79d359ae0e176d3499225452d983c210"/></dir></dir></dir></dir><file name="Product.php" hash="f3e87d35ea55e911948f3909274e29b3"/></dir></dir><dir name="Search"><file name="Abstract.php" hash="fd71154b987b16f8d13bc3e10a3faeac"/><file name="Search.php" hash="823655bc366531ba97bd707adc723aa9"/><file name="Suggest.php" hash="6caac0bb7683b1d330049ed0d606f36f"/></dir><dir name="System"><dir name="Config"><file name="ArticleAttribute.php" hash="f3a9596d45f275299f16530a56845c96"/><dir name="Backend"><file name="Engine.php" hash="68c93651655a77c74fd79d1de6d19be3"/></dir><file name="CategoryAttribute.php" hash="9f19b99e16c99b0e8052b1e31d2a6317"/><file name="Dir.php" hash="c80d83280ebc5ab91fd45d246ec47ba3"/><file name="DisableEnable.php" hash="6d08f33a1580b2fd1d58d87248104166"/><file name="ExportType.php" hash="940a74862d74f7873258b35c33b7b87a"/><file name="Facet.php" hash="8b771072a32f32e81a087581ace7fd72"/><file name="Number.php" hash="7985ea6c495a35173d68291389319f93"/><file name="Options.php" hash="06930da994dec4bb05ebc3f3e8c8abb8"/><file name="ProductAttribute.php" hash="c74ad00177c3a12b03c8684928d12c40"/><file name="PromoteRedirect.php" hash="c167973ea7a0ef09f0e5fa0fd0a08926"/><file name="Sort.php" hash="e0d2c1e72f56894b75baebcb6c4b8609"/><dir name="Source"><file name="Acpengine.php" hash="fdf8d5030d8823c325d707d8bb5b7208"/><file name="Engine.php" hash="0491592c4612779ffc7890456f6b946d"/><file name="Redirect.php" hash="ea6cb67ab98a0303d5c30c49099f5708"/></dir><dir name="Suggest"><file name="Type.php" hash="cef491efdb9fcef86d0df75030206a78"/></dir><file name="WSStatus.php" hash="ff4954e15d75dd3139290d96773d0abf"/></dir></dir><dir name="Transport"><file name="Abstract.php" hash="3272c44b08523a9836aa15c835e2ed25"/><file name="File.php" hash="4b0b2ef7940fc8cd60e96cc74a2c84f0"/><file name="Ftp.php" hash="73056ec4decef2fe9c459641e0a0ae7e"/><file name="Http.php" hash="61f334dead64bcc6b9882e1f72d64eb8"/><file name="Interface.php" hash="40cfaad8efccad7dc3ff7a920dee871a"/></dir><file name="Transport.php" hash="dfbe060f5575304736ba805f597f7393"/></dir><dir name="Test"><dir name="Block"><dir name="Catalogsearch"><file name="Layer.php" hash="49725570e661d72db50daab46e0e18af"/><dir name="Result"><dir name="fixtures"><file name="testSetListOrders.yaml" hash="3077a3199216b898963f1bcf9f4d7396"/></dir></dir><file name="Result.php" hash="a780e377612d4481c4f0c96311005620"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="dcbfefb440b8512b1298b624a3582076"/></dir></dir></dir></dir><dir name="Helper"><dir name="CatalogSearch"><file name="Data.php" hash="a40c1e58b5000432763aa07dd49d4b5d"/></dir><file name="Data.php" hash="9c21bd8bfa43dab48d95a886812587e6"/></dir><dir name="Model"><dir name="Export"><dir name="Abstract"><dir name="fixtures"><file name="testGarbageCollection.yaml" hash="de6c8672be0c24a102ebfed004f2361b"/></dir></dir><file name="Abstract.php" hash="a0768006a76b1e3004f8839988dc2d4d"/><file name="Article.php" hash="157dc12608521f1ad255142f0143ef18"/><dir name="Category"><dir name="fixtures"><file name="testEmptyFile.yaml" hash="9573e620466cfe8260f8a87e274c8261"/></dir></dir><file name="Category.php" hash="42164121852311eb200af116e0a20d58"/><dir name="Context"><dir name="fixtures"><file name="testContext.yaml" hash="d912a7bd71a209f591043a3644de3ceb"/></dir></dir><file name="Context.php" hash="c5af056a47ee7acdacbe7072a825ce90"/><dir name="Model"><dir name="Product"><dir name="fixtures"><file name="testGetIsInStock.yaml" hash="b9a95c8ad5b3999221d027192d79fe55"/></dir></dir><file name="Product.php" hash="a3b6765c5c663caa1a50dc511c78db5e"/></dir><dir name="Product"><dir name="fixtures"><file name="testInactiveParentCategory.yaml" hash="3ef9bcefae6399ccdc23e026746a1743"/><file name="testWriteImageUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWritePricesFixedtax.yaml" hash="698da07581100c1eff5a1a85e2be6d3b"/><file name="testWriteProductNoVariant.yaml" hash="626a27b35977e5a52b02f85011c5e216"/><file name="testWriteProductNoVariantInStock.yaml" hash="9aa7736a422276842350ac73c6f4ba55"/><file name="testWriteProductUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWriteProperties.yaml" hash="d434749b80908bbceefd5781e2d0e998"/><file name="testWriteXml.yaml" hash="8a702dfbd07f2d773d991679a2c219a0"/></dir><dir name="providers"><file name="testWriteImageUrl.yaml" hash="666c33585c611bcc0b0ebe6e87dce1fc"/><file name="testWriteProductUrl.yaml" hash="18f511460efea04586fc888f5c85b3ea"/></dir></dir><file name="Product.php" hash="032f8ca084fb1ec71aeac8ca0ffb2d6f"/></dir><dir name="Observer"><dir name="fixtures"><file name="testGetDefaultContext.yaml" hash="d77af9c502bf7e7c90fdb3aad609c087"/></dir><dir name="providers"><file name="testGetOwnerForFilename.yaml" hash="c5c07e73f536f9ffacc0c3ff6b5a13d1"/></dir></dir><file name="Observer.php" hash="c69240a8fe5a637c3aa447c94550e268"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="2ad006d8e096ade9043a9a370177782d"/></dir></dir><dir name="Engine"><dir name="Antidot"><dir name="fixtures"><file name="testFormatResult.yaml" hash="f4aa0a050156b55c5733c5d30f4255ed"/></dir></dir><file name="Antidot.php" hash="5dff5053128f275557772330716da04c"/></dir></dir><dir name="Search"><dir name="Suggest"><dir name="fixtures"><file name="testSuggest.yaml" hash="e845f0311d93608e3221fb0678f429cc"/></dir></dir><file name="Suggest.php" hash="d97172c8ec094146f953a9704f8e1936"/></dir><dir name="System"><dir name="Config"><dir name="Facet"><dir name="fixtures"><file name="testToOptionArray.yaml" hash="b76143bd57f68be024a31d905da9cabe"/></dir></dir><file name="Facet.php" hash="0115c27c5881ff9d35f18a251686dc68"/><dir name="Sort"><dir name="expectations"><file name="testToOptionArray.yaml" hash="13fc5b4c17962fb267f443d03a2219b2"/></dir><dir name="fixtures"><file name="testToOptionArray1.yaml" hash="3160d541123737644dfea5c70db35f41"/><file name="testToOptionArray2.yaml" hash="74fd97f93892920908ab7eab0124eeb6"/><file name="testToOptionArray3.yaml" hash="fe9c8a5da75f3c0d66304a39c473a3bb"/></dir></dir><file name="Sort.php" hash="3435402ae9aa30d18c8265433d643d21"/><dir name="Source"><file name="Acpengine.php" hash="482bcb056949d9d52eda623ee9bdca0d"/><file name="Engine.php" hash="dcbee0d360773c28faa8a894cbed22ad"/><file name="Redirect.php" hash="2dbbaecbb8453ba1025e2e9b5a5957c3"/></dir></dir></dir><dir name="Transport"><file name="Http.php" hash="e517ff2ab7ddf5ba61bfe6ffb0227ad9"/><dir name="fixtures"><file name="testSend.yaml" hash="af0bc3c97a109e63aaf018f57ddad6cd"/></dir></dir></dir><file name="PHPUnitUtil.php" hash="2a128a7c19f4c37cb9dd7fc60e679693"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Antidot"><file name="PushController.php" hash="6dc15f43dbaef76efa4e0462cf6cf3aa"/></dir></dir><dir name="Front"><file name="SearchController.php" hash="d220bd4628830ea238775ed9788e0674"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="7190cd220b09b657ba9b767614aeebb2"/><file name="config.xml" hash="045a13091daac0b33bee10d17f0be393"/><file name="system.xml" hash="38a2d1d570abe54b646b6f598fc952fc"/></dir><dir name="sql"><dir name="Antidot_setup"><file name="mysql4-install-0.9.php" hash="62672bc47ea92dbd46966fb76e4251e0"/><file name="mysql4-upgrade-1.2.1-1.2.2.php" hash="fe774495c51921c2affeb8a472c049ff"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="antidot.xml" hash="5124433ec044f619ae99afb074ed6efc"/></dir><dir name="template"><dir name="antidot"><dir name="catalog"><dir name="layer"><file name="category.phtml" hash="125de3812ded3b341ab6f1a1f2f92777"/><file name="filter.phtml" hash="2304baebff9b798e0ebd977fbc891346"/></dir></dir><dir name="catalogsearch"><dir name="result"><file name="banner.phtml" hash="4dc4b69ef2dd51aad9689dbfb2bf8f48"/><file name="category.phtml" hash="7413580b825508f2cfc08566d62369ae"/></dir><file name="result.phtml" hash="de6eecf5bd733d3440c843133afea8b6"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="MDN_Antidot.xml" hash="988c6b7e9da4e50f1727956833ab1696"/></dir></target><target name="magelocale"><dir name="de_AT"><file name="MDN_Antidot.csv" hash="bd59e534fb9a44fdb706867d43479b85"/></dir><dir name="de_CH"><file name="MDN_Antidot.csv" hash="bd59e534fb9a44fdb706867d43479b85"/></dir><dir name="de_DE"><file name="MDN_Antidot.csv" hash="bd59e534fb9a44fdb706867d43479b85"/></dir><dir name="es_AR"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_CL"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_CO"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_CR"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_ES"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_MX"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_PA"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_PE"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_VE"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="fr_CA"><file name="MDN_Antidot.csv" hash="5d362c657f256fd1b6a0fb4993f48cd0"/></dir><dir name="fr_FR"><file name="MDN_Antidot.csv" hash="fff8f36a7da80f27f3075ba84b6cf748"/></dir></target><target name="mageweb"><dir name="js"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.js" hash="86792ecde0c2759ba85e0d863dd147ce"/></dir></dir></dir></target><target name="magelib"><dir name="antidot"><dir name="AFS"><dir name="ACP"><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="acpConnectorTest.php" hash="25a8194f3dc8895640df4f4bba895d8e"/><file name="acpQueryTest.php" hash="74ad65a4af639a409ee72a75a2a043d6"/><file name="acpReplysetHelperTest.php" hash="4f0a0d471a06e139cd11c715b67ebe81"/><file name="acpResponseHelperTest.php" hash="6d30f99108db0d9956aef9ba5e1d88df"/><file name="acpTest.php" hash="d6119d150543e7943ba4e9907901ae5d"/></dir><file name="afs_acp.php" hash="78dbfbc92f68469c92898f1da4263e68"/><file name="afs_acp_configuration.php" hash="2d644cc6c5bf2cdaeca5780576c4bf0e"/><file name="afs_acp_connector.php" hash="b72439562b02024e0b9629c18394985d"/><file name="afs_acp_exception.php" hash="f610d2cc37a15d4b981d7b43939414ad"/><file name="afs_acp_query.php" hash="ced0629355f5d4fc1c219d1adb03297d"/><file name="afs_acp_query_manager.php" hash="b3348972a850c904fc664b4e27671439"/><file name="afs_acp_reply_helper.php" hash="b0259f24f10d2e92ed6e3b8cdaaacc44"/><file name="afs_acp_replyset_helper.php" hash="07e7fdb88a42a399c96261c47ffb0231"/><file name="afs_acp_response_helper.php" hash="33a66106fd3a94194514a0d8d39af1cd"/></dir><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="SEARCH"><dir name="FILTER"><file name="Makefile" hash="d42338199c6857ded179af2117b9f571"/><dir name="TEST"><file name="Makefile" hash="ab37090c6c5e7af1b260376237737700"/><file name="filterBuilderTest.php" hash="161ff5c8e73914eef884d17456afa133"/><file name="filterCombinationTest.php" hash="2162288d5255d3b24fe94d75b939aa51"/><file name="filterTest.php" hash="1682c0a4d50158a8d2c9369d30e45a18"/><file name="groupFilterTest.php" hash="1ebe8ce7344ed64b93cf94632d3b0184"/></dir><file name="afs_combinable_filter.php" hash="336e6c6bc9ebae3f58602d23ef734182"/><file name="afs_combinator_filter.php" hash="e2fc560b9c0c31f20c73f2057a8b7b69"/><file name="afs_filter.php" hash="6dbfc8c668cd48510cc9a9243d1bf4c3"/><file name="afs_filter_exception.php" hash="ccce583c63a4a65f7f0a27fc4a487505"/><file name="afs_filter_wrapper.php" hash="30dec104456abc037019ad93922b5afd"/><file name="afs_group_filter.php" hash="b95fa3bc0e26bc39dfc53a6010bce32f"/><file name="afs_native_function_filter.php" hash="37176bdbc66cc3dca18149132921f0a5"/><file name="afs_operator_filter.php" hash="c7ea43c8d64eedbe33397f61737e0226"/><file name="afs_valued_filter.php" hash="483653071734f77972c9b9771e187d82"/></dir><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="clientDataHelperTest.php" hash="1556ab047e1df23447586d529768befd"/><file name="clusterHelperTest.php" hash="e112e7c756f63c8e8ceb554281b418c9"/><file name="conceptHelperTest.php" hash="b44e39b62d0537bf1f7b7feb23f8111f"/><file name="facetDefaultTest.php" hash="382e4ea35e1c7173371b4a84046a38e5"/><file name="facetHelperTest.php" hash="4af0256294abbea651d1b8d06832556b"/><file name="facetManagerTest.php" hash="bbef8e207c387dbe6a26142fd55264d5"/><file name="facetTest.php" hash="26123aa75cb2597a3ededfa9d778095d"/><file name="facetValuesSortOrderTest.php" hash="b650080bf9b2cce2ac42a245cb84c911"/><file name="feedCoderTest.php" hash="f2b5dfdd4fa3c4e5d14c790d15235146"/><file name="filterCoderTest.php" hash="46249fa13edccf1e5d5000daf2573b77"/><file name="headerHelperTest.php" hash="62185c34e1e9015bb12014d719287f06"/><file name="helperConfigurationTest.php" hash="be3f74e53e27744e8214f3c341172796"/><file name="intervalTest.php" hash="912389dad049853f6bf0b4eab2af5034"/><file name="metaHelperTest.php" hash="080f160b54636c4eee743544a6a12bee"/><file name="pagerHelperTest.php" hash="d96a9891523e453647493f3219e86357"/><file name="promoteBannerReplyHelper.php" hash="94c3c14517536437e9800eaa706fbe29"/><file name="promoteRedirectReplyHelper.php" hash="ed00c66be5127d8b374f6416abf328ef"/><file name="promoteReplyHelperTest.php" hash="7cbb68a7f50c2bd2ef11a085ac94deb2"/><file name="promoteReplysetHelperTest.php" hash="ac2f1e3073015143dc7b2b705711c845"/><file name="queryCoderTest.php" hash="03983a114c6697464f8bf016822ff4a3"/><file name="queryOrchestrationTest.php" hash="02867da7662cdb9f005eb9c1e73dfa30"/><file name="queryTest.php" hash="338264d8e6dbbc09e88bd9a8179e8be4"/><file name="replyHelperTest.php" hash="4d86f19ea7de2aece5d7fd9c143c3dbc"/><file name="replysetHelperTest.php" hash="897f074b8382c6853f51b06a5ee50b0a"/><file name="responseHelperTest.php" hash="ebb167e1c330af6aa0e6a2b917431040"/><file name="searchConnectorTest.php" hash="9201de573884b643041b6c32bc535e7e"/><file name="searchQueryManagerTest.php" hash="2188b262a1c11422bcc8133f68fa6dd9"/><file name="searchTest.php" hash="fa47a7819b5c7c71172d6b1f1e7a02f7"/><file name="spellcheckHelperTest.php" hash="49960fb90055dcf265ef41e491c11325"/><file name="spellcheckTextVisitorTest.php" hash="203f0d08f548a39135517a41f6e9e43a"/><file name="textVisitorTest.php" hash="b722845dd0f5f953574cb51284ad025b"/></dir><file name="afs_base_reply_helper.php" hash="57abe4828b7ed7126db963764faa718a"/><file name="afs_base_replyset_helper.php" hash="096b124a3ebdc6e8d6beb359bd8bb7c5"/><file name="afs_client_data_exception.php" hash="899957af974d04aa7eaca44903a7f86c"/><file name="afs_client_data_helper.php" hash="4700218e2400350014fde428bc86806b"/><file name="afs_cluster_exception.php" hash="86d97623db7aebaa28a20857ce2cf17f"/><file name="afs_cluster_helper.php" hash="60b7fbcc869a672929ef9fc6d840d2b2"/><file name="afs_cluster_parameter.php" hash="20ed527d3ed1a6cf2bc80e032ecd2c7e"/><file name="afs_coder_base.php" hash="fb87fbea43d12695154b3b6102e2a019"/><file name="afs_coder_interface.php" hash="3b179b2513e215751ee4edd190b2a719"/><file name="afs_concept_helper.php" hash="982cf3d2063c565cf19cc6136b049066"/><file name="afs_count.php" hash="9f83f3baa3cf4462c0db786f4eea479a"/><file name="afs_facet.php" hash="1b4d7d35ebe8ed4894fda4881d0b168f"/><file name="afs_facet_combination.php" hash="005e9742ee032194b86856195dd59f7d"/><file name="afs_facet_default.php" hash="cbcb5d28b7b00815ce5248017065e84b"/><file name="afs_facet_exception.php" hash="f1f0afdbf9a727b53c4731e5a40ac417"/><file name="afs_facet_helper.php" hash="b8ad96c57ec80f40bd21a39bb9b5fbb5"/><file name="afs_facet_helper_retriever.php" hash="5628cc41c50ab25fd3336df302d903f4"/><file name="afs_facet_layout.php" hash="c83f6fef1c13ba3cda667c611841ff87"/><file name="afs_facet_manager.php" hash="a3fabb34d56a9614d4a0a2917f6fea0c"/><file name="afs_facet_mode.php" hash="8dcac389a37f8267a367400377631dba"/><file name="afs_facet_sort.php" hash="0d7ba4059b10da9981b9c801355cb874"/><file name="afs_facet_type.php" hash="6df82cbfa627629f9523437994d1fbb1"/><file name="afs_facet_value_formatter.php" hash="d6580281f9ef5c0820615ac385aae863"/><file name="afs_facet_values_sort_mode.php" hash="17def98365132c810515f8cf3c6fb006"/><file name="afs_facet_values_sort_order.php" hash="f95f77cb5dd7015e4f2e6094ddba49a6"/><file name="afs_feed_coder.php" hash="ed7b40e872a7ed5aa30adbcffc05de56"/><file name="afs_filter_coder.php" hash="4edbdcf6760d80465e5d2533014ba307"/><file name="afs_filter_parameter.php" hash="2b03c2c83ffe2e2968aaf50ad4903921"/><file name="afs_fts_mode.php" hash="edbd9342cd9625183e1e01ed81b79fc3"/><file name="afs_header_helper.php" hash="c123aeb736bf2e0506e56831fe516800"/><file name="afs_helper_configuration.php" hash="dbd0378574fbc5729babfbddfef0fd67"/><file name="afs_interval.php" hash="dbf9749881be0a2b063f8a33dff214f3"/><file name="afs_interval_exception.php" hash="40f223de231df03aae59596c1a493065"/><file name="afs_meta_helper.php" hash="8403689868c98db725ebd11748508c8b"/><file name="afs_pager_helper.php" hash="077052931e0cffb1e589c21b57156b38"/><file name="afs_producer.php" hash="7c8c515ccb8126523fa0d09a7f759dd5"/><file name="afs_promote_banner_reply_helper.php" hash="418702b3c053029b3aa8fcb2775c65bd"/><file name="afs_promote_redirect_reply_helper.php" hash="be17eda6f8b4552b9ec21183362171a2"/><file name="afs_promote_reply_helper.php" hash="0e2a4f67cd307f74e8b64cd3b158235c"/><file name="afs_promote_replyset_helper.php" hash="fdefc6f8a686addb31ea9b6c0a3fa5ad"/><file name="afs_query.php" hash="bd969a62cd4bbbcb5b9996eaa19353f7"/><file name="afs_query_coder.php" hash="ca0bfad66b8d8549ab3f33380d716732"/><file name="afs_query_coder_interface.php" hash="dd16f17b3606a7418c1c714475b19b51"/><file name="afs_query_object_interface.php" hash="a9af13e2c856e4136ccadfff60f72d36"/><file name="afs_raw_text_visitor.php" hash="fd574583c4c9110165c1cadc67b832de"/><file name="afs_reply_helper.php" hash="3919f9e83cba62be9bc67117b1087b03"/><file name="afs_reply_helper_factory.php" hash="f159f7d0ef7e5a209fb872a970d0d582"/><file name="afs_replyset_helper.php" hash="cb8f81391d9a59904dcb0c3d6ae31999"/><file name="afs_response_exception.php" hash="0a865bb92fb700ae555dcb5ae675f644"/><file name="afs_response_helper.php" hash="048910936a0fc00705d3fd4ad39a0270"/><file name="afs_search.php" hash="3f2e3ef447515a2fa05b270654ef2969"/><file name="afs_search_connector.php" hash="17242fb6536f4596b2c0198a16986310"/><file name="afs_search_query_manager.php" hash="77e30683ee4ba9e004e9c7c12d9c811d"/><file name="afs_sort_builtins.php" hash="0cc1617a62f1a834a28d7d2ac249b081"/><file name="afs_sort_coder.php" hash="1dfe2d32278383d8465df67535cb91dd"/><file name="afs_sort_order.php" hash="7755deb99386650c9974871474168cda"/><file name="afs_sort_parameter.php" hash="bfb8c59c1560ec8a3b597dc45aa8ecd5"/><file name="afs_spellcheck_helper.php" hash="bb5465848ada7a9df9875f2565fb9686"/><file name="afs_spellcheck_text_helper.php" hash="3ca5c3118660aa600aadb504ceff6c4c"/><file name="afs_spellcheck_text_visitor.php" hash="c44c23ae21f61b065e457911bbc45ed2"/><file name="afs_text_helper.php" hash="59c4ae24560948c3af0f4adbf6bd1803"/><file name="afs_text_visitor.php" hash="867b44a280403cd4567358ec6d59588a"/></dir><file name="afs_configuration_base.php" hash="f26dd9efda4923cc2c71057f21be97d9"/><file name="afs_connector.php" hash="aa04a21163b57ef338bf96bd55e95882"/><file name="afs_exception.php" hash="c1840fe279f9cb313cec151012ed4513"/><file name="afs_feed.php" hash="005305cace79a3aa7719a3c942df9da7"/><file name="afs_multiple_values_parameter.php" hash="96dc30f1fbf137cbfd73c2b195d9f9ef"/><file name="afs_origin.php" hash="a6b7e39a687210572c116afcbea0e7cb"/><file name="afs_query_base.php" hash="7209115a714d9b7de209a0af691c1d22"/><file name="afs_query_parameter.php" hash="6552428d955d0a48c015e1f98ba62815"/><file name="afs_response_helper_base.php" hash="b087f7bdad35ed0526566042ef9afc8c"/><file name="afs_single_value_parameter.php" hash="65d002d7ac6b6e8dd6170309b4c84649"/><file name="orchestration_type.php" hash="047eab54be2eba5500ef747ab7f139b9"/></dir><dir name="AIF"><file name="Makefile" hash="2d232abf9913fcabb44033d5e5d1ebfd"/><dir name="TEST"><file name="Makefile" hash="24d3030d27e88732028d14fb1d81c203"/><file name="afsMultipartResponseTest.php" hash="70a64d0d599ea01806fac2126fb3680a"/><file name="authenticationTest.php" hash="e3a84092f7eb76bc3e44335a3a47bcdd"/><file name="bowsInformationTest.php" hash="3bbfe71f431a35f0285afdca40906874"/><file name="documentManagerTest.php" hash="ad90a6146f5aeee383355bb05425b3dd"/><file name="documentTest.php" hash="59b204b10b90cd764b259ad4c2bc043a"/><file name="pafConnectorTest.php" hash="f77eb3a317443916c8e8f2774ea732ec"/><file name="pafLiveTest.php" hash="92862c31d151c34b2caf44bff9d0fb80"/></dir><file name="afs_about_connector.php" hash="dd52b41d37d47867467165203de1d1ce"/><file name="afs_authentication.php" hash="90a2405786726a6c05c7b339dff7017f"/><file name="afs_bows_connector.php" hash="0f07eea36c8c1794e46fc34c3a8a7819"/><file name="afs_bows_connector_interface.php" hash="8fdf9749f0500a39741d696feb55af14"/><file name="afs_bows_exception.php" hash="1bd8657a37b8b4a9e08bfc4eb6b7e416"/><file name="afs_bows_information.php" hash="1f96a4cd84b2332f1186f9e0cea8542d"/><file name="afs_bows_information_cache.php" hash="1ae9a9243342c4e58a52e70473b68472"/><file name="afs_document.php" hash="c0003ec962a79b9d3f642b17bade0fff"/><file name="afs_document_manager.php" hash="8c5c0105d9337b7ae6a9f041f643ea88"/><file name="afs_multipart_response.php" hash="f2077c9eaf121fabdb2fc26c23b2e256"/><file name="afs_paf_connector.php" hash="519a81178af37c7aec9dbfa460bfa7cb"/><file name="afs_paf_live_connector.php" hash="0e91807cbe49dad1428c2de5200997fd"/><file name="afs_paf_upload_reply.php" hash="0cb4905d1c894637d5e6acbd2cffc112"/><file name="afs_token_authentication.php" hash="6329f0f7b6840d610a4b3078fb4dcce9"/><file name="afs_user_authentication.php" hash="8330376642778e0e0191f66b1783896c"/></dir><dir name="COMMON"><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="TEST"><file name="Makefile" hash="d568cfe3683543f363312aa4b6d2bbad"/><file name="languageTest.php" hash="ad0f75b1c2f320c81eba32cade86191c"/><file name="toolsTest.php" hash="9276cb1a275d697f8e8365f2ac340cdf"/><file name="userSessionManagerTest.php" hash="b2b78d6fa156f1a61065f8ee5bfc6e0b"/></dir><file name="afs_connector_base.php" hash="b6b1f091ec71e5b92e4a1e5ca958255f"/><file name="afs_connector_interface.php" hash="68ad5e20a861b85dbf198f79cd2afd4c"/><file name="afs_exception.php" hash="b8eed4376088ae3003d0b77cc523e732"/><file name="afs_helper_base.php" hash="839cca78a663c3a22b4a8e35d1460129"/><file name="afs_helper_format.php" hash="30a3f6e945db7412ef95e83e7b0b5898"/><file name="afs_language.php" hash="277acb15b86089b37c812c47f2141d3c"/><file name="afs_service.php" hash="12c00c906e130860120552c40fa9dbc2"/><file name="afs_service_status.php" hash="1dee172850a76b46987534df89013878"/><file name="afs_tools.php" hash="26f6c01c5a61987925385e7a35260399"/><file name="afs_user_session_manager.php" hash="abd625f6b7b5cecf386dac9d82887764"/><file name="afs_versions.php" hash="556c912ff7f19f5083c4fb44d4d40ac6"/><dir name="lib"><dir name="JsonPath"><file name="JsonPath.php" hash="baa12e1baa9f8a20a095463042e96ad3"/><file name="JsonStore.php" hash="a9632aeb2126e98db9a49403a8f2ff77"/></dir></dir><dir name="php-SAI"><file name="README.md" hash="63ab581c83fe44918e6d074e20f08f95"/><dir name="lib"><dir name="Curl"><file name="Handle.php" hash="0fc7132737da7cee7df6b974447864ac"/></dir><file name="Curl.php" hash="358e4d3afca2035ee4d3f99f372ed15a"/><file name="CurlInterface.php" hash="714fa045dd4546d0c92cd022efb09422"/><file name="CurlStub.php" hash="fbdc0ece6321c5b5a1e27a65449f4a1f"/><dir name="rb_temp"><file name="HttpClient.php" hash="091b91c98acf9f1cd6c3d6d75cddfb88"/><file name="MultiCurl.php" hash="916e85d73bae6e136f889166ebc6db17"/><file name="SimpleCurl.php" hash="c296966a8bda96e03b464a1d3a9c8e06"/></dir></dir><dir name="tests"><file name="SAI_CurlStubTest.php" hash="bce69cbb17a40bd4eeba6bad1133216e"/></dir><file name=".gitignore" hash="09e625dea07b4d4098b19ec998d266f9"/></dir></dir><file name="COPYING" hash="b234ee4d69f5fce4486a80fdaf4a4263"/><file name="COPYING.LESSER" hash="4fbd65380cdd255951079008b364516c"/><file name="FAQ.md" hash="7d7c886674d70a0047303c5d93de6165"/><file name="Makefile" hash="225475a5a4a0204cecbb77621ff38bb2"/><file name="README.md" hash="7ecfd33825a0e6bc50cca099c1c0e50e"/><file name="afs_lib.doxygen" hash="8128d53d894cc57e08142377d13c72f4"/><file name="afs_lib.php" hash="5d49433720f05b707dae0206c1ec1dbf"/><file name="afs_version.php" hash="15ef21883652ec9da0da0f4830f153d7"/><file name="composer.json" hash="39190df70fafa99d7eb5ab566e8edf3f"/><dir name="doc"><file name="afs_filter_documentation.dox" hash="3bf4b96e25d95ce5953b822038c6f135"/><file name="afs_paf_upload.dox" hash="d36893db0234f171e6cfb43f6e13d47c"/><file name="afs_search.dox" hash="b1c5ab8728703822f910852cd17561f4"/><file name="afs_search_coder.dox" hash="77709e1bc691301017f0982e0348a9b9"/><file name="afs_search_query.dox" hash="21dcd1734a165a4cb3b4f62c42a6a0be"/><file name="afs_search_reply.dox" hash="cdb1d42447671f4352927b40b3f8f37d"/><dir name="data"><file name="acp_helper_example.php" hash="2815890e7afbae78e7eb4e6fc5c88f6f"/><file name="full_example.php" hash="e152a964d06e55de460c596070c714d8"/><file name="full_lightweight_example.php" hash="eac3bb2d251052f547a9f737e5cd0461"/><file name="raw_example.php" hash="f1f9d547fe0d89f129c9bbb050eb263e"/><dir name="templates"><file name="error_template.html" hash="70f44bd0f45470d379a11d0a2fe507e4"/><file name="facet_template.html" hash="6836005a7dae45e9415273f1eb6b78e2"/><file name="facet_values_template.html" hash="9b41f2b55a1cecae5724b4fcd4a46cfb"/><file name="meta_template.html" hash="e664a3bb222d272ce2451fb10bf46de4"/><file name="pager_template.html" hash="2700ab5b60a1f9553b1c39374fda63d4"/><file name="result_template.html" hash="1572a4ef4e8dda0b3db1ea77bbed4a98"/><file name="spellcheck_template.html" hash="8042054a1f5a271b47c77f81436c4791"/></dir></dir><file name="detailled_integration_example_with_template.dox" hash="26ef377a6ef546b636a0e254d11d01f5"/><file name="lightweight_integration_example_with_template.dox" hash="5a388d2dbfad63ad6ec353407b79a6bb"/><file name="logo-antidot-long-200x41.png" hash="1ceac3fff767fb5e395bd767344a3d13"/><file name="main.dox" hash="ca3e97f95deead927fb3298ecafbad5e"/><file name="raw_integration_example.dox" hash="56a7126d008c2e49abdf9bf0b5ec9717"/><file name="template_prerequisites.dox" hash="baa24a943e19ff3654227850bd316abb"/><file name="templates_in_details.dox" hash="5e8db94382f1fbd6c4e0b424a9edc9a3"/></dir><file name="rules.mk" hash="ff48aa6a5c40e31b3f38aba1267e9a71"/><dir name="scripts"><file name="gen_doc.sh" hash="0f6fc60aca94da563397d3c710bd9d33"/><file name="increment_version.sh" hash="431db9c60d2f94d251be07957787fcb0"/><file name="print_version.sh" hash="a05ddc19cd27ff185721fe2bd0cffc25"/><file name="version_management.sh" hash="3d5ecd39f45ba081144b3033dbd14330"/></dir><file name=".gitignore" hash="0292f51c0906b2092255872c69603f29"/><file name=".travis.yml" hash="4330b9c449e9cd0e97829f679c2a2786"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.css" hash="c956d83facc41a97bf14726dcb953edb"/></dir></dir></dir><dir name="images"><dir name="mdn"><dir name="antidot"><file name="base.gif" hash="1f71b021e061a4948d69adc4ff10ccad"/><file name="button-closed.png" hash="563b78324e0712c0902cb4f77cb9eb86"/><file name="button-open.png" hash="c710849a0d2b61ad1f0fc36c0e59d131"/><file name="button.png" hash="97f3055c5046c851eea2dad7e5227508"/><file name="cd.gif" hash="f41037663522fab5c5c31530c7fa43d8"/><file name="empty.gif" hash="df22aff6e941ff1cc577333d1712b584"/><file name="folder.gif" hash="ea16980ab437fa6ba4aba3d480e83e9e"/><file name="folderopen.gif" hash="18aa3d75315bf95bf080357733437fcc"/><file name="globe.gif" hash="d6b48614cf8dc9553e077c19197637d2"/><file name="imgfolder.gif" hash="1d488d377762e65ab4e8b691ba01e5a4"/><file name="join.gif" hash="4d5d614e0da056df815a4306d6368692"/><file name="joinbottom.gif" hash="4b3daa7f2cc584f1aac0d142275d7cba"/><file name="line.gif" hash="63ab38a6203262f15ca46c631232ea2c"/><file name="list-item-contents.png" hash="00ae24d5bc76df9eedaea597859963e4"/><file name="list-item-last-open.png" hash="615ddd71f81b240e9ed7d4e383b2c01a"/><file name="list-item-last.png" hash="e2bfb790f46855c378e50f3c0a82ea01"/><file name="list-item-open.png" hash="732d1cc59f3a488c89c624eb434eac98"/><file name="list-item-root.png" hash="5529d21e7ec68e9cb750a4895ff0b480"/><file name="list-item.png" hash="e03ec1bf3d9e16bb3005ccf8d26eaa6c"/><file name="minus.gif" hash="d647fbbd0ec410b8f3bb3357b62eedcf"/><file name="minusbottom.gif" hash="b09d684cca7135ef728141aaf2464baa"/><file name="musicfolder.gif" hash="21ece951734f23adb2f75befe1f31fc1"/><file name="nolines_minus.gif" hash="eb2243a354ffcfac93ba0fe948f7167d"/><file name="nolines_plus.gif" hash="ec92b634b63608fb4b0dbf114e3b89e1"/><file name="page.gif" hash="c25b136c1cb3bb145495c25b35d93754"/><file name="plus.gif" hash="5c55d798909c553deca31d610bd18fac"/><file name="plusbottom.gif" hash="1924ce363c38a992f888a4df48c0b274"/><file name="question.gif" hash="ea0ca196ce0ebfd625cc1210abfdec6c"/><file name="trash.gif" hash="6cbfd3ed29531044aed9b4edb3cca9ad"/></dir></dir></dir></dir></dir></dir></target></contents>
|
23 |
<compatible/>
|
24 |
<dependencies><required><php><min>5.2.0</min><max>5.6.0</max></php><extension><name>curl</name><min/><max/></extension></required></dependencies>
|
25 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Antidot_Antidot</name>
|
4 |
+
<version>1.2.3</version>
|
5 |
<stability>stable</stability>
|
6 |
<license>LGPL</license>
|
7 |
<channel>community</channel>
|
17 |
Add cdata for variant name&#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>2016-04-14</date>
|
21 |
+
<time>08:33:28</time>
|
22 |
+
<contents><target name="mage"><dir name="shell"><file name="antidotExport.php" hash="a4e184cdf1add5d42484e6997ea6f59c"/><file name="antidotExportCategory.php" hash="10de34988223fc8ca26e6f30c4070733"/><file name="antidotExportInc.php" hash="18f1b60b93245e2daf423c614dcd7efa"/><file name="antidotExportProduct.php" hash="9ddd7f0ba8e54b24665a32d26e5231b4"/></dir><dir name="i18n"><file name="de_DE" hash="f166a5ff29213a44fca77277b053897e"/><file name="en_US" hash="63c821044fda6f7c2a26dc84670b25bd"/><file name="es_ES" hash="f9319039054998955d63d51ed0930f3f"/><file name="fr_FR" hash="632367797f2fa9fef06e0b0c69377e01"/><file name="i18n.php" hash="0780b44563432f6e70de78f7a9d60f54"/></dir></target><target name="magecommunity"><dir name="MDN"><dir name="Antidot"><dir name="Block"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2158b991ccdf394c8cd47cab00829e4d"/><file name="Boolean.php" hash="d17b08e1ec9047cf4050442ababd0808"/><file name="Category.php" hash="78cb53233ad74a2b5496d6f7857d8837"/><file name="Decimal.php" hash="75b31617bca2a8f20ee7fe113e3534f2"/><file name="Price.php" hash="244068a33e8ba64423c126baf883d2b5"/></dir><file name="View.php" hash="bbdd9bb31663415001ab3751c6737cde"/></dir></dir><dir name="Catalogsearch"><file name="Articles.php" hash="6c3bff571dce7e4141af09ded261773f"/><file name="Banner.php" hash="cbeb4d71c146a75cbbd0eb15a0f5727f"/><file name="Category.php" hash="e9605415ba85929115a443b1b4f00ab0"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2b274bf7d8f8dbd915bdf73f65e694fc"/></dir></dir><file name="Layer.php" hash="3ba32c0f20c4b7447229843f45b06d3f"/><file name="Result.php" hash="887530a08ce375d1722fc327eebc64fc"/><file name="Stores.php" hash="3e5caa7f44d4634ed40a9f520dbed9e7"/></dir><dir name="Html"><file name="Select.php" hash="fc7fb19df1dd378d4e9e0860d2d47d07"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="4f00570d46d27d1cf89785e8db42a332"/><file name="Forward.php" hash="3917a1882c3d55837138782e60791167"/><file name="PushArticles.php" hash="c7d0ce7326c7f706c0432a2ffb57fee2"/><file name="PushCategories.php" hash="2caeb40ae6a5abe77be2ca666c01ed81"/><file name="PushProducts.php" hash="3eb6538ab55257b0a83021ff1ecbf632"/><file name="PushStores.php" hash="665af5f753ed11a077e03a0c77628573"/><file name="RestoreTemplate.php" hash="ffbbb0a73ff1ede611262a6a4da1a188"/><file name="ShowXml.php" hash="417ba0c9c62d8070b63f90397887dcc0"/></dir><dir name="Fieldset"><file name="Notice.php" hash="cf5aa45ebac84546ede622b9beb9d588"/></dir><dir name="Form"><dir name="Field"><dir name="Array"><file name="AcpFeeds.php" hash="27d2e08c2efb798f6e675b4db6479ca3"/><file name="Additional.php" hash="d62316e3631c1c2b6a0119134c8002a8"/><file name="AdditionalFeed.php" hash="dcfb6d37d765a10e4a07465e70133dda"/><file name="ArticleAdditional.php" hash="38c62d610f585c460151841f7350348b"/><file name="ArticleIdentifier.php" hash="ec9479fd1ca087a1fe924795cc9ff5f6"/><file name="DefaultSort.php" hash="4989d99a73f57bed1fb994060cc38a72"/><file name="Facet.php" hash="43146cf961a469f371aeb24418a6f401"/><file name="Identifier.php" hash="a9fa99227182bd72e59c9a315d580247"/><file name="ProductAdditionalFacet.php" hash="8d46e427d9efbac7e6ba04fdc88d4728"/><file name="ProductAdditionalField.php" hash="9c9f9c9c1c940963e1a24c039a392cc4"/><file name="ProductIdentifier.php" hash="d30809119cb35018697533075f7ee485"/><file name="Sort.php" hash="f986fbb048bf3f6aec813cdc1c70ec15"/><file name="Tabs.php" hash="3d1d5d89ae6263b0a0ec61eb549658ec"/></dir><file name="CategoryAttribute.php" hash="c119ca65f23950e7abb1f0d60e8b4755"/><file name="ProductAttribute.php" hash="6a61b98a9f6ac883a5e162e3edab300d"/></dir></dir><dir name="Html"><file name="Export.php" hash="f36beeca11c51e1a2e9678955d8cf1b8"/><file name="ShowXml.php" hash="7b70f39937aa9d24336edde6bdbdf97c"/><file name="Version.php" hash="34c624c382f3061cf322cfed52c416ac"/></dir></dir></dir></dir><dir name="Helper"><file name="Antidot.php" hash="7bbd2866c65a847e1415badb1ef0d015"/><dir name="CatalogSearch"><file name="Data.php" hash="25d8f53c6165bbe8f90c83108654fcf8"/></dir><file name="Compress.php" hash="12fa64a9c9f519a3f249954ab780e01c"/><file name="Data.php" hash="453edcc9b2810e4e554fc3828e22452e"/><dir name="Enterprise"><dir name="Search"><file name="Data.php" hash="8bfe0146c64511f86cb796638b65112f"/></dir></dir><file name="LogExport.php" hash="bb599102015fef0d060f3d4d47adb3cb"/><dir name="ManaFilters"><file name="Data.php" hash="f4f4e92c5e33c6142904cf27a75f6d23"/></dir><file name="Url.php" hash="1d2ee02a8e135bfc4b866f5219f62acd"/><file name="XmlWriter.php" hash="66cf65d950caddf895c823c5575a1912"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="3cd18414abccea60c5497931bc95e21e"/><file name="Boolean.php" hash="dd0414e0d96833bec6e32aac321c2763"/><file name="Category.php" hash="4dea470cb36708e0ae4b95bd0a24a85f"/><file name="Decimal.php" hash="b9b1e2cff1d0332fab77d101dca4c3d2"/><file name="Item.php" hash="c89bbca267af18a0447e0daf3e7cc8eb"/><file name="Price.php" hash="7529be0313a19896993f92eeb9dfc8a9"/></dir></dir><file name="Layer.php" hash="706000dd944a45f30826eccba2942862"/></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="a83d6761a949c8196cba33948a48c8bf"/></dir></dir><file name="Layer.php" hash="b5aa8e2cc24f1b1362749049f1cdec32"/><dir name="Resource"><file name="Attribute.php" hash="80d2a34d746f307109b6bf910b0f2958"/></dir></dir><dir name="Export"><file name="Abstract.php" hash="8d20574426b00a9103b26597205abe12"/><file name="Article.php" hash="7237e30c0f9253af4477cbe0b63a3c73"/><file name="Category.php" hash="e4c1f09bd75f6cda693ab6aab084e5b4"/><file name="Context.php" hash="4b453ee785553ed148ed8459ac9258e9"/><dir name="Model"><dir name="Product"><file name="Link.php" hash="6f764a25fcde9b315d10f46189a428d1"/><dir name="Type"><file name="Configurable.php" hash="4bb627c1f5d1fbadd37a6b54e681406f"/><file name="Grouped.php" hash="8770d1ddf8228a2db136325da494de51"/></dir></dir><file name="Product.php" hash="a56c7e50bbd95c57570e38d911976962"/></dir><file name="Product.php" hash="b6944fe749783a600c27fa516884e8a0"/><file name="Store.php" hash="3503a5e743efa257755a76c2c017bbd2"/></dir><file name="Observer.php" hash="c7916b674f1388985328e3af7695fa93"/><dir name="Resource"><file name="Advanced.php" hash="989026021706cbcfb269451187002c19"/><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="7c0a02eeda1d6c0ada06ea49493f2b01"/></dir></dir><dir name="Engine"><file name="Abstract.php" hash="bdd9813de433ae197ee1bc290ff88bce"/><file name="Antidot.php" hash="4e19a0fe05be0a1e0aa2be26eedf6ffd"/></dir><dir name="Export"><dir name="Product"><file name="Collection.php" hash="dfa31e927797fb1887aec5fcec2747d1"/><dir name="Link"><dir name="Product"><file name="Collection.php" hash="a50b67c39520422770b4b16d4ab51ba0"/></dir></dir><dir name="Type"><dir name="Configurable"><dir name="Product"><file name="Collection.php" hash="79d359ae0e176d3499225452d983c210"/></dir></dir></dir></dir><file name="Product.php" hash="f3e87d35ea55e911948f3909274e29b3"/></dir></dir><dir name="Search"><file name="Abstract.php" hash="fd71154b987b16f8d13bc3e10a3faeac"/><file name="Search.php" hash="fa499c1b185ced3eb1be2b4940037e24"/><file name="Suggest.php" hash="668438520f2e91b6b332f044c676b769"/></dir><dir name="System"><dir name="Config"><file name="ArticleAttribute.php" hash="f3a9596d45f275299f16530a56845c96"/><dir name="Backend"><file name="Engine.php" hash="68c93651655a77c74fd79d1de6d19be3"/></dir><file name="CategoryAttribute.php" hash="9f19b99e16c99b0e8052b1e31d2a6317"/><file name="Dir.php" hash="c80d83280ebc5ab91fd45d246ec47ba3"/><file name="DisableEnable.php" hash="6d08f33a1580b2fd1d58d87248104166"/><file name="ExportType.php" hash="940a74862d74f7873258b35c33b7b87a"/><file name="Facet.php" hash="8b771072a32f32e81a087581ace7fd72"/><file name="Number.php" hash="7985ea6c495a35173d68291389319f93"/><file name="Options.php" hash="06930da994dec4bb05ebc3f3e8c8abb8"/><file name="ProductAttribute.php" hash="c74ad00177c3a12b03c8684928d12c40"/><file name="PromoteRedirect.php" hash="c167973ea7a0ef09f0e5fa0fd0a08926"/><file name="Sort.php" hash="e0d2c1e72f56894b75baebcb6c4b8609"/><dir name="Source"><file name="Acpengine.php" hash="fdf8d5030d8823c325d707d8bb5b7208"/><file name="Engine.php" hash="0491592c4612779ffc7890456f6b946d"/><file name="Redirect.php" hash="ea6cb67ab98a0303d5c30c49099f5708"/></dir><dir name="Suggest"><file name="Type.php" hash="cef491efdb9fcef86d0df75030206a78"/></dir><file name="WSStatus.php" hash="ff4954e15d75dd3139290d96773d0abf"/></dir></dir><dir name="Transport"><file name="Abstract.php" hash="3272c44b08523a9836aa15c835e2ed25"/><file name="File.php" hash="4b0b2ef7940fc8cd60e96cc74a2c84f0"/><file name="Ftp.php" hash="73056ec4decef2fe9c459641e0a0ae7e"/><file name="Http.php" hash="807dfd219fad274e5a0f959c5ca2accc"/><file name="Interface.php" hash="40cfaad8efccad7dc3ff7a920dee871a"/></dir><file name="Transport.php" hash="dfbe060f5575304736ba805f597f7393"/></dir><dir name="Test"><dir name="Block"><dir name="Catalogsearch"><file name="Layer.php" hash="49725570e661d72db50daab46e0e18af"/><dir name="Result"><dir name="fixtures"><file name="testSetListOrders.yaml" hash="3077a3199216b898963f1bcf9f4d7396"/></dir></dir><file name="Result.php" hash="a780e377612d4481c4f0c96311005620"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="dcbfefb440b8512b1298b624a3582076"/></dir><dir name="Form"><dir name="Field"><dir name="Array"><file name="AcpFeeds.php" hash="11c6c503d9af481d7872d7a43994a9c3"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><dir name="CatalogSearch"><file name="Data.php" hash="a40c1e58b5000432763aa07dd49d4b5d"/></dir><dir name="Data"><dir name="fixtures"><file name="testGetActiveResultTabsCase1.yaml" hash="3b8a646c590f59910155a0a7e3d9283c"/><file name="testGetActiveResultTabsCase2.yaml" hash="4a0f99d4ea1b63cf51abc9ff83c822ea"/></dir></dir><file name="Data.php" hash="8cfba839e315c050c42dc2798d18bf8b"/></dir><dir name="Model"><dir name="Export"><dir name="Abstract"><dir name="fixtures"><file name="testGarbageCollection.yaml" hash="de6c8672be0c24a102ebfed004f2361b"/></dir></dir><file name="Abstract.php" hash="434f7a81228d7cb4554bbd2da4c86d5f"/><dir name="Article"><dir name="fixtures"><file name="testWriteXml.yaml" hash="e8f832fb8e943b78920495e0ca4d55e9"/></dir></dir><file name="Article.php" hash="8b250685c1575480754c31969cb1edfd"/><dir name="Category"><dir name="fixtures"><file name="testEmptyFile.yaml" hash="9573e620466cfe8260f8a87e274c8261"/></dir></dir><file name="Category.php" hash="42164121852311eb200af116e0a20d58"/><dir name="Context"><dir name="fixtures"><file name="testContext.yaml" hash="d912a7bd71a209f591043a3644de3ceb"/></dir></dir><file name="Context.php" hash="c5af056a47ee7acdacbe7072a825ce90"/><dir name="Model"><dir name="Product"><dir name="fixtures"><file name="testGetIsInStock.yaml" hash="b9a95c8ad5b3999221d027192d79fe55"/></dir></dir><file name="Product.php" hash="a3b6765c5c663caa1a50dc511c78db5e"/></dir><dir name="Product"><dir name="fixtures"><file name="testInactiveParentCategory.yaml" hash="3ef9bcefae6399ccdc23e026746a1743"/><file name="testWriteImageUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWritePricesFixedtax.yaml" hash="698da07581100c1eff5a1a85e2be6d3b"/><file name="testWriteProductNoVariant.yaml" hash="626a27b35977e5a52b02f85011c5e216"/><file name="testWriteProductNoVariantInStock.yaml" hash="9aa7736a422276842350ac73c6f4ba55"/><file name="testWriteProductUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWriteProperties.yaml" hash="d434749b80908bbceefd5781e2d0e998"/><file name="testWriteXml.yaml" hash="8a702dfbd07f2d773d991679a2c219a0"/></dir><dir name="providers"><file name="testWriteImageUrl.yaml" hash="666c33585c611bcc0b0ebe6e87dce1fc"/><file name="testWriteProductUrl.yaml" hash="18f511460efea04586fc888f5c85b3ea"/></dir></dir><file name="Product.php" hash="032f8ca084fb1ec71aeac8ca0ffb2d6f"/><file name="Store.php" hash="cc5f45a688f200b19f538ae3924f2b08"/></dir><dir name="Observer"><dir name="fixtures"><file name="testGetDefaultContext.yaml" hash="d77af9c502bf7e7c90fdb3aad609c087"/></dir><dir name="providers"><file name="testGetOwnerForFilename.yaml" hash="c5c07e73f536f9ffacc0c3ff6b5a13d1"/></dir></dir><file name="Observer.php" hash="f4eef1f9853d0a95e7380a4c0d89ca78"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="2ad006d8e096ade9043a9a370177782d"/></dir></dir><dir name="Engine"><dir name="Antidot"><dir name="fixtures"><file name="testFormatResult.yaml" hash="f4aa0a050156b55c5733c5d30f4255ed"/></dir></dir><file name="Antidot.php" hash="5dff5053128f275557772330716da04c"/></dir></dir><dir name="Search"><file name="Search.php" hash="508a9b666ae171344224cd59ed70e59d"/><dir name="Suggest"><dir name="fixtures"><file name="testFeedConfig.yaml" hash="e20aa186fc8b152840b889a7c7956592"/><file name="testSuggest.yaml" hash="e845f0311d93608e3221fb0678f429cc"/></dir></dir><file name="Suggest.php" hash="76ba005020802384a7ad4da5322562dc"/></dir><dir name="System"><dir name="Config"><dir name="Facet"><dir name="fixtures"><file name="testToOptionArray.yaml" hash="b76143bd57f68be024a31d905da9cabe"/></dir></dir><file name="Facet.php" hash="0115c27c5881ff9d35f18a251686dc68"/><dir name="Sort"><dir name="expectations"><file name="testToOptionArray.yaml" hash="13fc5b4c17962fb267f443d03a2219b2"/></dir><dir name="fixtures"><file name="testToOptionArray1.yaml" hash="3160d541123737644dfea5c70db35f41"/><file name="testToOptionArray2.yaml" hash="74fd97f93892920908ab7eab0124eeb6"/><file name="testToOptionArray3.yaml" hash="fe9c8a5da75f3c0d66304a39c473a3bb"/></dir></dir><file name="Sort.php" hash="3435402ae9aa30d18c8265433d643d21"/><dir name="Source"><file name="Acpengine.php" hash="482bcb056949d9d52eda623ee9bdca0d"/><file name="Engine.php" hash="dcbee0d360773c28faa8a894cbed22ad"/><file name="Redirect.php" hash="2dbbaecbb8453ba1025e2e9b5a5957c3"/></dir></dir></dir><dir name="Transport"><file name="Http.php" hash="6ca0294a1e1b076bca777dc34500623d"/><dir name="fixtures"><file name="testSend.yaml" hash="af0bc3c97a109e63aaf018f57ddad6cd"/></dir></dir></dir><file name="PHPUnitUtil.php" hash="2a128a7c19f4c37cb9dd7fc60e679693"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Antidot"><file name="PushController.php" hash="328ec7b1c8198ca714468fff8937f2f3"/></dir></dir><dir name="Front"><file name="SearchController.php" hash="d220bd4628830ea238775ed9788e0674"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="7190cd220b09b657ba9b767614aeebb2"/><file name="config.xml" hash="18c1950a48be4c9a97aec9daf04321a0"/><file name="system.xml" hash="b5113a4b6a2012ef82f81c337ed5ed51"/></dir><dir name="sql"><dir name="Antidot_setup"><file name="mysql4-install-0.9.php" hash="62672bc47ea92dbd46966fb76e4251e0"/><file name="mysql4-upgrade-1.2.1-1.2.2.php" hash="fe774495c51921c2affeb8a472c049ff"/><file name="mysql4-upgrade-1.2.2-1.2.3.php" hash="d48b875617e5acd372e7e91d95babe13"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="antidot"><dir name="system"><dir name="config"><dir name="form"><dir name="field"><file name="acpfeeds.phtml" hash="df37a23d2bd1e2d351eeffa97e97998c"/><file name="tabs.phtml" hash="7ae0f16afb6783b48ed965825dcfa356"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="antidot.xml" hash="090bfc2f9ca454bbb58f629be359ea03"/></dir><dir name="template"><dir name="antidot"><dir name="catalog"><dir name="layer"><file name="category.phtml" hash="125de3812ded3b341ab6f1a1f2f92777"/><file name="filter.phtml" hash="2304baebff9b798e0ebd977fbc891346"/></dir></dir><dir name="catalogsearch"><dir name="result"><file name="articles.phtml" hash="5131ea46e2c4c9db67b07991e848e59a"/><file name="banner.phtml" hash="4dc4b69ef2dd51aad9689dbfb2bf8f48"/><file name="category.phtml" hash="7413580b825508f2cfc08566d62369ae"/><file name="stores.phtml" hash="fd33169d4d4bf1d7dbeefc31cb3b91be"/></dir><file name="result.phtml" hash="de6eecf5bd733d3440c843133afea8b6"/></dir><dir name="page"><file name="antidot_results.phtml" hash="32a5e10491b1e856514841e9ae90727e"/></dir></dir></dir></dir></dir><dir name="rwd"><dir name="default"><dir name="template"><dir name="antidot"><dir name="page"><file name="antidot_results.phtml" hash="544cac2df5b1e6e20b9eb2673a869774"/></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="1ad37187a5e7327ab3a5abf797c06d3c"/></dir><dir name="de_CH"><file name="MDN_Antidot.csv" hash="1ad37187a5e7327ab3a5abf797c06d3c"/></dir><dir name="de_DE"><file name="MDN_Antidot.csv" hash="1ad37187a5e7327ab3a5abf797c06d3c"/></dir><dir name="es_AR"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_CL"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_CO"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_CR"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_ES"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_MX"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_PA"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_PE"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="es_VE"><file name="MDN_Antidot.csv" hash="2481c7e88271fc44b1105e9d63adb8d7"/></dir><dir name="fr_CA"><file name="MDN_Antidot.csv" hash="fb817b50d4bba5e35dbb50cc17c523f8"/></dir><dir name="fr_FR"><file name="MDN_Antidot.csv" hash="fb817b50d4bba5e35dbb50cc17c523f8"/></dir></target><target name="mageweb"><dir name="js"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.js" hash="86792ecde0c2759ba85e0d863dd147ce"/></dir></dir></dir></target><target name="magelib"><dir name="antidot"><dir name="AFS"><dir name="ACP"><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="acpConnectorTest.php" hash="25a8194f3dc8895640df4f4bba895d8e"/><file name="acpQueryTest.php" hash="74ad65a4af639a409ee72a75a2a043d6"/><file name="acpReplysetHelperTest.php" hash="4f0a0d471a06e139cd11c715b67ebe81"/><file name="acpResponseHelperTest.php" hash="6d30f99108db0d9956aef9ba5e1d88df"/><file name="acpTest.php" hash="d6119d150543e7943ba4e9907901ae5d"/></dir><file name="afs_acp.php" hash="78dbfbc92f68469c92898f1da4263e68"/><file name="afs_acp_configuration.php" hash="2d644cc6c5bf2cdaeca5780576c4bf0e"/><file name="afs_acp_connector.php" hash="b72439562b02024e0b9629c18394985d"/><file name="afs_acp_exception.php" hash="f610d2cc37a15d4b981d7b43939414ad"/><file name="afs_acp_query.php" hash="ced0629355f5d4fc1c219d1adb03297d"/><file name="afs_acp_query_manager.php" hash="b3348972a850c904fc664b4e27671439"/><file name="afs_acp_reply_helper.php" hash="b0259f24f10d2e92ed6e3b8cdaaacc44"/><file name="afs_acp_replyset_helper.php" hash="07e7fdb88a42a399c96261c47ffb0231"/><file name="afs_acp_response_helper.php" hash="33a66106fd3a94194514a0d8d39af1cd"/></dir><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="SEARCH"><dir name="FILTER"><file name="Makefile" hash="d42338199c6857ded179af2117b9f571"/><dir name="TEST"><file name="Makefile" hash="ab37090c6c5e7af1b260376237737700"/><file name="filterBuilderTest.php" hash="161ff5c8e73914eef884d17456afa133"/><file name="filterCombinationTest.php" hash="2162288d5255d3b24fe94d75b939aa51"/><file name="filterTest.php" hash="1682c0a4d50158a8d2c9369d30e45a18"/><file name="groupFilterTest.php" hash="1ebe8ce7344ed64b93cf94632d3b0184"/></dir><file name="afs_combinable_filter.php" hash="336e6c6bc9ebae3f58602d23ef734182"/><file name="afs_combinator_filter.php" hash="e2fc560b9c0c31f20c73f2057a8b7b69"/><file name="afs_filter.php" hash="6dbfc8c668cd48510cc9a9243d1bf4c3"/><file name="afs_filter_exception.php" hash="ccce583c63a4a65f7f0a27fc4a487505"/><file name="afs_filter_wrapper.php" hash="30dec104456abc037019ad93922b5afd"/><file name="afs_group_filter.php" hash="b95fa3bc0e26bc39dfc53a6010bce32f"/><file name="afs_native_function_filter.php" hash="37176bdbc66cc3dca18149132921f0a5"/><file name="afs_operator_filter.php" hash="c7ea43c8d64eedbe33397f61737e0226"/><file name="afs_valued_filter.php" hash="483653071734f77972c9b9771e187d82"/></dir><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><dir name="DATA"><file name="introspection_responses.php" hash="f07c0b4031d798b80e9a2647cc44f20c"/></dir><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="clientDataHelperTest.php" hash="1556ab047e1df23447586d529768befd"/><file name="clusterHelperTest.php" hash="e112e7c756f63c8e8ceb554281b418c9"/><file name="conceptHelperTest.php" hash="b44e39b62d0537bf1f7b7feb23f8111f"/><file name="facetDefaultTest.php" hash="382e4ea35e1c7173371b4a84046a38e5"/><file name="facetHelperTest.php" hash="4af0256294abbea651d1b8d06832556b"/><file name="facetManagerTest.php" hash="bbef8e207c387dbe6a26142fd55264d5"/><file name="facetTest.php" hash="26123aa75cb2597a3ededfa9d778095d"/><file name="facetValuesSortOrderTest.php" hash="b650080bf9b2cce2ac42a245cb84c911"/><file name="feedCoderTest.php" hash="f2b5dfdd4fa3c4e5d14c790d15235146"/><file name="filterCoderTest.php" hash="46249fa13edccf1e5d5000daf2573b77"/><file name="headerHelperTest.php" hash="62185c34e1e9015bb12014d719287f06"/><file name="helperConfigurationTest.php" hash="be3f74e53e27744e8214f3c341172796"/><file name="intervalTest.php" hash="912389dad049853f6bf0b4eab2af5034"/><file name="introspectionTest.php" hash="351c963d3e1b077c74d029a0d0f58539"/><file name="metaHelperTest.php" hash="080f160b54636c4eee743544a6a12bee"/><file name="metadataHelperTest.php" hash="15435661053dbc0b780f57fdcc343b33"/><file name="pagerHelperTest.php" hash="d96a9891523e453647493f3219e86357"/><file name="promoteBannerReplyHelper.php" hash="94c3c14517536437e9800eaa706fbe29"/><file name="promoteRedirectReplyHelper.php" hash="ed00c66be5127d8b374f6416abf328ef"/><file name="promoteReplyHelperTest.php" hash="7cbb68a7f50c2bd2ef11a085ac94deb2"/><file name="promoteReplysetHelperTest.php" hash="ac2f1e3073015143dc7b2b705711c845"/><file name="queryCoderTest.php" hash="03983a114c6697464f8bf016822ff4a3"/><file name="queryOrchestrationTest.php" hash="02867da7662cdb9f005eb9c1e73dfa30"/><file name="queryTest.php" hash="338264d8e6dbbc09e88bd9a8179e8be4"/><file name="replyHelperTest.php" hash="4d86f19ea7de2aece5d7fd9c143c3dbc"/><file name="replysetHelperTest.php" hash="897f074b8382c6853f51b06a5ee50b0a"/><file name="responseHelperTest.php" hash="269c1af42785d8bcc90ff9139565b0d3"/><file name="searchConnectorTest.php" hash="9201de573884b643041b6c32bc535e7e"/><file name="searchQueryManagerTest.php" hash="2188b262a1c11422bcc8133f68fa6dd9"/><file name="searchTest.php" hash="fa47a7819b5c7c71172d6b1f1e7a02f7"/><file name="spellcheckHelperTest.php" hash="49960fb90055dcf265ef41e491c11325"/><file name="spellcheckTextVisitorTest.php" hash="203f0d08f548a39135517a41f6e9e43a"/><file name="textVisitorTest.php" hash="b722845dd0f5f953574cb51284ad025b"/></dir><file name="afs_base_reply_helper.php" hash="57abe4828b7ed7126db963764faa718a"/><file name="afs_base_replyset_helper.php" hash="096b124a3ebdc6e8d6beb359bd8bb7c5"/><file name="afs_client_data_exception.php" hash="899957af974d04aa7eaca44903a7f86c"/><file name="afs_client_data_helper.php" hash="4700218e2400350014fde428bc86806b"/><file name="afs_cluster_exception.php" hash="86d97623db7aebaa28a20857ce2cf17f"/><file name="afs_cluster_helper.php" hash="60b7fbcc869a672929ef9fc6d840d2b2"/><file name="afs_cluster_parameter.php" hash="20ed527d3ed1a6cf2bc80e032ecd2c7e"/><file name="afs_coder_base.php" hash="fb87fbea43d12695154b3b6102e2a019"/><file name="afs_coder_interface.php" hash="3b179b2513e215751ee4edd190b2a719"/><file name="afs_concept_helper.php" hash="982cf3d2063c565cf19cc6136b049066"/><file name="afs_count.php" hash="9f83f3baa3cf4462c0db786f4eea479a"/><file name="afs_facet.php" hash="1b4d7d35ebe8ed4894fda4881d0b168f"/><file name="afs_facet_combination.php" hash="005e9742ee032194b86856195dd59f7d"/><file name="afs_facet_default.php" hash="cbcb5d28b7b00815ce5248017065e84b"/><file name="afs_facet_exception.php" hash="f1f0afdbf9a727b53c4731e5a40ac417"/><file name="afs_facet_helper.php" hash="b8ad96c57ec80f40bd21a39bb9b5fbb5"/><file name="afs_facet_helper_retriever.php" hash="5628cc41c50ab25fd3336df302d903f4"/><file name="afs_facet_layout.php" hash="c83f6fef1c13ba3cda667c611841ff87"/><file name="afs_facet_manager.php" hash="a3fabb34d56a9614d4a0a2917f6fea0c"/><file name="afs_facet_mode.php" hash="8dcac389a37f8267a367400377631dba"/><file name="afs_facet_sort.php" hash="0d7ba4059b10da9981b9c801355cb874"/><file name="afs_facet_type.php" hash="6df82cbfa627629f9523437994d1fbb1"/><file name="afs_facet_value_formatter.php" hash="d6580281f9ef5c0820615ac385aae863"/><file name="afs_facet_values_sort_mode.php" hash="17def98365132c810515f8cf3c6fb006"/><file name="afs_facet_values_sort_order.php" hash="f95f77cb5dd7015e4f2e6094ddba49a6"/><file name="afs_feed_coder.php" hash="ed7b40e872a7ed5aa30adbcffc05de56"/><file name="afs_filter_coder.php" hash="4edbdcf6760d80465e5d2533014ba307"/><file name="afs_filter_parameter.php" hash="2b03c2c83ffe2e2968aaf50ad4903921"/><file name="afs_fts_mode.php" hash="edbd9342cd9625183e1e01ed81b79fc3"/><file name="afs_header_helper.php" hash="c123aeb736bf2e0506e56831fe516800"/><file name="afs_helper_configuration.php" hash="dbd0378574fbc5729babfbddfef0fd67"/><file name="afs_interval.php" hash="dbf9749881be0a2b063f8a33dff214f3"/><file name="afs_interval_exception.php" hash="40f223de231df03aae59596c1a493065"/><file name="afs_introspection.php" hash="24fdebf9ce3ca4755f6c67233661684c"/><file name="afs_meta_helper.php" hash="8403689868c98db725ebd11748508c8b"/><file name="afs_metadata_helper.php" hash="749c506ea001f63e483934a0647067e6"/><file name="afs_pager_helper.php" hash="077052931e0cffb1e589c21b57156b38"/><file name="afs_producer.php" hash="7c8c515ccb8126523fa0d09a7f759dd5"/><file name="afs_promote_banner_reply_helper.php" hash="418702b3c053029b3aa8fcb2775c65bd"/><file name="afs_promote_redirect_reply_helper.php" hash="be17eda6f8b4552b9ec21183362171a2"/><file name="afs_promote_reply_helper.php" hash="0e2a4f67cd307f74e8b64cd3b158235c"/><file name="afs_promote_replyset_helper.php" hash="fdefc6f8a686addb31ea9b6c0a3fa5ad"/><file name="afs_query.php" hash="bd969a62cd4bbbcb5b9996eaa19353f7"/><file name="afs_query_coder.php" hash="ca0bfad66b8d8549ab3f33380d716732"/><file name="afs_query_coder_interface.php" hash="dd16f17b3606a7418c1c714475b19b51"/><file name="afs_query_object_interface.php" hash="a9af13e2c856e4136ccadfff60f72d36"/><file name="afs_raw_text_visitor.php" hash="fd574583c4c9110165c1cadc67b832de"/><file name="afs_reply_helper.php" hash="3919f9e83cba62be9bc67117b1087b03"/><file name="afs_reply_helper_factory.php" hash="f159f7d0ef7e5a209fb872a970d0d582"/><file name="afs_replyset_helper.php" hash="cb8f81391d9a59904dcb0c3d6ae31999"/><file name="afs_response_exception.php" hash="0a865bb92fb700ae555dcb5ae675f644"/><file name="afs_response_helper.php" hash="f14628e4a9b9d1259af466dd5dadae26"/><file name="afs_search.php" hash="3f2e3ef447515a2fa05b270654ef2969"/><file name="afs_search_connector.php" hash="17242fb6536f4596b2c0198a16986310"/><file name="afs_search_query_manager.php" hash="77e30683ee4ba9e004e9c7c12d9c811d"/><file name="afs_sort_builtins.php" hash="0cc1617a62f1a834a28d7d2ac249b081"/><file name="afs_sort_coder.php" hash="1dfe2d32278383d8465df67535cb91dd"/><file name="afs_sort_order.php" hash="7755deb99386650c9974871474168cda"/><file name="afs_sort_parameter.php" hash="bfb8c59c1560ec8a3b597dc45aa8ecd5"/><file name="afs_spellcheck_helper.php" hash="bb5465848ada7a9df9875f2565fb9686"/><file name="afs_spellcheck_text_helper.php" hash="3ca5c3118660aa600aadb504ceff6c4c"/><file name="afs_spellcheck_text_visitor.php" hash="c44c23ae21f61b065e457911bbc45ed2"/><file name="afs_text_helper.php" hash="59c4ae24560948c3af0f4adbf6bd1803"/><file name="afs_text_visitor.php" hash="867b44a280403cd4567358ec6d59588a"/></dir><file name="afs_configuration_base.php" hash="f26dd9efda4923cc2c71057f21be97d9"/><file name="afs_connector.php" hash="aa04a21163b57ef338bf96bd55e95882"/><file name="afs_exception.php" hash="c1840fe279f9cb313cec151012ed4513"/><file name="afs_feed.php" hash="005305cace79a3aa7719a3c942df9da7"/><file name="afs_multiple_values_parameter.php" hash="96dc30f1fbf137cbfd73c2b195d9f9ef"/><file name="afs_origin.php" hash="a6b7e39a687210572c116afcbea0e7cb"/><file name="afs_query_base.php" hash="7209115a714d9b7de209a0af691c1d22"/><file name="afs_query_parameter.php" hash="6552428d955d0a48c015e1f98ba62815"/><file name="afs_response_helper_base.php" hash="b087f7bdad35ed0526566042ef9afc8c"/><file name="afs_single_value_parameter.php" hash="65d002d7ac6b6e8dd6170309b4c84649"/><file name="orchestration_type.php" hash="047eab54be2eba5500ef747ab7f139b9"/></dir><dir name="AIF"><file name="Makefile" hash="2d232abf9913fcabb44033d5e5d1ebfd"/><dir name="TEST"><file name="Makefile" hash="24d3030d27e88732028d14fb1d81c203"/><file name="afsMultipartResponseTest.php" hash="70a64d0d599ea01806fac2126fb3680a"/><file name="authenticationTest.php" hash="2e476e9ab15ee221ddd63bb555262a28"/><file name="bowsInformationTest.php" hash="3bbfe71f431a35f0285afdca40906874"/><file name="documentManagerTest.php" hash="ad90a6146f5aeee383355bb05425b3dd"/><file name="documentTest.php" hash="59b204b10b90cd764b259ad4c2bc043a"/><file name="pafConnectorTest.php" hash="ac2928b501d9ea167af43dbf3adafa7d"/><file name="pafLiveTest.php" hash="92862c31d151c34b2caf44bff9d0fb80"/></dir><file name="afs_about_connector.php" hash="8972264a9b7cce237ad1a4b47852b529"/><file name="afs_authentication.php" hash="4285035550c9681a047b85abbca64936"/><file name="afs_bows_connector.php" hash="47a6bcafd5eba2361d2cea409f60d3f7"/><file name="afs_bows_connector_interface.php" hash="8fdf9749f0500a39741d696feb55af14"/><file name="afs_bows_exception.php" hash="1bd8657a37b8b4a9e08bfc4eb6b7e416"/><file name="afs_bows_information.php" hash="1f96a4cd84b2332f1186f9e0cea8542d"/><file name="afs_bows_information_cache.php" hash="1ae9a9243342c4e58a52e70473b68472"/><file name="afs_document.php" hash="c0003ec962a79b9d3f642b17bade0fff"/><file name="afs_document_manager.php" hash="8c5c0105d9337b7ae6a9f041f643ea88"/><file name="afs_multipart_response.php" hash="f2077c9eaf121fabdb2fc26c23b2e256"/><file name="afs_paf_connector.php" hash="e787ede85ec77a7bb2c25e666e0c0403"/><file name="afs_paf_live_connector.php" hash="87be0a822a7e18c24ed770050523b4cf"/><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="e9fc1284316d907b98f61ce7a43e1721"/><file name="afs_connector_interface.php" hash="68ad5e20a861b85dbf198f79cd2afd4c"/><file name="afs_exception.php" hash="b8eed4376088ae3003d0b77cc523e732"/><file name="afs_helper_base.php" hash="839cca78a663c3a22b4a8e35d1460129"/><file name="afs_helper_format.php" hash="30a3f6e945db7412ef95e83e7b0b5898"/><file name="afs_language.php" hash="277acb15b86089b37c812c47f2141d3c"/><file name="afs_service.php" hash="12c00c906e130860120552c40fa9dbc2"/><file name="afs_service_status.php" hash="1dee172850a76b46987534df89013878"/><file name="afs_tools.php" hash="26f6c01c5a61987925385e7a35260399"/><file name="afs_user_session_manager.php" hash="abd625f6b7b5cecf386dac9d82887764"/><file name="afs_versions.php" hash="556c912ff7f19f5083c4fb44d4d40ac6"/><dir name="lib"><dir name="JsonPath"><file name="JsonPath.php" hash="baa12e1baa9f8a20a095463042e96ad3"/><file name="JsonStore.php" hash="a9632aeb2126e98db9a49403a8f2ff77"/></dir></dir><dir name="php-SAI"><file name="README.md" hash="63ab581c83fe44918e6d074e20f08f95"/><dir name="lib"><dir name="Curl"><file name="Handle.php" hash="0fc7132737da7cee7df6b974447864ac"/></dir><file name="Curl.php" hash="358e4d3afca2035ee4d3f99f372ed15a"/><file name="CurlInterface.php" hash="714fa045dd4546d0c92cd022efb09422"/><file name="CurlStub.php" hash="fbdc0ece6321c5b5a1e27a65449f4a1f"/><dir name="rb_temp"><file name="HttpClient.php" hash="091b91c98acf9f1cd6c3d6d75cddfb88"/><file name="MultiCurl.php" hash="916e85d73bae6e136f889166ebc6db17"/><file name="SimpleCurl.php" hash="c296966a8bda96e03b464a1d3a9c8e06"/></dir></dir><dir name="tests"><file name="SAI_CurlStubTest.php" hash="bce69cbb17a40bd4eeba6bad1133216e"/></dir><file name=".gitignore" hash="09e625dea07b4d4098b19ec998d266f9"/></dir></dir><file name="COPYING" hash="b234ee4d69f5fce4486a80fdaf4a4263"/><file name="COPYING.LESSER" hash="4fbd65380cdd255951079008b364516c"/><file name="FAQ.md" hash="7d7c886674d70a0047303c5d93de6165"/><file name="Makefile" hash="225475a5a4a0204cecbb77621ff38bb2"/><file name="README.md" hash="7ecfd33825a0e6bc50cca099c1c0e50e"/><file name="afs_lib.doxygen" hash="8128d53d894cc57e08142377d13c72f4"/><file name="afs_lib.php" hash="3983ce6bee84b7aeb3f8769f06547978"/><file name="afs_version.php" hash="d6c378547ae2155e8756e6abb9cb7ddd"/><file name="composer.json" hash="39190df70fafa99d7eb5ab566e8edf3f"/><dir name="doc"><file name="afs_filter_documentation.dox" hash="3bf4b96e25d95ce5953b822038c6f135"/><file name="afs_paf_upload.dox" hash="d36893db0234f171e6cfb43f6e13d47c"/><file name="afs_search.dox" hash="b1c5ab8728703822f910852cd17561f4"/><file name="afs_search_coder.dox" hash="77709e1bc691301017f0982e0348a9b9"/><file name="afs_search_query.dox" hash="21dcd1734a165a4cb3b4f62c42a6a0be"/><file name="afs_search_reply.dox" hash="cdb1d42447671f4352927b40b3f8f37d"/><dir name="data"><file name="acp_helper_example.php" hash="2815890e7afbae78e7eb4e6fc5c88f6f"/><file name="full_example.php" hash="e152a964d06e55de460c596070c714d8"/><file name="full_lightweight_example.php" hash="eac3bb2d251052f547a9f737e5cd0461"/><file name="raw_example.php" hash="703356b9284e7fe904cf1334abbe08c9"/><dir name="templates"><file name="error_template.html" hash="70f44bd0f45470d379a11d0a2fe507e4"/><file name="facet_template.html" hash="6836005a7dae45e9415273f1eb6b78e2"/><file name="facet_values_template.html" hash="9b41f2b55a1cecae5724b4fcd4a46cfb"/><file name="meta_template.html" hash="e664a3bb222d272ce2451fb10bf46de4"/><file name="pager_template.html" hash="2700ab5b60a1f9553b1c39374fda63d4"/><file name="result_template.html" hash="1572a4ef4e8dda0b3db1ea77bbed4a98"/><file name="spellcheck_template.html" hash="8042054a1f5a271b47c77f81436c4791"/></dir></dir><file name="detailled_integration_example_with_template.dox" hash="26ef377a6ef546b636a0e254d11d01f5"/><file name="lightweight_integration_example_with_template.dox" hash="5a388d2dbfad63ad6ec353407b79a6bb"/><file name="logo-antidot-long-200x41.png" hash="1ceac3fff767fb5e395bd767344a3d13"/><file name="main.dox" hash="ca3e97f95deead927fb3298ecafbad5e"/><file name="raw_integration_example.dox" hash="56a7126d008c2e49abdf9bf0b5ec9717"/><file name="template_prerequisites.dox" hash="baa24a943e19ff3654227850bd316abb"/><file name="templates_in_details.dox" hash="5e8db94382f1fbd6c4e0b424a9edc9a3"/></dir><file name="rules.mk" hash="ff48aa6a5c40e31b3f38aba1267e9a71"/><dir name="scripts"><file name="gen_doc.sh" hash="0f6fc60aca94da563397d3c710bd9d33"/><file name="increment_version.sh" hash="431db9c60d2f94d251be07957787fcb0"/><file name="print_version.sh" hash="a05ddc19cd27ff185721fe2bd0cffc25"/><file name="version_management.sh" hash="3d5ecd39f45ba081144b3033dbd14330"/></dir><file name=".gitignore" hash="0292f51c0906b2092255872c69603f29"/><file name=".travis.yml" hash="583ae2ce82dac5eb2fac498ae3ce1dec"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="antidot"><file name="CollapsibleLists.css" hash="fa3d62a3b773c4a3cd7559843761f6d8"/><file name="catalogsearch.css" hash="88f7b8e6175e017a3f5d64548d2a0203"/></dir></dir><dir name="images"><dir name="antidot"><file name="button-closed.png" hash="563b78324e0712c0902cb4f77cb9eb86"/><file name="button-open.png" hash="c710849a0d2b61ad1f0fc36c0e59d131"/><file name="button.png" hash="97f3055c5046c851eea2dad7e5227508"/></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>
|
skin/frontend/base/default/css/antidot/CollapsibleLists.css
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.treeView {
|
2 |
+
-moz-user-select: none;
|
3 |
+
position: relative;
|
4 |
+
}
|
5 |
+
.treeView ul {
|
6 |
+
margin: 0 0 0 -1.5em !important;
|
7 |
+
padding: 0 0 0 1.5em;
|
8 |
+
}
|
9 |
+
.treeView li.lastChild > ul {
|
10 |
+
background-image: none;
|
11 |
+
}
|
12 |
+
.treeView li {
|
13 |
+
cursor: auto;
|
14 |
+
list-style-image: url("../../images/antidot/button.png");
|
15 |
+
list-style-position: inside;
|
16 |
+
margin: 0;
|
17 |
+
padding: 0;
|
18 |
+
margin-left: 0px !important;
|
19 |
+
}
|
20 |
+
.treeView li.collapsibleListOpen {
|
21 |
+
cursor: pointer;
|
22 |
+
list-style-image: url("../../images/antidot/button-open.png");
|
23 |
+
}
|
24 |
+
.treeView li.collapsibleListClosed {
|
25 |
+
cursor: pointer;
|
26 |
+
list-style-image: url("../../images/antidot/button-closed.png");
|
27 |
+
}
|
28 |
+
.treeView li li {
|
29 |
+
padding-left: 1.5em;
|
30 |
+
}
|
skin/frontend/base/default/css/antidot/catalogsearch.css
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.antidot-tabs {
|
2 |
+
max-width: 100%;
|
3 |
+
float: none;
|
4 |
+
list-style: none;
|
5 |
+
padding: 0;
|
6 |
+
}
|
7 |
+
|
8 |
+
.antidot-tabs:after {
|
9 |
+
content: '';
|
10 |
+
display: table;
|
11 |
+
clear: both;
|
12 |
+
}
|
13 |
+
|
14 |
+
.antidot-tabs > input[type=radio] {
|
15 |
+
display:none;
|
16 |
+
}
|
17 |
+
|
18 |
+
.antidot-tabs > label {
|
19 |
+
display: block;
|
20 |
+
float: left;
|
21 |
+
width: 25%;
|
22 |
+
|
23 |
+
font-size: 20px;
|
24 |
+
font-weight: normal;
|
25 |
+
text-decoration: none;
|
26 |
+
text-align: center;
|
27 |
+
line-height: 2;
|
28 |
+
|
29 |
+
cursor: pointer;
|
30 |
+
box-shadow: inset 0 4px #ccc;
|
31 |
+
border-bottom: 4px solid #ccc;
|
32 |
+
|
33 |
+
-webkit-transition: all 0.5s; /* Safari 3.1 to 6.0 */
|
34 |
+
transition: all 0.5s;
|
35 |
+
}
|
36 |
+
|
37 |
+
.antidot-tabs > label i {
|
38 |
+
padding: 5px;
|
39 |
+
margin-right: 0;
|
40 |
+
}
|
41 |
+
|
42 |
+
.antidot-tabs > label:hover {
|
43 |
+
color: #3498db;
|
44 |
+
box-shadow: inset 0 4px #3498db;
|
45 |
+
border-bottom: 4px solid #3498db;
|
46 |
+
}
|
47 |
+
|
48 |
+
.antidot-tab-content {
|
49 |
+
display: none;
|
50 |
+
width: 100%;
|
51 |
+
float: left;
|
52 |
+
padding: 15px;
|
53 |
+
box-sizing: border-box;
|
54 |
+
|
55 |
+
}
|
56 |
+
|
57 |
+
.antidot-tabs [id^="antidot-tab"]:checked + label {
|
58 |
+
background: #FFF;
|
59 |
+
box-shadow: inset 0 4px #3498db;
|
60 |
+
border-bottom: 4px solid #3498db;
|
61 |
+
color: #3498db;
|
62 |
+
}
|
63 |
+
|
64 |
+
#antidot-tab-products:checked ~ #antidot-tab-content-products,
|
65 |
+
#antidot-tab-articles:checked ~ #antidot-tab-content-articles,
|
66 |
+
#antidot-tab-stores:checked ~ #antidot-tab-content-stores {
|
67 |
+
display: block;
|
68 |
+
}
|
skin/frontend/base/default/css/mdn/antidot/CollapsibleLists.css
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
.treeView {
|
2 |
-
-moz-user-select: none;
|
3 |
-
position: relative;
|
4 |
-
}
|
5 |
-
.treeView ul {
|
6 |
-
margin: 0 0 0 -1.5em !important;
|
7 |
-
padding: 0 0 0 1.5em;
|
8 |
-
}
|
9 |
-
.treeView ul ul {
|
10 |
-
/*background: url("../../../images/mdn/antidot/list-item-contents.png") repeat-y scroll left center rgba(0, 0, 0, 0);*/
|
11 |
-
}
|
12 |
-
.treeView li.lastChild > ul {
|
13 |
-
background-image: none;
|
14 |
-
}
|
15 |
-
.treeView li {
|
16 |
-
/*background: url("../../../images/mdn/antidot/list-item-root.png") no-repeat scroll left top rgba(0, 0, 0, 0);*/
|
17 |
-
cursor: auto;
|
18 |
-
list-style-image: url("../../../images/mdn/antidot/button.png");
|
19 |
-
list-style-position: inside;
|
20 |
-
margin: 0;
|
21 |
-
padding: 0;
|
22 |
-
margin-left: 0px !important;
|
23 |
-
}
|
24 |
-
.treeView li.collapsibleListOpen {
|
25 |
-
cursor: pointer;
|
26 |
-
list-style-image: url("../../../images/mdn/antidot/button-open.png");
|
27 |
-
}
|
28 |
-
.treeView li.collapsibleListClosed {
|
29 |
-
cursor: pointer;
|
30 |
-
list-style-image: url("../../../images/mdn/antidot/button-closed.png");
|
31 |
-
}
|
32 |
-
.treeView li li {
|
33 |
-
/*background-image: url("../../../images/mdn/antidot/list-item.png");*/
|
34 |
-
padding-left: 1.5em;
|
35 |
-
}
|
36 |
-
.treeView li.lastChild {
|
37 |
-
/*background-image: url("../../../images/mdn/antidot/list-item-last.png");*/
|
38 |
-
}
|
39 |
-
.treeView li.collapsibleListOpen {
|
40 |
-
/*background-image: url("../../../images/mdn/antidot/list-item-open.png");*/
|
41 |
-
}
|
42 |
-
.treeView li.collapsibleListOpen.lastChild {
|
43 |
-
/*background-image: url("../../../images/mdn/antidot/list-item-last-open.png");*/
|
44 |
-
}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
skin/frontend/base/default/images/{mdn/antidot → antidot}/button-closed.png
RENAMED
File without changes
|
skin/frontend/base/default/images/{mdn/antidot → antidot}/button-open.png
RENAMED
File without changes
|
skin/frontend/base/default/images/{mdn/antidot → antidot}/button.png
RENAMED
File without changes
|
skin/frontend/base/default/images/mdn/antidot/base.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/cd.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/empty.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/folder.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/folderopen.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/globe.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/imgfolder.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/join.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/joinbottom.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/line.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/list-item-contents.png
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/list-item-last-open.png
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/list-item-last.png
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/list-item-open.png
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/list-item-root.png
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/list-item.png
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/minus.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/minusbottom.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/musicfolder.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/nolines_minus.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/nolines_plus.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/page.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/plus.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/plusbottom.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/question.gif
DELETED
Binary file
|
skin/frontend/base/default/images/mdn/antidot/trash.gif
DELETED
Binary file
|