Expertrec_Recommendation - Version 1.1.7

Version Notes

Expertrec Recommendation plugin for magento sites.

Download this release

Release Info

Developer melchi
Extension Expertrec_Recommendation
Version 1.1.7
Comparing to
See all releases


Code changes from version 1.0.12 to 1.1.7

Files changed (22) hide show
  1. app/code/community/Expertrec/Recommendation/Block/Api.php +1 -0
  2. app/code/community/Expertrec/Recommendation/Block/Product/List/Toolbar.php +46 -0
  3. app/code/community/Expertrec/Recommendation/Helper/Autocompletehelper.php +0 -128
  4. app/code/community/Expertrec/Recommendation/Helper/Data.php +14 -16
  5. app/code/community/Expertrec/Recommendation/Helper/Search/Layout.php +8 -447
  6. app/code/community/Expertrec/Recommendation/Helper/Searchhelper.php +224 -0
  7. app/code/community/Expertrec/Recommendation/Model/Catalogsearch/Layer.php +118 -0
  8. app/code/community/Expertrec/Recommendation/Model/Feed/Formatter.php +21 -6
  9. app/code/community/Expertrec/Recommendation/Model/Observer.php +2 -47
  10. app/code/community/Expertrec/Recommendation/Model/Translator/Category.php +44 -2
  11. app/code/community/Expertrec/Recommendation/Model/Validate.php +1 -8
  12. app/code/community/Expertrec/Recommendation/controllers/ApiController.php +3 -4
  13. app/code/community/Expertrec/Recommendation/controllers/CatalogSearch/ResultController.php +1 -10
  14. app/code/community/Expertrec/Recommendation/etc/config.xml +15 -16
  15. app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-install-1.0.12.php → mysql4-install-1.1.7.php} +8 -8
  16. app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-upgrade-1.0.11-1.0.12.php → mysql4-upgrade-1.1.6-1.1.7.php} +7 -7
  17. app/design/frontend/base/default/layout/expertrec/recommendation.xml +4 -33
  18. app/design/frontend/base/default/template/expertrec/recommendation/tracker.phtml +11 -1
  19. app/design/frontend/base/default/template/expertrec/search/custom.phtml +0 -2
  20. app/design/frontend/base/default/template/expertrec/search/list.phtml +0 -23
  21. app/design/frontend/base/default/template/expertrec/search/view.phtml +0 -16
  22. package.xml +4 -4
app/code/community/Expertrec/Recommendation/Block/Api.php CHANGED
@@ -336,6 +336,7 @@ class Expertrec_Recommendation_Block_Api extends Mage_Core_Block_Template{
336
  'expert_smallImage',
337
  'expert_thumbnail',
338
  'expert_category',
 
339
  'expert_url',
340
  'final_price',
341
  'entity_id',
336
  'expert_smallImage',
337
  'expert_thumbnail',
338
  'expert_category',
339
+ 'expert_category_ids',
340
  'expert_url',
341
  'final_price',
342
  'entity_id',
app/code/community/Expertrec/Recommendation/Block/Product/List/Toolbar.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expertrec_Recommendation_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar {
4
+
5
+ /**
6
+ * Set collection to pager, overriding this function
7
+ *To ignore relevance
8
+ *
9
+ * @param Varien_Data_Collection $collection
10
+ * @return Mage_Catalog_Block_Product_List_Toolbar
11
+ */
12
+ public function setCollection($collection)
13
+ {
14
+ $searchEnable = Mage::helper('expertrec_recommendation/searchhelper')->getSearchEnable();
15
+ $pageIdentifier = Mage::app()->getFrontController()->getAction()->getFullActionName();
16
+ $isSearchPage = $pageIdentifier === 'catalogsearch_result_index' ||
17
+ $pageIdentifier === 'expertrec_result_index';
18
+
19
+ //Don't use the toolbar when it is not the search page or when the search is not enabled
20
+ if(!$isSearchPage || !(isset($searchEnable) && $searchEnable == "true"))
21
+ {
22
+ Mage::getSingleton('expertrec_recommendation/log')->log(" Default Toolbar call made ");
23
+ return parent::setCollection($collection);
24
+ }
25
+
26
+ $this->_collection = $collection;
27
+ $this->_collection->setCurPage($this->getCurrentPage());
28
+
29
+ // we need to set pagination only if passed value integer and more that 0
30
+ $limit = (int)$this->getLimit();
31
+ if ($limit) {
32
+ $this->_collection->setPageSize($limit);
33
+ }
34
+ if ($this->getCurrentOrder() != "relevance") {
35
+
36
+ Mage::getSingleton('expertrec_recommendation/log')->log(" I have received order from Magento ".print_r($this->getCurrentOrder(),1),null);
37
+ $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
38
+
39
+ }
40
+
41
+ return $this;
42
+ }
43
+
44
+ }
45
+
46
+ ?>
app/code/community/Expertrec/Recommendation/Helper/Autocompletehelper.php DELETED
@@ -1,128 +0,0 @@
1
- <?php
2
-
3
- class Expertrec_Recommendation_Helper_Autocompletehelper extends Mage_Core_Helper_Abstract{
4
-
5
- const SEARCH_LIST_API = 'search/api';
6
- const SEARCH_FACET_LIST = 'search/facets_list';
7
- const SEARCH_ITEMS_PER_PAGE = 'search/items_per_page';
8
-
9
- protected $_facetList = array();
10
- protected $_itemsPerPage = 20;
11
-
12
- protected function getFormatUrl($url){
13
- $splitedUrl = explode("?", $url);
14
- $newUrl = preg_replace('/\/ajax/',"",$splitedUrl[0]);
15
- if(count($splitedUrl) == 2){
16
- $newUrl .= '?'.$splitedUrl[1];
17
- }
18
- return $newUrl;
19
- }
20
-
21
- protected function getSearchApi($confArray){
22
- $searchApi = "";
23
- try{
24
- $itemsPerPage = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_ITEMS_PER_PAGE);
25
- $storeSearchApi = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_API);
26
- }catch(Exception $e){
27
- Mage::getSingleton('expertrec_recommendation/log')->log('Autocompletehelper::getting searchApi exception: '.$e->getMessage());
28
- }
29
- if(!empty($itemsPerPage)){
30
- $this->_itemsPerPage = $itemsPerPage;
31
- }
32
-
33
- if(!empty($storeSearchApi)){
34
- $searchApi = $storeSearchApi;
35
- $previous = $confArray["curPage"]-1;
36
- $searchApi .= "?q=".urlencode($confArray["query"])."&page=".$previous."&size=".$this->_itemsPerPage;
37
- $searchApi .= "&fq=order:".urlencode($confArray["order"]);
38
- if(isset($confArray['filters'])){
39
- $filters = $confArray['filters'];
40
- foreach ($filters as $fkey => $fvalue) {
41
- $searchApi .= "&fq=".$fkey.":".urlencode($fvalue);
42
- }
43
- }
44
- }
45
-
46
- return $searchApi;
47
- }
48
-
49
- public function getItemsPerPage(){
50
- return (int)$this->_itemsPerPage;
51
- }
52
-
53
- public function prepareLayer($requestParams){
54
- $confArray = array();
55
- $filters = array();
56
- $resultData = array();
57
- try{
58
- $confArray["url"] = $this->getFormatUrl(Mage::helper('core/url')->getCurrentUrl());
59
- $confArray["query"] = htmlentities($requestParams['q'], ENT_QUOTES);
60
-
61
- $confArray["curPage"] = isset($requestParams['p']) ? (int)$requestParams['p'] : 1;
62
-
63
- $mode = isset($requestParams['mode']) ? $requestParams['mode'] : 'grid';
64
- $confArray["mode"] = $mode == 'list' ? $mode : 'grid';
65
- $confArray["order"] = isset($requestParams["order"]) ? $requestParams["order"] : 'relevance';
66
-
67
- try{
68
- $facetList = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_FACET_LIST);
69
- $this->_facetList = !empty($facetList) ? explode(",", $facetList) : $this->_facetList;
70
- }catch(Exception $ex){
71
- Mage::getSingleton('expertrec_recommendation/log')->log('Autocompletehelper::getting facetlist from db exception: '.$ex->getMessage());
72
- }
73
-
74
- if(count($this->_facetList) > 0){
75
- foreach($this->_facetList as $facet){
76
- $filter = isset($requestParams[$facet]) ? $requestParams[$facet] : '';
77
- if(!empty($filter)){
78
- $filters[$facet] = str_replace(" ","+",$filter);
79
- }
80
- }
81
- $confArray['filters'] = $filters;
82
- }
83
-
84
- //setup search url
85
- $searchApi = $this->getSearchApi($confArray);
86
- //Mage::getSingleton('expertrec_recommendation/log')->log('search url: '.$searchApi);
87
-
88
- if(!empty($searchApi)){
89
-
90
- //sending request
91
- $resp = Mage::helper('expertrec_recommendation')->sendCurl($searchApi);
92
- $response_json = json_decode($resp,true);
93
-
94
- if(isset($response_json["res"]) && isset($response_json["res"]["count"])){
95
- $confArray["count"] = (int)$response_json["res"]["count"];
96
- }
97
-
98
- //Initiate search layout
99
- $layoutHelper = Mage::helper('expertrec_recommendation/search_layout')->init($confArray);
100
-
101
- $searchListData = $response_json["results"];
102
- $searchListHtml = $layoutHelper->prepareLayout($searchListData);
103
-
104
- if(isset($confArray['filters'])){
105
- $facetData = $response_json["facets"];
106
- $facetNavHtml = $layoutHelper->prepareFilterLayout($facetData);
107
- }else{
108
- $facetNavHtml = '';
109
- }
110
-
111
- $resultData["listHtml"] = $searchListHtml;
112
- $resultData["facetHtml"] = $facetNavHtml;
113
-
114
-
115
- }
116
-
117
- }catch (Exception $e) {
118
- Mage::getSingleton('expertrec_recommendation/log')->log('Autocompletehelper::prepareLayer exception: '.$e->getMessage());
119
- $resultData["listHtml"] = '<div style="color:red;><span style="font-weight:bold;">Error: </span>Oops. Something went wrong. Please try again later.</div>';
120
- $resultData["facetHtml"] = '';
121
- }
122
-
123
- return $resultData;
124
- }
125
-
126
- }
127
-
128
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Expertrec/Recommendation/Helper/Data.php CHANGED
@@ -196,22 +196,6 @@ class Expertrec_Recommendation_Helper_Data extends Mage_Core_Helper_Abstract {
196
  }
197
  return '';
198
  }
199
-
200
- /*
201
- Fetching number of products per store, per website
202
- */
203
- public function getProductCount($wid,$sid)
204
- {
205
- $productcount = 0;
206
-
207
- $collection = Mage::getResourceModel('catalog/product_collection');
208
- $collection->addStoreFilter($sid);
209
- $collection->addWebsiteFilter($wid);
210
- // Retrieve product count in collection
211
- $productcount = $collection->getSize();
212
-
213
- return $productcount;
214
- }
215
 
216
  public function pushFeed($filepath){
217
  try{
@@ -251,6 +235,20 @@ class Expertrec_Recommendation_Helper_Data extends Mage_Core_Helper_Abstract {
251
  return true;
252
  }
253
 
 
 
 
 
 
 
 
 
 
 
 
 
254
 
 
 
255
  }
256
  ?>
196
  }
197
  return '';
198
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
 
200
  public function pushFeed($filepath){
201
  try{
235
  return true;
236
  }
237
 
238
+ /*
239
+ Fetching number of products per store, per website
240
+ */
241
+ public function getProductCount($wid,$sid)
242
+ {
243
+ $productcount = 0;
244
+
245
+ $collection = Mage::getResourceModel('catalog/product_collection');
246
+ $collection->addStoreFilter($sid);
247
+ $collection->addWebsiteFilter($wid);
248
+ // Retrieve product count in collection
249
+ $productcount = $collection->getSize();
250
 
251
+ return $productcount;
252
+ }
253
  }
254
  ?>
app/code/community/Expertrec/Recommendation/Helper/Search/Layout.php CHANGED
@@ -4,16 +4,10 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
4
 
5
  const SEARCH_SINGLE_SELECT_FILTERS = 'search/single_select_filters';
6
  const SEARCH_IS_AJAX = 'search/is_ajax';
7
- const SEARCH_DISPLAY_PAGES = 'search/display_pages';
8
- const SEARCH_FETCH_PRICE = 'search/fetch_price';
9
- const SEARCH_CONVERT_PRICE = 'search/convert_price';
10
-
11
- protected $_itemsPerPage;
12
- protected $_displayPages = 5;
13
  protected $_isAjax = false;
14
  protected $_confArray;
15
- protected $_fetchPrice = false;
16
- protected $_convertPrice = false;
17
  protected $_singleSelectFilters = array();
18
 
19
  public function init($confArray){
@@ -21,17 +15,11 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
21
  try{
22
  $singleFilters = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_SINGLE_SELECT_FILTERS);
23
  $isAjax = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_IS_AJAX);
24
- $displayPages = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_DISPLAY_PAGES);
25
- $fetchPrice = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_FETCH_PRICE);
26
- $convertPrice = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_CONVERT_PRICE);
27
 
28
  $this->_singleSelectFilters = isset($singleFilters) ? explode(',', $singleFilters) : $this->_singleSelectFilters;
29
  $this->_isAjax = isset($isAjax) && $isAjax == 'true' ? true : false;
30
- $this->_fetchPrice = isset($fetchPrice) && $fetchPrice == 'true' ? true : false;
31
- $this->_convertPrice = isset($convertPrice) && $convertPrice == 'true' ? true : false;
32
- $this->_displayPages = !empty($displayPages) ? (int)$displayPages : $this->_displayPages;
33
-
34
- $this->_itemsPerPage = Mage::helper('expertrec_recommendation/autocompletehelper')->getItemsPerPage();
35
  }catch (Exception $e) {
36
  Mage::getSingleton('expertrec_recommendation/log')->log('Search Layout Helper::init exception: '.$e->getMessage());
37
  }
@@ -48,268 +36,7 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
48
  return $finalUrl;
49
  }
50
 
51
- protected function getToolbarDiv(){
52
-
53
- $result = '<div class="toolbar"><div class="sorter">';
54
- $result .= '<p class="view-mode"><label>'.$this->__('View as').'</label>';
55
-
56
- if($this->_confArray["mode"] == 'grid'){
57
- $result .= '<strong title="Grid" class="grid">Grid</strong><a href="'.$this->removeRequestParam("mode").'&mode=list" title="List" class="list">List</a>';
58
- }else{
59
- $result .= '<a href= "'.$this->removeRequestParam("mode").'&mode=grid" title="Grid" class="grid">Grid</a><strong title="List" class="list">List</strong>';
60
- }
61
-
62
- $result .= '</p>';
63
- $result .= '<div class="sort-by"><label>'.$this->__('Sort By').'</label>';
64
- $result .= '<select onchange="setLocation(this.value)" title="'.$this->__('Sort By').'">';
65
-
66
- //sort by
67
- $orderArray = array("relevance"=>"Relevance", 'popularity'=>"Popularity", "price+asc"=>"Price - Low to High", "price+desc"=>"Price - High to Low");
68
- foreach ($orderArray as $oKey => $oValue) {
69
- if(urlencode($this->_confArray["order"]) == $oKey){
70
- $result .= '<option value="'.$this->removeRequestParam("order").'&order='.$oKey.'" selected="selected">'.$this->__($oValue).'</option>';
71
- }else{
72
- $result .= '<option value="'.$this->removeRequestParam("order").'&order='.$oKey.'">'.$this->__($oValue).' </option>';
73
- }
74
- }
75
-
76
- $result .= '</select>';
77
- $result .= '</div></div>';//close sorter
78
-
79
- $result .= '<div class="pager">';
80
- $result .= '<div class="count-container">';
81
-
82
- $totalNum = $this->_confArray["count"];
83
- $totalPage = ceil($totalNum/$this->_itemsPerPage);
84
- $previous = $this->_confArray["curPage"]-1;
85
- $firstNum = $previous * $this->_itemsPerPage + 1;
86
- $lastNum = min(($this->_confArray["curPage"] * $this->_itemsPerPage),$totalNum);
87
-
88
- if($totalPage > 1){
89
- $result .= '<p class="amount amount--has-pages">';
90
- $result .= $this->__('Showing %s - %s of %s', $firstNum, $lastNum, $totalNum);
91
- }else{
92
- $result .= '<p class="amount amount--no-pages">';
93
- $result .= '<strong>'.$this->__('Showing %s Item(s)', $totalNum) .'</strong>';
94
- }
95
- $result .= '</p>';
96
- $result .= '</div>';//close count-container
97
-
98
- $result .= '<div class="pages"><strong>Page:</strong>';
99
- $result .= '<ol>';
100
-
101
- //pager
102
- if($previous >= 1){
103
- $result .= '<li><a class="previous i-previous" href="'.$this->removeRequestParam("p").'&p='.(string)$previous.'" title="Previous">Prev</a></li>';
104
- }
105
-
106
- $pages = Mage::helper('expertrec_recommendation')
107
- ->getPages($this->_confArray["curPage"],$totalNum,$this->_displayPages,$this->_itemsPerPage);
108
- if(count($pages) > 1){
109
- foreach ($pages as $page){
110
- if($page == $this->_confArray["curPage"]){
111
- $result .= '<li class="current">'.(string)($this->_confArray["curPage"]).'</li>';
112
- }else{
113
- $result .= '<li><a href="'.$this->removeRequestParam("p").'&p='.(string)$page.'">'.(string)$page.'</a></li>';
114
- }
115
- }
116
- }
117
-
118
- $next = $this->_confArray["curPage"]+1;
119
- if($next <= $totalPage){
120
- $result .= '<li><a class="next i-next" href="'.$this->removeRequestParam("p").'&p='.(string)$next.'" title="Next">Next</a></li>';
121
- }
122
-
123
- $result .= '</ol>';
124
- $result .= '</div>';//close pages
125
- $result .= '</div>';//close pager
126
- $result .= '</div>';//close toolbar
127
-
128
- return $result;
129
- }
130
-
131
- protected function getGridProductsDiv($data){
132
- $confArray = $this->_confArray;
133
-
134
- $result = '<ul class="products-grid products-grid--max-3-col">';
135
-
136
- foreach ($data as $item) {
137
- if(!isset($item["entity_id"]) && !isset($item["title"]) && !isset($item["url"]) && !isset($item["image_url"])){
138
- continue;
139
- }
140
- $msrp = "";
141
- $price = "";
142
- $compareUrl = Mage::helper('expertrec_recommendation')->getProductCompareUrl($item['entity_id']);
143
- $wishlistUrl = Mage::helper('expertrec_recommendation')->getWishlistUrl($item['entity_id']);
144
- $cartUrl = Mage::helper('expertrec_recommendation')->getAddToCartUrl($item['entity_id']);
145
-
146
- if(!empty($item["msrp"]) && $item["msrp"] != "None" && $item["msrp"] != "0"){
147
- $msrp =$item['msrp'];
148
- }
149
- if(!empty($item["price"]) && $item["price"] != "None" && $item["price"] != "0"){
150
- $price = $item['price'];
151
- }
152
-
153
- if($this->_convertPrice){
154
- $price = Mage::helper('expertrec_recommendation')->getFormatCurrency($price,$item['entity_id'],$this->_fetchPrice);
155
- $msrp = Mage::helper('expertrec_recommendation')->getFormatCurrency($msrp,$item['entity_id'],$this->_fetchPrice);
156
- }else{
157
- $price = Mage::helper('expertrec_recommendation')->getFormatPrice($price);
158
- $msrp = Mage::helper('expertrec_recommendation')->getFormatPrice($msrp);
159
- }
160
-
161
- $result .= '<li class="item last">';
162
- $result .= '<a href="'.$item["url"].'" title="'.$item['title'].'" class="product-image">';
163
- $result .= '<img id="product-collection-image-'.$item['entity_id'].'" src="'.$item['image_url'].'" alt="'.$item['title'].'">';
164
- $result .= '</a>';
165
- $result .= '<div class="product-info" style="padding-bottom: 75px; min-height: 133px;"><h2 class="product-name">';
166
- $result .= '<a href="'.$item["url"].'" title="'.$item['title'].'">'.$item['title'].'</a>';
167
- $result .= '</h2>';
168
- $result .= '<div class="price-box">';
169
- if(!empty($msrp)){
170
- $result .= '<p class="old-price">';
171
- $result .= '<span class="price-label">Regular Price:</span>';
172
- $result .= '<span class="price" id="old-price-'.$item['entity_id'].'">'.$msrp.'</span>';
173
- $result .= '</p>';
174
-
175
- $result .= '<p class="special-price">';
176
- $result .= '<span class="price-label">Special Price</span>';
177
- $result .= '<span class="price" id="product-price-'.$item['entity_id'].'">'.$price.'</span>';
178
- $result .= '</p>';
179
- }else{
180
- $result .= '<span class="regular-price" id="product-price-'.$item['entity_id'].'"><span class="price">'.$price.'</span></span>';
181
- }
182
- $result .= '</div>';
183
- $result .= '<div class="actions">';
184
-
185
- if(!empty($cartUrl)){
186
- $result .= '<button type="button" title="Add to Cart" class="button btn-cart" onclick="setLocation(\''.$cartUrl.'\')">';
187
- $result .= '<span><span>Add to Cart</span></span>';
188
- $result .= '</button>';
189
- }
190
- $result .= '<ul class="add-to-links">';
191
-
192
- if(!empty($wishlistUrl)){
193
- $result .= '<li><a href="'.$wishlistUrl.'" class="link-wishlist"> <i class="fa fa-heart" aria-hidden="true"></i> Wishlist</a></li>';
194
- }
195
- if(!empty($compareUrl)){
196
- $result .= '<li><span class="separator">|</span>';
197
- $result .= '<a href="'.$compareUrl.'" class="link-compare"> <i class="fa fa-balance-scale" aria-hidden="true"></i> Compare</a>';
198
- $result .= '</li>';
199
- }
200
- $result .= '</ul>'; //add to links
201
- $result .= '</div>'; // actions div
202
- $result .= '</div>'; //product-info div
203
- $result .= '</li>';
204
-
205
- }
206
- $result .= '</ul>';
207
-
208
- return $result;
209
- }
210
-
211
- protected function getListProductsDiv($data){
212
- $confArray = $this->_confArray;
213
-
214
- $result = '<ol class="products-list" id="products-list">';
215
- $index = 1;
216
- $data_size = count($data);
217
- foreach ($data as $item) {
218
- if(!isset($item["entity_id"]) && !isset($item["title"]) && !isset($item["url"]) && !isset($item["image_url"])){
219
- continue;
220
- }
221
- $msrp = "";
222
- $price = "";
223
- $compareUrl = Mage::helper('expertrec_recommendation')->getProductCompareUrl($item['entity_id']);
224
- $wishlistUrl = Mage::helper('expertrec_recommendation')->getWishlistUrl($item['entity_id']);
225
- $cartUrl = Mage::helper('expertrec_recommendation')->getAddToCartUrl($item['entity_id']);
226
- $description = isset($item['desc']) ? $item['desc'] : (Mage::helper('expertrec_recommendation')->getProductDescription($item['entity_id']));
227
-
228
- if(!empty($item["msrp"]) && $item["msrp"] != "None" && $item["msrp"] != "0"){
229
- $msrp =$item['msrp'];
230
- }
231
- if(!empty($item["price"]) && $item["price"] != "None" && $item["price"] != "0"){
232
- $price = $item['price'];
233
- }
234
-
235
- if($this->_convertPrice){
236
- $price = Mage::helper('expertrec_recommendation')->getFormatCurrency($price,$item['entity_id'],$this->_fetchPrice);
237
- $msrp = Mage::helper('expertrec_recommendation')->getFormatCurrency($msrp,$item['entity_id'],$this->_fetchPrice);
238
- }else{
239
- $price = Mage::helper('expertrec_recommendation')->getFormatPrice($price);
240
- $msrp = Mage::helper('expertrec_recommendation')->getFormatPrice($msrp);
241
- }
242
-
243
- $odd_even = $data_size == $index ? 'last ' : '';
244
-
245
- $odd_even .= ($index % 2) == 0 ? 'even' : 'odd';
246
-
247
- $result .= '<li class="item '.$odd_even.'">';
248
- $result .= '<a href="'.$item["url"].'" title="'.$item['title'].'" class="product-image">';
249
- $result .= '<img id="product-collection-image-'.$item['entity_id'].'" src="'.$item['image_url'].'" alt="'.$item['title'].'">';
250
- $result .= '</a>';
251
- $result .= '<div class="product-shop">';
252
- $result .= '<div class="f-fix">';
253
- $result .= '<div class="product-primary">';
254
- $result .= '<h2 class="product-name">';
255
- $result .= '<a href="'.$item["url"].'" title="'.$item['title'].'">'.$item['title'].'</a>';
256
- $result .= '</h2>';
257
- $result .= '</div>'; //product-primary
258
- $result .= '<div class="product-secondary">';
259
- $result .= '<div class="price-box">';
260
- if(!empty($msrp)){
261
- $result .= '<p class="old-price">';
262
- $result .= '<span class="price-label">Regular Price:</span>';
263
- $result .= '<span class="price" id="old-price-'.$item['entity_id'].'">'.$msrp.'</span>';
264
- $result .= '</p>';
265
-
266
- $result .= '<p class="special-price">';
267
- $result .= '<span class="price-label">Special Price</span>';
268
- $result .= '<span class="price" id="product-price-'.$item['entity_id'].'">'.$price.'</span>';
269
- $result .= '</p>';
270
- }else{
271
- $result .= '<span class="regular-price" id="product-price-'.$item['entity_id'].'"><span class="price">'.$price.'</span></span>';
272
- }
273
- $result .= '</div>'; //price-box
274
- $result .= '</div>'; //product-secondary
275
- $result .= '<div class="product-secondary">';
276
- $result .= '<p class="action">';
277
-
278
- if(!empty($cartUrl)){
279
- $result .= '<button type="button" title="Add to Cart" class="button btn-cart" onclick="setLocation(\''.$cartUrl.'\')">';
280
- $result .= '<span><span>Add to Cart</span></span>';
281
- $result .= '</button>';
282
- }
283
-
284
- $result .= '</p>';
285
- $result .= '<ul class="add-to-links">';
286
-
287
- if(!empty($wishlistUrl)){
288
- $result .= '<li><a href="'.$wishlistUrl.'" class="link-wishlist"> <i class="fa fa-heart" aria-hidden="true"></i> Wishlist</a></li>';
289
- }
290
- if(!empty($compareUrl)){
291
- $result .= '<li><span class="separator">|</span>';
292
- $result .= '<a href="'.$compareUrl.'" class="link-compare"> <i class="fa fa-balance-scale" aria-hidden="true"></i> Compare</a>';
293
- $result .= '</li>';
294
- }
295
- $result .= '</ul>'; //add to links
296
- $result .= '</div>'; //product-secondary
297
- $result .= '<div class="desc std">'.$description;
298
- $result .= '<a href="'.$item["url"].'" title="'.$item['title'].'" class="link-learn">Learn More</a>';
299
- $result .= '</div>'; //desc
300
- $result .= '</div>'; // f-fix
301
- $result .= '</div>'; //product-shop
302
- $result .= '</li>';
303
-
304
- $index = $index + 1;
305
- }
306
-
307
- $result .= '</ol>';
308
-
309
- return $result;
310
- }
311
-
312
- /*
313
  * @param string facet-header
314
  * @param string facet-label
315
  * @return string url
@@ -329,30 +56,8 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
329
  }else{
330
  $url .= "&".str_replace(" ","_",$fhead).'='.$label;
331
  }
332
- return $url;
333
- }
334
-
335
- /*
336
- * @param string facet-header
337
- * @param string facet-label
338
- * @return string class
339
- */
340
- protected function getFacetClass($fhead,$facetLabel){
341
- $confArray = $this->_confArray;
342
-
343
- $class = $fhead == "category" ? "expertrec-filter-cat" : "expertrec-filter-attr";
344
- $filter = isset($confArray["filters"][$fhead]) ? $confArray["filters"][$fhead] : '';
345
- $label = str_replace(" ","+",$facetLabel);
346
-
347
- if(!empty($filter)){
348
- $att = preg_split('/(%2C|,)/', $filter);
349
- if(in_array($label, $att)){
350
- $class .= '-selected';
351
- }
352
- }
353
-
354
- return $class;
355
- }
356
 
357
  /*
358
  * @param filterkey string
@@ -364,151 +69,7 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
364
  $linkUrl = $baseUrl.'&'.str_replace(' ', '_', $fKey)."=".implode('%2C', $flist);
365
  return $linkUrl;
366
  }
367
-
368
- protected function getNavigationState(){
369
- $result = '';
370
- $confArray = $this->_confArray;
371
-
372
- try{
373
- if(!empty($confArray["filters"])){
374
- $filters = $confArray["filters"];
375
- $result .= '<div class="currently">';
376
- $result .= '<p class="block-subtitle">'.$this->__('Currently Shopping by:').'</p>';
377
- $result .= '<ol>';
378
- foreach ($filters as $fKey => $fValue){
379
- $result .= '<li>';
380
- $result .= '<span class="label">'.$this->__(str_replace('_', ' ', $fKey)).':</span>';
381
- $listSubFilter = preg_split('/(%2C|,)/', $fValue);
382
-
383
- if(in_array($fKey, $this->_singleSelectFilters) || count($listSubFilter) == 1){
384
- $result .= '<span class="value">'.str_replace('+', ' ', $listSubFilter[0]).'</span>';
385
- $result .= '<a class="btn-remove" href="'.$this->removeRequestParam($fKey).'" title="'.$this->__('Remove This Item').'"><i class="fa fa-times" aria-hidden="true"></i></a>';
386
- }else{
387
- foreach ($listSubFilter as $sfKey) {
388
- $remainSubFilterList = array_diff($listSubFilter, array($sfKey));
389
-
390
- $result .= '<span class="multivalue">'.str_replace('+', ' ', $sfKey).'</span>';
391
- $result .= '<a class="btn-remove-inline" href="'.$this->getClearLinkUrl($fKey,$remainSubFilterList).'" title="'.$this->__('Remove This Item').'">';
392
- $result .= '<i class="fa fa-times-circle" aria-hidden="true"></i>';
393
- $result .= '</a>';
394
- $result .= '</span>';
395
- }
396
- }
397
-
398
- $result .= '</li>';
399
- }
400
- $result .= '</ol>';
401
- $result .= '</div>';
402
- $result .= '<div class="actions">';
403
- $result .= '<a href="'.strtok($confArray["url"], '?').'?q='.$confArray["query"].'">'.$this->__('Clear All').'</a>';
404
- $result .= '</div>';
405
- }
406
- }catch(Exception $e){
407
- Mage::getSingleton('expertrec_recommendation/log')->log( "Error in getting navigation state: ".$e->getMessage());
408
- }
409
-
410
- return $result;
411
- }
412
-
413
- /*
414
- * @param Array facetlist
415
- * @return html string
416
- */
417
- public function prepareFilterLayout($facets){
418
- $result = '<div class="listing-filter">';
419
- $result .= '<a href="javascript:;" onclick="erOpenFilter()">';
420
- $result .= '<i class="fa fa-filter" aria-hidden="true"></i>&nbsp; Filter By </a>';
421
- $result .= '</div>';
422
- $result .= '<div id="er_Filteroption" class="overlay-filter">';
423
- $result .= '<div class="block block-layered-nav expertrec-overflow-scroll-enabled">';
424
- $result .= '<div class="block-title">';
425
- $result .= '<strong><span>'.$this->__('Shop By').'</span></strong>';
426
- $result .= '</div>';
427
- $result .= '<div class="block-content toggle-content">';
428
- $result .= '<div style="clear:both;"></div>';
429
- $result .= '<p class="block-subtitle mobile-only"><i class="fa fa-filter" aria-hidden="true"></i> &nbsp; Filter By</p>';
430
- $result .= '<dl id="narrow-by-list">';
431
-
432
- foreach ($facets as $fKey => $fValue) {
433
- if(count($fValue)){
434
-
435
- $result .= '<dt>'.$fKey.'</dt>';
436
- $result .= '<dd class="filter-search">';
437
-
438
- $result .= '<ol>';
439
- foreach ($fValue as $facetLabel => $facetCount) {
440
- $result .= '<li class="'.$this->getFacetClass($fKey,$facetLabel).'">';
441
- if($this->_isAjax){
442
- $result .= '<a href="javascript:;">';
443
- $result .= '<input class="ajaxUrl" type="hidden" value="'.$this->getFacetUrl($fKey,$facetLabel).'">';
444
- }else{
445
- $result .= '<a href="'.$this->getFacetUrl($fKey,$facetLabel).'">';
446
- }
447
- if(!in_array($fKey, $this->_singleSelectFilters)){
448
- $result .= '<i class="fa fa-square-o" aria-hidden="true"></i>';
449
- $result .= '<i class="fa fa-check-square-o" aria-hidden="true"></i>';
450
- }
451
- $result .= '&nbsp;'.ucwords(strip_tags($facetLabel));
452
-
453
- $result .= ' <span class="count">('.$facetCount.')</span>';
454
- $result .= '</a>';
455
- $result .= '</li>';
456
- }
457
-
458
- $result .= '</ol>';
459
- $result .= '</dd>';
460
- }
461
-
462
- }
463
-
464
- $result .= '</dl>';
465
- $result .= '<script type="text/javascript">decorateDataList(\'narrow-by-list\')</script>';
466
- $result .= '<div class="mobile-only mobile-filter-closer" onclick="erCloseFilter()"> <i class="fa fa-times" aria-hidden="true"></i> &nbsp; Close Filter </div>';
467
-
468
- $result .= '</div>'; // block-content close
469
- $result .= '</div>'; // block-layered-nav close
470
- $result .= '</div>'; // er_Filteroption close
471
-
472
- return $result;
473
- }
474
-
475
-
476
- /*
477
- * @param list of products
478
- * @return html string
479
- */
480
-
481
- public function prepareLayout($data){
482
- $confArray = $this->_confArray;
483
-
484
- $finalResult = $this->getNavigationState();
485
-
486
- if(!empty($confArray["count"])){
487
- $toolbar = $this->getToolbarDiv();
488
- $finalResult .= '<div class="category-products">';
489
-
490
- $finalResult .= $toolbar;
491
-
492
- if($confArray["mode"] == 'grid'){
493
- $finalResult .= $this->getGridProductsDiv($data);
494
- $finalResult .= '<script type="text/javascript">decorateGeneric($$("ul.products-grid"), ["odd","even","first","last"])</script>';
495
- }else{
496
- $finalResult .= $this->getListProductsDiv($data);
497
- $finalResult .= '<script type="text/javascript">decorateList("products-list", "none-recursive")</script>';
498
- }
499
-
500
- $finalResult .= '<div class="toolbar-bottom">';
501
- $finalResult .= $toolbar;
502
- $finalResult .= '</div>';
503
- $finalResult .= '</div>';
504
- }else{
505
- $noResult = $this->__('Your search returns no results.');
506
- $finalResult .= '<p class="note-msg">'.$noResult.'</p>';
507
- }
508
-
509
- return $finalResult;
510
-
511
- }
512
  }
513
 
514
  ?>
4
 
5
  const SEARCH_SINGLE_SELECT_FILTERS = 'search/single_select_filters';
6
  const SEARCH_IS_AJAX = 'search/is_ajax';
7
+
 
 
 
 
 
8
  protected $_isAjax = false;
9
  protected $_confArray;
10
+
 
11
  protected $_singleSelectFilters = array();
12
 
13
  public function init($confArray){
15
  try{
16
  $singleFilters = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_SINGLE_SELECT_FILTERS);
17
  $isAjax = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_IS_AJAX);
18
+
 
 
19
 
20
  $this->_singleSelectFilters = isset($singleFilters) ? explode(',', $singleFilters) : $this->_singleSelectFilters;
21
  $this->_isAjax = isset($isAjax) && $isAjax == 'true' ? true : false;
22
+
 
 
 
 
23
  }catch (Exception $e) {
24
  Mage::getSingleton('expertrec_recommendation/log')->log('Search Layout Helper::init exception: '.$e->getMessage());
25
  }
36
  return $finalUrl;
37
  }
38
 
39
+ /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  * @param string facet-header
41
  * @param string facet-label
42
  * @return string url
56
  }else{
57
  $url .= "&".str_replace(" ","_",$fhead).'='.$label;
58
  }
59
+ return rtrim($url,'&');
60
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  /*
63
  * @param filterkey string
69
  $linkUrl = $baseUrl.'&'.str_replace(' ', '_', $fKey)."=".implode('%2C', $flist);
70
  return $linkUrl;
71
  }
72
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  }
74
 
75
  ?>
app/code/community/Expertrec/Recommendation/Helper/Searchhelper.php ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expertrec_Recommendation_Helper_Searchhelper extends Mage_Core_Helper_Abstract{
4
+
5
+ const SEARCH_LIST_API = 'search/api';
6
+ const SEARCH_FACET_LIST = 'search/facets_list';
7
+ const SEARCH_LIST_ENABLE = 'search/enable';
8
+
9
+ protected $_facetList = array();
10
+ protected $_resultIds = array();
11
+
12
+ public function getResultIds(){
13
+ return $this->_resultIds;
14
+ }
15
+
16
+ protected function getFormatUrl($url){
17
+ $splitedUrl = explode("?", $url);
18
+ $newUrl = preg_replace('/\/ajax/',"",$splitedUrl[0]);
19
+ if(count($splitedUrl) == 2){
20
+ $newUrl .= '?'.$splitedUrl[1];
21
+ }
22
+
23
+ return $newUrl;
24
+ }
25
+
26
+ public function getSearchEnable(){
27
+ $searchEnable = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_ENABLE);
28
+ return $searchEnable;
29
+ }
30
+
31
+ protected function getSearchApi($confArray){
32
+
33
+ $searchApi = "";
34
+
35
+ try{
36
+ $storeSearchApi = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_API);
37
+ }catch(Exception $e){
38
+ Mage::getSingleton('expertrec_recommendation/log')->log('Searchhelper::getting searchApi exception: '.$e->getMessage());
39
+ }
40
+
41
+ if(!empty($storeSearchApi)){
42
+ $searchApi = $storeSearchApi;
43
+
44
+ // searching for cat and other facets
45
+ // if(isset($confArray["facetPortion"]))
46
+ // {
47
+ // // $confArray["cat"] is to add cat and facets in searchapi
48
+ // $searchApi .= "?q=".urlencode($confArray["query"]).$confArray["facetPortion"]."&page=0&src=magento";
49
+ // }
50
+
51
+ $searchApi .= "?q=".urlencode($confArray["query"])."&page=0&src=magento";
52
+
53
+ $splitedUrl = explode("?",html_entity_decode($confArray["url"]));
54
+
55
+ if(count($splitedUrl)==2)
56
+ {
57
+ $searchApi .= "&oq=".urlencode($splitedUrl[1]);
58
+
59
+ }
60
+ }
61
+
62
+ Mage::getSingleton('expertrec_recommendation/log')->log("The search URL sent to Expertrec BE is : ".print_r($searchApi,1),null);
63
+
64
+ //print_r($searchApi);
65
+
66
+ return $searchApi;
67
+ }
68
+
69
+ public function getNonQueryUrlParameters($searchUrl)
70
+ {
71
+ //checking for cat and facets
72
+ $facetPortion = "";
73
+ $limitQuery = "";
74
+
75
+ if(!strpos($searchUrl,"?q")){
76
+
77
+ $parsedUrl = parse_url($searchUrl);
78
+ $newQuery = array();
79
+ $categoryArr = array();
80
+ $query1 = "";
81
+
82
+ $getCategory = explode("&",html_entity_decode($parsedUrl["query"]));
83
+
84
+ // spliting queries
85
+ foreach ($getCategory as $key => $value) {
86
+ list($key1, $val) = explode('=', $value);
87
+
88
+ //Excluding query term and cifr from categories
89
+ if(!in_array($key1,array("q","cifr","limit","dir","order")))
90
+ {
91
+ $categoryArr[$key1] = $val;
92
+ }
93
+
94
+ }
95
+
96
+ // getting all attributes
97
+ $attributes = Mage::getModel('eav/entity_attribute_option')->getCollection()->setStoreFilter(0)->join('attribute','attribute.attribute_id=main_table.attribute_id', 'attribute_code');
98
+
99
+ // changing id to name for cat and facets
100
+ if(isset($categoryArr))
101
+ {
102
+ foreach ($categoryArr as $key => $value) {
103
+
104
+ if($key == 'cat')
105
+ {
106
+ $id = $value;
107
+ $cat = Mage::getModel('catalog/category')->load($id);
108
+ $newQuery['category'] = $cat->getName();
109
+ }
110
+ else
111
+ {
112
+ //For all attributes not under the sortables, use attribute table
113
+ if(!in_array($key,array("limit","order","dir")))
114
+ {
115
+ $attrMatched = false;
116
+
117
+ foreach ($attributes as $attribute) {
118
+ if ($attribute->getOptionId()==$value) {
119
+ $newQuery[$key] = $attribute->getValue();
120
+ $attrMatched = true;
121
+ }
122
+ }
123
+
124
+ //If the attribute is not a category and it is not matched, just pass it to BE.
125
+ if(!$attrMatched)
126
+ {
127
+ $newQuery[$key] = $value;
128
+ }
129
+ }
130
+ else if($key == 'limit')
131
+ {
132
+ $limitQuery = "size=".urlencode($value);
133
+ }
134
+ else if($key == 'order')
135
+ {
136
+ $newQuery[$key] = $value." ".$categoryArr["dir"];
137
+ }
138
+ }
139
+ }
140
+
141
+ // changing to normal array
142
+ foreach($newQuery as $k=>$v)
143
+ {
144
+ $finalQuery[] = $k.":".urlencode($v);
145
+ }
146
+
147
+ // implode with &fq as in url
148
+ if(isset($finalQuery))
149
+ {
150
+ $query1 = "&fq=".implode("&fq=",$finalQuery);
151
+ }
152
+
153
+
154
+ if(strlen($limitQuery) > 0)
155
+ {
156
+ $query1 .= "&".$limitQuery;
157
+ }
158
+
159
+ $facetPortion = $query1;
160
+
161
+ }
162
+
163
+ }
164
+
165
+ return $facetPortion;
166
+ }
167
+
168
+ public function prepareLayer($requestParams){
169
+ $confArray = array();
170
+ $filters = array();
171
+
172
+ try{
173
+ $confArray["url"] = $this->getFormatUrl(Mage::helper('core/url')->getCurrentUrl(),$confArray);
174
+ $confArray["query"] = $requestParams['q'];
175
+ //$confArray["facetPortion"] = $this->getNonQueryUrlParameters($confArray["url"]);
176
+
177
+ //setup search url, if search URL is not empty
178
+ $searchApi = $this->getSearchApi($confArray);
179
+
180
+ if(!empty($searchApi)){
181
+
182
+ //sending request
183
+ $resp = Mage::helper('expertrec_recommendation')->sendCurl($searchApi);
184
+ $response_json = json_decode($resp,true);
185
+
186
+ // checking for url-resp
187
+ if(isset($response_json["redirect"]) && isset($response_json["redirect_url"])){
188
+ Mage::app()->getResponse()->setRedirect($response_json["redirect_url"]);
189
+
190
+ }
191
+ else
192
+ {
193
+ if(isset($response_json["res"]) && isset($response_json["res"]["count"])){
194
+ $confArray["count"] = (int)$response_json["res"]["count"];
195
+ Mage::getSingleton('expertrec_recommendation/log')->log("The json data is valid");
196
+ }
197
+
198
+ //Initiate search layout
199
+ $layoutHelper = Mage::helper('expertrec_recommendation/search_layout')->init($confArray);
200
+
201
+ $searchListData = $response_json["results"];
202
+ $itemIds = array();
203
+
204
+ if(isset($searchListData))
205
+ {
206
+ Mage::getSingleton('expertrec_recommendation/log')->log("Number of items returned by Expertrec BE ".count($searchListData));
207
+
208
+ foreach ($searchListData as $item) {
209
+ $itemIds[] = $item['entity_id'];
210
+ }
211
+ }
212
+
213
+ $this->_resultIds = $itemIds;
214
+ }
215
+ }
216
+
217
+ }catch (Exception $e) {
218
+ Mage::getSingleton('expertrec_recommendation/log')->log('Searchhelper::prepareLayer exception: '.$e->getMessage());
219
+
220
+ }
221
+ }
222
+
223
+ }
224
+ ?>
app/code/community/Expertrec/Recommendation/Model/Catalogsearch/Layer.php ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Expertrec_Recommendation_Model_Catalogsearch_Layer extends Mage_CatalogSearch_Model_Layer{
4
+
5
+ var $searchEnable;
6
+ const SEARCH_LIST_ENABLE = 'search/enable';
7
+ const SEARCH_CUSTOM_TEMPLATE = 'search/custom_template';
8
+
9
+ private function setSearchEnable()
10
+ {
11
+
12
+ $this->searchEnable = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_ENABLE);
13
+ }
14
+
15
+ private function setExpertrecSearchData(){
16
+ try
17
+ {
18
+ $app = Mage::app();
19
+ $pageIdentifier = $app->getFrontController()->getAction()->getFullActionName();
20
+
21
+ if ($pageIdentifier === 'catalogsearch_result_index' ||
22
+ $pageIdentifier === 'expertrec_result_index')
23
+ {
24
+
25
+ $customTemplate = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_CUSTOM_TEMPLATE);
26
+
27
+ $requestParams = $app->getRequest()->getParams();
28
+
29
+ if( (isset($this->searchEnable) && $this->searchEnable == "true") ||
30
+ (isset($requestParams["expertrec"]) && $requestParams["expertrec"] == "search"))
31
+ {
32
+ if(isset($customTemplate) && $customTemplate == "true")
33
+ {
34
+ $observer->getLayout()
35
+ ->getUpdate()
36
+ ->addHandle('expertrec_custom_autocomplete');
37
+ }
38
+ else
39
+ {
40
+ //This sets the result IDs
41
+ Mage::getSingleton('expertrec_recommendation/log')->log(" Fetching search results from expertec ");
42
+
43
+ Mage::helper('expertrec_recommendation/searchhelper')->prepareLayer($requestParams);
44
+
45
+ }
46
+ }
47
+ }
48
+ }
49
+ catch (Exception $e)
50
+ {
51
+ Mage::getSingleton('expertrec_recommendation/log')->log('setExpertrecSearchData exception: '.$e->getMessage());
52
+ }
53
+
54
+ }
55
+
56
+
57
+ /**
58
+ * Prepare product collection
59
+ *
60
+ * @param Mage_Catalog_Model_Resource_Eav_Resource_Product_Collection $collection
61
+ * @return Mage_Catalog_Model_Layer
62
+ */
63
+ public function prepareProductCollection($collection)
64
+ {
65
+ $this->setSearchEnable();
66
+ //A log line to ensure that our search is called
67
+ Mage::getSingleton('expertrec_recommendation/log')->log(" Calling expertrec search function with search: ".$this->searchEnable);
68
+
69
+
70
+ if(isset($this->searchEnable) && $this->searchEnable == "true")
71
+ {
72
+ //Setting product IDs
73
+ $this->setExpertrecSearchData();
74
+ $product_ids = Mage::helper('expertrec_recommendation/searchhelper')->getResultIds();
75
+ Mage::getSingleton('expertrec_recommendation/log')->log(" The expertrec result IDs are ".count($product_ids));
76
+ //Mage::log($product_ids);
77
+ $collection
78
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
79
+ ->addFieldToFilter('entity_id',array('in'=>$product_ids))
80
+ ->setStore(Mage::app()->getStore())
81
+ ->addMinimalPrice()
82
+ ->addFinalPrice()
83
+ ->addTaxPercents()
84
+ ->addStoreFilter()
85
+ ->addUrlRewrite();
86
+ //->getSelect()->order("find_in_set(e.entity_id, '" . implode(',', $product_ids)."') DESC");
87
+ $requestParams = Mage::app()->getRequest()->getParams();
88
+
89
+ $orderby = isset($requestParams["order"]) ? $requestParams["order"] : 'relevance';
90
+ $dir = isset($requestParams["dir"]) ? $requestParams["dir"] : 'desc';
91
+
92
+ if($orderby == "relevance") {
93
+ if($dir == 'desc'){
94
+ $collection->getSelect()->order("find_in_set(e.entity_id, '" . implode(',', $product_ids)."') ASC");
95
+ }
96
+ else {
97
+ $collection->getSelect()->order("find_in_set(e.entity_id, '" . implode(',', $product_ids)."') DESC");
98
+ }
99
+ }
100
+
101
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
102
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
103
+ }
104
+ else
105
+ {
106
+ //Call parent function if search is not enabled
107
+ Mage::getSingleton('expertrec_recommendation/log')->log(" Default search returned products ");
108
+ return parent::prepareProductCollection($collection);
109
+ }
110
+
111
+
112
+ return $collection;
113
+ }
114
+
115
+
116
+ }
117
+
118
+ ?>
app/code/community/Expertrec/Recommendation/Model/Feed/Formatter.php CHANGED
@@ -36,8 +36,11 @@ class Expertrec_Recommendation_Model_Feed_Formatter {
36
  $vValue = $this->_getImage($skey,$product);
37
  break;
38
  case 'expert_category':
39
- $vValue = $this->_getCategories($product);
40
- break;
 
 
 
41
  case 'expert_url':
42
  //$vValue=$product->getProductUrl();
43
  //changing ProductUrl from /index.php/catalog/product/view/id/539/s/racer-back-maxi-dress/ to /index.php/racer-back-maxi-dress.html
@@ -57,8 +60,16 @@ class Expertrec_Recommendation_Model_Feed_Formatter {
57
  $vValue = array(1,2,3,4);
58
  break;
59
  default:
60
- $vValue =$product->getData($skey);
61
-
 
 
 
 
 
 
 
 
62
  }
63
 
64
  if(empty($vValue)){
@@ -71,9 +82,13 @@ class Expertrec_Recommendation_Model_Feed_Formatter {
71
  return $aFeedRow;
72
  }
73
 
74
- protected function _getCategories($product){
 
 
 
 
75
  $path = Mage::getSingleton('expertrec_recommendation/translator_category')
76
- ->translate($product);
77
  return $path;
78
  }
79
 
36
  $vValue = $this->_getImage($skey,$product);
37
  break;
38
  case 'expert_category':
39
+ $vValue = $this->_getCategories($product,0);
40
+ break;
41
+ case 'expert_category_ids':
42
+ $vValue = $this->_getCategories($product,1);
43
+ break;
44
  case 'expert_url':
45
  //$vValue=$product->getProductUrl();
46
  //changing ProductUrl from /index.php/catalog/product/view/id/539/s/racer-back-maxi-dress/ to /index.php/racer-back-maxi-dress.html
60
  $vValue = array(1,2,3,4);
61
  break;
62
  default:
63
+ $attributedata = Mage::getSingleton("eav/config")->getAttribute('catalog_product', $skey)->getData();
64
+ $vValue =$product->getData($skey);
65
+ //For multiselect attr, need to use attrText to retrieve label value
66
+ if(!empty($vValue) && array_key_exists('frontend_input',$attributedata)
67
+ && (isset($attributedata['frontend_input']) && $attributedata['frontend_input'] == 'select'))
68
+ {
69
+ $vValue .= chr(4).$product->getAttributeText($skey);
70
+ //Mage::getSingleton('expertrec_recommendation/log')->log(" The select dropdown is : ".$attributedata['frontend_input']." key is : ".$skey);
71
+ }
72
+ break;
73
  }
74
 
75
  if(empty($vValue)){
82
  return $aFeedRow;
83
  }
84
 
85
+
86
+ /*
87
+ @idstr determines if this combination is called for categories, or for category ids
88
+ */
89
+ protected function _getCategories($product,$idstr){
90
  $path = Mage::getSingleton('expertrec_recommendation/translator_category')
91
+ ->translate($product,$idstr);
92
  return $path;
93
  }
94
 
app/code/community/Expertrec/Recommendation/Model/Observer.php CHANGED
@@ -313,51 +313,6 @@ class Expertrec_Recommendation_Model_Observer {
313
  Mage::getSingleton('expertrec_recommendation/log')->log("Error in getting feed endpoint: ".$e->getMessage());
314
  return '';
315
  }
316
- }
317
-
318
- /**
319
- * Load Expertrec Search.
320
- */
321
- public function useExpertrecSearch(Varien_Event_Observer $observer){
322
- try {
323
- $app = Mage::app();
324
- $pageIdentifier = $app->getFrontController()->getAction()->getFullActionName();
325
-
326
- if ($pageIdentifier === 'catalogsearch_result_index' ||
327
- $pageIdentifier === 'expertrec_result_index')
328
- {
329
- $searchEnable = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_ENABLE);
330
- $customTemplate = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_CUSTOM_TEMPLATE);
331
-
332
- $requestParams = $app->getRequest()->getParams();
333
- if( (isset($searchEnable) && $searchEnable == "true") ||
334
- (isset($requestParams["expertrec"]) && $requestParams["expertrec"] == "search")
335
- ){
336
- if(isset($customTemplate) && $customTemplate == "true"){
337
- $observer->getLayout()
338
- ->getUpdate()
339
- ->addHandle('expertrec_custom_autocomplete');
340
- }else{
341
- $resultData = Mage::helper('expertrec_recommendation/autocompletehelper')->prepareLayer($requestParams);
342
-
343
- if(count($resultData) == 0 ){
344
- throw new Exception("Either Search_api or facets_list has not configured.");
345
- }
346
-
347
- Mage::register('expertrec_search_navigation', $resultData["facetHtml"]);
348
- Mage::register('expertrec_search_list', $resultData["listHtml"]);
349
-
350
- $observer->getLayout()
351
- ->getUpdate()
352
- ->addHandle('expertrec_autocomplete');
353
- }
354
- }
355
- }
356
- }catch (Exception $e) {
357
- Mage::getSingleton('expertrec_recommendation/log')->log('useExpertrecSearch exception: '.$e->getMessage());
358
- }
359
- return $this;
360
- }
361
-
362
  }
363
- ?>
313
  Mage::getSingleton('expertrec_recommendation/log')->log("Error in getting feed endpoint: ".$e->getMessage());
314
  return '';
315
  }
316
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  }
318
+ ?>
app/code/community/Expertrec/Recommendation/Model/Translator/Category.php CHANGED
@@ -7,6 +7,7 @@
7
  class Expertrec_Recommendation_Model_Translator_Category {
8
 
9
  protected $_categoryPaths = array();
 
10
 
11
  /**
12
  * Translates a category id stored in the supplied field to a full category path.
@@ -14,16 +15,26 @@ class Expertrec_Recommendation_Model_Translator_Category {
14
  * @param $product
15
  * @return string
16
  */
17
- public function translate($product) {
18
  $categoryPathArray=array();
19
  $categoryArray = array_unique($product->getCategoryIds());
20
  foreach ($categoryArray as $category_id) {
21
- $curPath=$this->_getCategoryPath($category_id);
 
 
 
 
 
 
 
 
 
22
  if(!empty($curPath) && !in_array($curPath, $categoryPathArray)){
23
  $categoryPathArray[] = $curPath;
24
  }
25
  }
26
 
 
27
  return implode(chr(4),$categoryPathArray);
28
  }
29
 
@@ -57,4 +68,35 @@ class Expertrec_Recommendation_Model_Translator_Category {
57
 
58
  }
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  }
7
  class Expertrec_Recommendation_Model_Translator_Category {
8
 
9
  protected $_categoryPaths = array();
10
+ protected $_categoryIdPaths = array();
11
 
12
  /**
13
  * Translates a category id stored in the supplied field to a full category path.
15
  * @param $product
16
  * @return string
17
  */
18
+ public function translate($product,$idStr) {
19
  $categoryPathArray=array();
20
  $categoryArray = array_unique($product->getCategoryIds());
21
  foreach ($categoryArray as $category_id) {
22
+
23
+ if($idStr == 0)
24
+ {
25
+ $curPath=$this->_getCategoryPath($category_id);
26
+ }
27
+ elseif ($idStr == 1)
28
+ {
29
+ $curPath=$this->_getCategoryIdPath($category_id);
30
+ }
31
+
32
  if(!empty($curPath) && !in_array($curPath, $categoryPathArray)){
33
  $categoryPathArray[] = $curPath;
34
  }
35
  }
36
 
37
+ //Mage::getSingleton('expertrec_recommendation/log')->log(" The categories are : ".implode(chr(4),$categoryPathArray));
38
  return implode(chr(4),$categoryPathArray);
39
  }
40
 
68
 
69
  }
70
 
71
+ /**
72
+ * First check given category_id present in the global category_path Array or not. If not found then make a db call to
73
+ * fetch category path and set it to category_path array.
74
+ *
75
+ * @param category id
76
+ * @return category path
77
+ */
78
+ protected function _getCategoryIdPath($categoryId) {
79
+ try{
80
+ if (!array_key_exists($categoryId, $this->_categoryIdPaths)) {
81
+ $category = Mage::getModel('catalog/category')->load($categoryId);
82
+ if ($category === null || !$category->getIsActive() || $category->getLevel() == 1){
83
+ $this->_categoryIdPaths[$categoryId] = '';
84
+ }else {
85
+ //Mage::getSingleton('expertrec_recommendation/log')->log("Inside category ID");
86
+ $parentCategoryPath = $this->_getCategoryIdPath($category->getParentId());
87
+ if ($parentCategoryPath == '') {
88
+ $this->_categoryIdPaths[$categoryId] = $categoryId;
89
+ }else {
90
+ $this->_categoryIdPaths[$categoryId] = $parentCategoryPath . chr(3) . $categoryId;
91
+ }
92
+ }
93
+ }
94
+ return $this->_categoryIdPaths[$categoryId];
95
+ }catch (Exception $e) {
96
+ Mage::getSingleton('expertrec_recommendation/log')->log("Error in getCategoryPath: ".$e->getMessage());
97
+ return '';
98
+ }
99
+
100
+ }
101
+
102
  }
app/code/community/Expertrec/Recommendation/Model/Validate.php CHANGED
@@ -25,14 +25,7 @@ class Expertrec_Recommendation_Model_Validate {
25
  }
26
 
27
  public function getPassword(){
28
- $storedPwd = Mage::getSingleton('expertrec_recommendation/feed_feedconfig')->getSecret();
29
-
30
- if(empty($storedPwd)){
31
- $storedPwd = base64_decode(Mage::getStoreConfig(self::CONFIG_SECRET));
32
- Mage::getSingleton('expertrec_recommendation/feed_feedconfig')
33
- ->setSecret($storedPwd);
34
- }
35
-
36
  return $storedPwd;
37
  }
38
 
25
  }
26
 
27
  public function getPassword(){
28
+ $storedPwd = base64_decode(Mage::getStoreConfig(self::CONFIG_SECRET));
 
 
 
 
 
 
 
29
  return $storedPwd;
30
  }
31
 
app/code/community/Expertrec/Recommendation/controllers/ApiController.php CHANGED
@@ -25,7 +25,7 @@ class Expertrec_Recommendation_ApiController extends Mage_Core_Controller_Front_
25
  const MERCHANT_ID = 'expertrec/general/mid';
26
 
27
 
28
- const BUILD_NO = "1487335332";
29
  private $_password;
30
 
31
  //main function which loads the feed API
@@ -320,7 +320,7 @@ class Expertrec_Recommendation_ApiController extends Mage_Core_Controller_Front_
320
  }
321
 
322
  private function getAllAttributes(){
323
- $attrArray = array('qty','is_in_stock','expert_image','expert_smallImage','expert_thumbnail','expert_category','expert_url','final_price','entity_id','attribute_set_id','type_id','entity_type_id','rating_summary');
324
  $attributes = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();
325
 
326
  foreach ($attributes as $attribute) {
@@ -668,5 +668,4 @@ class Expertrec_Recommendation_ApiController extends Mage_Core_Controller_Front_
668
  return $result;
669
  }
670
 
671
- }
672
- ?>
25
  const MERCHANT_ID = 'expertrec/general/mid';
26
 
27
 
28
+ const BUILD_NO = "1487594388";
29
  private $_password;
30
 
31
  //main function which loads the feed API
320
  }
321
 
322
  private function getAllAttributes(){
323
+ $attrArray = array('qty','is_in_stock','expert_image','expert_smallImage','expert_thumbnail','expert_category','expert_category_ids','expert_url','final_price','entity_id','attribute_set_id','type_id','entity_type_id','rating_summary');
324
  $attributes = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();
325
 
326
  foreach ($attributes as $attribute) {
668
  return $result;
669
  }
670
 
671
+ }
 
app/code/community/Expertrec/Recommendation/controllers/CatalogSearch/ResultController.php CHANGED
@@ -4,19 +4,10 @@ require_once 'Mage/CatalogSearch/controllers/ResultController.php';
4
 
5
  class Expertrec_Recommendation_CatalogSearch_ResultController extends Mage_CatalogSearch_ResultController
6
  {
7
-
8
  public function indexAction(){
9
  $this->loadLayout();
10
  $this->renderLayout();
11
- }
12
-
13
- public function ajaxAction(){
14
- $requestParams = Mage::app()->getRequest()->getParams();
15
- $resultData = Mage::helper('expertrec_recommendation/autocompletehelper')
16
- ->prepareLayer($requestParams);
17
- header('Content-Type: application/json');
18
- echo json_encode($resultData);
19
- }
20
  }
21
 
22
  ?>
4
 
5
  class Expertrec_Recommendation_CatalogSearch_ResultController extends Mage_CatalogSearch_ResultController
6
  {
 
7
  public function indexAction(){
8
  $this->loadLayout();
9
  $this->renderLayout();
10
+ }
 
 
 
 
 
 
 
 
11
  }
12
 
13
  ?>
app/code/community/Expertrec/Recommendation/etc/config.xml CHANGED
@@ -2,15 +2,20 @@
2
  <config>
3
  <modules>
4
  <Expertrec_Recommendation>
5
- <version>1.0.12</version>
6
  </Expertrec_Recommendation>
7
  </modules>
8
  <global>
9
  <models>
10
  <expertrec_recommendation>
11
  <class>Expertrec_Recommendation_Model</class>
12
- </expertrec_recommendation>
13
- </models>
 
 
 
 
 
14
  <helpers>
15
  <expertrec_recommendation>
16
  <class>Expertrec_Recommendation_Helper</class>
@@ -19,7 +24,12 @@
19
  <blocks>
20
  <expertrec_recommendation>
21
  <class>Expertrec_Recommendation_Block</class>
22
- </expertrec_recommendation>
 
 
 
 
 
23
  </blocks>
24
  <resources>
25
  <expertrec_setup>
@@ -120,17 +130,6 @@
120
  <frontName>expertrec</frontName>
121
  </args>
122
  </expertrec>
123
- </routers>
124
- <events>
125
- <controller_action_layout_load_before>
126
- <observers>
127
- <expertrec_search>
128
- <type>singleton</type>
129
- <class>expertrec_recommendation/observer</class>
130
- <method>useExpertrecSearch</method>
131
- </expertrec_search>
132
- </observers>
133
- </controller_action_layout_load_before>
134
- </events>
135
  </frontend>
136
  </config>
2
  <config>
3
  <modules>
4
  <Expertrec_Recommendation>
5
+ <version>1.1.7</version>
6
  </Expertrec_Recommendation>
7
  </modules>
8
  <global>
9
  <models>
10
  <expertrec_recommendation>
11
  <class>Expertrec_Recommendation_Model</class>
12
+ </expertrec_recommendation>
13
+ <catalogsearch>
14
+ <rewrite>
15
+ <layer>Expertrec_Recommendation_Model_Catalogsearch_Layer</layer>
16
+ </rewrite>
17
+ </catalogsearch>
18
+ </models>
19
  <helpers>
20
  <expertrec_recommendation>
21
  <class>Expertrec_Recommendation_Helper</class>
24
  <blocks>
25
  <expertrec_recommendation>
26
  <class>Expertrec_Recommendation_Block</class>
27
+ </expertrec_recommendation>
28
+ <catalog>
29
+ <rewrite>
30
+ <product_list_toolbar>Expertrec_Recommendation_Block_Product_List_Toolbar</product_list_toolbar>
31
+ </rewrite>
32
+ </catalog>
33
  </blocks>
34
  <resources>
35
  <expertrec_setup>
130
  <frontName>expertrec</frontName>
131
  </args>
132
  </expertrec>
133
+ </routers>
 
 
 
 
 
 
 
 
 
 
 
134
  </frontend>
135
  </config>
app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-install-1.0.12.php → mysql4-install-1.1.7.php} RENAMED
@@ -1,24 +1,24 @@
1
  <?php
2
 
3
  //echo 'Installing extension: '.get_class($this)."\n <br /> \n";
4
- Mage::log("Installing magento : 1.0.12 ");
5
 
6
 
7
  $installer = $this;
8
 
9
- $host = $_SERVER['HTTP_HOST'];
10
- $uri = $_SERVER['REQUEST_URI'];
 
11
 
12
  $installer->startSetup();
13
 
14
  $result =array();
15
 
16
- //Status
17
  $result['status'] = "Installed";
18
- //Subdomain
19
- $result['site_subdomain'] = $uri;
20
  //hostname
21
  $result['site_host'] = $host;
 
22
  //selecting for site_details
23
  $site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
24
  //site name and email
@@ -56,7 +56,7 @@ $installer->run("
56
  ('default',0,'expertrec/general/mid','new_user'),
57
  ('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
58
  ('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
59
- ('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
60
  ('default',0,'expertrec/general/expertrec_image_width',250),
61
  ('default',0,'expertrec/general/expertrec_image_height',250),
62
  ('default',0,'expertrec/general/expertrec_thumbnail_width',80),
@@ -66,4 +66,4 @@ $installer->run("
66
 
67
  $installer->endSetup();
68
 
69
- ?>
1
  <?php
2
 
3
  //echo 'Installing extension: '.get_class($this)."\n <br /> \n";
4
+ Mage::log("Installing magento : 1.1.6 ");
5
 
6
 
7
  $installer = $this;
8
 
9
+ $host = $_SERVER['HTTP_HOST'];
10
+ $uri = $_SERVER['REQUEST_URI'];
11
+ //$uuu = $_SERVER['PHP_SELF'];
12
 
13
  $installer->startSetup();
14
 
15
  $result =array();
16
 
17
+ //install/upgrade status
18
  $result['status'] = "Installed";
 
 
19
  //hostname
20
  $result['site_host'] = $host;
21
+ $result['site_subdomain'] = $uri;
22
  //selecting for site_details
23
  $site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
24
  //site name and email
56
  ('default',0,'expertrec/general/mid','new_user'),
57
  ('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
58
  ('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
59
+ ('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,expert_category_ids,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
60
  ('default',0,'expertrec/general/expertrec_image_width',250),
61
  ('default',0,'expertrec/general/expertrec_image_height',250),
62
  ('default',0,'expertrec/general/expertrec_thumbnail_width',80),
66
 
67
  $installer->endSetup();
68
 
69
+ ?>
app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-upgrade-1.0.11-1.0.12.php → mysql4-upgrade-1.1.6-1.1.7.php} RENAMED
@@ -1,22 +1,22 @@
1
  <?php
2
 
3
  //echo 'Running The Upgrade from 1.1.5 to 1.1.6 : '.get_class($this)."\n <br /> \n";
4
- Mage::log("Running The Upgrade from 1.0.11 to 1.0.12 : ".get_class($this));
5
 
6
  $installer = $this;
7
 
8
  $host = $_SERVER['HTTP_HOST'];
9
- $uri = $_SERVER['REQUEST_URI'];
10
-
11
 
12
  $installer->startSetup();
13
 
14
  $result =array();
15
- //status
 
16
  $result['status'] = "Upgraded";
17
  //hostname
18
  $result['site_host'] = $host;
19
- //Subdomain
20
  $result['site_subdomain'] = $uri;
21
  //selecting for site_details
22
  $site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
@@ -55,7 +55,7 @@ $installer->run("
55
  ('default',0,'expertrec/general/mid','new_user'),
56
  ('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
57
  ('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
58
- ('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
59
  ('default',0,'expertrec/general/expertrec_image_width',250),
60
  ('default',0,'expertrec/general/expertrec_image_height',250),
61
  ('default',0,'expertrec/general/expertrec_thumbnail_width',80),
@@ -65,4 +65,4 @@ $installer->run("
65
 
66
  $installer->endSetup();
67
 
68
- ?>
1
  <?php
2
 
3
  //echo 'Running The Upgrade from 1.1.5 to 1.1.6 : '.get_class($this)."\n <br /> \n";
4
+ Mage::log("Running The Upgrade from 1.1.5 to 1.1.6 : ".get_class($this));
5
 
6
  $installer = $this;
7
 
8
  $host = $_SERVER['HTTP_HOST'];
9
+ $uri = $_SERVER['REQUEST_URI'];
10
+ //$uuu = $_SERVER['PHP_SELF'];
11
 
12
  $installer->startSetup();
13
 
14
  $result =array();
15
+
16
+ //install/upgrade status
17
  $result['status'] = "Upgraded";
18
  //hostname
19
  $result['site_host'] = $host;
 
20
  $result['site_subdomain'] = $uri;
21
  //selecting for site_details
22
  $site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
55
  ('default',0,'expertrec/general/mid','new_user'),
56
  ('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
57
  ('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
58
+ ('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,expert_category_ids,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
59
  ('default',0,'expertrec/general/expertrec_image_width',250),
60
  ('default',0,'expertrec/general/expertrec_image_height',250),
61
  ('default',0,'expertrec/general/expertrec_thumbnail_width',80),
65
 
66
  $installer->endSetup();
67
 
68
+ ?>
app/design/frontend/base/default/layout/expertrec/recommendation.xml CHANGED
@@ -5,45 +5,16 @@
5
  <reference name="head">
6
  <block name="expertrec.rec.tracking" template="expertrec/recommendation/tracker.phtml" after="-" type="core/template"/>
7
  </reference>
8
- </default>
9
- <!-- PRODUCT PAGE -->
10
- <catalog_product_view>
11
- <reference name="before_body_end">
12
- <block name="expertrec.rec.analytics.producttracking" template="expertrec/recommendation/tracking/product.phtml" after="-" type="core/template"/>
13
- </reference>
14
- </catalog_product_view>
15
-
16
- <!-- Search -->
17
- <expertrec_autocomplete>
18
- <reference name="root">
19
- <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
20
- </reference>
21
- <reference name="catalogsearch.leftnav">
22
- <action method="setTemplate">
23
- <value>expertrec/search/view.phtml</value>
24
- </action>
25
- </reference>
26
- <remove name="search.result"/>
27
- <reference name="content">
28
- <block type="core/template" name="search_result_list" template="expertrec/search/list.phtml"/>
29
- </reference>
30
- </expertrec_autocomplete>
31
  <expertrec_custom_autocomplete>
32
  <remove name="right"/>
33
  <remove name="left"/>
34
  <reference name="root">
35
  <action method="setTemplate"><template>page/1column.phtml</template></action>
36
- </reference>
37
- <remove name="search.result"/>
38
- <reference name="content">
39
- <block type="core/template" name="expertrec_search_result" template="expertrec/search/custom.phtml"/>
40
- </reference>
41
  </expertrec_custom_autocomplete>
42
- <expertrec_result_index>
43
- <reference name="left">
44
- <block type="core/template" name="expertrec.leftnav" after="currency" template="expertrec/search/view.phtml"/>
45
- </reference>
46
- </expertrec_result_index>
47
  <expertrec_recommendation_api_info>
48
  <reference name="root">
49
  <action method="setTemplate"><template>page/1column.phtml</template></action>
5
  <reference name="head">
6
  <block name="expertrec.rec.tracking" template="expertrec/recommendation/tracker.phtml" after="-" type="core/template"/>
7
  </reference>
8
+ </default>
9
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  <expertrec_custom_autocomplete>
11
  <remove name="right"/>
12
  <remove name="left"/>
13
  <reference name="root">
14
  <action method="setTemplate"><template>page/1column.phtml</template></action>
15
+ </reference>
 
 
 
 
16
  </expertrec_custom_autocomplete>
17
+ <!--route the infoAction function in ApiController to info.phtml, which can access Api.php block functions-->
 
 
 
 
18
  <expertrec_recommendation_api_info>
19
  <reference name="root">
20
  <action method="setTemplate"><template>page/1column.phtml</template></action>
app/design/frontend/base/default/template/expertrec/recommendation/tracker.phtml CHANGED
@@ -4,7 +4,7 @@
4
  <?php $category = Mage::registry("current_category");?>
5
  <?php
6
  $formKey = '';
7
-
8
  try{
9
  $formkey_html = $this->getBlockHtml('formkey');
10
  $pattern = '/.*form_key.*value=\"([^\"]+)\"/s';
@@ -13,6 +13,13 @@ try{
13
  $formKey = $match[1];
14
  }
15
  }
 
 
 
 
 
 
 
16
  } catch (Exception $e){
17
  Mage::logException($e);
18
  }
@@ -26,6 +33,9 @@ if(typeof expertSiteConf == 'undefined' || expertSiteConf == null) {
26
  <?php if (isset($category)) { ?>
27
  ,category:"<?php echo $category->getName(); ?>"
28
  <?php } ?>
 
 
 
29
  };
30
  }
31
 
4
  <?php $category = Mage::registry("current_category");?>
5
  <?php
6
  $formKey = '';
7
+ $currencyRates = array();
8
  try{
9
  $formkey_html = $this->getBlockHtml('formkey');
10
  $pattern = '/.*form_key.*value=\"([^\"]+)\"/s';
13
  $formKey = $match[1];
14
  }
15
  }
16
+
17
+ //currency rate
18
+ $baseCurrencyCode = Mage::app()->getBaseCurrencyCode();
19
+ $allowedCurrencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies();
20
+ $currencyRates = Mage::getModel('directory/currency')
21
+ ->getCurrencyRates($baseCurrencyCode, array_values($allowedCurrencies));
22
+
23
  } catch (Exception $e){
24
  Mage::logException($e);
25
  }
33
  <?php if (isset($category)) { ?>
34
  ,category:"<?php echo $category->getName(); ?>"
35
  <?php } ?>
36
+ <?php if (!empty($currencyRates)) { ?>
37
+ ,rates: <?php echo json_encode($currencyRates); ?>
38
+ <?php } ?>
39
  };
40
  }
41
 
app/design/frontend/base/default/template/expertrec/search/custom.phtml DELETED
@@ -1,2 +0,0 @@
1
- <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
2
- <div id="expertrec_search_result_list"></div>
 
 
app/design/frontend/base/default/template/expertrec/search/list.phtml DELETED
@@ -1,23 +0,0 @@
1
- <div class="page-title">
2
- <h1>
3
- <?php echo ($this->getHeaderText() || $this->getHeaderText() === false) ? $this->getHeaderText() : $this->__("Search results for '%s'", $this->helper('catalogsearch')->getEscapedQueryText()) ?>
4
- </h1>
5
- </div>
6
-
7
- <div id="expertrec_search_result_list">
8
- <?php
9
- echo Mage::registry('expertrec_search_list');
10
- ?>
11
- </div>
12
-
13
- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
14
- <script type="text/javascript">
15
- var erjq=jQuery.noConflict(true);function erOpenFilter(){erjq("#er_Filteroption").css("width","100%");erjq("body").css("overflow","hidden")}function erCloseFilter(){erjq("#er_Filteroption").css("width","0px");erjq("body").css("overflow","visible")}function erShowProduct(a){var c=a,d=c.listHtml||"",b=c.facetHtml||"";d&&erjq("#expertrec_search_result_list").html(d);b&&erjq("#expertrec_search_result_navigation").html(b);if(typeof erDisplayPriceFilter=="function"){erDisplayPriceFilter()}erjq("#expertrec-overlay").css("display","none");erAttachFilterEvent();erToggleNavigation()}function erMakeDealsCall(a){erjq.ajax({url:a,type:"GET",dataType:"json",success:erShowProduct,error:function(){erjq("#expertrec-overlay").css("display","none")}})}function erToggleNavigation(){erjq(".toggle-content").each(function(){var a=erjq(this);var c=a.hasClass("tabs");var g=a.hasClass("accordion");var e=a.hasClass("open");var j=a.children("dl:first");var d=j.children("dt");var l=j.children("dd");var b=new Array(d,l);if(c){var k=erjq('<ul class="toggle-tabs"></ul>');d.each(function(){var n=erjq(this);var i=erjq("<li></li>");i.html(n.html());k.append(i)});k.insertBefore(j);var m=k.children();b.push(m)}var f;for(f=0;f<b.length;f++){b[f].filter(":last").addClass("last")}function h(o,q){var n=q.index(o);var p;for(p=0;p<b.length;p++){b[p].removeClass("current");b[p].eq(n).addClass("current")}}d.on("click",function(i){if(erjq(this).hasClass("current")&&a.hasClass("accordion-open")){a.removeClass("accordion-open")}else{a.addClass("accordion-open")}h(erjq(this),d)});if(c){m.on("click",function(i){h(erjq(this),m)});m.eq(0).trigger("click")}if(e){d.eq(0).trigger("click")}})}erjq(document).ready(function(){var a=function(){if(erjq(window).width()<=771){erjq("#er_Filteroption").css("width","0px");erjq("#expertrec_search_result_navigation").prependTo(erjq("#expertrec_search_result_list"))}else{erjq("#er_Filteroption").css("width","100%");erjq(".col-left").first().prepend(erjq("#expertrec_search_result_navigation"))}};a();erjq(window).resize(function(){a()})});
16
-
17
- <?php if(Mage::helper('expertrec_recommendation/search_layout')->getIsAjax()){ ?>
18
-
19
- function erAttachFilterEvent(){erjq("#er_Filteroption .filter-search a").each(function(){var b=this,c="",e="",d=[],a=erjq(window).width();erjq(this).click(function(){if(a<771){erCloseFilter()}erjq("#expertrec-overlay").css("display","block");c=erjq(b).find("input").val();if(c){d=c.split("?");if(d.length==2){e=/\/$/.test(d[0])?d[0]+"ajax":d[0]+"/ajax";e+="?"+d[1];e=typeof erGetFilterPrice=="function"?erGetFilterPrice(e):e;erMakeDealsCall(e)}else{window.location.href=c}}})})}erjq(document).ready(function(){erAttachFilterEvent()});
20
-
21
- <?php }?>
22
-
23
- </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/design/frontend/base/default/template/expertrec/search/view.phtml DELETED
@@ -1,16 +0,0 @@
1
- <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
2
- <style type="text/css">
3
- #expertrec_search_result_list .note-msg {color:red;font-size:1.2em;}#er_Filteroption .no-display {display: block !important;}#expertrec_search_result_list .products-grid>li{position:relative;margin-bottom:20px;text-align:center}#expertrec_search_result_list .products-grid>li{float:left;width:47.72727%;}#expertrec_search_result_list .products-grid>li:nth-child(2n+1){clear:left}#expertrec_search_result_list .products-grid .product-image{margin-bottom:5px;text-align:center;margin-left:auto;margin-right:auto;display:block;width:100%}#expertrec_search_result_list .products-grid .product-info{min-height:inherit!important;padding-bottom:10px!important;position:relative}#expertrec_search_result_list .products-grid .product-name,#expertrec_search_result_list .products-list .product-name{text-transform:uppercase;margin-bottom:5px;font-size:14px;font-weight:normal;line-height:1.4;font-style:normal}#expertrec_search_result_list .products-grid .actions{position:relative;bottom:0;padding-top:10px;min-height:85px;width:100%;font-size:14px}#expertrec_search_result_list .add-to-links{margin:7px 0}#expertrec_search_result_list .add-to-links a{display:inline-block;padding:0 3px 3px}#expertrec_search_result_list .products-grid li.item button.btn-cart{width:100%}#expertrec_search_result_list .currently ol li .value,#expertrec_search_result_list .currently ol li .multivalue{padding:0 10px}#expertrec_search_result_list .currently ol li .label{text-transform:capitalize;font-weight:bold}#expertrec_search_result_list .currently ol li{margin-bottom:5px}#expertrec_search_result_list .currently ol li::after{content:'';display:table;clear:both}#expertrec_search_result_navigation .mobile-only,#expertrec_search_result_navigation p.mobile-only{display:none}#expertrec_search_result_navigation .listing-filter{display:none}#er_Filteroption .toggle-content .block-subtitle{float:none;text-align:center}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled .block-content>dl>dd{background:#fff}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled dl dd ol>li>a .count{color:#949494;font-size:12px}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled dl dd ol>li>a.expertrec-attr-selected{color:#5a647c}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled dl dd ol>li>a.expertrec-attr-selected:hover{text-decoration:none}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled .currently ol{padding-left:0;margin-bottom:10px}#expertrec_search_result_navigation #narrow-by-list{border-radius:3px;box-shadow:0 0 4px rgba(0,0,0,.2)}#expertrec_search_result_navigation .expertrec-overflow-scroll-enabled .block-content dl dd>ol{max-height:250px;overflow-y:auto}.expertrec-filter-attr .fa-square-o,.expertrec-filter-cat .fa-square-o{display:inline-block}.expertrec-filter-attr .fa-check-square-o,.expertrec-filter-cat .fa-check-square-o{display:none}.expertrec-filter-attr-selected .fa-square-o,.expertrec-filter-cat-selected .fa-square-o{display:none}.expertrec-filter-attr-selected .fa-check-square-o,.expertrec-filter-cat-selected .fa-check-square-o{display:inline-block}#expertrec-overlay{display:none;background-color:#000;height:100%;left:0;opacity:.7;filter:alpha(opacity= 50);position:fixed;top:0;width:100%;z-index:999}#expertrec-overlay img{top:45%;left:48%;display:block;position:fixed;z-index:900}#expertrec_search_result_list .products-grid .actions{position:relative;bottom:0}#expertrec_search_result_list .products-grid .product-info{min-height:inherit!important;padding-bottom:10px!important}#expertrec_search_result_list .products-grid .product-image img{width:100%;height:auto}@media only screen and (max-width:770px){#er_Filteroption .block-title{display:none}#expertrec_search_result_navigation .expertrec-overflow-scroll-enabled .block-content dl dd>ol{max-height:150px}#expertrec_search_result_navigation .mobile-only,#expertrec_search_result_navigation p.mobile-only{display:block}#expertrec_search_result_navigation .mobile-filter-closer{text-align:center;padding:10px 5px;background:#f04f25;color:#fff;width:99%;margin:10px auto;max-width:300px;clear:both;cursor:pointer}#expertrec_search_result_navigation .listing-filter{display:block;font-size:12px}#expertrec_search_result_navigation .listing-filter{display:block;border:1px solid #e7e7e7;text-align:center;margin-bottom:15px;width:80%;margin:0 auto 15px;padding:10px 5px;border-radius:5px}#expertrec_search_result_navigation .overlay-filter{height:100%;width:0;position:fixed;z-index:2000;top:0;left:0;background-color:#f3f3f3;overflow-x:hidden;transition:.5s}}@media only screen and (max-width:600px){#expertrec_search_result_list .products-list .desc{display:none}}@media only screen and (min-width:480px){#expertrec_search_result_list .products-grid>li:nth-child(odd){clear:none}#expertrec_search_result_list .products-grid>li:nth-child(even){margin-right:3.7037%}#expertrec_search_result_list .products-grid>li{width:30.8642%;margin-right:3.7037%}#expertrec_search_result_list .products-grid>li:nth-child(3n+1){clear:left}#expertrec_search_result_list .products-grid>li:nth-child(3n){margin-right:0}}
4
- </style>
5
-
6
-
7
- <div id="expertrec_search_result_navigation">
8
- <?php
9
- $expertrec_search_navigation = Mage::registry('expertrec_search_navigation');
10
- echo $expertrec_search_navigation;
11
- ?>
12
- </div>
13
-
14
- <div id="expertrec-overlay">
15
- <img src="//cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.16.1/images/loader-large.gif">
16
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Expertrec_Recommendation</name>
4
- <version>1.0.12</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
  <channel>community</channel>
@@ -10,9 +10,9 @@
10
  <description>Expertrec search extension helps you have complete control over your site search results. You will be able to add instant autocomplete, spell corrections that learn from the user behaviour on your site, and show product recommendations within the search user interface. It also adds search results pages with facets, sorting by different attributes.</description>
11
  <notes>Expertrec Recommendation plugin for magento sites.</notes>
12
  <authors><author><name>melchi</name><user>melchi</user><email>magento@cloudinfra.in</email></author><author><name>magento</name><user>magento</user><email>magento-team@cloudinfra.in</email></author></authors>
13
- <date>2017-02-17</date>
14
- <time>12:42:47</time>
15
- <contents><target name="magecommunity"><dir name="Expertrec"><dir name="Recommendation"><dir name="Block"><file name="Api.php" hash="b46b5a13bf53bf0cac27dcd3ff935e3b"/></dir><dir name="Helper"><file name="Autocompletehelper.php" hash="7bd733d91f69091c1f6f5bb162467a43"/><file name="Data.php" hash="8a2760edc960d6a1bc72d80e73944cb3"/><file name="Filehelper.php" hash="5ac956e12548398dc159a16eb1a03e8b"/><dir name="Search"><file name="Layout.php" hash="c68c9d6c4def7daca0a0ae332dceaff3"/></dir><file name="Suggestionhelper.php" hash="93f3aa295761a510f782856c0180a799"/></dir><dir name="Model"><dir name="Api"><file name="Request.php" hash="7df8b22d74b6a05de86da287687a6e96"/></dir><dir name="Feed"><file name="Feedconfig.php" hash="013bd447dccc7cc4f073be5bd53a18c9"/><file name="Feedcreator.php" hash="fa6cf4590cf81073325b6717c8951486"/><file name="Feedfilter.php" hash="d7599a63a8d1f2033cb1e56204809c2d"/><file name="Formatter.php" hash="cb0d747319ef70e122c3558edaf89626"/></dir><file name="Feed.php" hash="ddac87d6a060bc77fb7718e7b19e1273"/><file name="Log.php" hash="27fcee49e67fe2be761b4af94aecff2b"/><file name="Observer.php" hash="2c332472ed4cd1ccea25bec705dbda06"/><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="6b660487988035cd715fa3c51b2b58b6"/></dir></dir><dir name="Translator"><file name="Category.php" hash="dd209cdda3a1a62042a8a3360ee2dbac"/></dir><file name="Validate.php" hash="2d4619284f24309b77668f07cb1ef9f4"/><dir name="Writer"><file name="Abstract.php" hash="6b5153c0a09f8d4ee6fe4cedc5ec8a64"/><file name="Csv.php" hash="427fea44d988302f409e1860c18875b1"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="c4f80c214d11fd531496e71b4951b27f"/></dir><file name="ApiController.php" hash="ecac6b8b12bf66054253a8daa75260f5"/><dir name="CatalogSearch"><file name="ResultController.php" hash="e740f44c0cef4aa83545f2278626e7de"/></dir><file name="ConfigController.php" hash="0fd9a9686806c26635c7db0a57a0f4ab"/><file name="IndexController.php" hash="7bfaa867dfa9bed0c7b0ebd634d2e2bb"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e86ff2b7aac4d09a4c359f0047b06ca3"/><file name="config.xml" hash="cdf3396edf6d407254a5ebecdf6b7f8a"/></dir><dir name="sql"><dir name="expertrec_setup"><file name="mysql4-install-1.0.12.php" hash="b551735fc7591093270c2f77aad819f3"/><file name="mysql4-upgrade-1.0.11-1.0.12.php" hash="a0a91e227fc6af9befc4189c0a042ee5"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Expertrec_Recommendation.xml" hash="c314465f907c89dfe912035be8d48e71"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="expertrec"><file name="recommendation.xml" hash="a1d166c3c3e665b476aaef69e0e6b792"/></dir></dir><dir name="template"><dir name="expertrec"><dir name="feed"><file name="info.phtml" hash="e386121a2d08b754ace87ab8a146e941"/></dir><dir name="recommendation"><file name="tracker.phtml" hash="6e8219c5d1e46642d7915cedaa974313"/><dir name="tracking"><file name="product.phtml" hash="e02d3f870397cf351bc0ff7ca864c7e2"/></dir></dir><dir name="search"><file name="custom.phtml" hash="0f162aa949c00329e3697f0a71abc43d"/><file name="list.phtml" hash="cda3f434a1e70f1272f62bb9f0848726"/><file name="view.phtml" hash="ecb9a55f6128bef2f10d66528dc5424b"/></dir></dir></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Expertrec_Recommendation</name>
4
+ <version>1.1.7</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
  <channel>community</channel>
10
  <description>Expertrec search extension helps you have complete control over your site search results. You will be able to add instant autocomplete, spell corrections that learn from the user behaviour on your site, and show product recommendations within the search user interface. It also adds search results pages with facets, sorting by different attributes.</description>
11
  <notes>Expertrec Recommendation plugin for magento sites.</notes>
12
  <authors><author><name>melchi</name><user>melchi</user><email>magento@cloudinfra.in</email></author><author><name>magento</name><user>magento</user><email>magento-team@cloudinfra.in</email></author></authors>
13
+ <date>2017-02-20</date>
14
+ <time>12:42:40</time>
15
+ <contents><target name="magecommunity"><dir name="Expertrec"><dir name="Recommendation"><dir name="Block"><file name="Api.php" hash="ce87654622f030c6e8b5a992713da5d8"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="bd05a0d7473829c47662e6b763907ea6"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="364ab05880bed5e6a02f20bcca1b993c"/><file name="Filehelper.php" hash="5ac956e12548398dc159a16eb1a03e8b"/><dir name="Search"><file name="Layout.php" hash="d7b7ec5f4bbd846dd063934f8a267d48"/></dir><file name="Searchhelper.php" hash="dfc4fc81fea519c15517f53645488c7a"/><file name="Suggestionhelper.php" hash="93f3aa295761a510f782856c0180a799"/></dir><dir name="Model"><dir name="Api"><file name="Request.php" hash="7df8b22d74b6a05de86da287687a6e96"/></dir><dir name="Catalogsearch"><file name="Layer.php" hash="bbfbad54d1c5688cc5627a6c25ba7d20"/></dir><dir name="Feed"><file name="Feedconfig.php" hash="013bd447dccc7cc4f073be5bd53a18c9"/><file name="Feedcreator.php" hash="fa6cf4590cf81073325b6717c8951486"/><file name="Feedfilter.php" hash="d7599a63a8d1f2033cb1e56204809c2d"/><file name="Formatter.php" hash="4c78f1f2eaa65a9a46f46d129f62f662"/></dir><file name="Feed.php" hash="ddac87d6a060bc77fb7718e7b19e1273"/><file name="Log.php" hash="27fcee49e67fe2be761b4af94aecff2b"/><file name="Observer.php" hash="4aa575eea33402932390f4e30625a67e"/><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="6b660487988035cd715fa3c51b2b58b6"/></dir></dir><dir name="Translator"><file name="Category.php" hash="0050de4918d73af310008aa8f49239d1"/></dir><file name="Validate.php" hash="7a5fd226b0055e39b725975113e42ee5"/><dir name="Writer"><file name="Abstract.php" hash="6b5153c0a09f8d4ee6fe4cedc5ec8a64"/><file name="Csv.php" hash="427fea44d988302f409e1860c18875b1"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="c4f80c214d11fd531496e71b4951b27f"/></dir><file name="ApiController.php" hash="7ead355ff1fb74ca8cdbdfb766225fe3"/><dir name="CatalogSearch"><file name="ResultController.php" hash="9cb1406e901701ea58e663433358a4c6"/></dir><file name="ConfigController.php" hash="0fd9a9686806c26635c7db0a57a0f4ab"/><file name="IndexController.php" hash="7bfaa867dfa9bed0c7b0ebd634d2e2bb"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e86ff2b7aac4d09a4c359f0047b06ca3"/><file name="config.xml" hash="09b49197e59ef47c9adce7873d068c8a"/></dir><dir name="sql"><dir name="expertrec_setup"><file name="mysql4-install-1.1.7.php" hash="017dd7dc0c683db749f490a632481f05"/><file name="mysql4-upgrade-1.1.6-1.1.7.php" hash="87ed11c4a652d8493e4afb503e66a1d6"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Expertrec_Recommendation.xml" hash="c314465f907c89dfe912035be8d48e71"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="expertrec"><file name="recommendation.xml" hash="061b28ab9009ff2346977cebe2333cb8"/></dir></dir><dir name="template"><dir name="expertrec"><dir name="feed"><file name="info.phtml" hash="e386121a2d08b754ace87ab8a146e941"/></dir><dir name="recommendation"><file name="tracker.phtml" hash="c4da6289ad644d96d7dac9b5521ae3a1"/><dir name="tracking"><file name="product.phtml" hash="e02d3f870397cf351bc0ff7ca864c7e2"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>