Version Notes
Added configuration for the product feed sales data timespan settings
Fixed the TBT Rewards Feed Operation
Changed the way product visibility filter works, allowing implicit Catalog/Search visibilities
Fixed issue where optional dropdown type attributes, that weren't set, were exporting as 'No'
Download this release
Release Info
Developer | SearchSpring Development Team |
Extension | SearchSpring_Manager |
Version | 1.10.0 |
Comparing to | |
See all releases |
Code changes from version 1.9.0 to 1.10.0
- app/code/community/SearchSpring/Manager/Block/Adminhtml/System/Config/Field/Timespan.php +39 -0
- app/code/community/SearchSpring/Manager/Factory/GeneratorFactory.php +11 -2
- app/code/community/SearchSpring/Manager/Helper/Data.php +10 -2
- app/code/community/SearchSpring/Manager/Helper/Product.php +18 -5
- app/code/community/SearchSpring/Manager/Model/Source.php +38 -0
- app/code/community/SearchSpring/Manager/Model/Source/Abstract.php +38 -0
- app/code/community/SearchSpring/Manager/Operation/Product/SetCoreFields.php +19 -0
- app/code/community/SearchSpring/Manager/Operation/Product/SetFields.php +9 -28
- app/code/community/SearchSpring/Manager/Operation/Product/SetReport.php +19 -7
- app/code/community/SearchSpring/Manager/Provider/ProductCollection/FeedProvider.php +1 -1
- app/code/community/SearchSpring/Manager/Provider/ProductCollection/ProductProvider.php +4 -2
- app/code/community/SearchSpring/Manager/ThirdParty/TBT/RewardsOperation.php +15 -4
- app/code/community/SearchSpring/Manager/Validator/ProductValidator.php +5 -5
- app/code/community/SearchSpring/Manager/etc/config.xml +7 -2
- app/code/community/SearchSpring/Manager/etc/system.xml +40 -9
- package.xml +4 -5
app/code/community/SearchSpring/Manager/Block/Adminhtml/System/Config/Field/Timespan.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SearchSpring_Manager_Block_Adminhtml_System_Config_Field_Timespan extends Mage_Adminhtml_Block_System_Config_Form_Field
|
4 |
+
{
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Get country selector html
|
8 |
+
*
|
9 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
10 |
+
* @return string
|
11 |
+
*/
|
12 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
13 |
+
{
|
14 |
+
|
15 |
+
// Get the value for the main element
|
16 |
+
$values = explode(',', $element->getValue());
|
17 |
+
$number = array_shift($values);
|
18 |
+
$increment = array_shift($values);
|
19 |
+
|
20 |
+
// Set the Value for the increment dropdown, year, month, day...
|
21 |
+
$element->setValue($increment);
|
22 |
+
$element->setName( $element->getName() . "[]" );
|
23 |
+
$element->setStyle('width: 211px;');
|
24 |
+
|
25 |
+
$box = new Varien_Data_Form_Element_Text(array(
|
26 |
+
'name' => $element->getName(),
|
27 |
+
'value' => "need to figure this out",
|
28 |
+
'no_span' => true,
|
29 |
+
'style' => 'width: 60px;',
|
30 |
+
));
|
31 |
+
$box->setForm($element->getForm());
|
32 |
+
// Set the Value for the number
|
33 |
+
$box->setValue($number);
|
34 |
+
|
35 |
+
// Put them together
|
36 |
+
return $box->getHtml(). $element->getElementHtml();
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
app/code/community/SearchSpring/Manager/Factory/GeneratorFactory.php
CHANGED
@@ -133,6 +133,8 @@ class SearchSpring_Manager_Factory_GeneratorFactory
|
|
133 |
SearchSpring_Manager_Entity_OperationsCollection $operationsCollection,
|
134 |
SearchSpring_Manager_Entity_RecordsCollection $productRecords
|
135 |
) {
|
|
|
|
|
136 |
$operationsBuilder->setSanitizer(new SearchSpring_Manager_String_Sanitizer())
|
137 |
->setRecords($productRecords)
|
138 |
->setClassPrefix(SearchSpring_Manager_Operation_Product::OPERATION_CLASS_PREFIX);
|
@@ -142,13 +144,20 @@ class SearchSpring_Manager_Factory_GeneratorFactory
|
|
142 |
$operationsCollection->append($operationsBuilder->build('SetImages'));
|
143 |
$operationsCollection->append($operationsBuilder->build('SetOptions'));
|
144 |
$operationsCollection->append($operationsBuilder->build('SetCategories'));
|
145 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
|
147 |
// add pricing factory and if we should display zero priced products as additional data
|
148 |
$operationsCollection->append($operationsBuilder->build('SetPricing',
|
149 |
array(
|
150 |
'pricingFactory' => new SearchSpring_Manager_Factory_PricingFactory(),
|
151 |
-
'displayZeroPrice' => (int)
|
152 |
)
|
153 |
)
|
154 |
);
|
133 |
SearchSpring_Manager_Entity_OperationsCollection $operationsCollection,
|
134 |
SearchSpring_Manager_Entity_RecordsCollection $productRecords
|
135 |
) {
|
136 |
+
$hlp = Mage::helper('searchspring_manager');
|
137 |
+
|
138 |
$operationsBuilder->setSanitizer(new SearchSpring_Manager_String_Sanitizer())
|
139 |
->setRecords($productRecords)
|
140 |
->setClassPrefix(SearchSpring_Manager_Operation_Product::OPERATION_CLASS_PREFIX);
|
144 |
$operationsCollection->append($operationsBuilder->build('SetImages'));
|
145 |
$operationsCollection->append($operationsBuilder->build('SetOptions'));
|
146 |
$operationsCollection->append($operationsBuilder->build('SetCategories'));
|
147 |
+
|
148 |
+
// Parameter for timespan comes from user configuration, by default
|
149 |
+
$operationsCollection->append($operationsBuilder->build('SetReport',
|
150 |
+
array(
|
151 |
+
'timespan' => $hlp->getSalesRankTimespan(),
|
152 |
+
)
|
153 |
+
)
|
154 |
+
);
|
155 |
|
156 |
// add pricing factory and if we should display zero priced products as additional data
|
157 |
$operationsCollection->append($operationsBuilder->build('SetPricing',
|
158 |
array(
|
159 |
'pricingFactory' => new SearchSpring_Manager_Factory_PricingFactory(),
|
160 |
+
'displayZeroPrice' => (int)$hlp->isZeroPriceIndexingEnabled(),
|
161 |
)
|
162 |
)
|
163 |
);
|
app/code/community/SearchSpring/Manager/Helper/Data.php
CHANGED
@@ -18,7 +18,10 @@ class SearchSpring_Manager_Helper_Data extends Mage_Core_Helper_Abstract
|
|
18 |
const XML_PATH_GLOBAL_LIVE_INDEXING_ENABLE_FL = 'ssmanager/ssmanager_general/live_indexing';
|
19 |
const XML_PATH_INDEX_ZERO_PRICE = 'ssmanager/ssmanager_general/index_zero_price';
|
20 |
const XML_PATH_INDEX_OUT_OF_STOCK = 'ssmanager/ssmanager_general/index_out_of_stock';
|
21 |
-
|
|
|
|
|
|
|
22 |
|
23 |
const XML_PATH_GLOBAL_CATEGORY_ENABLE_FL = 'ssmanager/ssmanager_catalog/enable_categories';
|
24 |
|
@@ -72,9 +75,14 @@ class SearchSpring_Manager_Helper_Data extends Mage_Core_Helper_Abstract
|
|
72 |
return Mage::getStoreConfigFlag(self::XML_PATH_INDEX_OUT_OF_STOCK);
|
73 |
}
|
74 |
|
|
|
|
|
|
|
|
|
|
|
75 |
public function getFeedPath()
|
76 |
{
|
77 |
-
return Mage::getStoreConfig(self::
|
78 |
}
|
79 |
|
80 |
public function getApiFeedId()
|
18 |
const XML_PATH_GLOBAL_LIVE_INDEXING_ENABLE_FL = 'ssmanager/ssmanager_general/live_indexing';
|
19 |
const XML_PATH_INDEX_ZERO_PRICE = 'ssmanager/ssmanager_general/index_zero_price';
|
20 |
const XML_PATH_INDEX_OUT_OF_STOCK = 'ssmanager/ssmanager_general/index_out_of_stock';
|
21 |
+
|
22 |
+
const XML_PATH_FEED_SETTING_PATH = 'ssmanager/ssmanager_feed/feed_path';
|
23 |
+
|
24 |
+
const XML_PATH_SALES_RANK_TIMESPAN = 'ssmanager/ssmanager_sales_rank/timespan';
|
25 |
|
26 |
const XML_PATH_GLOBAL_CATEGORY_ENABLE_FL = 'ssmanager/ssmanager_catalog/enable_categories';
|
27 |
|
75 |
return Mage::getStoreConfigFlag(self::XML_PATH_INDEX_OUT_OF_STOCK);
|
76 |
}
|
77 |
|
78 |
+
public function getSalesRankTimespan()
|
79 |
+
{
|
80 |
+
return Mage::getStoreConfig(self::XML_PATH_SALES_RANK_TIMESPAN);
|
81 |
+
}
|
82 |
+
|
83 |
public function getFeedPath()
|
84 |
{
|
85 |
+
return Mage::getStoreConfig(self::XML_PATH_FEED_SETTING_PATH);
|
86 |
}
|
87 |
|
88 |
public function getApiFeedId()
|
app/code/community/SearchSpring/Manager/Helper/Product.php
CHANGED
@@ -17,15 +17,28 @@ class SearchSpring_Manager_Helper_Product extends Mage_Core_Helper_Abstract
|
|
17 |
|
18 |
public function getAttributeText($product, $attributeCode) {
|
19 |
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
$attribute->getFrontendInput() === 'multiselect'
|
25 |
) {
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
return $product->getAttributeText($attributeCode);
|
|
|
27 |
} else {
|
28 |
-
|
|
|
|
|
29 |
}
|
30 |
|
31 |
}
|
17 |
|
18 |
public function getAttributeText($product, $attributeCode) {
|
19 |
|
20 |
+
if ($attributeCode instanceof Mage_Eav_Model_Entity_Attribute) {
|
21 |
+
$attribute = $attributeCode;
|
22 |
+
$attributeCode = $attribute->getAttributeCode();
|
23 |
+
} else {
|
24 |
+
$attribute = $product->getResource()->getAttribute($attributeCode);
|
25 |
+
}
|
26 |
|
27 |
+
if ($attribute->getFrontendInput() === 'boolean' ||
|
28 |
+
$attribute->getFrontendInput() === 'select'
|
|
|
29 |
) {
|
30 |
+
|
31 |
+
// Magento's Attribute Frontend getValue() function
|
32 |
+
// returns 'No' for optional attributes with nothing
|
33 |
+
// set, specifically for these types...
|
34 |
+
// So we'll just try and resolve from the attribute
|
35 |
+
// options map, or empty if the value isn't set.
|
36 |
return $product->getAttributeText($attributeCode);
|
37 |
+
|
38 |
} else {
|
39 |
+
|
40 |
+
return $attribute->getFrontend()->getValue($product);
|
41 |
+
|
42 |
}
|
43 |
|
44 |
}
|
app/code/community/SearchSpring/Manager/Model/Source.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SearchSpring_Manager_Model_Source extends SearchSpring_Manager_Model_Source_Abstract
|
4 |
+
{
|
5 |
+
|
6 |
+
public function toOptionHash($selector=false)
|
7 |
+
{
|
8 |
+
$hlp = Mage::helper('searchspring_manager');
|
9 |
+
|
10 |
+
$options = array();
|
11 |
+
|
12 |
+
switch ($this->getPath()) {
|
13 |
+
|
14 |
+
case SearchSpring_Manager_Helper_Data::XML_PATH_SALES_RANK_TIMESPAN:
|
15 |
+
|
16 |
+
$options = array(
|
17 |
+
'day' => $hlp->__('Day(s)'),
|
18 |
+
'week' => $hlp->__('Week(s)'),
|
19 |
+
'month' => $hlp->__('Month(s)'),
|
20 |
+
'year' => $hlp->__('Year(s)'),
|
21 |
+
);
|
22 |
+
|
23 |
+
break;
|
24 |
+
|
25 |
+
default:
|
26 |
+
Mage::throwException($hlp->__('Invalid request for source options: '.$this->getPath()));
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
if ($selector) {
|
31 |
+
$options = array(''=>$hlp->__('* Please select')) + $options;
|
32 |
+
}
|
33 |
+
|
34 |
+
return $options;
|
35 |
+
}
|
36 |
+
|
37 |
+
}
|
38 |
+
|
app/code/community/SearchSpring/Manager/Model/Source/Abstract.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class SearchSpring_Manager_Model_Source_Abstract extends Varien_Object
|
4 |
+
{
|
5 |
+
abstract public function toOptionHash($selector=false);
|
6 |
+
|
7 |
+
public function toOptionArray($selector=false)
|
8 |
+
{
|
9 |
+
$arr = array();
|
10 |
+
foreach ($this->toOptionHash($selector) as $v=>$l) {
|
11 |
+
if (!is_array($l)) {
|
12 |
+
$arr[] = array('label'=>$l, 'value'=>$v);
|
13 |
+
} else {
|
14 |
+
$options = array();
|
15 |
+
foreach ($l as $v1=>$l1) {
|
16 |
+
$options[] = array('value'=>$v1, 'label'=>$l1);
|
17 |
+
}
|
18 |
+
$arr[] = array('label'=>$v, 'value'=>$options);
|
19 |
+
}
|
20 |
+
}
|
21 |
+
return $arr;
|
22 |
+
}
|
23 |
+
|
24 |
+
public function getOptionLabel($value)
|
25 |
+
{
|
26 |
+
$options = $this->toOptionHash();
|
27 |
+
if (is_array($value)) {
|
28 |
+
$result = array();
|
29 |
+
foreach ($value as $v) {
|
30 |
+
$result[$v] = isset($options[$v]) ? $options[$v] : $v;
|
31 |
+
}
|
32 |
+
} else {
|
33 |
+
$result = isset($options[$value]) ? $options[$value] : $value;
|
34 |
+
}
|
35 |
+
return $result;
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
app/code/community/SearchSpring/Manager/Operation/Product/SetCoreFields.php
CHANGED
@@ -31,6 +31,8 @@ class SearchSpring_Manager_Operation_Product_SetCoreFields extends SearchSpring_
|
|
31 |
const FEED_CHILD_SKU = 'child_sku';
|
32 |
const FEED_CHILD_NAME = 'child_name';
|
33 |
const FEED_DAYS_OLD = 'days_old';
|
|
|
|
|
34 |
/**#@-*/
|
35 |
|
36 |
|
@@ -55,6 +57,8 @@ class SearchSpring_Manager_Operation_Product_SetCoreFields extends SearchSpring_
|
|
55 |
* - child_name
|
56 |
* - child_sku
|
57 |
* - days_old
|
|
|
|
|
58 |
*
|
59 |
* @param Mage_Catalog_Model_Product $product
|
60 |
*
|
@@ -87,6 +91,8 @@ class SearchSpring_Manager_Operation_Product_SetCoreFields extends SearchSpring_
|
|
87 |
|
88 |
$this->setDaysOld($product);
|
89 |
|
|
|
|
|
90 |
return $this;
|
91 |
}
|
92 |
|
@@ -182,4 +188,17 @@ class SearchSpring_Manager_Operation_Product_SetCoreFields extends SearchSpring_
|
|
182 |
|
183 |
return $quantity;
|
184 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
}
|
31 |
const FEED_CHILD_SKU = 'child_sku';
|
32 |
const FEED_CHILD_NAME = 'child_name';
|
33 |
const FEED_DAYS_OLD = 'days_old';
|
34 |
+
const FEED_VISIBILITY_IN_SEARCH = 'visible_in_search';
|
35 |
+
const FEED_VISIBILITY_IN_CATALOG = 'visible_in_catalog';
|
36 |
/**#@-*/
|
37 |
|
38 |
|
57 |
* - child_name
|
58 |
* - child_sku
|
59 |
* - days_old
|
60 |
+
* - visible_in_search
|
61 |
+
* - visible_in_catalog
|
62 |
*
|
63 |
* @param Mage_Catalog_Model_Product $product
|
64 |
*
|
91 |
|
92 |
$this->setDaysOld($product);
|
93 |
|
94 |
+
$this->setVisibility($product);
|
95 |
+
|
96 |
return $this;
|
97 |
}
|
98 |
|
188 |
|
189 |
return $quantity;
|
190 |
}
|
191 |
+
|
192 |
+
private function setVisibility($product) {
|
193 |
+
|
194 |
+
$vis = Mage::getSingleton('catalog/product_visibility');
|
195 |
+
|
196 |
+
$searchFl = in_array($product->getVisibility(), $vis->getVisibleInSearchIds());
|
197 |
+
$catalogFl = in_array($product->getVisibility(), $vis->getVisibleInCatalogIds());
|
198 |
+
|
199 |
+
$this->getRecords()->set(self::FEED_VISIBILITY_IN_SEARCH, (int) $searchFl);
|
200 |
+
$this->getRecords()->set(self::FEED_VISIBILITY_IN_CATALOG, (int) $catalogFl);
|
201 |
+
|
202 |
+
}
|
203 |
+
|
204 |
}
|
app/code/community/SearchSpring/Manager/Operation/Product/SetFields.php
CHANGED
@@ -25,40 +25,18 @@ class SearchSpring_Manager_Operation_Product_SetFields extends SearchSpring_Mana
|
|
25 |
/** @var Mage_Catalog_Model_Resource_Eav_Attribute $attribute */
|
26 |
foreach($product->getAttributes() as $key => $attribute) {
|
27 |
$value = $this->getAttributeValue($product, $attribute);
|
28 |
-
if (
|
29 |
-
$this->getRecords()->add($key, $value);
|
30 |
-
} else {
|
31 |
foreach($value as $v) {
|
32 |
$this->getRecords()->add($key, $v);
|
33 |
}
|
|
|
|
|
34 |
}
|
35 |
}
|
36 |
|
37 |
return $this;
|
38 |
}
|
39 |
|
40 |
-
/**
|
41 |
-
* If product is not enabled or visible, set invalid
|
42 |
-
*
|
43 |
-
* @param Mage_Catalog_Model_Product $product
|
44 |
-
*
|
45 |
-
* @return bool
|
46 |
-
*/
|
47 |
-
public function isValid(Mage_Catalog_Model_Product $product)
|
48 |
-
{
|
49 |
-
// product must be enabled
|
50 |
-
if ((int)$product->getData('status') !== Mage_Catalog_Model_Product_Status::STATUS_ENABLED) {
|
51 |
-
return false;
|
52 |
-
}
|
53 |
-
|
54 |
-
// product must be visible in catalog and search
|
55 |
-
if ((int)$product->getData('visibility') !== Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) {
|
56 |
-
return false;
|
57 |
-
}
|
58 |
-
|
59 |
-
return true;
|
60 |
-
}
|
61 |
-
|
62 |
/**
|
63 |
* Get the attribute value from the attribute object
|
64 |
*
|
@@ -69,15 +47,18 @@ class SearchSpring_Manager_Operation_Product_SetFields extends SearchSpring_Mana
|
|
69 |
*/
|
70 |
private function getAttributeValue(Mage_Catalog_Model_Product $product, Mage_Eav_Model_Entity_Attribute $attribute)
|
71 |
{
|
72 |
-
$attributeValue =
|
73 |
-
$returnValue = null;
|
74 |
|
75 |
if (is_array($attributeValue)) {
|
|
|
76 |
foreach ($attributeValue as $v) {
|
77 |
$returnValue[] = json_encode($v);
|
78 |
}
|
79 |
-
} else {
|
80 |
$returnValue = $this->getSanitizer()->sanitizeForRequest($attributeValue);
|
|
|
|
|
|
|
81 |
}
|
82 |
|
83 |
return $returnValue;
|
25 |
/** @var Mage_Catalog_Model_Resource_Eav_Attribute $attribute */
|
26 |
foreach($product->getAttributes() as $key => $attribute) {
|
27 |
$value = $this->getAttributeValue($product, $attribute);
|
28 |
+
if (is_array($value)) {
|
|
|
|
|
29 |
foreach($value as $v) {
|
30 |
$this->getRecords()->add($key, $v);
|
31 |
}
|
32 |
+
} else if ($value !== false) {
|
33 |
+
$this->getRecords()->set($key, $value);
|
34 |
}
|
35 |
}
|
36 |
|
37 |
return $this;
|
38 |
}
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
/**
|
41 |
* Get the attribute value from the attribute object
|
42 |
*
|
47 |
*/
|
48 |
private function getAttributeValue(Mage_Catalog_Model_Product $product, Mage_Eav_Model_Entity_Attribute $attribute)
|
49 |
{
|
50 |
+
$attributeValue = Mage::helper('searchspring_manager/product')->getAttributeText($product, $attribute);
|
|
|
51 |
|
52 |
if (is_array($attributeValue)) {
|
53 |
+
$returnValue = null;
|
54 |
foreach ($attributeValue as $v) {
|
55 |
$returnValue[] = json_encode($v);
|
56 |
}
|
57 |
+
} else if ($attributeValue !== false && $attributeValue !== null) {
|
58 |
$returnValue = $this->getSanitizer()->sanitizeForRequest($attributeValue);
|
59 |
+
} else {
|
60 |
+
// This means there should be no value for this attribute
|
61 |
+
$returnValue = false;
|
62 |
}
|
63 |
|
64 |
return $returnValue;
|
app/code/community/SearchSpring/Manager/Operation/Product/SetReport.php
CHANGED
@@ -31,9 +31,6 @@ class SearchSpring_Manager_Operation_Product_SetReport extends SearchSpring_Mana
|
|
31 |
const FEED_ORDERS_COUNT = 'report_orders_count';
|
32 |
const FEED_ORDERS_QTY = 'report_orders_qty';
|
33 |
|
34 |
-
// Default timespan, 1 year, so we don't accidentally overload their database
|
35 |
-
const DEFAULT_REPORT_TIMESPAN = '1 year';
|
36 |
-
|
37 |
public function prepare(Mage_Catalog_Model_Resource_Product_Collection $productCollection) {
|
38 |
|
39 |
$this->fetchReportData(
|
@@ -81,14 +78,14 @@ class SearchSpring_Manager_Operation_Product_SetReport extends SearchSpring_Mana
|
|
81 |
public function getProductReport(Mage_Catalog_Model_Product $product) {
|
82 |
|
83 |
// Make sure we have report data
|
84 |
-
if (
|
85 |
// If we don't have data, then we'll fetch it with the requested product
|
86 |
// NOTE: This should only happen if the person using the class didn't request
|
87 |
// preparation with a product collection
|
88 |
$this->fetchReportData(array($product->getId()), $product->getStoreId());
|
89 |
|
90 |
// If we still don't have the data, then we can't support this feature
|
91 |
-
if (
|
92 |
return false;
|
93 |
}
|
94 |
}
|
@@ -169,14 +166,29 @@ class SearchSpring_Manager_Operation_Product_SetReport extends SearchSpring_Mana
|
|
169 |
return $reportCollection;
|
170 |
}
|
171 |
|
172 |
-
// TODO -- Figure out how to add from and to dates as parameters, might need to add them as configuration items as well
|
173 |
public function getParamReportStartDate() {
|
174 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
}
|
176 |
|
177 |
public function getParamReportEndDate() {
|
|
|
178 |
// Up till now
|
179 |
return date('Y-m-d H:i:s');
|
180 |
}
|
181 |
|
|
|
|
|
|
|
|
|
|
|
182 |
}
|
31 |
const FEED_ORDERS_COUNT = 'report_orders_count';
|
32 |
const FEED_ORDERS_QTY = 'report_orders_qty';
|
33 |
|
|
|
|
|
|
|
34 |
public function prepare(Mage_Catalog_Model_Resource_Product_Collection $productCollection) {
|
35 |
|
36 |
$this->fetchReportData(
|
78 |
public function getProductReport(Mage_Catalog_Model_Product $product) {
|
79 |
|
80 |
// Make sure we have report data
|
81 |
+
if (is_null($this->_reportData)) {
|
82 |
// If we don't have data, then we'll fetch it with the requested product
|
83 |
// NOTE: This should only happen if the person using the class didn't request
|
84 |
// preparation with a product collection
|
85 |
$this->fetchReportData(array($product->getId()), $product->getStoreId());
|
86 |
|
87 |
// If we still don't have the data, then we can't support this feature
|
88 |
+
if (is_null($this->_reportData)) {
|
89 |
return false;
|
90 |
}
|
91 |
}
|
166 |
return $reportCollection;
|
167 |
}
|
168 |
|
|
|
169 |
public function getParamReportStartDate() {
|
170 |
+
|
171 |
+
$fromTime = strtotime('-' . $this->getTimespan());
|
172 |
+
|
173 |
+
// If we can't convert the timespan to a time, we can't do anything with it
|
174 |
+
if ($fromTime === false) {
|
175 |
+
// TODO -- log when we have a debug logger
|
176 |
+
// Mage::helper('searchspring_manager/debug')->log("Can't convert timespan to time: " . $this->getTimespan());
|
177 |
+
return '';
|
178 |
+
}
|
179 |
+
|
180 |
+
return date('Y-m-d H:i:s', $fromTime);
|
181 |
}
|
182 |
|
183 |
public function getParamReportEndDate() {
|
184 |
+
|
185 |
// Up till now
|
186 |
return date('Y-m-d H:i:s');
|
187 |
}
|
188 |
|
189 |
+
public function getTimespan() {
|
190 |
+
$timespan = $this->getParameter('timespan');
|
191 |
+
return implode(' ', explode(',', $timespan) );
|
192 |
+
}
|
193 |
+
|
194 |
}
|
app/code/community/SearchSpring/Manager/Provider/ProductCollection/FeedProvider.php
CHANGED
@@ -62,8 +62,8 @@ class SearchSpring_Manager_Provider_ProductCollection_FeedProvider
|
|
62 |
$collection->addStoreFilter(Mage::app()->getStore($this->requestParams->getStore())->getId());
|
63 |
$collection->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
|
64 |
$collection->addAttributeToFilter('type_id', array('in' => SearchSpring_Manager_Validator_ProductValidator::$allowableTypes));
|
65 |
-
$collection->addAttributeToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
|
66 |
|
|
|
67 |
|
68 |
if (!Mage::helper('searchspring_manager')->isOutOfStockIndexingEnabled()) {
|
69 |
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
|
62 |
$collection->addStoreFilter(Mage::app()->getStore($this->requestParams->getStore())->getId());
|
63 |
$collection->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
|
64 |
$collection->addAttributeToFilter('type_id', array('in' => SearchSpring_Manager_Validator_ProductValidator::$allowableTypes));
|
|
|
65 |
|
66 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInSiteFilterToCollection($collection);
|
67 |
|
68 |
if (!Mage::helper('searchspring_manager')->isOutOfStockIndexingEnabled()) {
|
69 |
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
|
app/code/community/SearchSpring/Manager/Provider/ProductCollection/ProductProvider.php
CHANGED
@@ -69,8 +69,10 @@ class SearchSpring_Manager_Provider_ProductCollection_ProductProvider
|
|
69 |
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
|
70 |
$collection = Mage::getModel('catalog/product')
|
71 |
->getCollection()
|
72 |
-
|
73 |
-
|
|
|
|
|
74 |
|
75 |
if (null !== $this->requestParams) {
|
76 |
$collection->getSelect()->limit($this->requestParams->getCount(), $this->requestParams->getOffset());
|
69 |
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
|
70 |
$collection = Mage::getModel('catalog/product')
|
71 |
->getCollection()
|
72 |
+
->addAttributeToFilter('entity_id', array('in' => $this->ids))
|
73 |
+
;
|
74 |
+
|
75 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInSiteFilterToCollection($collection);
|
76 |
|
77 |
if (null !== $this->requestParams) {
|
78 |
$collection->getSelect()->limit($this->requestParams->getCount(), $this->requestParams->getOffset());
|
app/code/community/SearchSpring/Manager/ThirdParty/TBT/RewardsOperation.php
CHANGED
@@ -17,14 +17,25 @@ class SearchSpring_Manager_ThirdParty_TBT_RewardsOperation extends SearchSpring_
|
|
17 |
|
18 |
public function perform(Mage_Catalog_Model_Product $product)
|
19 |
{
|
|
|
20 |
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
|
24 |
-
|
|
|
25 |
}
|
26 |
|
27 |
-
$this->getRecords()->add('TBT_Rewards_earnable_points', $
|
28 |
|
29 |
return $this;
|
30 |
}
|
17 |
|
18 |
public function perform(Mage_Catalog_Model_Product $product)
|
19 |
{
|
20 |
+
// This might look a little weird, but bear with me...
|
21 |
|
22 |
+
// Make sure the base TBT product class exists, you never know...
|
23 |
+
if (!class_exists('TBT_Rewards_Model_Catalog_Product')) {
|
24 |
+
return $this;
|
25 |
+
}
|
26 |
+
|
27 |
+
// Create new product model, with Magento service locator, in case someone is overwriting
|
28 |
+
$rewardsProduct = Mage::getModel('rewards/catalog_product', $product->getData());
|
29 |
+
|
30 |
+
// Now we have a rewards product model, without having to touch the database again
|
31 |
+
$points = $rewardsProduct->getEarnablePoints();
|
32 |
|
33 |
+
// It should be returned as an array...
|
34 |
+
if (is_array($points)) {
|
35 |
+
$points = current($points);
|
36 |
}
|
37 |
|
38 |
+
$this->getRecords()->add('TBT_Rewards_earnable_points', $points);
|
39 |
|
40 |
return $this;
|
41 |
}
|
app/code/community/SearchSpring/Manager/Validator/ProductValidator.php
CHANGED
@@ -59,8 +59,8 @@ class SearchSpring_Manager_Validator_ProductValidator implements Zend_Validate_I
|
|
59 |
|
60 |
// if product became not visible
|
61 |
if (
|
62 |
-
$visibility
|
63 |
-
&& $origVisibility
|
64 |
) {
|
65 |
return true;
|
66 |
}
|
@@ -111,9 +111,9 @@ class SearchSpring_Manager_Validator_ProductValidator implements Zend_Validate_I
|
|
111 |
$this->messages[] = 'Product is not an allowable type.';
|
112 |
}
|
113 |
|
114 |
-
// product must be visible in catalog and search
|
115 |
-
if (
|
116 |
-
$this->messages[] = 'Product must be visible in catalog and search';
|
117 |
}
|
118 |
|
119 |
// if we have errors, return false
|
59 |
|
60 |
// if product became not visible
|
61 |
if (
|
62 |
+
$visibility === Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE
|
63 |
+
&& $origVisibility !== Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE
|
64 |
) {
|
65 |
return true;
|
66 |
}
|
111 |
$this->messages[] = 'Product is not an allowable type.';
|
112 |
}
|
113 |
|
114 |
+
// product must be visible in either catalog and search
|
115 |
+
if (!$product->isVisibleInSiteVisibility()) {
|
116 |
+
$this->messages[] = 'Product must be visible in either catalog and search';
|
117 |
}
|
118 |
|
119 |
// if we have errors, return false
|
app/code/community/SearchSpring/Manager/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<SearchSpring_Manager>
|
5 |
-
<version>1.
|
6 |
</SearchSpring_Manager>
|
7 |
</modules>
|
8 |
<global>
|
@@ -169,7 +169,6 @@
|
|
169 |
<ssmanager>
|
170 |
<ssmanager_general>
|
171 |
<live_indexing>0</live_indexing>
|
172 |
-
<feed_path>media/searchspring/feed/</feed_path>
|
173 |
</ssmanager_general>
|
174 |
<ssmanager_catalog>
|
175 |
<enable_categories>0</enable_categories>
|
@@ -177,6 +176,12 @@
|
|
177 |
<ssmanager_images>
|
178 |
<generate_cache_images>1</generate_cache_images>
|
179 |
</ssmanager_images>
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
<ssmanager_api>
|
181 |
<authentication_method>simple</authentication_method>
|
182 |
</ssmanager_api>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<SearchSpring_Manager>
|
5 |
+
<version>1.10.0</version>
|
6 |
</SearchSpring_Manager>
|
7 |
</modules>
|
8 |
<global>
|
169 |
<ssmanager>
|
170 |
<ssmanager_general>
|
171 |
<live_indexing>0</live_indexing>
|
|
|
172 |
</ssmanager_general>
|
173 |
<ssmanager_catalog>
|
174 |
<enable_categories>0</enable_categories>
|
176 |
<ssmanager_images>
|
177 |
<generate_cache_images>1</generate_cache_images>
|
178 |
</ssmanager_images>
|
179 |
+
<ssmanager_feed>
|
180 |
+
<feed_path>media/searchspring/feed/</feed_path>
|
181 |
+
</ssmanager_feed>
|
182 |
+
<ssmanager_sales_rank>
|
183 |
+
<timespan>6,month</timespan>
|
184 |
+
</ssmanager_sales_rank>
|
185 |
<ssmanager_api>
|
186 |
<authentication_method>simple</authentication_method>
|
187 |
</ssmanager_api>
|
app/code/community/SearchSpring/Manager/etc/system.xml
CHANGED
@@ -77,15 +77,6 @@
|
|
77 |
<show_in_website>1</show_in_website>
|
78 |
<show_in_store>1</show_in_store>
|
79 |
</index_out_of_stock>
|
80 |
-
<feed_path translate="label">
|
81 |
-
<label>Feed Path</label>
|
82 |
-
<comment>Relative to the base Magento installation directory. Must be writable. Recommended: media/searchspring/feed/</comment>
|
83 |
-
<frontend_type>text</frontend_type>
|
84 |
-
<sort_order>20</sort_order>
|
85 |
-
<show_in_default>1</show_in_default>
|
86 |
-
<show_in_website>0</show_in_website>
|
87 |
-
<show_in_store>0</show_in_store>
|
88 |
-
</feed_path>
|
89 |
</fields>
|
90 |
</ssmanager_general>
|
91 |
<ssmanager_images translate="label" module="searchspring_manager">
|
@@ -126,6 +117,46 @@
|
|
126 |
</image_height>
|
127 |
</fields>
|
128 |
</ssmanager_images>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
<ssmanager_catalog translate="label" module="searchspring_manager">
|
130 |
<label>Catalog Configuration</label>
|
131 |
<frontend_type>text</frontend_type>
|
77 |
<show_in_website>1</show_in_website>
|
78 |
<show_in_store>1</show_in_store>
|
79 |
</index_out_of_stock>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
</fields>
|
81 |
</ssmanager_general>
|
82 |
<ssmanager_images translate="label" module="searchspring_manager">
|
117 |
</image_height>
|
118 |
</fields>
|
119 |
</ssmanager_images>
|
120 |
+
<ssmanager_feed translate="label" module="searchspring_manager">
|
121 |
+
<label>Feed Settings</label>
|
122 |
+
<frontend_type>text</frontend_type>
|
123 |
+
<sort_order>180</sort_order>
|
124 |
+
<show_in_default>1</show_in_default>
|
125 |
+
<show_in_website>1</show_in_website>
|
126 |
+
<show_in_store>1</show_in_store>
|
127 |
+
<fields>
|
128 |
+
<feed_path translate="label">
|
129 |
+
<label>Feed Path</label>
|
130 |
+
<comment>Relative to the base Magento installation directory. Must be writable. Recommended: media/searchspring/feed/</comment>
|
131 |
+
<frontend_type>text</frontend_type>
|
132 |
+
<sort_order>100</sort_order>
|
133 |
+
<show_in_default>1</show_in_default>
|
134 |
+
<show_in_website>0</show_in_website>
|
135 |
+
<show_in_store>0</show_in_store>
|
136 |
+
</feed_path>
|
137 |
+
</fields>
|
138 |
+
</ssmanager_feed>
|
139 |
+
<ssmanager_sales_rank translate="label" module="searchspring_manager">
|
140 |
+
<label>Sales Rank Settings</label>
|
141 |
+
<frontend_type>text</frontend_type>
|
142 |
+
<sort_order>190</sort_order>
|
143 |
+
<show_in_default>1</show_in_default>
|
144 |
+
<show_in_website>1</show_in_website>
|
145 |
+
<show_in_store>1</show_in_store>
|
146 |
+
<fields>
|
147 |
+
<timespan translate="label">
|
148 |
+
<label>Sales Rank Timespan</label>
|
149 |
+
<comment>How far back should we go to fetch sales rank numbers? This setting can affect performance of the feed regeneration.</comment>
|
150 |
+
<frontend_model>searchspring_manager/adminhtml_system_config_field_timespan</frontend_model>
|
151 |
+
<frontend_type>select</frontend_type>
|
152 |
+
<source_model>searchspring_manager/source</source_model>
|
153 |
+
<sort_order>100</sort_order>
|
154 |
+
<show_in_default>1</show_in_default>
|
155 |
+
<show_in_website>1</show_in_website>
|
156 |
+
<show_in_store>1</show_in_store>
|
157 |
+
</timespan>
|
158 |
+
</fields>
|
159 |
+
</ssmanager_sales_rank>
|
160 |
<ssmanager_catalog translate="label" module="searchspring_manager">
|
161 |
<label>Catalog Configuration</label>
|
162 |
<frontend_type>text</frontend_type>
|
package.xml
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
-
<package><name>SearchSpring_Manager</name><version>1.
|
3 |
-
|
4 |
-
|
5 |
-
Added Support for TBT Rewards (product earnable points)
|
6 |
-
Added Support for product qty sales data</notes><authors><author><name>SearchSpring Development Team</name><user>searchspring</user><email>info@searchspring.com</email></author></authors><date>2015-02-05</date><time>10:12:29</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="app"><dir name="code"><dir name="community"><dir name="SearchSpring"><file name="ErrorCodes.php" hash="fd8f65524b8f8708471f106aad294d0a"/><dir name="Manager"><file name="Collection.php" hash="0ebd621892bccd5d59ed3edcafada89b"/><file name="Iterator.php" hash="6f68effbe5452c1a6abd97cbf4b528ee"/><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="82ff17ab23c59b1c5fd095dfdfe153bb"/><file name="Setup.php" hash="5f467825780852b12cba72abfbe9e596"/></dir></dir></dir></dir><dir name="Layer"><file name="View.php" hash="ae69c24e04b03048cc2cd9b7cc436603"/><dir name="Filter"><file name="SearchSpringCategory.php" hash="39fc479e15275db637c227e596d040f5"/><file name="SearchSpringList.php" hash="743bb9cb690c9df3d74e9de2c206d020"/></dir></dir></dir><dir name="Builder"><file name="OperationBuilder.php" hash="d85ad0a561091d34b3b98efd95646962"/></dir><dir name="controllers"><file name="GenerateController.php" hash="a8b0e0bd6d735ce33ca7ed09ecea3a24"/></dir><dir name="Entity"><file name="IndexingRequestBody.php" hash="6bdab2264cbb8dbafa666f493bf9bd60"/><file name="OperationsCollection.php" hash="be19c06bb1be447bd57601e67ac87557"/><file name="RecordsCollection.php" hash="c336526a10625a859c093d2b25dff911"/><file name="RequestBody.php" hash="4b6d7fd23f57527e9d53dd938d69a88d"/><file name="RequestParams.php" hash="f4778075264cd441c87e8de220fdd2a9"/><file name="SearchCollection.php" hash="e64543d4315c16d7a0717da8ec081e09"/><file name="SearchRequestBody.php" hash="bdfd9a2244ce1f9a7db8daca6e613176"/><file name="SearchResult.php" hash="863a720b8a837bd7e56e8a7fa781a1a1"/><dir name="SearchResult"><file name="Result.php" hash="ea4e36fe95e4c412af8d525a4628db5d"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="879a64f061de25cbd1292f4ead6c5b15"/><file name="api2.xml" hash="c958f2f25b6fcd0b467dc20fb945f1b4"/><file name="composer.json" hash="6a36df77eee995788585f7a8a535fa27"/><file name="config.xml" hash="6d87f085ce5b36604a47db301a0b4527"/><file name="readme.md" hash="30d24e1aae89696090dcf22203802ad2"/><file name="system.xml" hash="2d51547a4619f7f81eab4bdba265211e"/></dir><dir name="Factory"><file name="ApiFactory.php" hash="2a0b31683e75cfa4c10bf6476a7346bf"/><file name="GeneratorFactory.php" hash="83662be86412dff1705b32bf2ba76402"/><file name="IndexingRequestBodyFactory.php" hash="10e0717f6d938a06a9cfc68f6ac1ceaf"/><file name="PricingFactory.php" hash="bbba11efb7a2fd6ebf8c47d896c365a2"/><file name="SearchRequestBodyFactory.php" hash="4eb409f25d480ca11b08f206f7f4facc"/></dir><dir name="Generator"><file name="ProductGenerator.php" hash="69147879853105d0a388596b479a0b81"/></dir><dir name="Handler"><file name="ApiErrorHandler.php" hash="a287ed86d8d83a88b5a8f555015f2e80"/></dir><dir name="Helper"><file name="Data.php" hash="78fddf7a5cae29ea3054309d4c4f46bd"/><file name="Http.php" hash="13d41de08d623892f6526817bf4ee971"/><file name="Oauth.php" hash="b6dd04c07e1322c38b76668b88d7d1e4"/><file name="Product.php" hash="6cdbcdaa30691ff3023b93557018b497"/><file name="Webservice.php" hash="054d23d7db9da73b44bcbad083bd813e"/></dir><dir name="Model"><file name="Layer.php" hash="54afafde0cff2fcf2de2240bbb6cdb20"/><dir name="Api2"><dir name="Auth"><file name="Adapter.php" hash="909c416381a44ef80b0665926a9e4ab2"/></dir><dir name="Indexing"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="3a306d75dccab962e7c81ecb82d35c60"/></dir></dir></dir></dir><dir name="Catalog"><dir name="Category"><dir name="Attribute"><dir name="EnableSearchSpring"><file name="Backend.php" hash="12d9799f273951ca22717df93088e6bb"/><file name="Source.php" hash="03fad199c925e07fffd5e42f63cbb1bb"/></dir></dir></dir></dir><dir name="Layer"><dir name="Filter"><file name="SearchSpring.php" hash="128a0a569e7d7a4e19b74bc947a4c01a"/><file name="SearchSpringCategory.php" hash="6654bdad88ca43917dbe072b6dfb21f8"/><file name="SearchSpringCategoryItem.php" hash="2dc143031706d2c6a7f4481ef7434bf4"/><file name="SearchSpringItem.php" hash="459fae0c48c411a58ae885d56124b1f3"/></dir></dir><dir name="Oauth"><file name="Server.php" hash="c5c2df03bc419caa49c8b1e3fe7d50ac"/></dir><dir name="Observer"><file name="CategorySaveObserver.php" hash="cfbbaabb8eb31d79d8106d490758f3d7"/><file name="ConfigObserver.php" hash="209a8f8b97e5b7a0c1c7539d493371e6"/><file name="LiveIndexer.php" hash="0fb8e5738d9431c9e00a928477343d2f"/><file name="ProductSaveObserver.php" hash="68bd69b0e7a810e9eb9c29c09cc61d39"/></dir></dir><dir name="Operation"><file name="Product.php" hash="e190aa6864082e1b8dfe011f41f9f1df"/><file name="ProductOperation.php" hash="84df2df9055b52753680d4ccd94b6f68"/><dir name="Product"><file name="SetCategories.php" hash="0762e4f5975c98e87c6dcedbb9bb621c"/><file name="SetCoreFields.php" hash="bbd2f4a5506da61201edd0dfe783efe8"/><file name="SetFields.php" hash="4ced933a717710d1a4ad80c533570ff5"/><file name="SetId.php" hash="792f08d85b399d57afca103e9d0eabd1"/><file name="SetImages.php" hash="964cd029a1a7bbffb21039bffb5ee68f"/><file name="SetOptions.php" hash="3db65aee252c0eb6a5c65eac1b641bfb"/><file name="SetPricing.php" hash="a2bb94df706c1c62c5b1cbe26d8afdf6"/><file name="SetRatings.php" hash="d04ad0e2f5e1820b4b8b94880a83aef7"/><file name="SetReport.php" hash="834e7c62388c3e3655c80e2a96020ba2"/></dir></dir><dir name="Provider"><file name="ProductCollectionProvider.php" hash="e639e1667ed0f2bc59f2272ad36d3107"/><dir name="ProductCollection"><file name="FeedProvider.php" hash="50ea56af40e5dc044d6c6cbb4b7c64c3"/><file name="ProductProvider.php" hash="bdb5b820343e060bb7cf2bea807a7607"/></dir></dir><dir name="Request"><file name="JSON.php" hash="541d9331b620bc92820abe5630824e41"/></dir><dir name="Service"><dir name="SearchSpring"><file name="ApiAdapter.php" hash="6878323855ef8a7bd3de8e707e104610"/><file name="IndexingApiAdapter.php" hash="92fa5e7682ec42e3c1f8b62c490488cc"/><file name="SearchApiAdapter.php" hash="bda32ec16f53054e75fb331ffcc0c155"/></dir></dir><dir name="sql"><dir name="searchspring_manager"><file name="mysql4-install-1.0.0.php" hash="c0de6de0b74290978f65d7896768e89f"/><file name="mysql4-upgrade-0.4.0-1.0.0.php" hash="1f59325ef181499292deb7775a5e4dc2"/></dir></dir><dir name="Strategy"><file name="PricingStrategy.php" hash="ee021066a76db7fc2710e329daed1a4b"/><dir name="Pricing"><file name="BundleStrategy.php" hash="df2aee59e4a6ff19acf13bbc5f9ad5b9"/><file name="ConfigurableStrategy.php" hash="403e8298c4799ba2b7701255db86a941"/><file name="GroupedStrategy.php" hash="383c482098f502d6cde5dd9ed5cf9e13"/><file name="SimpleStrategy.php" hash="a1b9e7bae38c2def28a7b0a9e6fd456e"/><file name="Strategy.php" hash="9d0fda2a4ff168ab319fd0c2240501fd"/></dir></dir><dir name="String"><file name="Sanitizer.php" hash="e89fa5f86714621ea554aea9aa3f796c"/></dir><dir name="ThirdParty"><dir name="Amasty"><file name="LabelsOperation.php" hash="a1536050cafdf2ede093cb11530d723c"/></dir><dir name="TBT"><file name="RewardsOperation.php" hash="cd83a97c7231b1ec623b78247f2bd93e"/></dir></dir><dir name="Transformer"><file name="ProductCollectionToRecordCollectionTransformer.php" hash="44bdf6ecf2c06c6a5bc0f96cff427b4e"/></dir><dir name="Validator"><file name="ProductValidator.php" hash="6051f15723e69b05a2fe5fbae62a841d"/></dir><dir name="VarienObject"><file name="Data.php" hash="44f184dabbf0db1958d1f922af92f6a8"/></dir><dir name="Writer"><file name="ProductWriter.php" hash="c7b218d215e68b5e3076ef654a41b141"/><dir name="Product"><file name="FileWriter.php" hash="b296be56f236635afc20e817e6277c80"/><file name="ResponseWriter.php" hash="c1af0cc22a9e823ec07175e2d8e34c9f"/><dir name="Params"><file name="FileWriterParams.php" hash="24080fdf866bdac26ed4571c4c7fc9f9"/><file name="ResponseWriterParams.php" hash="bf66753a5952a78c0049f69ccaa6e74d"/></dir></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="searchspring"><dir name="manager"><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="a0e3da8cd870432cce2849a41aa1c5b9"/><file name="setup.phtml" hash="e019e039a41992ecf72a0ad956de7630"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="searchspring_manager.xml" hash="32227434f5770ddfd93de42d7feeff71"/></dir><dir name="template"><dir name="searchspring_manager"><dir name="layer"><file name="category_filter.phtml" hash="a9dd8c95a1d63b514cc8e9c5939168c5"/><file name="filter.phtml" hash="79888aac8f72d3597f2980d471237d64"/><file name="state.phtml" hash="168546af0f48a42c31c5a5d66b1de1c3"/><file name="view.phtml" hash="509776f71bc643839ade8d7e025764cb"/></dir><dir name="product"><file name="list.phtml" hash="9849b76e4fefac8ce181b428b5c6a148"/><dir name="list"><file name="toolbar.phtml" hash="aa2235708f7e861c63ba3e3e33ec041f"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="SearchSpring_SearchSpringManager.xml" hash="613ec81afc8d858f60dee96d91719c09"/></dir></dir><dir name="locale"><dir name="en_US"><dir name="template"><dir name="email"><file name="searchspring_api_error.html" hash="20bc8d923f96ca22dd2fe8cd876c49fe"/></dir></dir></dir></dir></dir><dir name="js"><dir name="searchspring"><file name="jquery-1.11.1.min.js" hash="8101d596b2b8fa35fe3a634ea342d7c3"/><file name="setup.js" hash="7754359957784a96bd0f9c188979b136"/></dir></dir><dir name="skin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="searchspring"><dir name="css"><file name="styles.css" hash="95f1ec4a442f0e2239f9a2db9e6e517c"/></dir></dir></dir></dir></dir></dir></target></contents></package>
|
1 |
<?xml version="1.0"?>
|
2 |
+
<package><name>SearchSpring_Manager</name><version>1.10.0</version><stability>stable</stability><license>SearchSpring Terms of Service</license><channel>community</channel><extends></extends><summary>Connects your Magento store to SearchSpring's subscription-based site search and category navigation services.</summary><description>SearchSpring improves the default Magento site search. Providing merchants with flexible, learning technology that enhances site search functionality, optimizes product results in real-time, allows for custom navigation, automates product SEO and provides fully configurable merchandising. Shoppers will find your products quickly and easily, generating repeat visits and increased sales!</description><notes>Added configuration for the product feed sales data timespan settings
|
3 |
+
Fixed the TBT Rewards Feed Operation
|
4 |
+
Changed the way product visibility filter works, allowing implicit Catalog/Search visibilities
|
5 |
+
Fixed issue where optional dropdown type attributes, that weren't set, were exporting as 'No'</notes><authors><author><name>SearchSpring Development Team</name><user>searchspring</user><email>info@searchspring.com</email></author></authors><date>2015-02-11</date><time>14:36:54</time><compatible></compatible><dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies><contents><target name="mage"><dir name="app"><dir name="code"><dir name="community"><dir name="SearchSpring"><file name="ErrorCodes.php" hash="fd8f65524b8f8708471f106aad294d0a"/><dir name="Manager"><file name="Collection.php" hash="0ebd621892bccd5d59ed3edcafada89b"/><file name="Iterator.php" hash="6f68effbe5452c1a6abd97cbf4b528ee"/><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Field"><file name="Timespan.php" hash="04e13b7375f1d57195aae385256c1274"/></dir><dir name="Fieldset"><file name="Hint.php" hash="82ff17ab23c59b1c5fd095dfdfe153bb"/><file name="Setup.php" hash="5f467825780852b12cba72abfbe9e596"/></dir></dir></dir></dir><dir name="Layer"><file name="View.php" hash="ae69c24e04b03048cc2cd9b7cc436603"/><dir name="Filter"><file name="SearchSpringCategory.php" hash="39fc479e15275db637c227e596d040f5"/><file name="SearchSpringList.php" hash="743bb9cb690c9df3d74e9de2c206d020"/></dir></dir></dir><dir name="Builder"><file name="OperationBuilder.php" hash="d85ad0a561091d34b3b98efd95646962"/></dir><dir name="controllers"><file name="GenerateController.php" hash="a8b0e0bd6d735ce33ca7ed09ecea3a24"/></dir><dir name="Entity"><file name="IndexingRequestBody.php" hash="6bdab2264cbb8dbafa666f493bf9bd60"/><file name="OperationsCollection.php" hash="be19c06bb1be447bd57601e67ac87557"/><file name="RecordsCollection.php" hash="c336526a10625a859c093d2b25dff911"/><file name="RequestBody.php" hash="4b6d7fd23f57527e9d53dd938d69a88d"/><file name="RequestParams.php" hash="f4778075264cd441c87e8de220fdd2a9"/><file name="SearchCollection.php" hash="e64543d4315c16d7a0717da8ec081e09"/><file name="SearchRequestBody.php" hash="bdfd9a2244ce1f9a7db8daca6e613176"/><file name="SearchResult.php" hash="863a720b8a837bd7e56e8a7fa781a1a1"/><dir name="SearchResult"><file name="Result.php" hash="ea4e36fe95e4c412af8d525a4628db5d"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="879a64f061de25cbd1292f4ead6c5b15"/><file name="api2.xml" hash="c958f2f25b6fcd0b467dc20fb945f1b4"/><file name="composer.json" hash="6a36df77eee995788585f7a8a535fa27"/><file name="config.xml" hash="81902aa1230e6ddba81739ee62d48787"/><file name="readme.md" hash="30d24e1aae89696090dcf22203802ad2"/><file name="system.xml" hash="5ac00df31f8874e68022b2bd21b2ab96"/></dir><dir name="Factory"><file name="ApiFactory.php" hash="2a0b31683e75cfa4c10bf6476a7346bf"/><file name="GeneratorFactory.php" hash="0609eec402a1a5df2f51079844231a4f"/><file name="IndexingRequestBodyFactory.php" hash="10e0717f6d938a06a9cfc68f6ac1ceaf"/><file name="PricingFactory.php" hash="bbba11efb7a2fd6ebf8c47d896c365a2"/><file name="SearchRequestBodyFactory.php" hash="4eb409f25d480ca11b08f206f7f4facc"/></dir><dir name="Generator"><file name="ProductGenerator.php" hash="69147879853105d0a388596b479a0b81"/></dir><dir name="Handler"><file name="ApiErrorHandler.php" hash="a287ed86d8d83a88b5a8f555015f2e80"/></dir><dir name="Helper"><file name="Data.php" hash="eb3620bd8eea016cc280c9d0a00c6644"/><file name="Http.php" hash="13d41de08d623892f6526817bf4ee971"/><file name="Oauth.php" hash="b6dd04c07e1322c38b76668b88d7d1e4"/><file name="Product.php" hash="e576ce5f09e32654cd0c1014b85d8d5a"/><file name="Webservice.php" hash="054d23d7db9da73b44bcbad083bd813e"/></dir><dir name="Model"><file name="Layer.php" hash="54afafde0cff2fcf2de2240bbb6cdb20"/><file name="Source.php" hash="906ec0129e2c51551d02a52dd1736892"/><dir name="Api2"><dir name="Auth"><file name="Adapter.php" hash="909c416381a44ef80b0665926a9e4ab2"/></dir><dir name="Indexing"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="3a306d75dccab962e7c81ecb82d35c60"/></dir></dir></dir></dir><dir name="Catalog"><dir name="Category"><dir name="Attribute"><dir name="EnableSearchSpring"><file name="Backend.php" hash="12d9799f273951ca22717df93088e6bb"/><file name="Source.php" hash="03fad199c925e07fffd5e42f63cbb1bb"/></dir></dir></dir></dir><dir name="Layer"><dir name="Filter"><file name="SearchSpring.php" hash="128a0a569e7d7a4e19b74bc947a4c01a"/><file name="SearchSpringCategory.php" hash="6654bdad88ca43917dbe072b6dfb21f8"/><file name="SearchSpringCategoryItem.php" hash="2dc143031706d2c6a7f4481ef7434bf4"/><file name="SearchSpringItem.php" hash="459fae0c48c411a58ae885d56124b1f3"/></dir></dir><dir name="Oauth"><file name="Server.php" hash="c5c2df03bc419caa49c8b1e3fe7d50ac"/></dir><dir name="Observer"><file name="CategorySaveObserver.php" hash="cfbbaabb8eb31d79d8106d490758f3d7"/><file name="ConfigObserver.php" hash="209a8f8b97e5b7a0c1c7539d493371e6"/><file name="LiveIndexer.php" hash="0fb8e5738d9431c9e00a928477343d2f"/><file name="ProductSaveObserver.php" hash="68bd69b0e7a810e9eb9c29c09cc61d39"/></dir><dir name="Source"><file name="Abstract.php" hash="965bfb89b539db821a75dd71ef7e7d5f"/></dir></dir><dir name="Operation"><file name="Product.php" hash="e190aa6864082e1b8dfe011f41f9f1df"/><file name="ProductOperation.php" hash="84df2df9055b52753680d4ccd94b6f68"/><dir name="Product"><file name="SetCategories.php" hash="0762e4f5975c98e87c6dcedbb9bb621c"/><file name="SetCoreFields.php" hash="b988b1a30f2d6a44b66a7ffbd33f1586"/><file name="SetFields.php" hash="8896858d190cadc5b19104120d7a1b58"/><file name="SetId.php" hash="792f08d85b399d57afca103e9d0eabd1"/><file name="SetImages.php" hash="964cd029a1a7bbffb21039bffb5ee68f"/><file name="SetOptions.php" hash="3db65aee252c0eb6a5c65eac1b641bfb"/><file name="SetPricing.php" hash="a2bb94df706c1c62c5b1cbe26d8afdf6"/><file name="SetRatings.php" hash="d04ad0e2f5e1820b4b8b94880a83aef7"/><file name="SetReport.php" hash="dec51d5202b0ceb826500275cf42941a"/></dir></dir><dir name="Provider"><file name="ProductCollectionProvider.php" hash="e639e1667ed0f2bc59f2272ad36d3107"/><dir name="ProductCollection"><file name="FeedProvider.php" hash="b82e2fae57e7c2d4e5b9d5a4b8440780"/><file name="ProductProvider.php" hash="dd8ce756d8f2a8117758e10ac220267e"/></dir></dir><dir name="Request"><file name="JSON.php" hash="541d9331b620bc92820abe5630824e41"/></dir><dir name="Service"><dir name="SearchSpring"><file name="ApiAdapter.php" hash="6878323855ef8a7bd3de8e707e104610"/><file name="IndexingApiAdapter.php" hash="92fa5e7682ec42e3c1f8b62c490488cc"/><file name="SearchApiAdapter.php" hash="bda32ec16f53054e75fb331ffcc0c155"/></dir></dir><dir name="sql"><dir name="searchspring_manager"><file name="mysql4-install-1.0.0.php" hash="c0de6de0b74290978f65d7896768e89f"/><file name="mysql4-upgrade-0.4.0-1.0.0.php" hash="1f59325ef181499292deb7775a5e4dc2"/></dir></dir><dir name="Strategy"><file name="PricingStrategy.php" hash="ee021066a76db7fc2710e329daed1a4b"/><dir name="Pricing"><file name="BundleStrategy.php" hash="df2aee59e4a6ff19acf13bbc5f9ad5b9"/><file name="ConfigurableStrategy.php" hash="403e8298c4799ba2b7701255db86a941"/><file name="GroupedStrategy.php" hash="383c482098f502d6cde5dd9ed5cf9e13"/><file name="SimpleStrategy.php" hash="a1b9e7bae38c2def28a7b0a9e6fd456e"/><file name="Strategy.php" hash="9d0fda2a4ff168ab319fd0c2240501fd"/></dir></dir><dir name="String"><file name="Sanitizer.php" hash="e89fa5f86714621ea554aea9aa3f796c"/></dir><dir name="ThirdParty"><dir name="Amasty"><file name="LabelsOperation.php" hash="a1536050cafdf2ede093cb11530d723c"/></dir><dir name="TBT"><file name="RewardsOperation.php" hash="cb86f610f60a5f6204da4a9080de2838"/></dir></dir><dir name="Transformer"><file name="ProductCollectionToRecordCollectionTransformer.php" hash="44bdf6ecf2c06c6a5bc0f96cff427b4e"/></dir><dir name="Validator"><file name="ProductValidator.php" hash="08ea9751207d9fc0fedb98716331f248"/></dir><dir name="VarienObject"><file name="Data.php" hash="44f184dabbf0db1958d1f922af92f6a8"/></dir><dir name="Writer"><file name="ProductWriter.php" hash="c7b218d215e68b5e3076ef654a41b141"/><dir name="Product"><file name="FileWriter.php" hash="b296be56f236635afc20e817e6277c80"/><file name="ResponseWriter.php" hash="c1af0cc22a9e823ec07175e2d8e34c9f"/><dir name="Params"><file name="FileWriterParams.php" hash="24080fdf866bdac26ed4571c4c7fc9f9"/><file name="ResponseWriterParams.php" hash="bf66753a5952a78c0049f69ccaa6e74d"/></dir></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="searchspring"><dir name="manager"><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="a0e3da8cd870432cce2849a41aa1c5b9"/><file name="setup.phtml" hash="e019e039a41992ecf72a0ad956de7630"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="searchspring_manager.xml" hash="32227434f5770ddfd93de42d7feeff71"/></dir><dir name="template"><dir name="searchspring_manager"><dir name="layer"><file name="category_filter.phtml" hash="a9dd8c95a1d63b514cc8e9c5939168c5"/><file name="filter.phtml" hash="79888aac8f72d3597f2980d471237d64"/><file name="state.phtml" hash="168546af0f48a42c31c5a5d66b1de1c3"/><file name="view.phtml" hash="509776f71bc643839ade8d7e025764cb"/></dir><dir name="product"><file name="list.phtml" hash="9849b76e4fefac8ce181b428b5c6a148"/><dir name="list"><file name="toolbar.phtml" hash="aa2235708f7e861c63ba3e3e33ec041f"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="etc"><dir name="modules"><file name="SearchSpring_SearchSpringManager.xml" hash="613ec81afc8d858f60dee96d91719c09"/></dir></dir><dir name="locale"><dir name="en_US"><dir name="template"><dir name="email"><file name="searchspring_api_error.html" hash="20bc8d923f96ca22dd2fe8cd876c49fe"/></dir></dir></dir></dir></dir><dir name="js"><dir name="searchspring"><file name="jquery-1.11.1.min.js" hash="8101d596b2b8fa35fe3a634ea342d7c3"/><file name="setup.js" hash="7754359957784a96bd0f9c188979b136"/></dir></dir><dir name="skin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="searchspring"><dir name="css"><file name="styles.css" hash="95f1ec4a442f0e2239f9a2db9e6e517c"/></dir></dir></dir></dir></dir></dir></target></contents></package>
|
|