Version Notes
Release
Download this release
Release Info
Developer | FACTFinder |
Extension | Flagbit_Factfinder |
Version | 4.1.10 |
Comparing to | |
See all releases |
Code changes from version 4.1.9 to 4.1.10
- app/code/community/FACTFinder/Campaigns/Model/Handler/Abstract.php +3 -1
- app/code/community/FACTFinder/Core/Helper/Export.php +75 -0
- app/code/community/FACTFinder/Core/Model/Export/Product.php +117 -227
- app/code/community/FACTFinder/Core/Model/Facade.php +0 -20
- app/code/community/FACTFinder/Core/Model/Handler/Search.php +6 -1
- app/code/community/FACTFinder/Core/Model/Resource/Export.php +302 -0
- app/code/community/FACTFinder/Core/etc/system.xml +10 -1
- app/code/community/FACTFinder/Recommendation/Helper/Data.php +2 -0
- app/code/community/FACTFinder/Suggest/Helper/Data.php +31 -0
- app/code/community/FACTFinder/Tracking/Block/Click.php +8 -0
- app/design/frontend/base/default/template/factfinder/suggest/advancedsuggest.phtml +2 -2
- app/locale/de_DE/FACTFinder_Suggest.csv +4 -0
- app/locale/en_US/FACTFinder_Suggest.csv +4 -0
- lib/FACTFinder/Adapter/AbstractAdapter.php +5 -0
- lib/FACTFinder/Adapter/Compare.php +6 -36
- lib/FACTFinder/Adapter/ConfigurableResponse.php +53 -0
- lib/FACTFinder/Adapter/PersonalisedResponse.php +52 -0
- lib/FACTFinder/Adapter/ProductCampaign.php +35 -27
- lib/FACTFinder/Adapter/Recommendation.php +7 -56
- lib/FACTFinder/Adapter/Search.php +3 -40
- lib/FACTFinder/Adapter/SimilarRecords.php +8 -48
- lib/FACTFinder/Adapter/Tracking.php +33 -9
- lib/FACTFinder/Core/AbstractConfiguration.php +3 -0
- lib/FACTFinder/Data/SearchParameters.php +11 -2
- package.xml +6 -6
- skin/frontend/base/default/css/factfinder_suggest.css +17 -0
app/code/community/FACTFinder/Campaigns/Model/Handler/Abstract.php
CHANGED
@@ -92,7 +92,9 @@ abstract class FACTFinder_Campaigns_Model_Handler_Abstract extends FACTFinder_Co
|
|
92 |
$params['do'] = $this->_getDoParam();
|
93 |
$params['productNumber'] = $this->_getProductNumberParam();
|
94 |
$params['idsOnly'] = 'true';
|
95 |
-
|
|
|
|
|
96 |
$this->_getFacade()->configureProductCampaignAdapter($params);
|
97 |
}
|
98 |
|
92 |
$params['do'] = $this->_getDoParam();
|
93 |
$params['productNumber'] = $this->_getProductNumberParam();
|
94 |
$params['idsOnly'] = 'true';
|
95 |
+
if(Mage::getStoreConfigFlag('factfinder/config/personalization')) {
|
96 |
+
$params['sid'] = Mage::helper('factfinder_tracking')->getSessionId();
|
97 |
+
}
|
98 |
$this->_getFacade()->configureProductCampaignAdapter($params);
|
99 |
}
|
100 |
|
app/code/community/FACTFinder/Core/Helper/Export.php
CHANGED
@@ -24,6 +24,10 @@ class FACTFinder_Core_Helper_Export extends Mage_Core_Helper_Abstract
|
|
24 |
const IMPORT_DELAY_KEY = 'factfinder_import_delay';
|
25 |
const ARCHIVE_PATTERN = 'store_%s_export.zip';
|
26 |
const EXPORT_TRIGGER_DELAY = 90;
|
|
|
|
|
|
|
|
|
27 |
|
28 |
/**
|
29 |
* @var int
|
@@ -271,4 +275,75 @@ class FACTFinder_Core_Helper_Export extends Mage_Core_Helper_Abstract
|
|
271 |
}
|
272 |
|
273 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
}
|
24 |
const IMPORT_DELAY_KEY = 'factfinder_import_delay';
|
25 |
const ARCHIVE_PATTERN = 'store_%s_export.zip';
|
26 |
const EXPORT_TRIGGER_DELAY = 90;
|
27 |
+
const EXPORT_IMAGE_SIZE = 'suggest_image_size';
|
28 |
+
const EXPORT_IMAGE_TYPE = 'suggest_image_type';
|
29 |
+
const EXPORT_URLS_IMAGES = 'urls';
|
30 |
+
const OUT_OF_STOCK_PRODUCTS = 'out_of_stock_products';
|
31 |
|
32 |
/**
|
33 |
* @var int
|
275 |
}
|
276 |
|
277 |
|
278 |
+
/**
|
279 |
+
* Get width of product images exported
|
280 |
+
*
|
281 |
+
* @param int $storeId
|
282 |
+
*
|
283 |
+
* @return null|string
|
284 |
+
*/
|
285 |
+
public function getExportImageWidth($storeId = 0)
|
286 |
+
{
|
287 |
+
$width = $this->getExportConfigValue(self::EXPORT_IMAGE_SIZE, $storeId);
|
288 |
+
$width = array_shift(explode('x', $width));
|
289 |
+
|
290 |
+
return $width;
|
291 |
+
}
|
292 |
+
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Get height of images exported. If not set use width
|
296 |
+
*
|
297 |
+
* @param int $storeId
|
298 |
+
*
|
299 |
+
* @return null|string
|
300 |
+
*/
|
301 |
+
public function getExportImageHeight($storeId = 0)
|
302 |
+
{
|
303 |
+
$height = $this->getExportConfigValue(self::EXPORT_IMAGE_SIZE, $storeId);
|
304 |
+
$height = array_pop(explode('x', $height));
|
305 |
+
|
306 |
+
return $height ? $height : $this->getExportImageWidth();
|
307 |
+
}
|
308 |
+
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Get type of product image to export
|
312 |
+
*
|
313 |
+
* @param int $storeId
|
314 |
+
*
|
315 |
+
* @return null|string
|
316 |
+
*/
|
317 |
+
public function getExportImageType($storeId = 0)
|
318 |
+
{
|
319 |
+
return $this->getExportConfigValue(self::EXPORT_IMAGE_TYPE, $storeId);
|
320 |
+
}
|
321 |
+
|
322 |
+
|
323 |
+
/**
|
324 |
+
* Check if images and deeplinks should be exported
|
325 |
+
*
|
326 |
+
* @param int $storeId
|
327 |
+
*
|
328 |
+
* @return null|string
|
329 |
+
*/
|
330 |
+
public function shouldExportImagesAndDeeplinks($storeId = 0)
|
331 |
+
{
|
332 |
+
return $this->getExportConfigValue(self::EXPORT_URLS_IMAGES, $storeId);
|
333 |
+
}
|
334 |
+
|
335 |
+
|
336 |
+
/**
|
337 |
+
* Check if out of stock products should be exported
|
338 |
+
*
|
339 |
+
* @param int $storeId
|
340 |
+
*
|
341 |
+
* @return null|string
|
342 |
+
*/
|
343 |
+
public function shouldExportOutOfStock($storeId = 0)
|
344 |
+
{
|
345 |
+
return $this->getExportConfigValue(self::OUT_OF_STOCK_PRODUCTS, $storeId);
|
346 |
+
}
|
347 |
+
|
348 |
+
|
349 |
}
|
app/code/community/FACTFinder/Core/Model/Export/Product.php
CHANGED
@@ -23,7 +23,7 @@
|
|
23 |
* @license https://opensource.org/licenses/MIT The MIT License (MIT)
|
24 |
* @link http://www.flagbit.de
|
25 |
*/
|
26 |
-
class FACTFinder_Core_Model_Export_Product extends
|
27 |
{
|
28 |
|
29 |
const FILENAME_PATTERN = 'store_%s_product.csv';
|
@@ -90,6 +90,22 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
90 |
'numerical_attributes',
|
91 |
);
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
|
94 |
/**
|
95 |
* Add row to csv
|
@@ -128,7 +144,7 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
128 |
*/
|
129 |
public function getExportDirectory()
|
130 |
{
|
131 |
-
return
|
132 |
}
|
133 |
|
134 |
|
@@ -314,14 +330,14 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
314 |
$dynamicFields = $this->_getDynamicFields();
|
315 |
|
316 |
// status and visibility filter
|
317 |
-
$visibility = $this->
|
318 |
-
$status = $this->
|
319 |
$visibilityVals = Mage::getSingleton('catalog/product_visibility')->getVisibleInSearchIds();
|
320 |
$statusVals = Mage::getSingleton('catalog/product_status')->getVisibleStatusIds();
|
321 |
|
322 |
$lastProductId = 0;
|
323 |
while (true) {
|
324 |
-
$products = $this->
|
325 |
if (!$products) {
|
326 |
break;
|
327 |
}
|
@@ -331,7 +347,8 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
331 |
foreach ($products as $productData) {
|
332 |
$lastProductId = $productData['entity_id'];
|
333 |
$productAttributes[$productData['entity_id']] = $productData['entity_id'];
|
334 |
-
$productChildren = $this->
|
|
|
335 |
$productRelations[$productData['entity_id']] = $productChildren;
|
336 |
if ($productChildren) {
|
337 |
foreach ($productChildren as $productChild) {
|
@@ -340,7 +357,8 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
340 |
}
|
341 |
}
|
342 |
|
343 |
-
$productAttributes = $this->
|
|
|
344 |
foreach ($products as $productData) {
|
345 |
if (!isset($productAttributes[$productData['entity_id']])) {
|
346 |
continue;
|
@@ -396,7 +414,7 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
396 |
$this->_formatAttributes('searchable', $productAttr, $storeId),
|
397 |
$this->_formatAttributes('numerical', $productAttr, $storeId),
|
398 |
);
|
399 |
-
if ($this->
|
400 |
//dont need to add image and deeplink to child product, just add empty values
|
401 |
$subProductIndex[] = '';
|
402 |
$subProductIndex[] = '';
|
@@ -528,79 +546,6 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
528 |
}
|
529 |
|
530 |
|
531 |
-
/**
|
532 |
-
* Retrieve Searchable attributes
|
533 |
-
*
|
534 |
-
* @param string $backendType
|
535 |
-
* @param string $type possible Types: system, sortable, filterable, searchable
|
536 |
-
* @param int $storeId
|
537 |
-
*
|
538 |
-
* @return array
|
539 |
-
*/
|
540 |
-
protected function _getSearchableAttributes($backendType = null, $type = null, $storeId = null)
|
541 |
-
{
|
542 |
-
if ($this->_searchableAttributes === null) {
|
543 |
-
$this->_searchableAttributes = array();
|
544 |
-
$entityType = $this->getEavConfig()->getEntityType('catalog_product');
|
545 |
-
$entity = $entityType->getEntity();
|
546 |
-
|
547 |
-
$userDefinedAttributes = array_keys(Mage::helper('factfinder/backend')
|
548 |
-
->unserializeFieldValue(Mage::getStoreConfig('factfinder/export/attributes', $storeId)));
|
549 |
-
|
550 |
-
$whereCond = array(
|
551 |
-
$this->_getWriteAdapter()->quoteInto('additional_table.is_searchable=?', 1),
|
552 |
-
$this->_getWriteAdapter()->quoteInto('additional_table.is_filterable=?', 1),
|
553 |
-
$this->_getWriteAdapter()->quoteInto('additional_table.used_for_sort_by=?', 1),
|
554 |
-
$this->_getWriteAdapter()->quoteInto(
|
555 |
-
'main_table.attribute_code IN(?)',
|
556 |
-
array_merge(array('status', 'visibility'), $userDefinedAttributes)
|
557 |
-
)
|
558 |
-
);
|
559 |
-
|
560 |
-
$select = $this->_getWriteAdapter()->select()
|
561 |
-
->from(array('main_table' => $this->getTable('eav/attribute')))
|
562 |
-
->join(
|
563 |
-
array('additional_table' => $this->getTable('catalog/eav_attribute')),
|
564 |
-
'additional_table.attribute_id = main_table.attribute_id'
|
565 |
-
)
|
566 |
-
->where('main_table.entity_type_id=?', $entityType->getEntityTypeId())
|
567 |
-
->where(join(' OR ', $whereCond))
|
568 |
-
->order('main_table.attribute_id', 'asc');
|
569 |
-
|
570 |
-
$attributesData = $this->_getWriteAdapter()->fetchAll($select);
|
571 |
-
$this->getEavConfig()->importAttributesData($entityType, $attributesData);
|
572 |
-
|
573 |
-
foreach ($attributesData as $attributeData) {
|
574 |
-
$attributeCode = $attributeData['attribute_code'];
|
575 |
-
$attribute = $this->getEavConfig()->getAttribute($entityType, $attributeCode);
|
576 |
-
$attribute->setEntity($entity);
|
577 |
-
$this->_searchableAttributes[$attribute->getId()] = $attribute;
|
578 |
-
}
|
579 |
-
}
|
580 |
-
|
581 |
-
if ($type !== null || $backendType !== null) {
|
582 |
-
$attributes = array();
|
583 |
-
foreach ($this->_searchableAttributes as $attribute) {
|
584 |
-
if ($backendType !== null
|
585 |
-
&& $attribute->getBackendType() != $backendType
|
586 |
-
) {
|
587 |
-
continue;
|
588 |
-
}
|
589 |
-
|
590 |
-
if ($this->_checkIfSkipAttribute($attribute, $type)) {
|
591 |
-
continue;
|
592 |
-
}
|
593 |
-
|
594 |
-
$attributes[$attribute->getId()] = $attribute;
|
595 |
-
}
|
596 |
-
|
597 |
-
return $attributes;
|
598 |
-
}
|
599 |
-
|
600 |
-
return $this->_searchableAttributes;
|
601 |
-
}
|
602 |
-
|
603 |
-
|
604 |
/**
|
605 |
* Get Category Path by Product ID
|
606 |
*
|
@@ -613,11 +558,11 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
613 |
{
|
614 |
|
615 |
if ($this->_categoryNames === null) {
|
616 |
-
$this->
|
617 |
}
|
618 |
|
619 |
if ($this->_productsToCategoryPath === null) {
|
620 |
-
$this->
|
621 |
}
|
622 |
|
623 |
$value = '';
|
@@ -647,43 +592,6 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
647 |
}
|
648 |
|
649 |
|
650 |
-
/**
|
651 |
-
* Return all product children ids
|
652 |
-
*
|
653 |
-
* @param int $productId Product Entity Id
|
654 |
-
* @param string $typeId Super Product Link Type
|
655 |
-
*
|
656 |
-
* @return array
|
657 |
-
*/
|
658 |
-
protected function _getProductChildIds($productId, $typeId)
|
659 |
-
{
|
660 |
-
$typeInstance = $this->_getProductTypeInstance($typeId);
|
661 |
-
$relation = $typeInstance->isComposite()
|
662 |
-
? $typeInstance->getRelationInfo()
|
663 |
-
: false;
|
664 |
-
|
665 |
-
if ($relation && $relation->getTable() && $relation->getParentFieldName() && $relation->getChildFieldName()) {
|
666 |
-
$select = $this->_getReadAdapter()->select()
|
667 |
-
->from(
|
668 |
-
array('main' => $this->getTable($relation->getTable())),
|
669 |
-
array($relation->getChildFieldName()))
|
670 |
-
->join(
|
671 |
-
array('e' => $this->getTable('catalog/product')),
|
672 |
-
'main.' . $relation->getChildFieldName() . '=e.entity_id',
|
673 |
-
array('entity_id', 'type_id', 'sku')
|
674 |
-
)
|
675 |
-
->where("{$relation->getParentFieldName()}=?", $productId);
|
676 |
-
if ($relation->getWhere() !== null) {
|
677 |
-
$select->where($relation->getWhere());
|
678 |
-
}
|
679 |
-
|
680 |
-
return $this->_getReadAdapter()->fetchAll($select);
|
681 |
-
}
|
682 |
-
|
683 |
-
return null;
|
684 |
-
}
|
685 |
-
|
686 |
-
|
687 |
/**
|
688 |
* Retrieve attribute source value for search
|
689 |
* This method is mostly copied from Mage_CatalogSearch_Model_Resource_Fulltext,
|
@@ -697,7 +605,7 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
697 |
*/
|
698 |
protected function _getAttributeValue($attributeId, $value, $storeId)
|
699 |
{
|
700 |
-
$attribute = $this->
|
701 |
if (!$attribute->getIsSearchable() && $attribute->getAttributeCode() == 'visibility') {
|
702 |
return $value;
|
703 |
}
|
@@ -882,53 +790,26 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
882 |
*/
|
883 |
protected function _exportImageAndDeepLink($productIndex, $productData, $storeId)
|
884 |
{
|
885 |
-
|
886 |
-
$baseAdminUrl = Mage::app()->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
887 |
-
if ($storeId !== null) {
|
888 |
-
$currentBaseUrl = Mage::app()->getStore($storeId)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
889 |
-
}
|
890 |
-
|
891 |
-
$imageType = Mage::getStoreConfig('factfinder/export/suggest_image_type', $storeId);
|
892 |
-
$imageSize = Mage::getStoreConfig('factfinder/export/suggest_image_size', $storeId);
|
893 |
-
|
894 |
-
$product = Mage::getModel('catalog/product');
|
895 |
-
$product->setStoreId($storeId);
|
896 |
-
$product->load($productData['entity_id']);
|
897 |
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
}
|
902 |
-
|
903 |
-
$image = (string) $image;
|
904 |
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
|
909 |
-
|
910 |
-
|
911 |
|
912 |
-
|
913 |
-
|
914 |
|
915 |
return $productIndex;
|
916 |
}
|
917 |
|
918 |
|
919 |
-
/**
|
920 |
-
* Check of image and deep links should be exported
|
921 |
-
*
|
922 |
-
* @param int $storeId
|
923 |
-
*
|
924 |
-
* @return bool
|
925 |
-
*/
|
926 |
-
protected function _getIfExportImageAndDeeplink($storeId)
|
927 |
-
{
|
928 |
-
return Mage::getStoreConfigFlag('factfinder/export/urls', $storeId);
|
929 |
-
}
|
930 |
-
|
931 |
-
|
932 |
/**
|
933 |
* Get array of dynamic fields to use in csv
|
934 |
*
|
@@ -1008,102 +889,111 @@ class FACTFinder_Core_Model_Export_Product extends Mage_CatalogSearch_Model_Reso
|
|
1008 |
|
1009 |
|
1010 |
/**
|
1011 |
-
*
|
1012 |
*
|
1013 |
-
* @
|
1014 |
-
*
|
1015 |
-
* @return $this
|
1016 |
*/
|
1017 |
-
protected function
|
1018 |
{
|
1019 |
-
|
1020 |
-
$statusAttribute = $this->_getCategoryStatusAttribute();
|
1021 |
-
|
1022 |
-
$select = $this->_getReadAdapter()->select()
|
1023 |
-
->from(
|
1024 |
-
array('main' => $nameAttribute->getBackendTable()),
|
1025 |
-
array('entity_id', 'value')
|
1026 |
-
)
|
1027 |
-
->join(
|
1028 |
-
array('e' => $statusAttribute->getBackendTable()),
|
1029 |
-
'main.entity_id=e.entity_id AND (e.store_id = 0 OR e.store_id = ' . $storeId
|
1030 |
-
. ') AND e.attribute_id=' . $statusAttribute->getAttributeId(),
|
1031 |
-
null
|
1032 |
-
)
|
1033 |
-
->where('main.attribute_id=?', $nameAttribute->getAttributeId())
|
1034 |
-
->where('e.value=?', '1')
|
1035 |
-
->where('main.store_id = 0 OR main.store_id = ?', $storeId);
|
1036 |
-
|
1037 |
-
$this->_categoryNames = $this->_getReadAdapter()->fetchPairs($select);
|
1038 |
-
|
1039 |
-
return $this;
|
1040 |
}
|
1041 |
|
1042 |
|
1043 |
/**
|
1044 |
-
*
|
1045 |
*
|
1046 |
-
* @
|
|
|
|
|
|
|
1047 |
*/
|
1048 |
-
protected function
|
1049 |
{
|
1050 |
-
$
|
1051 |
-
|
1052 |
-
->
|
|
|
|
|
|
|
|
|
1053 |
|
1054 |
-
return $
|
1055 |
}
|
1056 |
|
1057 |
|
1058 |
/**
|
1059 |
-
* Get
|
1060 |
*
|
1061 |
-
* @
|
|
|
|
|
|
|
1062 |
*/
|
1063 |
-
protected function
|
1064 |
{
|
1065 |
-
$
|
1066 |
-
$categoryAttributeCollection->addFieldToFilter('attribute_code', array('eq' => 'is_active'))
|
1067 |
-
->getSelect()->limit(1);
|
1068 |
|
1069 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1070 |
}
|
1071 |
|
1072 |
|
1073 |
/**
|
1074 |
-
*
|
1075 |
*
|
1076 |
-
* @param
|
|
|
|
|
1077 |
*
|
1078 |
-
* @return
|
1079 |
*/
|
1080 |
-
protected function
|
1081 |
{
|
1082 |
-
$
|
1083 |
-
->from(
|
1084 |
-
array('main' => $this->getTable('catalog/category_product_index')),
|
1085 |
-
array('product_id')
|
1086 |
-
)
|
1087 |
-
->join(
|
1088 |
-
array('e' => $this->getTable('catalog/category')),
|
1089 |
-
'main.category_id=e.entity_id',
|
1090 |
-
null
|
1091 |
-
)
|
1092 |
-
->columns(array('e.path' => new Zend_Db_Expr('GROUP_CONCAT(e.path)')))
|
1093 |
-
->where(
|
1094 |
-
'main.visibility IN(?)',
|
1095 |
-
array(
|
1096 |
-
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH,
|
1097 |
-
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH
|
1098 |
-
)
|
1099 |
-
)
|
1100 |
-
->where('main.store_id = ?', $storeId)
|
1101 |
-
->where('e.path LIKE \'1/' . Mage::app()->getStore($storeId)->getRootCategoryId() . '/%\'')
|
1102 |
-
->group('main.product_id');
|
1103 |
-
|
1104 |
-
$this->_productsToCategoryPath = $this->_getReadAdapter()->fetchPairs($select);
|
1105 |
|
1106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1107 |
}
|
1108 |
|
1109 |
|
23 |
* @license https://opensource.org/licenses/MIT The MIT License (MIT)
|
24 |
* @link http://www.flagbit.de
|
25 |
*/
|
26 |
+
class FACTFinder_Core_Model_Export_Product extends Mage_Core_Model_Abstract
|
27 |
{
|
28 |
|
29 |
const FILENAME_PATTERN = 'store_%s_product.csv';
|
90 |
'numerical_attributes',
|
91 |
);
|
92 |
|
93 |
+
/**
|
94 |
+
* @var
|
95 |
+
*/
|
96 |
+
protected $_engine;
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Init resource model
|
101 |
+
*
|
102 |
+
*/
|
103 |
+
protected function _construct()
|
104 |
+
{
|
105 |
+
$this->_init('factfinder/export');
|
106 |
+
$this->_engine = Mage::helper('catalogsearch')->getEngine();
|
107 |
+
}
|
108 |
+
|
109 |
|
110 |
/**
|
111 |
* Add row to csv
|
144 |
*/
|
145 |
public function getExportDirectory()
|
146 |
{
|
147 |
+
return $this->getHelper()->getExportDirectory();
|
148 |
}
|
149 |
|
150 |
|
330 |
$dynamicFields = $this->_getDynamicFields();
|
331 |
|
332 |
// status and visibility filter
|
333 |
+
$visibility = $this->getResource()->getSearchableAttribute('visibility');
|
334 |
+
$status = $this->getResource()->getSearchableAttribute('status');
|
335 |
$visibilityVals = Mage::getSingleton('catalog/product_visibility')->getVisibleInSearchIds();
|
336 |
$statusVals = Mage::getSingleton('catalog/product_status')->getVisibleStatusIds();
|
337 |
|
338 |
$lastProductId = 0;
|
339 |
while (true) {
|
340 |
+
$products = $this->getResource()->getSearchableProducts($storeId, $staticFields, $lastProductId);
|
341 |
if (!$products) {
|
342 |
break;
|
343 |
}
|
347 |
foreach ($products as $productData) {
|
348 |
$lastProductId = $productData['entity_id'];
|
349 |
$productAttributes[$productData['entity_id']] = $productData['entity_id'];
|
350 |
+
$productChildren = $this->getResource()
|
351 |
+
->getProductChildIds($productData['entity_id'], $productData['type_id']);
|
352 |
$productRelations[$productData['entity_id']] = $productChildren;
|
353 |
if ($productChildren) {
|
354 |
foreach ($productChildren as $productChild) {
|
357 |
}
|
358 |
}
|
359 |
|
360 |
+
$productAttributes = $this->getResource()
|
361 |
+
->getProductAttributes($storeId, array_keys($productAttributes), $dynamicFields);
|
362 |
foreach ($products as $productData) {
|
363 |
if (!isset($productAttributes[$productData['entity_id']])) {
|
364 |
continue;
|
414 |
$this->_formatAttributes('searchable', $productAttr, $storeId),
|
415 |
$this->_formatAttributes('numerical', $productAttr, $storeId),
|
416 |
);
|
417 |
+
if ($this->getHelper()->shouldExportImagesAndDeeplinks($storeId)) {
|
418 |
//dont need to add image and deeplink to child product, just add empty values
|
419 |
$subProductIndex[] = '';
|
420 |
$subProductIndex[] = '';
|
546 |
}
|
547 |
|
548 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
549 |
/**
|
550 |
* Get Category Path by Product ID
|
551 |
*
|
558 |
{
|
559 |
|
560 |
if ($this->_categoryNames === null) {
|
561 |
+
$this->_categoryNames = $this->getResource()->getCategoryNames($storeId);
|
562 |
}
|
563 |
|
564 |
if ($this->_productsToCategoryPath === null) {
|
565 |
+
$this->_productsToCategoryPath = $this->getResource()->getCategoryPaths($storeId);
|
566 |
}
|
567 |
|
568 |
$value = '';
|
592 |
}
|
593 |
|
594 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
595 |
/**
|
596 |
* Retrieve attribute source value for search
|
597 |
* This method is mostly copied from Mage_CatalogSearch_Model_Resource_Fulltext,
|
605 |
*/
|
606 |
protected function _getAttributeValue($attributeId, $value, $storeId)
|
607 |
{
|
608 |
+
$attribute = $this->getResource()->getSearchableAttribute($attributeId);
|
609 |
if (!$attribute->getIsSearchable() && $attribute->getAttributeCode() == 'visibility') {
|
610 |
return $value;
|
611 |
}
|
790 |
*/
|
791 |
protected function _exportImageAndDeepLink($productIndex, $productData, $storeId)
|
792 |
{
|
793 |
+
$helper = $this->getHelper();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
794 |
|
795 |
+
if (!$helper->shouldExportImagesAndDeeplinks($storeId)) {
|
796 |
+
return $productIndex;
|
797 |
+
}
|
|
|
|
|
|
|
798 |
|
799 |
+
// emulate store
|
800 |
+
$oldStore = Mage::app()->getStore()->getId();
|
801 |
+
Mage::app()->setCurrentStore($storeId);
|
802 |
|
803 |
+
$productIndex[] = $this->getProductImageUrl($productData['entity_id'], $storeId);
|
804 |
+
$productIndex[] = $this->getProductUrl($productData['entity_id'], $storeId);
|
805 |
|
806 |
+
// finish emulation
|
807 |
+
Mage::app()->setCurrentStore($oldStore);
|
808 |
|
809 |
return $productIndex;
|
810 |
}
|
811 |
|
812 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
813 |
/**
|
814 |
* Get array of dynamic fields to use in csv
|
815 |
*
|
889 |
|
890 |
|
891 |
/**
|
892 |
+
* Get export helper
|
893 |
*
|
894 |
+
* @return FACTFinder_Core_Helper_Export
|
|
|
|
|
895 |
*/
|
896 |
+
protected function getHelper()
|
897 |
{
|
898 |
+
return Mage::helper('factfinder/export');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
899 |
}
|
900 |
|
901 |
|
902 |
/**
|
903 |
+
* Gte product URL for store
|
904 |
*
|
905 |
+
* @param int $productId
|
906 |
+
* @param int $storeId
|
907 |
+
*
|
908 |
+
* @return string
|
909 |
*/
|
910 |
+
protected function getProductUrl($productId, $storeId)
|
911 |
{
|
912 |
+
$productUrl = Mage::getModel('catalog/product')
|
913 |
+
->getCollection()
|
914 |
+
->addAttributeToFilter('entity_id', $productId)
|
915 |
+
->setStoreId($storeId)
|
916 |
+
->addUrlRewrite()
|
917 |
+
->getFirstItem()
|
918 |
+
->getProductUrl();
|
919 |
|
920 |
+
return $productUrl;
|
921 |
}
|
922 |
|
923 |
|
924 |
/**
|
925 |
+
* Get image URL for product
|
926 |
*
|
927 |
+
* @param int $productId
|
928 |
+
* @param int $storeId
|
929 |
+
*
|
930 |
+
* @return string
|
931 |
*/
|
932 |
+
protected function getProductImageUrl($productId, $storeId)
|
933 |
{
|
934 |
+
$helper = $this->getHelper();
|
|
|
|
|
935 |
|
936 |
+
$imageType = $helper->getExportImageType();
|
937 |
+
$imageBaseFile = Mage::getResourceSingleton('catalog/product')
|
938 |
+
->getAttributeRawValue($productId, $imageType, $storeId);
|
939 |
+
|
940 |
+
/** @var Mage_Catalog_Model_Product_Image $imageModel */
|
941 |
+
$imageModel = Mage::getModel('catalog/product_image');
|
942 |
+
|
943 |
+
// if size was set
|
944 |
+
if ($helper->getExportImageWidth($storeId)) {
|
945 |
+
$imageModel
|
946 |
+
->setWidth($helper->getExportImageWidth($storeId))
|
947 |
+
->setHeight($helper->getExportImageHeight($storeId));
|
948 |
+
}
|
949 |
+
|
950 |
+
$imageModel
|
951 |
+
->setDestinationSubdir($imageType)
|
952 |
+
->setBaseFile($imageBaseFile);
|
953 |
+
|
954 |
+
// if no cache image was generated we should create one
|
955 |
+
if (!$imageModel->isCached()) {
|
956 |
+
$imageModel
|
957 |
+
->resize()
|
958 |
+
->saveFile();
|
959 |
+
}
|
960 |
+
|
961 |
+
return $imageModel->getUrl();
|
962 |
}
|
963 |
|
964 |
|
965 |
/**
|
966 |
+
* Get searchable attributes by type
|
967 |
*
|
968 |
+
* @param null $backendType Backend type of the attributes
|
969 |
+
* @param string $type Possible Types: system, sortable, filterable, searchable
|
970 |
+
* @param int $storeId
|
971 |
*
|
972 |
+
* @return array
|
973 |
*/
|
974 |
+
protected function _getSearchableAttributes($backendType = null, $type = null, $storeId = 0)
|
975 |
{
|
976 |
+
$attributes = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
977 |
|
978 |
+
if ($type !== null || $backendType !== null) {
|
979 |
+
foreach ($this->getResource()->getSearchableAttributes($storeId) as $attribute) {
|
980 |
+
if ($backendType !== null
|
981 |
+
&& $attribute->getBackendType() != $backendType
|
982 |
+
) {
|
983 |
+
continue;
|
984 |
+
}
|
985 |
+
|
986 |
+
if ($this->_checkIfSkipAttribute($attribute, $type)) {
|
987 |
+
continue;
|
988 |
+
}
|
989 |
+
|
990 |
+
$attributes[$attribute->getId()] = $attribute;
|
991 |
+
}
|
992 |
+
} else {
|
993 |
+
$attributes = $this->getResource()->getSearchableAttributes($storeId);
|
994 |
+
}
|
995 |
+
|
996 |
+
return $attributes;
|
997 |
}
|
998 |
|
999 |
|
app/code/community/FACTFinder/Core/Model/Facade.php
CHANGED
@@ -619,26 +619,6 @@ class FACTFinder_Core_Model_Facade
|
|
619 |
}
|
620 |
|
621 |
|
622 |
-
/**
|
623 |
-
* Create a new results object
|
624 |
-
*
|
625 |
-
* @param array $records
|
626 |
-
* @param string $refKey
|
627 |
-
* @param int $foundRecordsCount
|
628 |
-
*
|
629 |
-
* @return \FACTFinder\Data\Result
|
630 |
-
*/
|
631 |
-
public function getNewResultObject($records, $refKey, $foundRecordsCount)
|
632 |
-
{
|
633 |
-
return FF::getInstance(
|
634 |
-
'Data\Result',
|
635 |
-
$records,
|
636 |
-
$refKey,
|
637 |
-
$foundRecordsCount
|
638 |
-
);
|
639 |
-
}
|
640 |
-
|
641 |
-
|
642 |
/**
|
643 |
* Get paging object (collection)
|
644 |
*
|
619 |
}
|
620 |
|
621 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
622 |
/**
|
623 |
* Get paging object (collection)
|
624 |
*
|
app/code/community/FACTFinder/Core/Model/Handler/Search.php
CHANGED
@@ -28,6 +28,9 @@ class FACTFinder_Core_Model_Handler_Search extends FACTFinder_Core_Model_Handler
|
|
28 |
{
|
29 |
|
30 |
const SEARCH_STATUS_REGISTRY_KEY = 'ff_search_status';
|
|
|
|
|
|
|
31 |
|
32 |
protected $_searchResult;
|
33 |
protected $_searchResultCount;
|
@@ -182,7 +185,9 @@ class FACTFinder_Core_Model_Handler_Search extends FACTFinder_Core_Model_Handler
|
|
182 |
array(
|
183 |
'similarity' => $record->getSimilarity(),
|
184 |
'position' => $record->getPosition(),
|
185 |
-
'original_position' => $record->getField(
|
|
|
|
|
186 |
)
|
187 |
);
|
188 |
}
|
28 |
{
|
29 |
|
30 |
const SEARCH_STATUS_REGISTRY_KEY = 'ff_search_status';
|
31 |
+
const ORIGINAL_POSITION_FIELD = '__ORIG_POSITION__';
|
32 |
+
const CAMPAIGN_NAME_FIELD = '__FFCampaign__';
|
33 |
+
const INSTOREADS_PRODUCT_FIELD = '__FFInstoreAds__';
|
34 |
|
35 |
protected $_searchResult;
|
36 |
protected $_searchResultCount;
|
185 |
array(
|
186 |
'similarity' => $record->getSimilarity(),
|
187 |
'position' => $record->getPosition(),
|
188 |
+
'original_position' => $record->getField(self::ORIGINAL_POSITION_FIELD),
|
189 |
+
'campaign' => $record->getField(self::CAMPAIGN_NAME_FIELD),
|
190 |
+
'instore_ads' => $record->getField(self::INSTOREADS_PRODUCT_FIELD)
|
191 |
)
|
192 |
);
|
193 |
}
|
app/code/community/FACTFinder/Core/Model/Resource/Export.php
ADDED
@@ -0,0 +1,302 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* FACTFinder_Core
|
4 |
+
*
|
5 |
+
* @category Mage
|
6 |
+
* @package FACTFinder_Core
|
7 |
+
* @author Flagbit Magento Team <magento@flagbit.de>
|
8 |
+
* @copyright Copyright (c) 2016 Flagbit GmbH & Co. KG
|
9 |
+
* @license https://opensource.org/licenses/MIT The MIT License (MIT)
|
10 |
+
* @link http://www.flagbit.de
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Model class
|
16 |
+
*
|
17 |
+
* This class provides db access to the export model
|
18 |
+
*
|
19 |
+
* @category Mage
|
20 |
+
* @package FACTFinder_Core
|
21 |
+
* @author Flagbit Magento Team <magento@flagbit.de>
|
22 |
+
* @copyright Copyright (c) 2016 Flagbit GmbH & Co. KG (http://www.flagbit.de)
|
23 |
+
* @license https://opensource.org/licenses/MIT The MIT License (MIT)
|
24 |
+
* @link http://www.flagbit.de
|
25 |
+
*/
|
26 |
+
class FACTFinder_Core_Model_Resource_Export extends Mage_CatalogSearch_Model_Resource_Fulltext
|
27 |
+
{
|
28 |
+
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Retrieve searchable products per store
|
32 |
+
*
|
33 |
+
* @param int $storeId
|
34 |
+
* @param array $staticFields
|
35 |
+
* @param int $lastProductId
|
36 |
+
* @param int $limit
|
37 |
+
*
|
38 |
+
* @return array
|
39 |
+
*/
|
40 |
+
public function getSearchableProducts($storeId, array $staticFields, $lastProductId = 0, $limit = 100)
|
41 |
+
{
|
42 |
+
$websiteId = Mage::app()->getStore($storeId)->getWebsiteId();
|
43 |
+
$readConnection = $this->getReadConnection();
|
44 |
+
|
45 |
+
$select = $readConnection->select()
|
46 |
+
->useStraightJoin(true)
|
47 |
+
->from(
|
48 |
+
array('e' => $this->getTable('catalog/product')),
|
49 |
+
array_merge(array('entity_id', 'type_id'), $staticFields)
|
50 |
+
)
|
51 |
+
->join(
|
52 |
+
array('website' => $this->getTable('catalog/product_website')),
|
53 |
+
$readConnection->quoteInto(
|
54 |
+
'website.product_id=e.entity_id AND website.website_id=?',
|
55 |
+
$websiteId
|
56 |
+
),
|
57 |
+
array()
|
58 |
+
)
|
59 |
+
->join(
|
60 |
+
array('stock_status' => $this->getTable('cataloginventory/stock_status')),
|
61 |
+
$readConnection->quoteInto(
|
62 |
+
'stock_status.product_id=e.entity_id AND stock_status.website_id=?',
|
63 |
+
$websiteId
|
64 |
+
),
|
65 |
+
array('in_stock' => 'stock_status')
|
66 |
+
);
|
67 |
+
|
68 |
+
$select->where('e.entity_id>?', $lastProductId)
|
69 |
+
->limit($limit)
|
70 |
+
->order('e.entity_id');
|
71 |
+
|
72 |
+
if (!Mage::helper('factfinder/export')->shouldExportOutOfStock($storeId)) {
|
73 |
+
Mage::getSingleton('cataloginventory/stock_status')
|
74 |
+
->prepareCatalogProductIndexSelect(
|
75 |
+
$select,
|
76 |
+
new Zend_Db_Expr('e.entity_id'),
|
77 |
+
new Zend_Db_Expr('website.website_id')
|
78 |
+
);
|
79 |
+
}
|
80 |
+
|
81 |
+
$result = $readConnection->fetchAll($select);
|
82 |
+
|
83 |
+
return $result;
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Retrieve Searchable attributes
|
89 |
+
*
|
90 |
+
* @param int $storeId
|
91 |
+
*
|
92 |
+
* @return array
|
93 |
+
*/
|
94 |
+
public function getSearchableAttributes($storeId = null)
|
95 |
+
{
|
96 |
+
if ($this->_searchableAttributes === null) {
|
97 |
+
$this->_searchableAttributes = array();
|
98 |
+
$entityType = $this->getEavConfig()->getEntityType('catalog_product');
|
99 |
+
$entity = $entityType->getEntity();
|
100 |
+
|
101 |
+
$userDefinedAttributes = Mage::getStoreConfig('factfinder/export/attributes', $storeId);
|
102 |
+
$userDefinedAttributes = array_keys(
|
103 |
+
Mage::helper('factfinder/backend')->unserializeFieldValue($userDefinedAttributes)
|
104 |
+
);
|
105 |
+
|
106 |
+
$whereCond = array(
|
107 |
+
$this->_getWriteAdapter()->quoteInto('additional_table.is_searchable=?', 1),
|
108 |
+
$this->_getWriteAdapter()->quoteInto('additional_table.is_filterable=?', 1),
|
109 |
+
$this->_getWriteAdapter()->quoteInto('additional_table.used_for_sort_by=?', 1),
|
110 |
+
$this->_getWriteAdapter()->quoteInto(
|
111 |
+
'main_table.attribute_code IN(?)',
|
112 |
+
array_merge(array('status', 'visibility'), $userDefinedAttributes)
|
113 |
+
)
|
114 |
+
);
|
115 |
+
|
116 |
+
$select = $this->_getWriteAdapter()->select()
|
117 |
+
->from(array('main_table' => $this->getTable('eav/attribute')))
|
118 |
+
->join(
|
119 |
+
array('additional_table' => $this->getTable('catalog/eav_attribute')),
|
120 |
+
'additional_table.attribute_id = main_table.attribute_id'
|
121 |
+
)
|
122 |
+
->where('main_table.entity_type_id=?', $entityType->getEntityTypeId())
|
123 |
+
->where(join(' OR ', $whereCond))
|
124 |
+
->order('main_table.attribute_id', 'asc');
|
125 |
+
|
126 |
+
$attributesData = $this->_getWriteAdapter()->fetchAll($select);
|
127 |
+
$this->getEavConfig()->importAttributesData($entityType, $attributesData);
|
128 |
+
|
129 |
+
foreach ($attributesData as $attributeData) {
|
130 |
+
$attributeCode = $attributeData['attribute_code'];
|
131 |
+
$attribute = $this->getEavConfig()->getAttribute($entityType, $attributeCode);
|
132 |
+
$attribute->setEntity($entity);
|
133 |
+
$this->_searchableAttributes[$attribute->getId()] = $attribute;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
return $this->_searchableAttributes;
|
138 |
+
}
|
139 |
+
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Get products to category paths
|
143 |
+
*
|
144 |
+
* @param int $storeId
|
145 |
+
*
|
146 |
+
* @return array
|
147 |
+
*/
|
148 |
+
public function getCategoryPaths($storeId)
|
149 |
+
{
|
150 |
+
$select = $this->_getReadAdapter()->select()
|
151 |
+
->from(
|
152 |
+
array('main' => $this->getTable('catalog/category_product_index')),
|
153 |
+
array('product_id')
|
154 |
+
)
|
155 |
+
->join(
|
156 |
+
array('e' => $this->getTable('catalog/category')),
|
157 |
+
'main.category_id=e.entity_id',
|
158 |
+
null
|
159 |
+
)
|
160 |
+
->columns(array('e.path' => new Zend_Db_Expr('GROUP_CONCAT(e.path)')))
|
161 |
+
->where(
|
162 |
+
'main.visibility IN(?)',
|
163 |
+
array(
|
164 |
+
Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH,
|
165 |
+
Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH
|
166 |
+
)
|
167 |
+
)
|
168 |
+
->where('main.store_id = ?', $storeId)
|
169 |
+
->where('e.path LIKE \'1/' . Mage::app()->getStore($storeId)->getRootCategoryId() . '/%\'')
|
170 |
+
->group('main.product_id');
|
171 |
+
|
172 |
+
return $this->_getReadAdapter()->fetchPairs($select);
|
173 |
+
}
|
174 |
+
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Get category names
|
178 |
+
*
|
179 |
+
* @param int $storeId
|
180 |
+
*
|
181 |
+
* @return $this
|
182 |
+
*/
|
183 |
+
public function getCategoryNames($storeId)
|
184 |
+
{
|
185 |
+
$nameAttribute = $this->_getCategoryNameAttribute();
|
186 |
+
$statusAttribute = $this->_getCategoryStatusAttribute();
|
187 |
+
|
188 |
+
$select = $this->_getReadAdapter()->select()
|
189 |
+
->from(
|
190 |
+
array('main' => $nameAttribute->getBackendTable()),
|
191 |
+
array('entity_id', 'value')
|
192 |
+
)
|
193 |
+
->join(
|
194 |
+
array('e' => $statusAttribute->getBackendTable()),
|
195 |
+
'main.entity_id=e.entity_id AND (e.store_id = 0 OR e.store_id = ' . $storeId
|
196 |
+
. ') AND e.attribute_id=' . $statusAttribute->getAttributeId(),
|
197 |
+
null
|
198 |
+
)
|
199 |
+
->where('main.attribute_id=?', $nameAttribute->getAttributeId())
|
200 |
+
->where('e.value=?', '1')
|
201 |
+
->where('main.store_id = 0 OR main.store_id = ?', $storeId);
|
202 |
+
|
203 |
+
return $this->_getReadAdapter()->fetchPairs($select);
|
204 |
+
}
|
205 |
+
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Get category name attribute model
|
209 |
+
*
|
210 |
+
* @return mixed
|
211 |
+
*/
|
212 |
+
protected function _getCategoryNameAttribute()
|
213 |
+
{
|
214 |
+
$categoryAttributeCollection = Mage::getResourceModel('catalog/category_attribute_collection');
|
215 |
+
$categoryAttributeCollection->addFieldToFilter('attribute_code', array('eq' => 'name'))
|
216 |
+
->getSelect()->limit(1);
|
217 |
+
|
218 |
+
return $categoryAttributeCollection->getFirstItem();
|
219 |
+
}
|
220 |
+
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Get category status attribute model (is_active)
|
224 |
+
*
|
225 |
+
* @return mixed
|
226 |
+
*/
|
227 |
+
protected function _getCategoryStatusAttribute()
|
228 |
+
{
|
229 |
+
$categoryAttributeCollection = Mage::getResourceModel('catalog/category_attribute_collection');
|
230 |
+
$categoryAttributeCollection->addFieldToFilter('attribute_code', array('eq' => 'is_active'))
|
231 |
+
->getSelect()->limit(1);
|
232 |
+
|
233 |
+
return $categoryAttributeCollection->getFirstItem();
|
234 |
+
}
|
235 |
+
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Return all product children ids
|
239 |
+
*
|
240 |
+
* @param int $productId Product Entity Id
|
241 |
+
* @param string $typeId Super Product Link Type
|
242 |
+
*
|
243 |
+
* @return array
|
244 |
+
*/
|
245 |
+
public function getProductChildIds($productId, $typeId)
|
246 |
+
{
|
247 |
+
$typeInstance = $this->_getProductTypeInstance($typeId);
|
248 |
+
$relation = $typeInstance->isComposite()
|
249 |
+
? $typeInstance->getRelationInfo()
|
250 |
+
: false;
|
251 |
+
|
252 |
+
if ($relation && $relation->getTable() && $relation->getParentFieldName() && $relation->getChildFieldName()) {
|
253 |
+
$select = $this->_getReadAdapter()->select()
|
254 |
+
->from(
|
255 |
+
array('main' => $this->getTable($relation->getTable())),
|
256 |
+
array($relation->getChildFieldName()))
|
257 |
+
->join(
|
258 |
+
array('e' => $this->getTable('catalog/product')),
|
259 |
+
'main.' . $relation->getChildFieldName() . '=e.entity_id',
|
260 |
+
array('entity_id', 'type_id', 'sku')
|
261 |
+
)
|
262 |
+
->where("{$relation->getParentFieldName()}=?", $productId);
|
263 |
+
if ($relation->getWhere() !== null) {
|
264 |
+
$select->where($relation->getWhere());
|
265 |
+
}
|
266 |
+
|
267 |
+
return $this->_getReadAdapter()->fetchAll($select);
|
268 |
+
}
|
269 |
+
|
270 |
+
return null;
|
271 |
+
}
|
272 |
+
|
273 |
+
|
274 |
+
/**
|
275 |
+
* Retrieve searchable attribute by Id or code
|
276 |
+
*
|
277 |
+
* @param int|string $attribute
|
278 |
+
*
|
279 |
+
* @return Mage_Eav_Model_Entity_Attribute
|
280 |
+
*/
|
281 |
+
public function getSearchableAttribute($attribute)
|
282 |
+
{
|
283 |
+
return $this->_getSearchableAttribute($attribute);
|
284 |
+
}
|
285 |
+
|
286 |
+
|
287 |
+
/**
|
288 |
+
* Load product(s) attributes
|
289 |
+
*
|
290 |
+
* @param int $storeId
|
291 |
+
* @param array $productIds
|
292 |
+
* @param array $attributeTypes
|
293 |
+
*
|
294 |
+
* @return array
|
295 |
+
*/
|
296 |
+
public function getProductAttributes($storeId, array $productIds, array $attributeTypes)
|
297 |
+
{
|
298 |
+
return $this->_getProductAttributes($storeId, $productIds, $attributeTypes);
|
299 |
+
}
|
300 |
+
|
301 |
+
|
302 |
+
}
|
app/code/community/FACTFinder/Core/etc/system.xml
CHANGED
@@ -189,11 +189,20 @@
|
|
189 |
<label>Export products without categories</label>
|
190 |
<frontend_type>select</frontend_type>
|
191 |
<source_model>adminhtml/system_config_source_yesno</source_model>
|
192 |
-
<sort_order>
|
193 |
<show_in_default>1</show_in_default>
|
194 |
<show_in_website>1</show_in_website>
|
195 |
<show_in_store>1</show_in_store>
|
196 |
</products_without_categories>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
<remove_tags translate="label">
|
198 |
<label>Remove html entities and tags</label>
|
199 |
<frontend_type>select</frontend_type>
|
189 |
<label>Export products without categories</label>
|
190 |
<frontend_type>select</frontend_type>
|
191 |
<source_model>adminhtml/system_config_source_yesno</source_model>
|
192 |
+
<sort_order>10</sort_order>
|
193 |
<show_in_default>1</show_in_default>
|
194 |
<show_in_website>1</show_in_website>
|
195 |
<show_in_store>1</show_in_store>
|
196 |
</products_without_categories>
|
197 |
+
<out_of_stock_products>
|
198 |
+
<label>Export out of stock products</label>
|
199 |
+
<frontend_type>select</frontend_type>
|
200 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
201 |
+
<sort_order>15</sort_order>
|
202 |
+
<show_in_default>1</show_in_default>
|
203 |
+
<show_in_website>1</show_in_website>
|
204 |
+
<show_in_store>1</show_in_store>
|
205 |
+
</out_of_stock_products>
|
206 |
<remove_tags translate="label">
|
207 |
<label>Remove html entities and tags</label>
|
208 |
<frontend_type>select</frontend_type>
|
app/code/community/FACTFinder/Recommendation/Helper/Data.php
CHANGED
@@ -57,7 +57,9 @@ class FACTFinder_Recommendation_Helper_Data extends Mage_Core_Helper_Abstract
|
|
57 |
{
|
58 |
$exportHelper = Mage::helper('factfinder/export');
|
59 |
$channel = Mage::helper('factfinder')->getPrimaryChannel($storeId);
|
|
|
60 |
$facade = Mage::getModel('factfinder_recommendation/facade');
|
|
|
61 |
$download = !$exportHelper->useFtp($storeId);
|
62 |
$delay = $exportHelper->getImportDelay(self::IMPORT_TYPE);
|
63 |
|
57 |
{
|
58 |
$exportHelper = Mage::helper('factfinder/export');
|
59 |
$channel = Mage::helper('factfinder')->getPrimaryChannel($storeId);
|
60 |
+
/** @var FACTFinder_Recommendation_Model_Facade $facade */
|
61 |
$facade = Mage::getModel('factfinder_recommendation/facade');
|
62 |
+
$facade->setStoreId($storeId);
|
63 |
$download = !$exportHelper->useFtp($storeId);
|
64 |
$delay = $exportHelper->getImportDelay(self::IMPORT_TYPE);
|
65 |
|
app/code/community/FACTFinder/Suggest/Helper/Data.php
CHANGED
@@ -47,6 +47,9 @@ class FACTFinder_Suggest_Helper_Data extends Mage_Core_Helper_Abstract
|
|
47 |
if (Mage::app()->getStore()->isCurrentlySecure()) {
|
48 |
$url = preg_replace('/^http:/', 'https:', $url);
|
49 |
}
|
|
|
|
|
|
|
50 |
}
|
51 |
|
52 |
// avoid specifying the default port for http
|
@@ -95,7 +98,9 @@ class FACTFinder_Suggest_Helper_Data extends Mage_Core_Helper_Abstract
|
|
95 |
{
|
96 |
$exportHelper = Mage::helper('factfinder/export');
|
97 |
$channel = Mage::helper('factfinder')->getPrimaryChannel($storeId);
|
|
|
98 |
$facade = Mage::getModel('factfinder_suggest/facade');
|
|
|
99 |
$download = !$exportHelper->useFtp($storeId);
|
100 |
$delay = $exportHelper->getImportDelay(self::IMPORT_TYPE);
|
101 |
|
@@ -112,4 +117,30 @@ class FACTFinder_Suggest_Helper_Data extends Mage_Core_Helper_Abstract
|
|
112 |
}
|
113 |
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
}
|
47 |
if (Mage::app()->getStore()->isCurrentlySecure()) {
|
48 |
$url = preg_replace('/^http:/', 'https:', $url);
|
49 |
}
|
50 |
+
|
51 |
+
// remove all parameters except for channel
|
52 |
+
$url = $this->removeUrlParams($url, array('channel'));
|
53 |
}
|
54 |
|
55 |
// avoid specifying the default port for http
|
98 |
{
|
99 |
$exportHelper = Mage::helper('factfinder/export');
|
100 |
$channel = Mage::helper('factfinder')->getPrimaryChannel($storeId);
|
101 |
+
/** @var FACTFinder_Suggest_Model_Facade $facade */
|
102 |
$facade = Mage::getModel('factfinder_suggest/facade');
|
103 |
+
$facade->setStoreId($storeId);
|
104 |
$download = !$exportHelper->useFtp($storeId);
|
105 |
$delay = $exportHelper->getImportDelay(self::IMPORT_TYPE);
|
106 |
|
117 |
}
|
118 |
|
119 |
|
120 |
+
/**
|
121 |
+
* Remove all parameters from url except for specified
|
122 |
+
*
|
123 |
+
* @param string $url
|
124 |
+
* @param array $exclude
|
125 |
+
*
|
126 |
+
* @return string
|
127 |
+
*/
|
128 |
+
protected function removeUrlParams($url, $exclude = array())
|
129 |
+
{
|
130 |
+
$excludeParams = array();
|
131 |
+
|
132 |
+
foreach ($exclude as $paramName) {
|
133 |
+
preg_match("/[&|?]{$paramName}=([^&]*)&?/", $url, $values);
|
134 |
+
if (isset($values[1])) {
|
135 |
+
$excludeParams[$paramName] = $values[1];
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
$url = array_shift(explode('?', $url));
|
140 |
+
$query = http_build_query($excludeParams);
|
141 |
+
|
142 |
+
return $url . '?' . $query;
|
143 |
+
}
|
144 |
+
|
145 |
+
|
146 |
}
|
app/code/community/FACTFinder/Tracking/Block/Click.php
CHANGED
@@ -56,6 +56,14 @@ class FACTFinder_Tracking_Block_Click extends FACTFinder_Tracking_Block_Abstract
|
|
56 |
'title' => $product->getName()
|
57 |
);
|
58 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
return $data;
|
60 |
|
61 |
}
|
56 |
'title' => $product->getName()
|
57 |
);
|
58 |
|
59 |
+
if ($product->getCampaign() !== null) {
|
60 |
+
$data['campaign'] = $product->getCampaign();
|
61 |
+
}
|
62 |
+
|
63 |
+
if ($product->getInstoreAds() !== null) {
|
64 |
+
$data['instoreAds'] = $product->getInstoreAds();
|
65 |
+
}
|
66 |
+
|
67 |
return $data;
|
68 |
|
69 |
}
|
app/design/frontend/base/default/template/factfinder/suggest/advancedsuggest.phtml
CHANGED
@@ -38,13 +38,13 @@
|
|
38 |
<?php if (Mage::helper('factfinder')->isEnabled('suggest')): ?>
|
39 |
searchForm = new FactFinderSuggest(
|
40 |
'search_mini_form', 'search',
|
41 |
-
'<?php echo $this->__('Search entire store here...') ?>',
|
42 |
<?php echo $this->getTranslationsAsJson(); ?>,
|
43 |
'<?php echo Mage::getStoreConfig('factfinder/search/channel'); ?>'
|
44 |
);
|
45 |
<?php else: ?>
|
46 |
searchForm = new Varien.searchForm('search_mini_form', 'search',
|
47 |
-
'<?php echo $this->__('Search entire shop here...') ?>'
|
48 |
);
|
49 |
<?php endif; ?>
|
50 |
|
38 |
<?php if (Mage::helper('factfinder')->isEnabled('suggest')): ?>
|
39 |
searchForm = new FactFinderSuggest(
|
40 |
'search_mini_form', 'search',
|
41 |
+
'<?php echo addslashes($this->__('Search entire store here...')); ?>',
|
42 |
<?php echo $this->getTranslationsAsJson(); ?>,
|
43 |
'<?php echo Mage::getStoreConfig('factfinder/search/channel'); ?>'
|
44 |
);
|
45 |
<?php else: ?>
|
46 |
searchForm = new Varien.searchForm('search_mini_form', 'search',
|
47 |
+
'<?php echo addslashes($this->__('Search entire shop here...')); ?>'
|
48 |
);
|
49 |
<?php endif; ?>
|
50 |
|
app/locale/de_DE/FACTFinder_Suggest.csv
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
"ff_searchTerm","Suchbegriffe"
|
2 |
+
"ff_category","Kategorien"
|
3 |
+
"ff_productName","Produkte"
|
4 |
+
"ff_brand","Marken"
|
app/locale/en_US/FACTFinder_Suggest.csv
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
"ff_searchTerm","Searchterms"
|
2 |
+
"ff_category","Categories"
|
3 |
+
"ff_productName","Products"
|
4 |
+
"ff_brand","Brands"
|
lib/FACTFinder/Adapter/AbstractAdapter.php
CHANGED
@@ -39,6 +39,11 @@ abstract class AbstractAdapter
|
|
39 |
*/
|
40 |
protected $urlBuilder;
|
41 |
|
|
|
|
|
|
|
|
|
|
|
42 |
/**
|
43 |
* @var \FACTFinder\Util\ContentProcessorInterface
|
44 |
*/
|
39 |
*/
|
40 |
protected $urlBuilder;
|
41 |
|
42 |
+
/**
|
43 |
+
* @var bool
|
44 |
+
*/
|
45 |
+
protected $upToDate = false;
|
46 |
+
|
47 |
/**
|
48 |
* @var \FACTFinder\Util\ContentProcessorInterface
|
49 |
*/
|
lib/FACTFinder/Adapter/Compare.php
CHANGED
@@ -3,7 +3,7 @@ namespace FACTFinder\Adapter;
|
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
-
class Compare extends
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
@@ -21,18 +21,6 @@ class Compare extends AbstractAdapter
|
|
21 |
*/
|
22 |
private $comparedRecords;
|
23 |
|
24 |
-
/**
|
25 |
-
* @var bool
|
26 |
-
*/
|
27 |
-
private $attributesUpToDate = false;
|
28 |
-
private $recordsUpToDate = false;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* @var bool
|
32 |
-
*/
|
33 |
-
private $comparableAttributesOnly = false;
|
34 |
-
|
35 |
-
|
36 |
public function __construct(
|
37 |
$loggerClass,
|
38 |
\FACTFinder\Core\ConfigurationInterface $configuration,
|
@@ -60,25 +48,7 @@ class Compare extends AbstractAdapter
|
|
60 |
{
|
61 |
$parameters = $this->request->getParameters();
|
62 |
$parameters['ids'] = implode(';', $productIDs);
|
63 |
-
$this->
|
64 |
-
$this->recordsUpToDate = false;
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Set this to true to only retrieve those attributes that have been used
|
69 |
-
* for comparison instead of full Record objects.
|
70 |
-
*
|
71 |
-
* @param $comparableAttributesOnly bool
|
72 |
-
*/
|
73 |
-
public function setComparableAttributesOnly($comparableAttributesOnly)
|
74 |
-
{
|
75 |
-
// Reset the compared products, if more detail is wanted than before
|
76 |
-
if($this->comparableAttributesOnly && !$comparableAttributesOnly)
|
77 |
-
$this->recordsUpToDate = false;
|
78 |
-
|
79 |
-
$this->comparableAttributesOnly = $comparableAttributesOnly;
|
80 |
-
$parameters = $this->request->getParameters();
|
81 |
-
$parameters['idsOnly'] = $comparableAttributesOnly ? 'true' : 'false';
|
82 |
}
|
83 |
|
84 |
/**
|
@@ -92,10 +62,10 @@ class Compare extends AbstractAdapter
|
|
92 |
public function getComparableAttributes()
|
93 |
{
|
94 |
if (is_null($this->comparableAttributes)
|
95 |
-
|| !$this->
|
96 |
) {
|
97 |
$this->comparableAttributes = $this->createComparableAttributes();
|
98 |
-
$this->
|
99 |
}
|
100 |
|
101 |
return $this->comparableAttributes;
|
@@ -136,10 +106,10 @@ class Compare extends AbstractAdapter
|
|
136 |
public function getComparedRecords()
|
137 |
{
|
138 |
if (is_null($this->comparedRecords)
|
139 |
-
|| !$this->
|
140 |
) {
|
141 |
$this->comparedRecords = $this->createComparedRecords();
|
142 |
-
$this->
|
143 |
}
|
144 |
|
145 |
return $this->comparedRecords;
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
+
class Compare extends ConfigurableResponse
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
21 |
*/
|
22 |
private $comparedRecords;
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
public function __construct(
|
25 |
$loggerClass,
|
26 |
\FACTFinder\Core\ConfigurationInterface $configuration,
|
48 |
{
|
49 |
$parameters = $this->request->getParameters();
|
50 |
$parameters['ids'] = implode(';', $productIDs);
|
51 |
+
$this->upToDate = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
}
|
53 |
|
54 |
/**
|
62 |
public function getComparableAttributes()
|
63 |
{
|
64 |
if (is_null($this->comparableAttributes)
|
65 |
+
|| !$this->upToDate
|
66 |
) {
|
67 |
$this->comparableAttributes = $this->createComparableAttributes();
|
68 |
+
$this->upToDate = true;
|
69 |
}
|
70 |
|
71 |
return $this->comparableAttributes;
|
106 |
public function getComparedRecords()
|
107 |
{
|
108 |
if (is_null($this->comparedRecords)
|
109 |
+
|| !$this->upToDate
|
110 |
) {
|
111 |
$this->comparedRecords = $this->createComparedRecords();
|
112 |
+
$this->upToDate = true;
|
113 |
}
|
114 |
|
115 |
return $this->comparedRecords;
|
lib/FACTFinder/Adapter/ConfigurableResponse.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace FACTFinder\Adapter;
|
3 |
+
|
4 |
+
use FACTFinder\Loader as FF;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Base class for all adapters which support the response of records with ids only.
|
8 |
+
*/
|
9 |
+
abstract class ConfigurableResponse extends AbstractAdapter
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* @var bool
|
13 |
+
*/
|
14 |
+
protected $idsOnly = false;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @param string $loggerClass Class name of logger to use. The class should
|
18 |
+
* implement FACTFinder\Util\LoggerInterface.
|
19 |
+
* @param \FACTFinder\Core\ConfigurationInterface $configuration
|
20 |
+
* Configuration object to use.
|
21 |
+
* @param \FACTFinder\Core\Server\Request $request The request object from
|
22 |
+
* which to obtain the server data.
|
23 |
+
* @param \FACTFinder\Core\Client\UrlBuilder $urlBuilder
|
24 |
+
* Client URL builder object to use.
|
25 |
+
* @param \FACTFinder\Core\encodingConverter $encodingConverter
|
26 |
+
* Encoding converter object to use
|
27 |
+
*/
|
28 |
+
public function __construct(
|
29 |
+
$loggerClass,
|
30 |
+
\FACTFinder\Core\ConfigurationInterface $configuration,
|
31 |
+
\FACTFinder\Core\Server\Request $request,
|
32 |
+
\FACTFinder\Core\Client\UrlBuilder $urlBuilder,
|
33 |
+
\FACTFinder\Core\AbstractEncodingConverter $encodingConverter = null
|
34 |
+
) {
|
35 |
+
parent::__construct($loggerClass, $configuration, $request,
|
36 |
+
$urlBuilder, $encodingConverter);
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Set this to true to only retrieve the IDs of products instead
|
41 |
+
* of full Record objects.
|
42 |
+
* @param $idsOnly bool
|
43 |
+
*/
|
44 |
+
public function setIdsOnly($idsOnly)
|
45 |
+
{
|
46 |
+
if($this->idsOnly && !$idsOnly)
|
47 |
+
$this->upToDate = false;
|
48 |
+
|
49 |
+
$this->idsOnly = $idsOnly;
|
50 |
+
$parameters = $this->request->getParameters();
|
51 |
+
$parameters['idsOnly'] = $idsOnly ? 'true' : 'false';
|
52 |
+
}
|
53 |
+
}
|
lib/FACTFinder/Adapter/PersonalisedResponse.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace FACTFinder\Adapter;
|
3 |
+
|
4 |
+
use FACTFinder\Loader as FF;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Base class for all adapters which support the personalisation.
|
8 |
+
*/
|
9 |
+
abstract class PersonalisedResponse extends ConfigurableResponse
|
10 |
+
{
|
11 |
+
/**
|
12 |
+
* @var string
|
13 |
+
*/
|
14 |
+
protected $sid = false;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @param string $loggerClass Class name of logger to use. The class should
|
18 |
+
* implement FACTFinder\Util\LoggerInterface.
|
19 |
+
* @param \FACTFinder\Core\ConfigurationInterface $configuration
|
20 |
+
* Configuration object to use.
|
21 |
+
* @param \FACTFinder\Core\Server\Request $request The request object from
|
22 |
+
* which to obtain the server data.
|
23 |
+
* @param \FACTFinder\Core\Client\UrlBuilder $urlBuilder
|
24 |
+
* Client URL builder object to use.
|
25 |
+
* @param \FACTFinder\Core\encodingConverter $encodingConverter
|
26 |
+
* Encoding converter object to use
|
27 |
+
*/
|
28 |
+
public function __construct(
|
29 |
+
$loggerClass,
|
30 |
+
\FACTFinder\Core\ConfigurationInterface $configuration,
|
31 |
+
\FACTFinder\Core\Server\Request $request,
|
32 |
+
\FACTFinder\Core\Client\UrlBuilder $urlBuilder,
|
33 |
+
\FACTFinder\Core\AbstractEncodingConverter $encodingConverter = null
|
34 |
+
) {
|
35 |
+
parent::__construct($loggerClass, $configuration, $request,
|
36 |
+
$urlBuilder, $encodingConverter);
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Set the session id for personalization.
|
41 |
+
*
|
42 |
+
* @param string $sessionId session id
|
43 |
+
*/
|
44 |
+
public function setSid($sessionId)
|
45 |
+
{
|
46 |
+
if (strcmp($sessionId, $this->sid) !== 0) {
|
47 |
+
$this->sid = $sessionId;
|
48 |
+
$this->parameters['sid'] = $this->sid;
|
49 |
+
$this->upToDate = false;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
lib/FACTFinder/Adapter/ProductCampaign.php
CHANGED
@@ -3,7 +3,7 @@ namespace FACTFinder\Adapter;
|
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
-
class ProductCampaign extends
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
@@ -18,13 +18,8 @@ class ProductCampaign extends AbstractAdapter
|
|
18 |
/**
|
19 |
* @var bool
|
20 |
*/
|
21 |
-
protected $isShoppingCartCampaign = false;
|
22 |
-
|
23 |
-
|
24 |
-
/**
|
25 |
-
* @var bool
|
26 |
-
*/
|
27 |
-
private $idsOnly = false;
|
28 |
|
29 |
public function __construct(
|
30 |
$loggerClass,
|
@@ -57,7 +52,7 @@ class ProductCampaign extends AbstractAdapter
|
|
57 |
{
|
58 |
$parameters = $this->request->getParameters();
|
59 |
$parameters['productNumber'] = $productNumbers;
|
60 |
-
$this->
|
61 |
}
|
62 |
|
63 |
/**
|
@@ -70,23 +65,19 @@ class ProductCampaign extends AbstractAdapter
|
|
70 |
{
|
71 |
$parameters = $this->request->getParameters();
|
72 |
$parameters->add('productNumber', $productNumbers);
|
73 |
-
$this->
|
74 |
}
|
75 |
|
76 |
/**
|
77 |
-
* Set
|
78 |
-
*
|
79 |
-
*
|
80 |
-
* @param $idsOnly bool
|
81 |
*/
|
82 |
-
public function
|
83 |
{
|
84 |
-
if($this->idsOnly && !$idsOnly)
|
85 |
-
$this->campaignsUpToDate = false;
|
86 |
-
|
87 |
-
$this->idsOnly = $idsOnly;
|
88 |
$parameters = $this->request->getParameters();
|
89 |
-
$parameters
|
|
|
90 |
}
|
91 |
|
92 |
/**
|
@@ -95,7 +86,8 @@ class ProductCampaign extends AbstractAdapter
|
|
95 |
public function makeProductCampaign()
|
96 |
{
|
97 |
$this->isShoppingCartCampaign = false;
|
98 |
-
$this->
|
|
|
99 |
$this->parameters['do'] = 'getProductCampaigns';
|
100 |
}
|
101 |
|
@@ -105,9 +97,20 @@ class ProductCampaign extends AbstractAdapter
|
|
105 |
public function makeShoppingCartCampaign()
|
106 |
{
|
107 |
$this->isShoppingCartCampaign = true;
|
108 |
-
$this->
|
|
|
109 |
$this->parameters['do'] = 'getShoppingCartCampaigns';
|
110 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
|
112 |
/**
|
113 |
* Returns campaigns for IDs previously specified. If no IDs have been
|
@@ -118,11 +121,11 @@ class ProductCampaign extends AbstractAdapter
|
|
118 |
public function getCampaigns()
|
119 |
{
|
120 |
if (is_null($this->campaigns)
|
121 |
-
|| !$this->
|
122 |
) {
|
123 |
$this->request->resetLoaded();
|
124 |
$this->campaigns = $this->createCampaigns();
|
125 |
-
$this->
|
126 |
}
|
127 |
|
128 |
return $this->campaigns;
|
@@ -131,15 +134,20 @@ class ProductCampaign extends AbstractAdapter
|
|
131 |
private function createCampaigns()
|
132 |
{
|
133 |
$campaigns = array();
|
134 |
-
|
135 |
-
if (!isset($this->parameters['
|
|
|
|
|
|
|
|
|
|
|
136 |
{
|
137 |
$this->log->warn('Product campaigns cannot be loaded without a product ID. '
|
138 |
. 'Use setProductIDs() or addProductIDs() first.');
|
139 |
}
|
140 |
else
|
141 |
{
|
142 |
-
if ($this->isShoppingCartCampaign)
|
143 |
{
|
144 |
$jsonData = $this->getResponseContent();
|
145 |
}
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
+
class ProductCampaign extends PersonalisedResponse
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
18 |
/**
|
19 |
* @var bool
|
20 |
*/
|
21 |
+
protected $isShoppingCartCampaign = false;
|
22 |
+
protected $isLandingPageCampaign = false;
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
public function __construct(
|
25 |
$loggerClass,
|
52 |
{
|
53 |
$parameters = $this->request->getParameters();
|
54 |
$parameters['productNumber'] = $productNumbers;
|
55 |
+
$this->upToDate = false;
|
56 |
}
|
57 |
|
58 |
/**
|
65 |
{
|
66 |
$parameters = $this->request->getParameters();
|
67 |
$parameters->add('productNumber', $productNumbers);
|
68 |
+
$this->upToDate = false;
|
69 |
}
|
70 |
|
71 |
/**
|
72 |
+
* Set the page id to get landing page campaigns.
|
73 |
+
*
|
74 |
+
* @param string $pageId The id which determines the campaigns for a page.
|
|
|
75 |
*/
|
76 |
+
public function setPageId($pageId)
|
77 |
{
|
|
|
|
|
|
|
|
|
78 |
$parameters = $this->request->getParameters();
|
79 |
+
$parameters->add('pageId', $pageId);
|
80 |
+
$this->upToDate = false;
|
81 |
}
|
82 |
|
83 |
/**
|
86 |
public function makeProductCampaign()
|
87 |
{
|
88 |
$this->isShoppingCartCampaign = false;
|
89 |
+
$this->isLandingPageCampaign = false;
|
90 |
+
$this->upToDate = false;
|
91 |
$this->parameters['do'] = 'getProductCampaigns';
|
92 |
}
|
93 |
|
97 |
public function makeShoppingCartCampaign()
|
98 |
{
|
99 |
$this->isShoppingCartCampaign = true;
|
100 |
+
$this->isLandingPageCampaign = false;
|
101 |
+
$this->upToDate = false;
|
102 |
$this->parameters['do'] = 'getShoppingCartCampaigns';
|
103 |
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Sets the adapter up for fetching campaigns on landing pages
|
107 |
+
*/
|
108 |
+
public function makePageCampaign()
|
109 |
+
{
|
110 |
+
$this->isLandingPageCampaign = true;
|
111 |
+
$this->upToDate = false;
|
112 |
+
$this->parameters['do'] = 'getPageCampaigns';
|
113 |
+
}
|
114 |
|
115 |
/**
|
116 |
* Returns campaigns for IDs previously specified. If no IDs have been
|
121 |
public function getCampaigns()
|
122 |
{
|
123 |
if (is_null($this->campaigns)
|
124 |
+
|| !$this->upToDate
|
125 |
) {
|
126 |
$this->request->resetLoaded();
|
127 |
$this->campaigns = $this->createCampaigns();
|
128 |
+
$this->upToDate = true;
|
129 |
}
|
130 |
|
131 |
return $this->campaigns;
|
134 |
private function createCampaigns()
|
135 |
{
|
136 |
$campaigns = array();
|
137 |
+
|
138 |
+
if ($this->isLandingPageCampaign && !isset($this->parameters['pageId']))
|
139 |
+
{
|
140 |
+
$this->log->warn('Page campaigns cannot be loaded without a page ID. '
|
141 |
+
. 'Use setPageId() first.');
|
142 |
+
}
|
143 |
+
else if (!$this->isLandingPageCampaign && !isset($this->parameters['productNumber']))
|
144 |
{
|
145 |
$this->log->warn('Product campaigns cannot be loaded without a product ID. '
|
146 |
. 'Use setProductIDs() or addProductIDs() first.');
|
147 |
}
|
148 |
else
|
149 |
{
|
150 |
+
if ($this->isShoppingCartCampaign || $this->isLandingPageCampaign)
|
151 |
{
|
152 |
$jsonData = $this->getResponseContent();
|
153 |
}
|
lib/FACTFinder/Adapter/Recommendation.php
CHANGED
@@ -3,7 +3,7 @@ namespace FACTFinder\Adapter;
|
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
-
class Recommendation extends
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
@@ -15,17 +15,6 @@ class Recommendation extends AbstractAdapter
|
|
15 |
*/
|
16 |
private $recommendations;
|
17 |
|
18 |
-
/**
|
19 |
-
* @var bool
|
20 |
-
*/
|
21 |
-
private $recommendationsUpToDate = false;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* @var bool
|
25 |
-
*/
|
26 |
-
private $idsOnly = false;
|
27 |
-
|
28 |
-
|
29 |
public function __construct(
|
30 |
$loggerClass,
|
31 |
\FACTFinder\Core\ConfigurationInterface $configuration,
|
@@ -68,7 +57,7 @@ class Recommendation extends AbstractAdapter
|
|
68 |
}
|
69 |
// Make sure that the recommendations are fetched again. In theory,
|
70 |
// we only have to do this when recordCount increases.
|
71 |
-
$this->
|
72 |
}
|
73 |
|
74 |
/**
|
@@ -81,7 +70,7 @@ class Recommendation extends AbstractAdapter
|
|
81 |
{
|
82 |
$parameters = $this->request->getParameters();
|
83 |
$parameters['id'] = $productIDs;
|
84 |
-
$this->
|
85 |
}
|
86 |
|
87 |
/**
|
@@ -94,34 +83,7 @@ class Recommendation extends AbstractAdapter
|
|
94 |
{
|
95 |
$parameters = $this->request->getParameters();
|
96 |
$parameters->add('id', $productIDs);
|
97 |
-
$this->
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Set this to true to only retrieve the IDs of recommended products instead
|
102 |
-
* of full Record objects.
|
103 |
-
* @param $idsOnly bool
|
104 |
-
*/
|
105 |
-
public function setIdsOnly($idsOnly)
|
106 |
-
{
|
107 |
-
// Reset the recommendations, if more detail is wanted than before
|
108 |
-
if($this->idsOnly && !$idsOnly)
|
109 |
-
$this->recommendationsUpToDate = false;
|
110 |
-
|
111 |
-
$this->idsOnly = $idsOnly;
|
112 |
-
$parameters = $this->request->getParameters();
|
113 |
-
$parameters['idsOnly'] = $idsOnly ? 'true' : 'false';
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* Set value for parameter sid for personalization.
|
118 |
-
*
|
119 |
-
* @param string $sid session id
|
120 |
-
*/
|
121 |
-
public function setSid($sid)
|
122 |
-
{
|
123 |
-
$this->parameters['sid'] = $sid;
|
124 |
-
$this->recommendationsUpToDate = false;
|
125 |
}
|
126 |
|
127 |
/**
|
@@ -133,11 +95,11 @@ class Recommendation extends AbstractAdapter
|
|
133 |
public function getRecommendations()
|
134 |
{
|
135 |
if (is_null($this->recommendations)
|
136 |
-
|| !$this->
|
137 |
) {
|
138 |
$this->request->resetLoaded();
|
139 |
$this->recommendations = $this->createRecommendations();
|
140 |
-
$this->
|
141 |
}
|
142 |
|
143 |
return $this->recommendations;
|
@@ -165,10 +127,7 @@ class Recommendation extends AbstractAdapter
|
|
165 |
$position = 1;
|
166 |
foreach($recommenderData as $recordData)
|
167 |
{
|
168 |
-
|
169 |
-
$records[] = $this->createSparseRecord($recordData);
|
170 |
-
else
|
171 |
-
$records[] = $this->createRecord($recordData, $position++);
|
172 |
}
|
173 |
}
|
174 |
}
|
@@ -181,14 +140,6 @@ class Recommendation extends AbstractAdapter
|
|
181 |
);
|
182 |
}
|
183 |
|
184 |
-
private function createSparseRecord($recordData)
|
185 |
-
{
|
186 |
-
return FF::getInstance(
|
187 |
-
'Data\Record',
|
188 |
-
(string)$recordData['id']
|
189 |
-
);
|
190 |
-
}
|
191 |
-
|
192 |
private function createRecord($recordData, $position)
|
193 |
{
|
194 |
return FF::getInstance(
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
+
class Recommendation extends PersonalisedResponse
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
15 |
*/
|
16 |
private $recommendations;
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
public function __construct(
|
19 |
$loggerClass,
|
20 |
\FACTFinder\Core\ConfigurationInterface $configuration,
|
57 |
}
|
58 |
// Make sure that the recommendations are fetched again. In theory,
|
59 |
// we only have to do this when recordCount increases.
|
60 |
+
$this->upToDate = false;
|
61 |
}
|
62 |
|
63 |
/**
|
70 |
{
|
71 |
$parameters = $this->request->getParameters();
|
72 |
$parameters['id'] = $productIDs;
|
73 |
+
$this->upToDate = false;
|
74 |
}
|
75 |
|
76 |
/**
|
83 |
{
|
84 |
$parameters = $this->request->getParameters();
|
85 |
$parameters->add('id', $productIDs);
|
86 |
+
$this->upToDate = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
}
|
88 |
|
89 |
/**
|
95 |
public function getRecommendations()
|
96 |
{
|
97 |
if (is_null($this->recommendations)
|
98 |
+
|| !$this->upToDate
|
99 |
) {
|
100 |
$this->request->resetLoaded();
|
101 |
$this->recommendations = $this->createRecommendations();
|
102 |
+
$this->upToDate = true;
|
103 |
}
|
104 |
|
105 |
return $this->recommendations;
|
127 |
$position = 1;
|
128 |
foreach($recommenderData as $recordData)
|
129 |
{
|
130 |
+
$records[] = $this->createRecord($recordData, $position++);
|
|
|
|
|
|
|
131 |
}
|
132 |
}
|
133 |
}
|
140 |
);
|
141 |
}
|
142 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
private function createRecord($recordData, $position)
|
144 |
{
|
145 |
return FF::getInstance(
|
lib/FACTFinder/Adapter/Search.php
CHANGED
@@ -3,7 +3,7 @@ namespace FACTFinder\Adapter;
|
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
-
class Search extends
|
7 |
{
|
8 |
|
9 |
/**
|
@@ -55,16 +55,6 @@ class Search extends AbstractAdapter
|
|
55 |
* @var FACTFinder\Data\CampaignIterator
|
56 |
*/
|
57 |
private $campaigns;
|
58 |
-
|
59 |
-
/**
|
60 |
-
* @var bool
|
61 |
-
*/
|
62 |
-
private $recordsUpToDate = false;
|
63 |
-
|
64 |
-
/**
|
65 |
-
* @var bool
|
66 |
-
*/
|
67 |
-
private $idsOnly = false;
|
68 |
|
69 |
public function __construct(
|
70 |
$loggerClass,
|
@@ -92,43 +82,16 @@ class Search extends AbstractAdapter
|
|
92 |
{
|
93 |
$this->parameters['query'] = $query;
|
94 |
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Set value for parameter sid for personalization.
|
98 |
-
*
|
99 |
-
* @param string $sid session id
|
100 |
-
*/
|
101 |
-
public function setSid($sid)
|
102 |
-
{
|
103 |
-
$this->parameters['sid'] = $sid;
|
104 |
-
$this->recordsUpToDate = false;
|
105 |
-
}
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Set this to true to only retrieve the IDs of products instead
|
109 |
-
* of full Record objects.
|
110 |
-
*
|
111 |
-
* @param $idsOnly bool
|
112 |
-
*/
|
113 |
-
public function setIDsOnly($idsOnly)
|
114 |
-
{
|
115 |
-
if($this->idsOnly && !$idsOnly)
|
116 |
-
$this->recordsUpToDate = false;
|
117 |
-
|
118 |
-
$this->idsOnly = $idsOnly;
|
119 |
-
$parameters = $this->request->getParameters();
|
120 |
-
$parameters['idsOnly'] = $idsOnly ? 'true' : 'false';
|
121 |
-
}
|
122 |
|
123 |
/**
|
124 |
* @return \FACTFinder\Data\Result
|
125 |
*/
|
126 |
public function getResult()
|
127 |
{
|
128 |
-
if (is_null($this->result) || !$this->
|
129 |
$this->request->resetLoaded();
|
130 |
$this->result = $this->createResult();
|
131 |
-
$this->
|
132 |
}
|
133 |
|
134 |
return $this->result;
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
+
class Search extends PersonalisedResponse
|
7 |
{
|
8 |
|
9 |
/**
|
55 |
* @var FACTFinder\Data\CampaignIterator
|
56 |
*/
|
57 |
private $campaigns;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
|
59 |
public function __construct(
|
60 |
$loggerClass,
|
82 |
{
|
83 |
$this->parameters['query'] = $query;
|
84 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
|
86 |
/**
|
87 |
* @return \FACTFinder\Data\Result
|
88 |
*/
|
89 |
public function getResult()
|
90 |
{
|
91 |
+
if (is_null($this->result) || !$this->upToDate) {
|
92 |
$this->request->resetLoaded();
|
93 |
$this->result = $this->createResult();
|
94 |
+
$this->upToDate = true;
|
95 |
}
|
96 |
|
97 |
return $this->result;
|
lib/FACTFinder/Adapter/SimilarRecords.php
CHANGED
@@ -3,7 +3,7 @@ namespace FACTFinder\Adapter;
|
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
-
class SimilarRecords extends
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
@@ -21,18 +21,6 @@ class SimilarRecords extends AbstractAdapter
|
|
21 |
*/
|
22 |
private $similarRecords;
|
23 |
|
24 |
-
/**
|
25 |
-
* @var bool
|
26 |
-
*/
|
27 |
-
private $attributesUpToDate = false;
|
28 |
-
private $recordsUpToDate = false;
|
29 |
-
|
30 |
-
/**
|
31 |
-
* @var bool
|
32 |
-
*/
|
33 |
-
private $idsOnly = false;
|
34 |
-
|
35 |
-
|
36 |
public function __construct(
|
37 |
$loggerClass,
|
38 |
\FACTFinder\Core\ConfigurationInterface $configuration,
|
@@ -74,7 +62,7 @@ class SimilarRecords extends AbstractAdapter
|
|
74 |
}
|
75 |
// Make sure that the records are fetched again. In principle, we only
|
76 |
// have to do this when recordCount increases.
|
77 |
-
$this->
|
78 |
}
|
79 |
|
80 |
/**
|
@@ -86,24 +74,7 @@ class SimilarRecords extends AbstractAdapter
|
|
86 |
{
|
87 |
$parameters = $this->request->getParameters();
|
88 |
$parameters['id'] = $productID;
|
89 |
-
$this->
|
90 |
-
$this->recordsUpToDate = false;
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Set this to true to only retrieve the IDs of similar products instead
|
95 |
-
* of full Record objects.
|
96 |
-
* @param $idsOnly bool
|
97 |
-
*/
|
98 |
-
public function setIDsOnly($idsOnly)
|
99 |
-
{
|
100 |
-
// Reset the similar records, if more detail is wanted than before
|
101 |
-
if($this->idsOnly && !$idsOnly)
|
102 |
-
$this->recordsUpToDate = false;
|
103 |
-
|
104 |
-
$this->idsOnly = $idsOnly;
|
105 |
-
$parameters = $this->request->getParameters();
|
106 |
-
$parameters['idsOnly'] = $idsOnly ? 'true' : 'false';
|
107 |
}
|
108 |
|
109 |
/**
|
@@ -117,10 +88,10 @@ class SimilarRecords extends AbstractAdapter
|
|
117 |
public function getSimilarAttributes()
|
118 |
{
|
119 |
if (is_null($this->similarAttributes)
|
120 |
-
|| !$this->
|
121 |
) {
|
122 |
$this->similarAttributes = $this->createSimilarAttributes();
|
123 |
-
$this->
|
124 |
}
|
125 |
|
126 |
return $this->similarAttributes;
|
@@ -161,11 +132,11 @@ class SimilarRecords extends AbstractAdapter
|
|
161 |
public function getSimilarRecords()
|
162 |
{
|
163 |
if (is_null($this->similarRecords)
|
164 |
-
|| !$this->
|
165 |
) {
|
166 |
$this->request->resetLoaded();
|
167 |
$this->similarRecords = $this->createSimilarRecords();
|
168 |
-
$this->
|
169 |
}
|
170 |
|
171 |
return $this->similarRecords;
|
@@ -189,10 +160,7 @@ class SimilarRecords extends AbstractAdapter
|
|
189 |
{
|
190 |
foreach($jsonData['records'] as $recordData)
|
191 |
{
|
192 |
-
|
193 |
-
$records[] = $this->createSparseRecord($recordData);
|
194 |
-
else
|
195 |
-
$records[] = $this->createRecord($recordData, $position++);
|
196 |
}
|
197 |
}
|
198 |
}
|
@@ -205,14 +173,6 @@ class SimilarRecords extends AbstractAdapter
|
|
205 |
);
|
206 |
}
|
207 |
|
208 |
-
private function createSparseRecord($recordData)
|
209 |
-
{
|
210 |
-
return FF::getInstance(
|
211 |
-
'Data\Record',
|
212 |
-
(string)$recordData['id']
|
213 |
-
);
|
214 |
-
}
|
215 |
-
|
216 |
private function createRecord($recordData, $position)
|
217 |
{
|
218 |
return FF::getInstance(
|
3 |
|
4 |
use FACTFinder\Loader as FF;
|
5 |
|
6 |
+
class SimilarRecords extends ConfigurableResponse
|
7 |
{
|
8 |
/**
|
9 |
* @var FACTFinder\Util\LoggerInterface
|
21 |
*/
|
22 |
private $similarRecords;
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
public function __construct(
|
25 |
$loggerClass,
|
26 |
\FACTFinder\Core\ConfigurationInterface $configuration,
|
62 |
}
|
63 |
// Make sure that the records are fetched again. In principle, we only
|
64 |
// have to do this when recordCount increases.
|
65 |
+
$this->upToDate = false;
|
66 |
}
|
67 |
|
68 |
/**
|
74 |
{
|
75 |
$parameters = $this->request->getParameters();
|
76 |
$parameters['id'] = $productID;
|
77 |
+
$this->upToDate = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
}
|
79 |
|
80 |
/**
|
88 |
public function getSimilarAttributes()
|
89 |
{
|
90 |
if (is_null($this->similarAttributes)
|
91 |
+
|| !$this->upToDate
|
92 |
) {
|
93 |
$this->similarAttributes = $this->createSimilarAttributes();
|
94 |
+
$this->upToDate = true;
|
95 |
}
|
96 |
|
97 |
return $this->similarAttributes;
|
132 |
public function getSimilarRecords()
|
133 |
{
|
134 |
if (is_null($this->similarRecords)
|
135 |
+
|| !$this->upToDate
|
136 |
) {
|
137 |
$this->request->resetLoaded();
|
138 |
$this->similarRecords = $this->createSimilarRecords();
|
139 |
+
$this->upToDate = true;
|
140 |
}
|
141 |
|
142 |
return $this->similarRecords;
|
160 |
{
|
161 |
foreach($jsonData['records'] as $recordData)
|
162 |
{
|
163 |
+
$records[] = $this->createRecord($recordData, $position++);
|
|
|
|
|
|
|
164 |
}
|
165 |
}
|
166 |
}
|
173 |
);
|
174 |
}
|
175 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
private function createRecord($recordData, $position)
|
177 |
{
|
178 |
return FF::getInstance(
|
lib/FACTFinder/Adapter/Tracking.php
CHANGED
@@ -88,6 +88,8 @@ class Tracking extends AbstractAdapter
|
|
88 |
* @param int $pageSize size of the page where the product was found (optional - is 12 by default)
|
89 |
* @param int $origPageSize original size of the page before the user could have changed it (optional - is set equals to $page by default)
|
90 |
* @param string $userId id of user (optional if modul personalisation is not used)
|
|
|
|
|
91 |
* @return boolean $success
|
92 |
*/
|
93 |
public function trackClick(
|
@@ -103,10 +105,12 @@ class Tracking extends AbstractAdapter
|
|
103 |
$title = '',
|
104 |
$pageSize = 12,
|
105 |
$origPageSize = -1,
|
106 |
-
$userId = null
|
|
|
|
|
107 |
) {
|
108 |
$this->setupClickTracking($id, $query, $pos, $masterId, $sid, $cookieId, $origPos, $page,
|
109 |
-
$simi, $title, $pageSize, $origPageSize, $userId);
|
110 |
return $this->applyTracking();
|
111 |
}
|
112 |
|
@@ -128,7 +132,9 @@ class Tracking extends AbstractAdapter
|
|
128 |
$title = '',
|
129 |
$pageSize = 12,
|
130 |
$origPageSize = -1,
|
131 |
-
$userId = null
|
|
|
|
|
132 |
) {
|
133 |
if (strlen($sid) == 0) $sid = session_id();
|
134 |
if ($origPos == -1) $origPos = $pos;
|
@@ -150,6 +156,8 @@ class Tracking extends AbstractAdapter
|
|
150 |
if (strlen($userId) > 0) $params['userId'] = $userId;
|
151 |
if (strlen($cookieId) > 0) $params['cookieId'] = $cookieId;
|
152 |
if (strlen($masterId) > 0) $params['masterId'] = $masterId;
|
|
|
|
|
153 |
|
154 |
$this->parameters->clear();
|
155 |
$this->parameters->setAll($params);
|
@@ -167,6 +175,8 @@ class Tracking extends AbstractAdapter
|
|
167 |
* @param int $count number of items purchased for each product (optional - default 1)
|
168 |
* @param float $price this is the single unit price (optional)
|
169 |
* @param string $userId id of user (optional if modul personalisation is not used)
|
|
|
|
|
170 |
* @return boolean $success
|
171 |
*/
|
172 |
public function trackCart(
|
@@ -178,9 +188,11 @@ class Tracking extends AbstractAdapter
|
|
178 |
$cookieId = null,
|
179 |
$count = 1,
|
180 |
$price = null,
|
181 |
-
$userId = null
|
|
|
|
|
182 |
) {
|
183 |
-
$this->setupCartTracking($id, $masterId, $title, $query, $sid, $cookieId, $count, $price, $userId);
|
184 |
return $this->applyTracking();
|
185 |
}
|
186 |
|
@@ -198,7 +210,9 @@ class Tracking extends AbstractAdapter
|
|
198 |
$cookieId = null,
|
199 |
$count = 1,
|
200 |
$price = null,
|
201 |
-
$userId = null
|
|
|
|
|
202 |
) {
|
203 |
if (strlen($sid) == 0) $sid = session_id();
|
204 |
$params = array(
|
@@ -214,6 +228,8 @@ class Tracking extends AbstractAdapter
|
|
214 |
if (strlen($cookieId) > 0) $params['cookieId'] = $cookieId;
|
215 |
if (strlen($masterId) > 0) $params['masterId'] = $masterId;
|
216 |
if (strlen($query) > 0) $params['query'] = $query;
|
|
|
|
|
217 |
|
218 |
$this->parameters->clear();
|
219 |
$this->parameters->setAll($params);
|
@@ -231,6 +247,8 @@ class Tracking extends AbstractAdapter
|
|
231 |
* @param int $count number of items purchased for each product (optional - default 1)
|
232 |
* @param float $price this is the single unit price (optional)
|
233 |
* @param string $userId id of user (optional if modul personalisation is not used)
|
|
|
|
|
234 |
* @return boolean $success
|
235 |
*/
|
236 |
public function trackCheckout(
|
@@ -242,9 +260,11 @@ class Tracking extends AbstractAdapter
|
|
242 |
$cookieId = null,
|
243 |
$count = 1,
|
244 |
$price = null,
|
245 |
-
$userId = null
|
|
|
|
|
246 |
) {
|
247 |
-
$this->setupCheckoutTracking($id, $masterId, $title, $query, $sid, $cookieId, $count, $price, $userId);
|
248 |
return $this->applyTracking();
|
249 |
}
|
250 |
|
@@ -262,7 +282,9 @@ class Tracking extends AbstractAdapter
|
|
262 |
$cookieId = null,
|
263 |
$count = 1,
|
264 |
$price = null,
|
265 |
-
$userId = null
|
|
|
|
|
266 |
) {
|
267 |
if (strlen($sid) == 0) $sid = session_id();
|
268 |
$params = array(
|
@@ -279,6 +301,8 @@ class Tracking extends AbstractAdapter
|
|
279 |
if (strlen($cookieId) > 0) $params['cookieId'] = $cookieId;
|
280 |
if (strlen($query) > 0) $params['query'] = $query;
|
281 |
if (strlen($masterId) > 0) $params['masterId'] = $masterId;
|
|
|
|
|
282 |
|
283 |
$this->parameters->clear();
|
284 |
$this->parameters->setAll($params);
|
88 |
* @param int $pageSize size of the page where the product was found (optional - is 12 by default)
|
89 |
* @param int $origPageSize original size of the page before the user could have changed it (optional - is set equals to $page by default)
|
90 |
* @param string $userId id of user (optional if modul personalisation is not used)
|
91 |
+
* @param string $campaign campaign name (optional)
|
92 |
+
* @param boolean $instoreAds determines whether it's a sponsered product (optional)
|
93 |
* @return boolean $success
|
94 |
*/
|
95 |
public function trackClick(
|
105 |
$title = '',
|
106 |
$pageSize = 12,
|
107 |
$origPageSize = -1,
|
108 |
+
$userId = null,
|
109 |
+
$campaign = null,
|
110 |
+
$instoreAds = false
|
111 |
) {
|
112 |
$this->setupClickTracking($id, $query, $pos, $masterId, $sid, $cookieId, $origPos, $page,
|
113 |
+
$simi, $title, $pageSize, $origPageSize, $userId, $campaign, $instoreAds);
|
114 |
return $this->applyTracking();
|
115 |
}
|
116 |
|
132 |
$title = '',
|
133 |
$pageSize = 12,
|
134 |
$origPageSize = -1,
|
135 |
+
$userId = null,
|
136 |
+
$campaign = null,
|
137 |
+
$instoreAds = false
|
138 |
) {
|
139 |
if (strlen($sid) == 0) $sid = session_id();
|
140 |
if ($origPos == -1) $origPos = $pos;
|
156 |
if (strlen($userId) > 0) $params['userId'] = $userId;
|
157 |
if (strlen($cookieId) > 0) $params['cookieId'] = $cookieId;
|
158 |
if (strlen($masterId) > 0) $params['masterId'] = $masterId;
|
159 |
+
if (strlen($campaign) > 0) $params['campaign'] = $campaign;
|
160 |
+
if ($instoreAds) $params['instoreAds'] = 'true';
|
161 |
|
162 |
$this->parameters->clear();
|
163 |
$this->parameters->setAll($params);
|
175 |
* @param int $count number of items purchased for each product (optional - default 1)
|
176 |
* @param float $price this is the single unit price (optional)
|
177 |
* @param string $userId id of user (optional if modul personalisation is not used)
|
178 |
+
* @param string $campaign campaign name (optional)
|
179 |
+
* @param boolean $instoreAds determines whether it's a sponsered product (optional)
|
180 |
* @return boolean $success
|
181 |
*/
|
182 |
public function trackCart(
|
188 |
$cookieId = null,
|
189 |
$count = 1,
|
190 |
$price = null,
|
191 |
+
$userId = null,
|
192 |
+
$campaign = null,
|
193 |
+
$instoreAds = false
|
194 |
) {
|
195 |
+
$this->setupCartTracking($id, $masterId, $title, $query, $sid, $cookieId, $count, $price, $userId, $campaign, $instoreAds);
|
196 |
return $this->applyTracking();
|
197 |
}
|
198 |
|
210 |
$cookieId = null,
|
211 |
$count = 1,
|
212 |
$price = null,
|
213 |
+
$userId = null,
|
214 |
+
$campaign = null,
|
215 |
+
$instoreAds = false
|
216 |
) {
|
217 |
if (strlen($sid) == 0) $sid = session_id();
|
218 |
$params = array(
|
228 |
if (strlen($cookieId) > 0) $params['cookieId'] = $cookieId;
|
229 |
if (strlen($masterId) > 0) $params['masterId'] = $masterId;
|
230 |
if (strlen($query) > 0) $params['query'] = $query;
|
231 |
+
if (strlen($campaign) > 0) $params['campaign'] = $campaign;
|
232 |
+
if ($instoreAds) $params['instoreAds'] = 'true';
|
233 |
|
234 |
$this->parameters->clear();
|
235 |
$this->parameters->setAll($params);
|
247 |
* @param int $count number of items purchased for each product (optional - default 1)
|
248 |
* @param float $price this is the single unit price (optional)
|
249 |
* @param string $userId id of user (optional if modul personalisation is not used)
|
250 |
+
* @param string $campaign campaign name (optional)
|
251 |
+
* @param boolean $instoreAds determines whether it's a sponsered product (optional)
|
252 |
* @return boolean $success
|
253 |
*/
|
254 |
public function trackCheckout(
|
260 |
$cookieId = null,
|
261 |
$count = 1,
|
262 |
$price = null,
|
263 |
+
$userId = null,
|
264 |
+
$campaign = null,
|
265 |
+
$instoreAds = false
|
266 |
) {
|
267 |
+
$this->setupCheckoutTracking($id, $masterId, $title, $query, $sid, $cookieId, $count, $price, $userId, $campaign, $instoreAds);
|
268 |
return $this->applyTracking();
|
269 |
}
|
270 |
|
282 |
$cookieId = null,
|
283 |
$count = 1,
|
284 |
$price = null,
|
285 |
+
$userId = null,
|
286 |
+
$campaign = null,
|
287 |
+
$instoreAds = false
|
288 |
) {
|
289 |
if (strlen($sid) == 0) $sid = session_id();
|
290 |
$params = array(
|
301 |
if (strlen($cookieId) > 0) $params['cookieId'] = $cookieId;
|
302 |
if (strlen($query) > 0) $params['query'] = $query;
|
303 |
if (strlen($masterId) > 0) $params['masterId'] = $masterId;
|
304 |
+
if (strlen($campaign) > 0) $params['campaign'] = $campaign;
|
305 |
+
if ($instoreAds) $params['instoreAds'] = 'true';
|
306 |
|
307 |
$this->parameters->clear();
|
308 |
$this->parameters->setAll($params);
|
lib/FACTFinder/Core/AbstractConfiguration.php
CHANGED
@@ -190,6 +190,7 @@ abstract class AbstractConfiguration implements ConfigurationInterface
|
|
190 |
'/^substringFilter.*/' => true,
|
191 |
'advisorStatus' => true,
|
192 |
'callback' => true,
|
|
|
193 |
'catalog' => true,
|
194 |
'channel' => true,
|
195 |
'cookieId' => true,
|
@@ -202,6 +203,7 @@ abstract class AbstractConfiguration implements ConfigurationInterface
|
|
202 |
'ids' => true,
|
203 |
'idsOnly' => true,
|
204 |
'ignoreForCache' => true,
|
|
|
205 |
'isArticleNumber' => true,
|
206 |
'log' => true,
|
207 |
'mainId' => true,
|
@@ -222,6 +224,7 @@ abstract class AbstractConfiguration implements ConfigurationInterface
|
|
222 |
'query' => true,
|
223 |
'queryFromSuggest' => true,
|
224 |
'searchField' => true,
|
|
|
225 |
'sid' => true,
|
226 |
'simi' => true,
|
227 |
'title' => true,
|
190 |
'/^substringFilter.*/' => true,
|
191 |
'advisorStatus' => true,
|
192 |
'callback' => true,
|
193 |
+
'campaign' => true,
|
194 |
'catalog' => true,
|
195 |
'channel' => true,
|
196 |
'cookieId' => true,
|
203 |
'ids' => true,
|
204 |
'idsOnly' => true,
|
205 |
'ignoreForCache' => true,
|
206 |
+
'instoreAds' => true,
|
207 |
'isArticleNumber' => true,
|
208 |
'log' => true,
|
209 |
'mainId' => true,
|
224 |
'query' => true,
|
225 |
'queryFromSuggest' => true,
|
226 |
'searchField' => true,
|
227 |
+
'seoPath' => true,
|
228 |
'sid' => true,
|
229 |
'simi' => true,
|
230 |
'title' => true,
|
lib/FACTFinder/Data/SearchParameters.php
CHANGED
@@ -12,7 +12,8 @@ class SearchParameters
|
|
12 |
/**
|
13 |
* @var string
|
14 |
*/
|
15 |
-
private $query;
|
|
|
16 |
private $channel;
|
17 |
private $advisorStatus;
|
18 |
|
@@ -43,6 +44,8 @@ class SearchParameters
|
|
43 |
) {
|
44 |
$this->query = isset($parameters['query']) ? $parameters['query'] : '';
|
45 |
|
|
|
|
|
46 |
// Properly prepared server parameters will always have a channel set
|
47 |
$this->channel = $parameters['channel'];
|
48 |
|
@@ -78,7 +81,13 @@ class SearchParameters
|
|
78 |
}
|
79 |
}
|
80 |
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
/**
|
84 |
* @return string
|
12 |
/**
|
13 |
* @var string
|
14 |
*/
|
15 |
+
private $query;
|
16 |
+
private $seoPath;
|
17 |
private $channel;
|
18 |
private $advisorStatus;
|
19 |
|
44 |
) {
|
45 |
$this->query = isset($parameters['query']) ? $parameters['query'] : '';
|
46 |
|
47 |
+
$this->seoPath = isset($parameters['seoPath']) ? $parameters['seoPath'] : '';
|
48 |
+
|
49 |
// Properly prepared server parameters will always have a channel set
|
50 |
$this->channel = $parameters['channel'];
|
51 |
|
81 |
}
|
82 |
}
|
83 |
|
84 |
+
/**
|
85 |
+
* @return string
|
86 |
+
*/
|
87 |
+
public function getSeoPath()
|
88 |
+
{
|
89 |
+
return $this->seoPath;
|
90 |
+
}
|
91 |
|
92 |
/**
|
93 |
* @return string
|
package.xml
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Flagbit_Factfinder</name>
|
4 |
-
<version>4.1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="https://opensource.org/licenses/MIT">MIT</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
-
<summary>4.1.
|
10 |
-
<description>4.1.
|
11 |
<notes>Release</notes>
|
12 |
<authors><author><name>FACTFinder</name><user>FACT_Finder</user><email>info@flagbit.de</email></author></authors>
|
13 |
-
<date>2016-
|
14 |
-
<time>
|
15 |
-
<contents><target name="magecommunity"><dir name="FACTFinder"><dir name="Asn"><dir name="Block"><dir name="Catalog"><dir name="Layer"><file name="Factfinder.php" hash="0e79d252a2752aab67f7490436350fe7"/><file name="State.php" hash="2bf2c99237e881372fdc074c3505d188"/></dir><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="9b0c98e266174c8f8b02b896a556b769"/></dir><file name="Pager.php" hash="ec87967ba312a3d589e0af0afbacdd0a"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="668be3edd4c8f6d0e051252d2e52d545"/></dir><dir name="Model"><dir name="Catalog"><file name="Layer.php" hash="6dafe882395b5d09f84c102f3b785410"/></dir><dir name="Handler"><file name="Search.php" hash="bbec7bd87e1d2f15792fdda46f34eb52"/></dir><dir name="Layer"><dir name="Filter"><file name="Factfinder.php" hash="2666ae9c79aa939e9539a1af5b0f7784"/><file name="Item.php" hash="a68545b4cb4487691ae75cdbf47af377"/></dir></dir><file name="Observer.php" hash="9ec46432b3d3170b626cfb4439315209"/><dir name="Resource"><dir name="Product"><dir name="Attribute"><file name="Collection.php" hash="03b060fd637de1fd632f1b9784b1124c"/></dir></dir><dir name="Search"><file name="Collection.php" hash="3e7a88eb53ccfb79b4448f9eb7bd4177"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="e07b890b06b00d94bc4a4a5931325366"/><file name="system.xml" hash="d76e04ebe1d564be4113c1428fdfc637"/></dir></dir><dir name="Campaigns"><dir name="Block"><file name="Abstract.php" hash="cc5e41bb89f07f191be99430451221fa"/><dir name="Advisory"><file name="Search.php" hash="1d4bf82a7baffbe64be17216436c35d4"/></dir><dir name="Feedback"><file name="Abstract.php" hash="018e415bdd754127cfad8bfa5881c0ce"/><file name="Cart.php" hash="35f9fec2518383c909495af90b324b8b"/><file name="Product.php" hash="82999021756a26d81bf829b9aa4dd5cc"/><file name="Search.php" hash="ebf3d35f6425b771291b08f696169d04"/></dir><dir name="Pushed"><file name="Abstract.php" hash="fbfbf5cb5c1ebce8e588ac7af1f1458d"/><file name="Cart.php" hash="741d3bd71ce91cd583778a5e26be9ff5"/><file name="Product.php" hash="c1e774c4ceb71469080e49557887a893"/><file name="Search.php" hash="ae352cfd5ca8bdf2a0b46d1148c710ae"/></dir></dir><dir name="Helper"><file name="Data.php" hash="c7882a90dca46e639a5e4c64bef153ff"/></dir><dir name="Model"><file name="Facade.php" hash="44fc55139509b76f19b7c95c6a81eb4c"/><dir name="Handler"><file name="Abstract.php" hash="04dd6ad2a877111364fd9c8f132671fc"/><file name="Cart.php" hash="128dd5052d20384ea2220020469f7cf6"/><file name="Product.php" hash="8d48380fbccec220bc4caabbcb5d7d7d"/><file name="Search.php" hash="e039a207ca98655c647355ebf287566d"/></dir><file name="Observer.php" hash="043e7411be7ec13a656b07750a7811af"/><dir name="Resource"><dir name="Pushedproducts"><file name="Collection.php" hash="569856158dee935d611ebc30f426835c"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="8f6b7cec7cff39b149beeffb39764668"/><file name="system.xml" hash="54992bb35ac6088733d3f18408872fdb"/></dir></dir><dir name="Core"><dir name="Block"><dir name="Adminhtml"><file name="Exportlink.php" hash="7a845ee8974cfcf74d9a32fed2ac0b21"/><dir name="Form"><dir name="Field"><file name="Attribute.php" hash="bea2183e56100233e7aebaccd6680c6f"/><file name="Attributes.php" hash="292742f954dec1863caaee9313a237c9"/></dir></dir></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="b9438ae943def50b46531ac1265e0634"/></dir><file name="Pager.php" hash="aa301fb57966bafcc370fa510d2ad146"/></dir></dir><dir name="CatalogSearch"><file name="Layer.php" hash="ad3dcdd26b5a723e43c7b8011a4ea25f"/></dir><dir name="EnterpriseSearch"><file name="Layer.php" hash="19455e36be3e0c14cabba762ccbdef1a"/></dir></dir><dir name="Helper"><file name="Backend.php" hash="f30c89ca668b193a8fc8bf00eda34413"/><file name="Data.php" hash="5108935421d26c45a63676b6b97f3044"/><file name="Debug.php" hash="c563d343c68db980e9256dc510e78ea1"/><file name="Export.php" hash="e48e0b03c1da11fab1c6d74648b4e014"/><file name="Rewrite.php" hash="30921c0924e535d669ecdd7e9592f883"/><file name="Search.php" hash="fd1e90271d620c57a0cb7b80e33f536f"/></dir><dir name="Model"><file name="Autoloader.php" hash="29370ccbcd483f93be86999485889900"/><dir name="CatalogSearch"><file name="Layer.php" hash="8d15e27cca249cd3827d33e9acdbb369"/><file name="Query.php" hash="4f5b732eb28a7c1efde28eb602c38772"/></dir><dir name="Export"><file name="Observer.php" hash="03a94f73f89b923c374a2663b03e3497"/><file name="Price.php" hash="1128559eb16cf0d562ad22af9ccdd1a4"/><file name="Product.php" hash="13fe01bed2105dd1eddaa886c621a2bc"/><file name="Stock.php" hash="d6531c28c572968ab82d3282eda9b29a"/></dir><file name="Facade.php" hash="1b66c3bfea09a60611b232f36ac4ba60"/><file name="File.php" hash="77cc3d2067b42c2cad6f21dcb6d7a73e"/><file name="Ftp.php" hash="d70cfab0ce607aca6efa32d82d3a85c3"/><dir name="Handler"><file name="Abstract.php" hash="1924821d13996f9f672369b63a05ac08"/><file name="Search.php" hash="63a9a4b197027654c5328f37245d7add"/><file name="Status.php" hash="635b9cb62808803be64d373dc2a0e808"/></dir><file name="Observer.php" hash="e5decfa3b52571cb75335dd41b1927f5"/><dir name="Resource"><file name="Fulltext.php" hash="dfbece11e5fe8224c94d1e1bb7affe3e"/><dir name="Search"><file name="Collection.php" hash="50596cf9508d0d96a4bb315a50f35984"/><file name="Engine.php" hash="602547a2d224f80933b6681db1cb3cc4"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Attributes.php" hash="d877a4da13c592f5b8260b202bcead13"/><file name="Cron.php" hash="f24b6995fea6309acb720876f3156270"/><file name="Enabled.php" hash="cb13a29b7100518350a7e5830180e9bd"/><file name="Engine.php" hash="ef1f702d79c7ed0fe72437ca4bf13a19"/></dir><dir name="Source"><file name="Authtype.php" hash="7ce07da0f6bcb8e88b5699ace77e6f31"/><file name="Engine.php" hash="8f1c2f344aa3182c312a665488661fa5"/><file name="Identifier.php" hash="a80606fe94b2eaf78f8d07628f2a64f0"/><file name="Protocol.php" hash="310b7fd8648b60f5cc9c3e3c9f87345c"/></dir></dir></dir><file name="Url.php" hash="57e5e87457b3051cec9bc3c988f79282"/></dir><dir name="controllers"><file name="ExportController.php" hash="4e0800619796d128a9466c84fecd3b56"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0247e1b846aefb3fb9c5c0706681a586"/><file name="config.xml" hash="471974367bce221b6795be5f4015a6e9"/><file name="system.xml" hash="66c43a66c412e296809d8c77cafb7b51"/></dir></dir><dir name="Recommendation"><dir name="Helper"><file name="Data.php" hash="a09697fa784bfd2fe23f6b4fbd9f3e84"/></dir><dir name="Model"><file name="Facade.php" hash="ed9c246bc831c7f3950a88853d401288"/><dir name="Handler"><file name="Recommendations.php" hash="f5645b78a6dca466af5b22ff0456ca71"/></dir><file name="Observer.php" hash="4db52b3863efccd17b19e92e6ff2521e"/></dir><dir name="etc"><file name="config.xml" hash="03ec96e0fa78fdfbc3d4d5fac7193704"/><file name="system.xml" hash="f841228bf8a5397fe18da6186c5e3208"/></dir></dir><dir name="Suggest"><dir name="Block"><file name="TopSearch.php" hash="96fc7e73d907a0438111253ae6c5fc6f"/><dir name="XmlConnect"><dir name="Catalog"><dir name="Search"><file name="Suggest.php" hash="150658cb1d7bc7ae5b4566ed1331bb12"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="b62d7dbfc30329545823b8988a78f20a"/></dir><dir name="Model"><file name="Facade.php" hash="254f13fa4cbbe9602ae40c5cd124282e"/><dir name="Handler"><file name="Suggest.php" hash="948fd13668d507ba4ebed7c9a2055be4"/></dir><file name="Observer.php" hash="f23771ea8bd4d679a90282714275aeb7"/><file name="Processor.php" hash="f37cf3fb0c72464f1e651f34d64b44dd"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Imagetype.php" hash="a8a39dc5d44080a3b070bc72f103efef"/></dir></dir></dir></dir><dir name="controllers"><file name="ProxyController.php" hash="68fc8cee37a52a538762252e47f340a1"/></dir><dir name="etc"><file name="config.xml" hash="5e6b384d971afc4a0c6b7cc4d437badf"/><file name="system.xml" hash="10d1692d1a09edc2edb5344d41a1d9ae"/></dir></dir><dir name="Tagcloud"><dir name="Block"><file name="TagCloud.php" hash="d0c6c681b3da27ef349ff1295c5e26a9"/></dir><dir name="Helper"><file name="Data.php" hash="ea2c8093a1d87a8148f1205e8b73cc2d"/></dir><dir name="Model"><file name="Facade.php" hash="69069badc93509011f7c4fa2b1ca3e72"/><dir name="Handler"><file name="TagCloud.php" hash="e2e5ba229002ad3cfa5769a9f74d808b"/></dir></dir><dir name="etc"><file name="config.xml" hash="3ff00cc34fdbaed962f704204ce47f1a"/></dir></dir><dir name="Tracking"><dir name="Block"><file name="Abstract.php" hash="24419c96d9768b86ec890a1b38278e0f"/><file name="Click.php" hash="b85c8619ab7a18163a4ce27ffe9fd8da"/><file name="Recommendation.php" hash="0ed995b57afb6efa4a72d414dc7db3bf"/></dir><dir name="Helper"><file name="Data.php" hash="f0018ce83f815b057fab66351e58fdb6"/></dir><dir name="Model"><file name="Facade.php" hash="f8684a20a82bff4b668af460af476d41"/><dir name="Handler"><file name="Tracking.php" hash="9672d838ac3775c8a7dc4ef70593ca7e"/></dir><file name="Observer.php" hash="69e6c0236f629cb7f5b168b7ce3b6b84"/><file name="Processor.php" hash="9fd3af06f452ca2cb719d135b6ecda52"/><file name="Queue.php" hash="046d6d464d56a609b71574c6e0a3c4d1"/><dir name="Resource"><dir name="Queue"><file name="Collection.php" hash="daecedd55cb992ae3988305324c8c1b9"/></dir><file name="Queue.php" hash="3be1d09978ae6e8c56fb673931b05479"/></dir></dir><dir name="controllers"><file name="ProxyController.php" hash="33f25104bc086fcbe998459baccdd0b3"/></dir><dir name="etc"><file name="config.xml" hash="e3a33e4ca92d72192bcc0e73eb7db9a5"/><file name="system.xml" hash="3e5a4357f098832fa5e6ef67d1ceecaa"/></dir><dir name="sql"><dir name="factfinder_tracking_setup"><file name="install-1.0.0.php" hash="553ad063abd837a220ebff97618578b4"/><file name="upgrade-1.0.0-4.1.2.php" hash="a80b4f755d0bea172eefebe10b877cd6"/></dir></dir></dir></dir></target><target name="magelib"><dir name="FACTFinder"><dir name="Adapter"><file name="AbstractAdapter.php" hash="b24c565309d7d3b6363b5ab059f9b55f"/><file name="Compare.php" hash="b6452710afb4ff28509f6426c95bec74"/><file name="Import.php" hash="584eecdb7281603ba5ef901082fb52d7"/><file name="ProductCampaign.php" hash="1f05bb0b3911425e2b472cb5c76e705c"/><file name="Recommendation.php" hash="55508a24d0fa324a426bf1cbf1baf913"/><file name="Search.php" hash="29af1b0da523085c0a676331284331ae"/><file name="SimilarRecords.php" hash="2f9c9fd1751dacb1a56c432320d94c19"/><file name="Suggest.php" hash="5f91090f7c7ea764f9fc21938aade3c8"/><file name="TagCloud.php" hash="fe1faf30373e91b96e57c08fb64df23a"/><file name="Tracking.php" hash="b71446f5d1ba0e44c09ae4e7012bca55"/></dir><dir name="Core"><file name="AbstractConfiguration.php" hash="a6f7c0b9013a7986a1fa798e8fc3414c"/><file name="AbstractEncodingConverter.php" hash="7946720c77c47e3ed2070606a74a48cb"/><file name="ArrayConfiguration.php" hash="dc60873fa6eed180126944247cb4de99"/><dir name="Client"><file name="RequestParser.php" hash="bc5dabb648f7278db4a1c5f14af4dfa0"/><file name="UrlBuilder.php" hash="d73cc166fcf20b7623ea0f7c319d3224"/></dir><file name="ConfigurationInterface.php" hash="1158aaee6a7502cf81bf27b8ed0c76ff"/><file name="IConvEncodingConverter.php" hash="5c504a3229cc8a59c09f03f3bf2c9348"/><file name="ManualConfiguration.php" hash="a49d0b05cc319b807c40b37a861b060d"/><dir name="Page"><file name=".gitignore" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><file name="ParametersConverter.php" hash="9c01642c6de1842b8f1b4e8d9f93017e"/><dir name="Server"><file name="AbstractDataProvider.php" hash="8d33ddebe3d3e60b72893188d7f2369f"/><file name="ConnectionData.php" hash="c4246099ec93e7f589c0e22179d9557a"/><file name="EasyCurlDataProvider.php" hash="48f452cd3ca1dcf3b4e7cc4d8b59c8a9"/><file name="EasyCurlRequestFactory.php" hash="61f88e882120dca5e5e1964d1f898527"/><file name="FileSystemDataProvider.php" hash="30b428e2b76307b1143057a155371c34"/><file name="FileSystemRequestFactory.php" hash="f0a464725448393e64948a6063208d91"/><file name="MultiCurlDataProvider.php" hash="2e467a4976694ef4e7775d913dafedf4"/><file name="MultiCurlRequestFactory.php" hash="41f978e0dd60065026dc5adced1f9503"/><file name="NullResponse.php" hash="3a419c1ea234ef20e1330c7b445eb9c6"/><file name="Request.php" hash="08ddaaa7701558e1802408089d15b5dd"/><file name="RequestFactoryInterface.php" hash="65cfad6045407bdd63af980f6f996c99"/><file name="Response.php" hash="695c80ce5ee4e8dc38c78d0349e1f31b"/><file name="UrlBuilder.php" hash="6f468178b95a96f6217f44f9ef392cfb"/></dir><file name="Utf8EncodingConverter.php" hash="1cb05e6f174e36ed3cce6e2a7eb987ed"/><file name="XmlConfiguration.php" hash="faafd887682d6aa01f61604df24df277"/></dir><dir name="Custom"><file name=".gitignore" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><dir name="Data"><file name="AdvisorAnswer.php" hash="55ffe5c6f8e1363d1d02875feec202d1"/><file name="AdvisorQuestion.php" hash="baa784c529640f2976b22262ec6f8983"/><file name="AfterSearchNavigation.php" hash="f1d08832e73cf45b8a35d99020aa49ea"/><file name="ArticleNumberSearchStatus.php" hash="da1966d4016c32ea492b8b6b931d8222"/><file name="BreadCrumb.php" hash="84b69c8df53c6d9eb721950a29e4a84d"/><file name="BreadCrumbTrail.php" hash="324bb6a06c0058e53c58bd3f96fe0ff3"/><file name="BreadCrumbType.php" hash="c9c3568bbfa4989517ee8f3b9c779fa2"/><file name="Campaign.php" hash="23966a3bea56ac66ff2b795e11983c6a"/><file name="CampaignIterator.php" hash="503766bc960efe69e861c2f45dce77d2"/><file name="Filter.php" hash="aafda20fe7c992af46316d74be33ec73"/><file name="FilterGroup.php" hash="8820c34c807044489682a290e86466b6"/><file name="FilterSelectionType.php" hash="bd0d0676af5d0182f6b6631e6df8ecb9"/><file name="FilterStyle.php" hash="1299441866fb075e331d2f9ca2755091"/><file name="FilterType.php" hash="b073cf2f411298509337808624666687"/><file name="Item.php" hash="b91116ddeb81c0b90e76a2a4f7b51261"/><file name="Page.php" hash="35daab87fdc5e3b4732480996b982364"/><file name="Paging.php" hash="1b06374d761489582de08551f17a58a1"/><file name="Record.php" hash="cd62198f27ebbb1e0a88008642c7157a"/><file name="Result.php" hash="01b94e91b11b61d794fb9ff40d6148d3"/><file name="ResultsPerPageOptions.php" hash="ae22d184bf43cd7b11cad567489a2261"/><file name="SearchParameters.php" hash="d7041887d5f65e763c7a2e0a323b18fd"/><file name="SearchStatus.php" hash="356fd9774c237a0e26ac85a6186bccfd"/><file name="SingleWordSearchItem.php" hash="db057d7f0460f29c5b31ab9689b3906b"/><file name="SliderFilter.php" hash="344d226acde13ec85f59d5a97cf8afc5"/><file name="Sorting.php" hash="284b4811c99ad057d08caead45ea2dee"/><file name="SortingDirection.php" hash="ec86bc437928a4aa623a8c098c94f435"/><file name="SortingItem.php" hash="428e8c59a5372cafc5ec69bf868dea18"/><file name="SortingItems.php" hash="4fd36b79ed02099265103e1e81c71557"/><file name="SuggestQuery.php" hash="4011313cfd853eace88c399444ffa4cc"/><file name="TagQuery.php" hash="a4460d5e8a9f918eea820a029dc21290"/></dir><file name="Loader.php" hash="cf900585b0fd44978f97e7a2b2279a99"/><dir name="Util"><file name="Curl.php" hash="c9cbe7b2116dd6160b8db3a14b634561"/><file name="CurlHandle.php" hash="bea42fdebc33e31cf58889de18232d3e"/><file name="CurlInterface.php" hash="1858bc215b7706ba81ff6e14aa2f4750"/><file name="CurlMultiHandle.php" hash="2085a5a09c218971412a44c0dad6bf72"/><file name="CurlStub.php" hash="555c36a9a5352e1a6acfd65a68cf911b"/><file name="Log4PhpLogger.php" hash="d232fe476b310ec8692877edddc972e4"/><file name="LoggerInterface.php" hash="36dfa3ee8a089595ef285806d0068b27"/><file name="NullLogger.php" hash="51e1a2a9c89a9efba49d0a0d3ee9325d"/><file name="Parameters.php" hash="6bb6f333d55dd7bce2a0014f10edbc29"/><file name="Pimple.php" hash="fb5e70660a5fe56edfdf11bec1ba6009"/></dir></dir><dir name="FACTFinderCustom"><file name="Configuration.php" hash="93832ed3840c5899c9c761c702dec17b"/></dir><dir name="log4php"><file name="Logger.php" hash="39841035ea058cc62571fcb9b4f3aa43"/><file name="LoggerAppender.php" hash="a8b07b24ee26931cef9373163542128a"/><file name="LoggerAppenderPool.php" hash="7e44ee58fbd3c50ae51c98742aa4f327"/><file name="LoggerAutoloader.php" hash="5aa85dd61ff00167d2b9d482bf418c77"/><file name="LoggerConfigurable.php" hash="4c89cbf3c90a724930c6d46995da16bd"/><file name="LoggerConfigurator.php" hash="b8ac801c410e0515fbd5ec6b67dfb40b"/><file name="LoggerException.php" hash="c91fd8cc5bfee3cad373f8ed9440458c"/><file name="LoggerFilter.php" hash="39b6689eeb15e468781c0a62a8f482b5"/><file name="LoggerHierarchy.php" hash="be16af259ec43bef5c49bd1118e94859"/><file name="LoggerLayout.php" hash="7c089f20f7abba10699de2bd4423af7c"/><file name="LoggerLevel.php" hash="f380928eb1aac5ade3d7654f200ebb81"/><file name="LoggerLocationInfo.php" hash="33f1a195cfdcc7ebf681a3085eb6b228"/><file name="LoggerLoggingEvent.php" hash="f227e5ae0d04fef3a36899906d4ad478"/><file name="LoggerMDC.php" hash="64868651982829e59d3b316498145a79"/><file name="LoggerNDC.php" hash="482045e33b9fe22e53269c021cbfe877"/><file name="LoggerReflectionUtils.php" hash="174b22dd241ba4263aba8d978d37959f"/><file name="LoggerRoot.php" hash="0d762ed21fdff2708adab3068b94c2c3"/><file name="LoggerThrowableInformation.php" hash="76d98d20d55cf0e3bd4b1b138023c3af"/><dir name="appenders"><file name="LoggerAppenderConsole.php" hash="5eefc20589c86b11d2832f9a8fafa44f"/><file name="LoggerAppenderDailyFile.php" hash="f97b57f6b0b9dba2f650ae5e17d9f28b"/><file name="LoggerAppenderEcho.php" hash="76824ae7be6503e8c5ca3a9fc15b7816"/><file name="LoggerAppenderFile.php" hash="92481c41d6f9d3d2cf6cfc82c7c0ef22"/><file name="LoggerAppenderFirePHP.php" hash="1eccdf817ff2e0204265a5a77901f0a1"/><file name="LoggerAppenderMail.php" hash="a23d71d709af265b20797eeb0d71911e"/><file name="LoggerAppenderMailEvent.php" hash="f853e9e18511ab18873484882c744655"/><file name="LoggerAppenderMongoDB.php" hash="494b30e44a3add5eeb9c0d54ea88c29b"/><file name="LoggerAppenderNull.php" hash="ec6ca85fadc4d71f75b5e8e13df6e058"/><file name="LoggerAppenderPDO.php" hash="4388d8e542fe680228365ffd48d8ab6d"/><file name="LoggerAppenderPhp.php" hash="9853767b74b8234361ace83867c9f18d"/><file name="LoggerAppenderRollingFile.php" hash="5bc49b8f05b36842b800d699bfe05e45"/><file name="LoggerAppenderSocket.php" hash="6111536426fdf6f8a4adafb460510301"/><file name="LoggerAppenderSyslog.php" hash="afda0ccf876a87781e58d63104519bdc"/></dir><dir name="configurators"><file name="LoggerConfigurationAdapter.php" hash="b07bade9ae4809776742d3b36ca4feb7"/><file name="LoggerConfigurationAdapterINI.php" hash="bfbca46c36693f098334699c7b71b569"/><file name="LoggerConfigurationAdapterPHP.php" hash="9f9c0bd65cda5224c8e90726baebb363"/><file name="LoggerConfigurationAdapterXML.php" hash="42ec1e713dadb1c6c813df278e6c58cb"/><file name="LoggerConfiguratorDefault.php" hash="a27dd348466a605849ffa946a5fa7bdf"/></dir><dir name="filters"><file name="LoggerFilterDenyAll.php" hash="8800e84c773b87e2638d22d627baae51"/><file name="LoggerFilterLevelMatch.php" hash="2ea447c40baea629486a6b7a4f8f352d"/><file name="LoggerFilterLevelRange.php" hash="b4b6753e0d0a8d734471482bb7b4981c"/><file name="LoggerFilterStringMatch.php" hash="342113e5152ef6e9703807fa36e52785"/></dir><dir name="helpers"><file name="LoggerFormattingInfo.php" hash="89a5ed8f751e4a6a826275619266b911"/><file name="LoggerOptionConverter.php" hash="e02f5ffc3918a0352bf77121e5add1d5"/><file name="LoggerPatternParser.php" hash="a5d4dfeb2a66b022380e0e3d7ba9b318"/><file name="LoggerUtils.php" hash="90264a3263bc4e3a3dac1dbeb3cc35df"/></dir><dir name="layouts"><file name="LoggerLayoutHtml.php" hash="cf6066b51d7ac2de4accaf13f68fb442"/><file name="LoggerLayoutPattern.php" hash="10c48d2fa44953d20fcb3e3542a05ebf"/><file name="LoggerLayoutSerialized.php" hash="cef71f72176167a15c79f5cab5515a77"/><file name="LoggerLayoutSimple.php" hash="ba2aaa713c715b823c4e767a2f0b3e67"/><file name="LoggerLayoutTTCC.php" hash="1ecb0af018b78ad42f4a9d70e182f429"/><file name="LoggerLayoutXml.php" hash="b52409dbb1bacc1c7b4c5ddf66ed8afa"/></dir><dir name="pattern"><file name="LoggerPatternConverter.php" hash="fcbd56bf082b96f02fcf5b0b552de4c1"/><file name="LoggerPatternConverterClass.php" hash="e61c2f7544feee8ee9b966311471a2a7"/><file name="LoggerPatternConverterCookie.php" hash="465d359167443336f258d9b5a89095ef"/><file name="LoggerPatternConverterDate.php" hash="4a399075a3c2d7542e3c649f55162482"/><file name="LoggerPatternConverterEnvironment.php" hash="829265aa84843818bd9faf3bd42b0432"/><file name="LoggerPatternConverterFile.php" hash="a7091f0857b99db4e00c33b61df5e3d3"/><file name="LoggerPatternConverterLevel.php" hash="6219dcb0d8630e6f69cbf4ba669fd11f"/><file name="LoggerPatternConverterLine.php" hash="a27bf38b5c6453a9925d365bde65fe47"/><file name="LoggerPatternConverterLiteral.php" hash="a2cd9e35ca6253cde6a467320837a767"/><file name="LoggerPatternConverterLocation.php" hash="b88efadaccdf31b25b1fb14866c106a0"/><file name="LoggerPatternConverterLogger.php" hash="4342ab32fa26cdf53308896272c2e36b"/><file name="LoggerPatternConverterMDC.php" hash="d241043bc9ea9ecdbf3a0ae5d5a42206"/><file name="LoggerPatternConverterMessage.php" hash="cad3040a1a3d1d40dc6a26727bebe19d"/><file name="LoggerPatternConverterMethod.php" hash="3208fb30a3bc0a7e0fb281800c43ecef"/><file name="LoggerPatternConverterNDC.php" hash="2e68ba79896c47c5067bbf0b371df260"/><file name="LoggerPatternConverterNewLine.php" hash="291bd541e0f689484a5596323e3cac14"/><file name="LoggerPatternConverterProcess.php" hash="7421d9b9b6a5f8f51c3a9a1c796911a5"/><file name="LoggerPatternConverterRelative.php" hash="24495b25867aac190135610061cd244d"/><file name="LoggerPatternConverterRequest.php" hash="67a484d44fd7ddc06a654995904e9653"/><file name="LoggerPatternConverterServer.php" hash="bef42f8b51bc220453e3f4b1e67e7402"/><file name="LoggerPatternConverterSession.php" hash="7cd6290d364837cd2ff4358c03022e98"/><file name="LoggerPatternConverterSessionID.php" hash="fc7b37aa3cb28fbb09862eb7edc6d042"/><file name="LoggerPatternConverterSuperglobal.php" hash="6b984fb3d26fb0186595370d0f066659"/><file name="LoggerPatternConverterThrowable.php" hash="4ca10f0f20408a30243ff589415634c9"/></dir><dir name="renderers"><file name="LoggerRenderer.php" hash="332819a947805d55c2aa546ced274f01"/><file name="LoggerRendererDefault.php" hash="4c4003cde8e0a74cc562060ca7bccf61"/><file name="LoggerRendererException.php" hash="4b2def2de9aa459bd321e826c02e31c2"/><file name="LoggerRendererMap.php" hash="b9aadee6f31f7cb38210653141b94fa6"/></dir><dir name="xml"><file name="log4php.dtd" hash="fb7e60edf02964352b7ddee1f26d8924"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="factfinder"><file name="asn.xml" hash="05ee1b7d0d34d7e43de8c115aeaab69d"/><file name="campaigns.xml" hash="d722ded27e895f0f0aa15954c46f93f3"/><file name="core.xml" hash="fe920d8ef444afbcfa2053b72bc819fc"/><file name="suggest.xml" hash="9c1a761044cd33da5e028c92ce9abe4f"/><file name="tagcloud.xml" hash="0d31f54985019d96bb1b5af17ccdf0d3"/><file name="tracking.xml" hash="53ce8afeb32391a4b207121a372162a2"/></dir></dir><dir name="template"><dir name="factfinder"><dir name="asn"><dir name="layer"><dir name="filter"><file name="slider.phtml" hash="2004f809f803e17d9739a7173958ceca"/></dir><file name="slider.phtml" hash="d48c9aace222c7525430b5235acd4026"/></dir></dir><dir name="campaigns"><file name="advisory.phtml" hash="3341ee58f81da41020f85c2145048b8b"/><file name="feedback.phtml" hash="4c1868f038a13bd2ca270b7d9a077452"/><file name="pushed.phtml" hash="b76b7c5b064ee6dc86ccc94a363bdb05"/></dir><dir name="core"><dir name="export"><file name="locked.phtml" hash="f0948f48fcc40dfcb21a8da68ce29425"/><file name="nofile.phtml" hash="c304b037812f4c34d7e094fe3b70cd80"/></dir></dir><dir name="suggest"><file name="advancedsuggest.phtml" hash="d94fe357abf9ae7026769e62a3cd9ba9"/></dir><dir name="tracking"><file name="click.phtml" hash="3e545af810a201db7c76c0502f606308"/><file name="recommendation.phtml" hash="02dba2d0cc5e1608682a700916a963d8"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="."><file name="factfinder.xml" hash="f87803fd5c96fc784baff992c2bce96b"/></dir><dir name="modules"><file name="FACTFinder_Asn.xml" hash="a003a8010c577c396c8e2ee5b1ea4417"/><file name="FACTFinder_Campaigns.xml" hash="ccd3080cf57535193a6fe2e6946640fd"/><file name="FACTFinder_Core.xml" hash="80f5142c2acf5ceeca0fd552ddb7ce4c"/><file name="FACTFinder_Recommendation.xml" hash="9742344545ee435a4dc87eb2bb80bf19"/><file name="FACTFinder_Suggest.xml" hash="882806b936029f0ef04d4719542ecea3"/><file name="FACTFinder_Tagcloud.xml" hash="62d3ccec2191e7dfd8225e02912891d2"/><file name="FACTFinder_Tracking.xml" hash="779b734bdcafabab072a1afd9d0bf7c4"/></dir></target><target name="mage"><dir name="shell"><file name="factfinder.php" hash="f5d0ef5e78c29b1e700c822d2c2d491c"/></dir></target><target name="mageweb"><dir name="js"><dir name="factfinder"><file name="jXHR.js" hash="a62424da9902b49a76659683121618d0"/><file name="suggest.js" hash="fcae24ad674632753fc4e14e1c4d6d6c"/><file name="tracking.js" hash="f22da039733a2c67254d41cfa5e6ea9b"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="factfinder_onetouchslider"><file name="234A0ACCECB3C19247FA8B7920453761.cache.js" hash="df488d926e6054769d4731148e707b58"/><file name="25E490B929D7CDBF44085E4E4D9D6F78.cache.js" hash="2a017b95cfbd8653a222660b60697419"/><file name="53ABFAE8983A4589B497F48695DB2A7C.cache.js" hash="b6b02347438384cc886b2509426826b5"/><file name="75B23D057185BAB61CFE100CE08C4D84.cache.js" hash="ec9c94e05e64372a9636ef03e688d451"/><file name="79DD9AE9135ADFDE204324DA7F1B1405.cache.png" hash="6ba720deee377e093c5f5b0423c152df"/><file name="9F0D0456482D7A7A901A2CD8F64EA019.cache.js" hash="dad64db53266865af02c620795c6ab13"/><file name="clear.cache.gif" hash="6d22e4f2d2057c6e8d6fab098e76e80f"/><file name="de.factfinder.asn.slider.OneTouchSlider.nocache.js" hash="f92d47fc9eb8cf8ff78173997f5a4a7a"/></dir></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.3.0</min><max>7.1.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Flagbit_Factfinder</name>
|
4 |
+
<version>4.1.10</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="https://opensource.org/licenses/MIT">MIT</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
+
<summary>4.1.10 Release</summary>
|
10 |
+
<description>4.1.10 Release</description>
|
11 |
<notes>Release</notes>
|
12 |
<authors><author><name>FACTFinder</name><user>FACT_Finder</user><email>info@flagbit.de</email></author></authors>
|
13 |
+
<date>2016-09-02</date>
|
14 |
+
<time>13:09:08</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="FACTFinder"><dir name="Asn"><dir name="Block"><dir name="Catalog"><dir name="Layer"><file name="Factfinder.php" hash="0e79d252a2752aab67f7490436350fe7"/><file name="State.php" hash="2bf2c99237e881372fdc074c3505d188"/></dir><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="9b0c98e266174c8f8b02b896a556b769"/></dir><file name="Pager.php" hash="ec87967ba312a3d589e0af0afbacdd0a"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="668be3edd4c8f6d0e051252d2e52d545"/></dir><dir name="Model"><dir name="Catalog"><file name="Layer.php" hash="6dafe882395b5d09f84c102f3b785410"/></dir><dir name="Handler"><file name="Search.php" hash="bbec7bd87e1d2f15792fdda46f34eb52"/></dir><dir name="Layer"><dir name="Filter"><file name="Factfinder.php" hash="2666ae9c79aa939e9539a1af5b0f7784"/><file name="Item.php" hash="a68545b4cb4487691ae75cdbf47af377"/></dir></dir><file name="Observer.php" hash="9ec46432b3d3170b626cfb4439315209"/><dir name="Resource"><dir name="Product"><dir name="Attribute"><file name="Collection.php" hash="03b060fd637de1fd632f1b9784b1124c"/></dir></dir><dir name="Search"><file name="Collection.php" hash="3e7a88eb53ccfb79b4448f9eb7bd4177"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="e07b890b06b00d94bc4a4a5931325366"/><file name="system.xml" hash="d76e04ebe1d564be4113c1428fdfc637"/></dir></dir><dir name="Campaigns"><dir name="Block"><file name="Abstract.php" hash="cc5e41bb89f07f191be99430451221fa"/><dir name="Advisory"><file name="Search.php" hash="1d4bf82a7baffbe64be17216436c35d4"/></dir><dir name="Feedback"><file name="Abstract.php" hash="018e415bdd754127cfad8bfa5881c0ce"/><file name="Cart.php" hash="35f9fec2518383c909495af90b324b8b"/><file name="Product.php" hash="82999021756a26d81bf829b9aa4dd5cc"/><file name="Search.php" hash="ebf3d35f6425b771291b08f696169d04"/></dir><dir name="Pushed"><file name="Abstract.php" hash="fbfbf5cb5c1ebce8e588ac7af1f1458d"/><file name="Cart.php" hash="741d3bd71ce91cd583778a5e26be9ff5"/><file name="Product.php" hash="c1e774c4ceb71469080e49557887a893"/><file name="Search.php" hash="ae352cfd5ca8bdf2a0b46d1148c710ae"/></dir></dir><dir name="Helper"><file name="Data.php" hash="c7882a90dca46e639a5e4c64bef153ff"/></dir><dir name="Model"><file name="Facade.php" hash="44fc55139509b76f19b7c95c6a81eb4c"/><dir name="Handler"><file name="Abstract.php" hash="e6d76eeb23fb5bef16efbfa3da0fecdc"/><file name="Cart.php" hash="128dd5052d20384ea2220020469f7cf6"/><file name="Product.php" hash="8d48380fbccec220bc4caabbcb5d7d7d"/><file name="Search.php" hash="e039a207ca98655c647355ebf287566d"/></dir><file name="Observer.php" hash="043e7411be7ec13a656b07750a7811af"/><dir name="Resource"><dir name="Pushedproducts"><file name="Collection.php" hash="569856158dee935d611ebc30f426835c"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="8f6b7cec7cff39b149beeffb39764668"/><file name="system.xml" hash="54992bb35ac6088733d3f18408872fdb"/></dir></dir><dir name="Core"><dir name="Block"><dir name="Adminhtml"><file name="Exportlink.php" hash="7a845ee8974cfcf74d9a32fed2ac0b21"/><dir name="Form"><dir name="Field"><file name="Attribute.php" hash="bea2183e56100233e7aebaccd6680c6f"/><file name="Attributes.php" hash="292742f954dec1863caaee9313a237c9"/></dir></dir></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="b9438ae943def50b46531ac1265e0634"/></dir><file name="Pager.php" hash="aa301fb57966bafcc370fa510d2ad146"/></dir></dir><dir name="CatalogSearch"><file name="Layer.php" hash="ad3dcdd26b5a723e43c7b8011a4ea25f"/></dir><dir name="EnterpriseSearch"><file name="Layer.php" hash="19455e36be3e0c14cabba762ccbdef1a"/></dir></dir><dir name="Helper"><file name="Backend.php" hash="f30c89ca668b193a8fc8bf00eda34413"/><file name="Data.php" hash="5108935421d26c45a63676b6b97f3044"/><file name="Debug.php" hash="c563d343c68db980e9256dc510e78ea1"/><file name="Export.php" hash="5b84cbf3c114593cd691e192f2ece920"/><file name="Rewrite.php" hash="30921c0924e535d669ecdd7e9592f883"/><file name="Search.php" hash="fd1e90271d620c57a0cb7b80e33f536f"/></dir><dir name="Model"><file name="Autoloader.php" hash="29370ccbcd483f93be86999485889900"/><dir name="CatalogSearch"><file name="Layer.php" hash="8d15e27cca249cd3827d33e9acdbb369"/><file name="Query.php" hash="4f5b732eb28a7c1efde28eb602c38772"/></dir><dir name="Export"><file name="Observer.php" hash="03a94f73f89b923c374a2663b03e3497"/><file name="Price.php" hash="1128559eb16cf0d562ad22af9ccdd1a4"/><file name="Product.php" hash="efddf1144d043892d1cf0fa46e8fb294"/><file name="Stock.php" hash="d6531c28c572968ab82d3282eda9b29a"/></dir><file name="Facade.php" hash="b2fd0c05a687db4c784111ecb4da9ef8"/><file name="File.php" hash="77cc3d2067b42c2cad6f21dcb6d7a73e"/><file name="Ftp.php" hash="d70cfab0ce607aca6efa32d82d3a85c3"/><dir name="Handler"><file name="Abstract.php" hash="1924821d13996f9f672369b63a05ac08"/><file name="Search.php" hash="31e58f2022169272740ad0d79674d0d8"/><file name="Status.php" hash="635b9cb62808803be64d373dc2a0e808"/></dir><file name="Observer.php" hash="e5decfa3b52571cb75335dd41b1927f5"/><dir name="Resource"><file name="Export.php" hash="b0db501cd527c64278519796cf8f39f1"/><file name="Fulltext.php" hash="dfbece11e5fe8224c94d1e1bb7affe3e"/><dir name="Search"><file name="Collection.php" hash="50596cf9508d0d96a4bb315a50f35984"/><file name="Engine.php" hash="602547a2d224f80933b6681db1cb3cc4"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Attributes.php" hash="d877a4da13c592f5b8260b202bcead13"/><file name="Cron.php" hash="f24b6995fea6309acb720876f3156270"/><file name="Enabled.php" hash="cb13a29b7100518350a7e5830180e9bd"/><file name="Engine.php" hash="ef1f702d79c7ed0fe72437ca4bf13a19"/></dir><dir name="Source"><file name="Authtype.php" hash="7ce07da0f6bcb8e88b5699ace77e6f31"/><file name="Engine.php" hash="8f1c2f344aa3182c312a665488661fa5"/><file name="Identifier.php" hash="a80606fe94b2eaf78f8d07628f2a64f0"/><file name="Protocol.php" hash="310b7fd8648b60f5cc9c3e3c9f87345c"/></dir></dir></dir><file name="Url.php" hash="57e5e87457b3051cec9bc3c988f79282"/></dir><dir name="controllers"><file name="ExportController.php" hash="4e0800619796d128a9466c84fecd3b56"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0247e1b846aefb3fb9c5c0706681a586"/><file name="config.xml" hash="471974367bce221b6795be5f4015a6e9"/><file name="system.xml" hash="8722773df22bda2a415e2cb3f87ee2f1"/></dir></dir><dir name="Recommendation"><dir name="Helper"><file name="Data.php" hash="6312dfdef17070694f59139acbb2d5e1"/></dir><dir name="Model"><file name="Facade.php" hash="ed9c246bc831c7f3950a88853d401288"/><dir name="Handler"><file name="Recommendations.php" hash="f5645b78a6dca466af5b22ff0456ca71"/></dir><file name="Observer.php" hash="4db52b3863efccd17b19e92e6ff2521e"/></dir><dir name="etc"><file name="config.xml" hash="03ec96e0fa78fdfbc3d4d5fac7193704"/><file name="system.xml" hash="f841228bf8a5397fe18da6186c5e3208"/></dir></dir><dir name="Suggest"><dir name="Block"><file name="TopSearch.php" hash="96fc7e73d907a0438111253ae6c5fc6f"/><dir name="XmlConnect"><dir name="Catalog"><dir name="Search"><file name="Suggest.php" hash="150658cb1d7bc7ae5b4566ed1331bb12"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="1d9e6e162f27abc911a1e19d02ea86a3"/></dir><dir name="Model"><file name="Facade.php" hash="254f13fa4cbbe9602ae40c5cd124282e"/><dir name="Handler"><file name="Suggest.php" hash="948fd13668d507ba4ebed7c9a2055be4"/></dir><file name="Observer.php" hash="f23771ea8bd4d679a90282714275aeb7"/><file name="Processor.php" hash="f37cf3fb0c72464f1e651f34d64b44dd"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Imagetype.php" hash="a8a39dc5d44080a3b070bc72f103efef"/></dir></dir></dir></dir><dir name="controllers"><file name="ProxyController.php" hash="68fc8cee37a52a538762252e47f340a1"/></dir><dir name="etc"><file name="config.xml" hash="5e6b384d971afc4a0c6b7cc4d437badf"/><file name="system.xml" hash="10d1692d1a09edc2edb5344d41a1d9ae"/></dir></dir><dir name="Tagcloud"><dir name="Block"><file name="TagCloud.php" hash="d0c6c681b3da27ef349ff1295c5e26a9"/></dir><dir name="Helper"><file name="Data.php" hash="ea2c8093a1d87a8148f1205e8b73cc2d"/></dir><dir name="Model"><file name="Facade.php" hash="69069badc93509011f7c4fa2b1ca3e72"/><dir name="Handler"><file name="TagCloud.php" hash="e2e5ba229002ad3cfa5769a9f74d808b"/></dir></dir><dir name="etc"><file name="config.xml" hash="3ff00cc34fdbaed962f704204ce47f1a"/></dir></dir><dir name="Tracking"><dir name="Block"><file name="Abstract.php" hash="24419c96d9768b86ec890a1b38278e0f"/><file name="Click.php" hash="9fe6720543830930d97d7eb16f7fb489"/><file name="Recommendation.php" hash="0ed995b57afb6efa4a72d414dc7db3bf"/></dir><dir name="Helper"><file name="Data.php" hash="f0018ce83f815b057fab66351e58fdb6"/></dir><dir name="Model"><file name="Facade.php" hash="f8684a20a82bff4b668af460af476d41"/><dir name="Handler"><file name="Tracking.php" hash="9672d838ac3775c8a7dc4ef70593ca7e"/></dir><file name="Observer.php" hash="69e6c0236f629cb7f5b168b7ce3b6b84"/><file name="Processor.php" hash="9fd3af06f452ca2cb719d135b6ecda52"/><file name="Queue.php" hash="046d6d464d56a609b71574c6e0a3c4d1"/><dir name="Resource"><dir name="Queue"><file name="Collection.php" hash="daecedd55cb992ae3988305324c8c1b9"/></dir><file name="Queue.php" hash="3be1d09978ae6e8c56fb673931b05479"/></dir></dir><dir name="controllers"><file name="ProxyController.php" hash="33f25104bc086fcbe998459baccdd0b3"/></dir><dir name="etc"><file name="config.xml" hash="e3a33e4ca92d72192bcc0e73eb7db9a5"/><file name="system.xml" hash="3e5a4357f098832fa5e6ef67d1ceecaa"/></dir><dir name="sql"><dir name="factfinder_tracking_setup"><file name="install-1.0.0.php" hash="553ad063abd837a220ebff97618578b4"/><file name="upgrade-1.0.0-4.1.2.php" hash="a80b4f755d0bea172eefebe10b877cd6"/></dir></dir></dir></dir></target><target name="magelib"><dir name="FACTFinder"><dir name="Adapter"><file name="AbstractAdapter.php" hash="91eae466a803590699160600c430eab6"/><file name="Compare.php" hash="6b7cbae461ef45587c565affadbf8664"/><file name="ConfigurableResponse.php" hash="8ffa7eaa12d448a7bd4a9bba9975c573"/><file name="Import.php" hash="584eecdb7281603ba5ef901082fb52d7"/><file name="PersonalisedResponse.php" hash="6b62c326d25e123f686baa358a1b258b"/><file name="ProductCampaign.php" hash="945181a15218fd90721d3258eaf2fd17"/><file name="Recommendation.php" hash="0bcc4ccce41f40d343ebe19c901bea69"/><file name="Search.php" hash="202f3e5d444edb8be0b4e187bd98ea78"/><file name="SimilarRecords.php" hash="b80691760f993d2a43cbe2eb933090fe"/><file name="Suggest.php" hash="5f91090f7c7ea764f9fc21938aade3c8"/><file name="TagCloud.php" hash="fe1faf30373e91b96e57c08fb64df23a"/><file name="Tracking.php" hash="18948f9db1782730258a0e83f6f517b9"/></dir><dir name="Core"><file name="AbstractConfiguration.php" hash="d9341f7f13615a8a0c2805b2021cdfc8"/><file name="AbstractEncodingConverter.php" hash="7946720c77c47e3ed2070606a74a48cb"/><file name="ArrayConfiguration.php" hash="dc60873fa6eed180126944247cb4de99"/><dir name="Client"><file name="RequestParser.php" hash="bc5dabb648f7278db4a1c5f14af4dfa0"/><file name="UrlBuilder.php" hash="d73cc166fcf20b7623ea0f7c319d3224"/></dir><file name="ConfigurationInterface.php" hash="1158aaee6a7502cf81bf27b8ed0c76ff"/><file name="IConvEncodingConverter.php" hash="5c504a3229cc8a59c09f03f3bf2c9348"/><file name="ManualConfiguration.php" hash="a49d0b05cc319b807c40b37a861b060d"/><dir name="Page"><file name=".gitignore" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><file name="ParametersConverter.php" hash="9c01642c6de1842b8f1b4e8d9f93017e"/><dir name="Server"><file name="AbstractDataProvider.php" hash="8d33ddebe3d3e60b72893188d7f2369f"/><file name="ConnectionData.php" hash="c4246099ec93e7f589c0e22179d9557a"/><file name="EasyCurlDataProvider.php" hash="48f452cd3ca1dcf3b4e7cc4d8b59c8a9"/><file name="EasyCurlRequestFactory.php" hash="61f88e882120dca5e5e1964d1f898527"/><file name="FileSystemDataProvider.php" hash="30b428e2b76307b1143057a155371c34"/><file name="FileSystemRequestFactory.php" hash="f0a464725448393e64948a6063208d91"/><file name="MultiCurlDataProvider.php" hash="2e467a4976694ef4e7775d913dafedf4"/><file name="MultiCurlRequestFactory.php" hash="41f978e0dd60065026dc5adced1f9503"/><file name="NullResponse.php" hash="3a419c1ea234ef20e1330c7b445eb9c6"/><file name="Request.php" hash="08ddaaa7701558e1802408089d15b5dd"/><file name="RequestFactoryInterface.php" hash="65cfad6045407bdd63af980f6f996c99"/><file name="Response.php" hash="695c80ce5ee4e8dc38c78d0349e1f31b"/><file name="UrlBuilder.php" hash="6f468178b95a96f6217f44f9ef392cfb"/></dir><file name="Utf8EncodingConverter.php" hash="1cb05e6f174e36ed3cce6e2a7eb987ed"/><file name="XmlConfiguration.php" hash="faafd887682d6aa01f61604df24df277"/></dir><dir name="Custom"><file name=".gitignore" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><dir name="Data"><file name="AdvisorAnswer.php" hash="55ffe5c6f8e1363d1d02875feec202d1"/><file name="AdvisorQuestion.php" hash="baa784c529640f2976b22262ec6f8983"/><file name="AfterSearchNavigation.php" hash="f1d08832e73cf45b8a35d99020aa49ea"/><file name="ArticleNumberSearchStatus.php" hash="da1966d4016c32ea492b8b6b931d8222"/><file name="BreadCrumb.php" hash="84b69c8df53c6d9eb721950a29e4a84d"/><file name="BreadCrumbTrail.php" hash="324bb6a06c0058e53c58bd3f96fe0ff3"/><file name="BreadCrumbType.php" hash="c9c3568bbfa4989517ee8f3b9c779fa2"/><file name="Campaign.php" hash="23966a3bea56ac66ff2b795e11983c6a"/><file name="CampaignIterator.php" hash="503766bc960efe69e861c2f45dce77d2"/><file name="Filter.php" hash="aafda20fe7c992af46316d74be33ec73"/><file name="FilterGroup.php" hash="8820c34c807044489682a290e86466b6"/><file name="FilterSelectionType.php" hash="bd0d0676af5d0182f6b6631e6df8ecb9"/><file name="FilterStyle.php" hash="1299441866fb075e331d2f9ca2755091"/><file name="FilterType.php" hash="b073cf2f411298509337808624666687"/><file name="Item.php" hash="b91116ddeb81c0b90e76a2a4f7b51261"/><file name="Page.php" hash="35daab87fdc5e3b4732480996b982364"/><file name="Paging.php" hash="1b06374d761489582de08551f17a58a1"/><file name="Record.php" hash="cd62198f27ebbb1e0a88008642c7157a"/><file name="Result.php" hash="01b94e91b11b61d794fb9ff40d6148d3"/><file name="ResultsPerPageOptions.php" hash="ae22d184bf43cd7b11cad567489a2261"/><file name="SearchParameters.php" hash="e8e1f9d24396f864f0367c9c6d575a37"/><file name="SearchStatus.php" hash="356fd9774c237a0e26ac85a6186bccfd"/><file name="SingleWordSearchItem.php" hash="db057d7f0460f29c5b31ab9689b3906b"/><file name="SliderFilter.php" hash="344d226acde13ec85f59d5a97cf8afc5"/><file name="Sorting.php" hash="284b4811c99ad057d08caead45ea2dee"/><file name="SortingDirection.php" hash="ec86bc437928a4aa623a8c098c94f435"/><file name="SortingItem.php" hash="428e8c59a5372cafc5ec69bf868dea18"/><file name="SortingItems.php" hash="4fd36b79ed02099265103e1e81c71557"/><file name="SuggestQuery.php" hash="4011313cfd853eace88c399444ffa4cc"/><file name="TagQuery.php" hash="a4460d5e8a9f918eea820a029dc21290"/></dir><file name="Loader.php" hash="cf900585b0fd44978f97e7a2b2279a99"/><dir name="Util"><file name="Curl.php" hash="c9cbe7b2116dd6160b8db3a14b634561"/><file name="CurlHandle.php" hash="bea42fdebc33e31cf58889de18232d3e"/><file name="CurlInterface.php" hash="1858bc215b7706ba81ff6e14aa2f4750"/><file name="CurlMultiHandle.php" hash="2085a5a09c218971412a44c0dad6bf72"/><file name="CurlStub.php" hash="555c36a9a5352e1a6acfd65a68cf911b"/><file name="Log4PhpLogger.php" hash="d232fe476b310ec8692877edddc972e4"/><file name="LoggerInterface.php" hash="36dfa3ee8a089595ef285806d0068b27"/><file name="NullLogger.php" hash="51e1a2a9c89a9efba49d0a0d3ee9325d"/><file name="Parameters.php" hash="6bb6f333d55dd7bce2a0014f10edbc29"/><file name="Pimple.php" hash="fb5e70660a5fe56edfdf11bec1ba6009"/></dir></dir><dir name="FACTFinderCustom"><file name="Configuration.php" hash="93832ed3840c5899c9c761c702dec17b"/></dir><dir name="log4php"><file name="Logger.php" hash="39841035ea058cc62571fcb9b4f3aa43"/><file name="LoggerAppender.php" hash="a8b07b24ee26931cef9373163542128a"/><file name="LoggerAppenderPool.php" hash="7e44ee58fbd3c50ae51c98742aa4f327"/><file name="LoggerAutoloader.php" hash="5aa85dd61ff00167d2b9d482bf418c77"/><file name="LoggerConfigurable.php" hash="4c89cbf3c90a724930c6d46995da16bd"/><file name="LoggerConfigurator.php" hash="b8ac801c410e0515fbd5ec6b67dfb40b"/><file name="LoggerException.php" hash="c91fd8cc5bfee3cad373f8ed9440458c"/><file name="LoggerFilter.php" hash="39b6689eeb15e468781c0a62a8f482b5"/><file name="LoggerHierarchy.php" hash="be16af259ec43bef5c49bd1118e94859"/><file name="LoggerLayout.php" hash="7c089f20f7abba10699de2bd4423af7c"/><file name="LoggerLevel.php" hash="f380928eb1aac5ade3d7654f200ebb81"/><file name="LoggerLocationInfo.php" hash="33f1a195cfdcc7ebf681a3085eb6b228"/><file name="LoggerLoggingEvent.php" hash="f227e5ae0d04fef3a36899906d4ad478"/><file name="LoggerMDC.php" hash="64868651982829e59d3b316498145a79"/><file name="LoggerNDC.php" hash="482045e33b9fe22e53269c021cbfe877"/><file name="LoggerReflectionUtils.php" hash="174b22dd241ba4263aba8d978d37959f"/><file name="LoggerRoot.php" hash="0d762ed21fdff2708adab3068b94c2c3"/><file name="LoggerThrowableInformation.php" hash="76d98d20d55cf0e3bd4b1b138023c3af"/><dir name="appenders"><file name="LoggerAppenderConsole.php" hash="5eefc20589c86b11d2832f9a8fafa44f"/><file name="LoggerAppenderDailyFile.php" hash="f97b57f6b0b9dba2f650ae5e17d9f28b"/><file name="LoggerAppenderEcho.php" hash="76824ae7be6503e8c5ca3a9fc15b7816"/><file name="LoggerAppenderFile.php" hash="92481c41d6f9d3d2cf6cfc82c7c0ef22"/><file name="LoggerAppenderFirePHP.php" hash="1eccdf817ff2e0204265a5a77901f0a1"/><file name="LoggerAppenderMail.php" hash="a23d71d709af265b20797eeb0d71911e"/><file name="LoggerAppenderMailEvent.php" hash="f853e9e18511ab18873484882c744655"/><file name="LoggerAppenderMongoDB.php" hash="494b30e44a3add5eeb9c0d54ea88c29b"/><file name="LoggerAppenderNull.php" hash="ec6ca85fadc4d71f75b5e8e13df6e058"/><file name="LoggerAppenderPDO.php" hash="4388d8e542fe680228365ffd48d8ab6d"/><file name="LoggerAppenderPhp.php" hash="9853767b74b8234361ace83867c9f18d"/><file name="LoggerAppenderRollingFile.php" hash="5bc49b8f05b36842b800d699bfe05e45"/><file name="LoggerAppenderSocket.php" hash="6111536426fdf6f8a4adafb460510301"/><file name="LoggerAppenderSyslog.php" hash="afda0ccf876a87781e58d63104519bdc"/></dir><dir name="configurators"><file name="LoggerConfigurationAdapter.php" hash="b07bade9ae4809776742d3b36ca4feb7"/><file name="LoggerConfigurationAdapterINI.php" hash="bfbca46c36693f098334699c7b71b569"/><file name="LoggerConfigurationAdapterPHP.php" hash="9f9c0bd65cda5224c8e90726baebb363"/><file name="LoggerConfigurationAdapterXML.php" hash="42ec1e713dadb1c6c813df278e6c58cb"/><file name="LoggerConfiguratorDefault.php" hash="a27dd348466a605849ffa946a5fa7bdf"/></dir><dir name="filters"><file name="LoggerFilterDenyAll.php" hash="8800e84c773b87e2638d22d627baae51"/><file name="LoggerFilterLevelMatch.php" hash="2ea447c40baea629486a6b7a4f8f352d"/><file name="LoggerFilterLevelRange.php" hash="b4b6753e0d0a8d734471482bb7b4981c"/><file name="LoggerFilterStringMatch.php" hash="342113e5152ef6e9703807fa36e52785"/></dir><dir name="helpers"><file name="LoggerFormattingInfo.php" hash="89a5ed8f751e4a6a826275619266b911"/><file name="LoggerOptionConverter.php" hash="e02f5ffc3918a0352bf77121e5add1d5"/><file name="LoggerPatternParser.php" hash="a5d4dfeb2a66b022380e0e3d7ba9b318"/><file name="LoggerUtils.php" hash="90264a3263bc4e3a3dac1dbeb3cc35df"/></dir><dir name="layouts"><file name="LoggerLayoutHtml.php" hash="cf6066b51d7ac2de4accaf13f68fb442"/><file name="LoggerLayoutPattern.php" hash="10c48d2fa44953d20fcb3e3542a05ebf"/><file name="LoggerLayoutSerialized.php" hash="cef71f72176167a15c79f5cab5515a77"/><file name="LoggerLayoutSimple.php" hash="ba2aaa713c715b823c4e767a2f0b3e67"/><file name="LoggerLayoutTTCC.php" hash="1ecb0af018b78ad42f4a9d70e182f429"/><file name="LoggerLayoutXml.php" hash="b52409dbb1bacc1c7b4c5ddf66ed8afa"/></dir><dir name="pattern"><file name="LoggerPatternConverter.php" hash="fcbd56bf082b96f02fcf5b0b552de4c1"/><file name="LoggerPatternConverterClass.php" hash="e61c2f7544feee8ee9b966311471a2a7"/><file name="LoggerPatternConverterCookie.php" hash="465d359167443336f258d9b5a89095ef"/><file name="LoggerPatternConverterDate.php" hash="4a399075a3c2d7542e3c649f55162482"/><file name="LoggerPatternConverterEnvironment.php" hash="829265aa84843818bd9faf3bd42b0432"/><file name="LoggerPatternConverterFile.php" hash="a7091f0857b99db4e00c33b61df5e3d3"/><file name="LoggerPatternConverterLevel.php" hash="6219dcb0d8630e6f69cbf4ba669fd11f"/><file name="LoggerPatternConverterLine.php" hash="a27bf38b5c6453a9925d365bde65fe47"/><file name="LoggerPatternConverterLiteral.php" hash="a2cd9e35ca6253cde6a467320837a767"/><file name="LoggerPatternConverterLocation.php" hash="b88efadaccdf31b25b1fb14866c106a0"/><file name="LoggerPatternConverterLogger.php" hash="4342ab32fa26cdf53308896272c2e36b"/><file name="LoggerPatternConverterMDC.php" hash="d241043bc9ea9ecdbf3a0ae5d5a42206"/><file name="LoggerPatternConverterMessage.php" hash="cad3040a1a3d1d40dc6a26727bebe19d"/><file name="LoggerPatternConverterMethod.php" hash="3208fb30a3bc0a7e0fb281800c43ecef"/><file name="LoggerPatternConverterNDC.php" hash="2e68ba79896c47c5067bbf0b371df260"/><file name="LoggerPatternConverterNewLine.php" hash="291bd541e0f689484a5596323e3cac14"/><file name="LoggerPatternConverterProcess.php" hash="7421d9b9b6a5f8f51c3a9a1c796911a5"/><file name="LoggerPatternConverterRelative.php" hash="24495b25867aac190135610061cd244d"/><file name="LoggerPatternConverterRequest.php" hash="67a484d44fd7ddc06a654995904e9653"/><file name="LoggerPatternConverterServer.php" hash="bef42f8b51bc220453e3f4b1e67e7402"/><file name="LoggerPatternConverterSession.php" hash="7cd6290d364837cd2ff4358c03022e98"/><file name="LoggerPatternConverterSessionID.php" hash="fc7b37aa3cb28fbb09862eb7edc6d042"/><file name="LoggerPatternConverterSuperglobal.php" hash="6b984fb3d26fb0186595370d0f066659"/><file name="LoggerPatternConverterThrowable.php" hash="4ca10f0f20408a30243ff589415634c9"/></dir><dir name="renderers"><file name="LoggerRenderer.php" hash="332819a947805d55c2aa546ced274f01"/><file name="LoggerRendererDefault.php" hash="4c4003cde8e0a74cc562060ca7bccf61"/><file name="LoggerRendererException.php" hash="4b2def2de9aa459bd321e826c02e31c2"/><file name="LoggerRendererMap.php" hash="b9aadee6f31f7cb38210653141b94fa6"/></dir><dir name="xml"><file name="log4php.dtd" hash="fb7e60edf02964352b7ddee1f26d8924"/></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="factfinder"><file name="asn.xml" hash="05ee1b7d0d34d7e43de8c115aeaab69d"/><file name="campaigns.xml" hash="d722ded27e895f0f0aa15954c46f93f3"/><file name="core.xml" hash="fe920d8ef444afbcfa2053b72bc819fc"/><file name="suggest.xml" hash="9c1a761044cd33da5e028c92ce9abe4f"/><file name="tagcloud.xml" hash="0d31f54985019d96bb1b5af17ccdf0d3"/><file name="tracking.xml" hash="53ce8afeb32391a4b207121a372162a2"/></dir></dir><dir name="template"><dir name="factfinder"><dir name="asn"><dir name="layer"><dir name="filter"><file name="slider.phtml" hash="2004f809f803e17d9739a7173958ceca"/></dir><file name="slider.phtml" hash="d48c9aace222c7525430b5235acd4026"/></dir></dir><dir name="campaigns"><file name="advisory.phtml" hash="3341ee58f81da41020f85c2145048b8b"/><file name="feedback.phtml" hash="4c1868f038a13bd2ca270b7d9a077452"/><file name="pushed.phtml" hash="b76b7c5b064ee6dc86ccc94a363bdb05"/></dir><dir name="core"><dir name="export"><file name="locked.phtml" hash="f0948f48fcc40dfcb21a8da68ce29425"/><file name="nofile.phtml" hash="c304b037812f4c34d7e094fe3b70cd80"/></dir></dir><dir name="suggest"><file name="advancedsuggest.phtml" hash="9f74281e6e75d1d3aec83d5d7f026c17"/></dir><dir name="tracking"><file name="click.phtml" hash="3e545af810a201db7c76c0502f606308"/><file name="recommendation.phtml" hash="02dba2d0cc5e1608682a700916a963d8"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="."><file name="factfinder.xml" hash="f87803fd5c96fc784baff992c2bce96b"/></dir><dir name="modules"><file name="FACTFinder_Asn.xml" hash="a003a8010c577c396c8e2ee5b1ea4417"/><file name="FACTFinder_Campaigns.xml" hash="ccd3080cf57535193a6fe2e6946640fd"/><file name="FACTFinder_Core.xml" hash="80f5142c2acf5ceeca0fd552ddb7ce4c"/><file name="FACTFinder_Recommendation.xml" hash="9742344545ee435a4dc87eb2bb80bf19"/><file name="FACTFinder_Suggest.xml" hash="882806b936029f0ef04d4719542ecea3"/><file name="FACTFinder_Tagcloud.xml" hash="62d3ccec2191e7dfd8225e02912891d2"/><file name="FACTFinder_Tracking.xml" hash="779b734bdcafabab072a1afd9d0bf7c4"/></dir></target><target name="mage"><dir name="shell"><file name="factfinder.php" hash="f5d0ef5e78c29b1e700c822d2c2d491c"/></dir></target><target name="mageweb"><dir name="js"><dir name="factfinder"><file name="jXHR.js" hash="a62424da9902b49a76659683121618d0"/><file name="suggest.js" hash="fcae24ad674632753fc4e14e1c4d6d6c"/><file name="tracking.js" hash="f22da039733a2c67254d41cfa5e6ea9b"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="factfinder_onetouchslider"><file name="234A0ACCECB3C19247FA8B7920453761.cache.js" hash="df488d926e6054769d4731148e707b58"/><file name="25E490B929D7CDBF44085E4E4D9D6F78.cache.js" hash="2a017b95cfbd8653a222660b60697419"/><file name="53ABFAE8983A4589B497F48695DB2A7C.cache.js" hash="b6b02347438384cc886b2509426826b5"/><file name="75B23D057185BAB61CFE100CE08C4D84.cache.js" hash="ec9c94e05e64372a9636ef03e688d451"/><file name="79DD9AE9135ADFDE204324DA7F1B1405.cache.png" hash="6ba720deee377e093c5f5b0423c152df"/><file name="9F0D0456482D7A7A901A2CD8F64EA019.cache.js" hash="dad64db53266865af02c620795c6ab13"/><file name="clear.cache.gif" hash="6d22e4f2d2057c6e8d6fab098e76e80f"/><file name="de.factfinder.asn.slider.OneTouchSlider.nocache.js" hash="f92d47fc9eb8cf8ff78173997f5a4a7a"/></dir></dir><dir name="css"><file name="factfinder_suggest.css" hash="1a8a97d65582535cbc74c5599fcb34e1"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="FACTFinder_Suggest.csv" hash="3098dfae8ccf75366dfa093ce5c863f2"/></dir><dir name="en_US"><file name="FACTFinder_Suggest.csv" hash="2e9fd7bbc9407364430a7c281c94ec63"/></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.3.0</min><max>7.1.0</max></php></required></dependencies>
|
18 |
</package>
|
skin/frontend/base/default/css/factfinder_suggest.css
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.form-search .search-autocomplete.advanced-suggest li {
|
2 |
+
overflow: hidden;
|
3 |
+
}
|
4 |
+
|
5 |
+
.form-search .search-autocomplete.advanced-suggest li.delimiter {
|
6 |
+
cursor: default;
|
7 |
+
font-weight: bold;
|
8 |
+
}
|
9 |
+
|
10 |
+
.form-search .search-autocomplete.advanced-suggest img.thumbnail {
|
11 |
+
float:left;
|
12 |
+
margin-top: 2px;
|
13 |
+
margin-bottom: 3px;
|
14 |
+
margin-right: 5px;
|
15 |
+
width: 31px;
|
16 |
+
height: 31px;
|
17 |
+
}
|