Version Notes
Ampersand Commerce RichRelevance v0.1.3
Download this release
Release Info
Developer | Ampersand Commerce |
Extension | Ampersand_RichRelevance |
Version | 0.1.3 |
Comparing to | |
See all releases |
Version 0.1.3
- app/code/community/Ampersand/RichRelevance/Block/AddToCart.php +41 -0
- app/code/community/Ampersand/RichRelevance/Block/Adminhtml/DownloadButton.php +33 -0
- app/code/community/Ampersand/RichRelevance/Block/Adminhtml/PushButton.php +33 -0
- app/code/community/Ampersand/RichRelevance/Block/Adminhtml/System/Config/Renderer/Placements.php +34 -0
- app/code/community/Ampersand/RichRelevance/Block/Cart.php +33 -0
- app/code/community/Ampersand/RichRelevance/Block/Category.php +26 -0
- app/code/community/Ampersand/RichRelevance/Block/Checkout.php +83 -0
- app/code/community/Ampersand/RichRelevance/Block/Header.php +44 -0
- app/code/community/Ampersand/RichRelevance/Block/Item.php +22 -0
- app/code/community/Ampersand/RichRelevance/Block/Placement.php +14 -0
- app/code/community/Ampersand/RichRelevance/Block/Search.php +59 -0
- app/code/community/Ampersand/RichRelevance/Helper/Data.php +210 -0
- app/code/community/Ampersand/RichRelevance/Helper/Feed.php +92 -0
- app/code/community/Ampersand/RichRelevance/Helper/Log.php +45 -0
- app/code/community/Ampersand/RichRelevance/Helper/Service.php +145 -0
- app/code/community/Ampersand/RichRelevance/Model/Cron.php +74 -0
- app/code/community/Ampersand/RichRelevance/Model/Observer.php +33 -0
- app/code/community/Ampersand/RichRelevance/Model/Push.php +38 -0
- app/code/community/Ampersand/RichRelevance/changelog.txt +5 -0
- app/code/community/Ampersand/RichRelevance/controllers/Adminhtml/RequestController.php +48 -0
- app/code/community/Ampersand/RichRelevance/etc/adminhtml.xml +22 -0
- app/code/community/Ampersand/RichRelevance/etc/config.xml +131 -0
- app/code/community/Ampersand/RichRelevance/etc/integration/out.messages.xml +228 -0
- app/code/community/Ampersand/RichRelevance/etc/integration/out.types.xml +84 -0
- app/code/community/Ampersand/RichRelevance/etc/system.xml +281 -0
- app/code/community/Ampersand/RichRelevance/sql/ampersand_richrelevance_setup/mysql4-install-0.0.1.php +27 -0
- app/design/frontend/base/default/layout/ampersand_richrelevance.xml +107 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/footer.phtml +7 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/header.phtml +35 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/placement.phtml +7 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/add-to-cart.phtml +8 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/cart.phtml +16 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/category.phtml +13 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/checkout.phtml +12 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/home.phtml +10 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/item.phtml +15 -0
- app/design/frontend/base/default/template/ampersand_richrelevance/types/search.phtml +15 -0
- app/etc/modules/Ampersand_RichRelevance.xml +12 -0
- lib/licenses/service_richrelevance.lic +10 -0
- package.xml +28 -0
- skin/frontend/base/default/ampersand_richrelevance/css/default.css +43 -0
app/code/community/Ampersand/RichRelevance/Block/AddToCart.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_AddToCart extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
protected $_addedToCartItemId;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Sets the template for add to cart
|
8 |
+
*
|
9 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
10 |
+
*/
|
11 |
+
protected function _construct()
|
12 |
+
{
|
13 |
+
parent::_construct();
|
14 |
+
$this->setTemplate('ampersand_richrelevance/types/add-to-cart.phtml');
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Retrieve id of the item last added to the cart
|
19 |
+
*
|
20 |
+
* @return int
|
21 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
22 |
+
*/
|
23 |
+
public function getAddedToCartItemId()
|
24 |
+
{
|
25 |
+
if (is_null($this->_addedToCartItemId)) {
|
26 |
+
$this->_addedToCartItemId = Mage::getSingleton('core/session')
|
27 |
+
->getData(Ampersand_RichRelevance_Helper_Data::SESSION_KEY_LAST_ADDED_ITEM_ID);
|
28 |
+
|
29 |
+
Mage::getSingleton('core/session')
|
30 |
+
->unsetData(Ampersand_RichRelevance_Helper_Data::SESSION_KEY_LAST_ADDED_ITEM_ID);
|
31 |
+
|
32 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
33 |
+
$log->addItem(
|
34 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_ADDTOCART,
|
35 |
+
"R3_ADDTOCART.addItemIdToCart({$this->_addedToCartItemId});"
|
36 |
+
);
|
37 |
+
}
|
38 |
+
|
39 |
+
return $this->_addedToCartItemId;
|
40 |
+
}
|
41 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Adminhtml/DownloadButton.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Adminhtml_DownloadButton
|
3 |
+
extends Mage_Adminhtml_Block_System_Config_Form_Field
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* Define download button properties such as label and associated controller
|
7 |
+
*
|
8 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
9 |
+
* @return string
|
10 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
11 |
+
*/
|
12 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
13 |
+
{
|
14 |
+
$this->setElement($element);
|
15 |
+
|
16 |
+
$store = $this->getRequest()->getParam('store');
|
17 |
+
$url = $this->getUrl(
|
18 |
+
'ampersand_richrelevance_admin/request/download',
|
19 |
+
array(
|
20 |
+
'store_id' => $store,
|
21 |
+
)
|
22 |
+
);
|
23 |
+
|
24 |
+
$html = $this->getLayout()->createBlock('adminhtml/widget_button')
|
25 |
+
->setType('button')
|
26 |
+
->setClass('scalable')
|
27 |
+
->setLabel('Generate and download')
|
28 |
+
->setOnClick("setLocation('{$url}')")
|
29 |
+
->toHtml();
|
30 |
+
|
31 |
+
return $html;
|
32 |
+
}
|
33 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Adminhtml/PushButton.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Adminhtml_PushButton
|
3 |
+
extends Mage_Adminhtml_Block_System_Config_Form_Field
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* Define push button properties such as label and associated controller
|
7 |
+
*
|
8 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
9 |
+
* @return string
|
10 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
11 |
+
*/
|
12 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
13 |
+
{
|
14 |
+
$this->setElement($element);
|
15 |
+
|
16 |
+
$store = $this->getRequest()->getParam('store');
|
17 |
+
$url = $this->getUrl(
|
18 |
+
'ampersand_richrelevance_admin/request/push',
|
19 |
+
array(
|
20 |
+
'store_id' => $store,
|
21 |
+
)
|
22 |
+
);
|
23 |
+
|
24 |
+
$html = $this->getLayout()->createBlock('adminhtml/widget_button')
|
25 |
+
->setType('button')
|
26 |
+
->setClass('scalable')
|
27 |
+
->setLabel('Generate and push')
|
28 |
+
->setOnClick("setLocation('{$url}')")
|
29 |
+
->toHtml();
|
30 |
+
|
31 |
+
return $html;
|
32 |
+
}
|
33 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Adminhtml/System/Config/Renderer/Placements.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Adminhtml_System_Config_Renderer_Placements
|
3 |
+
extends Ampersand_Adminhtml_Block_System_Config_Renderer_ArrayAbstract
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* Define custom renderer for placements table
|
7 |
+
*
|
8 |
+
* @return Ampersand_RichRelevance_Block_Adminhtml_System_Config_Renderer_Placements
|
9 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
10 |
+
*/
|
11 |
+
protected function _prepareToRender()
|
12 |
+
{
|
13 |
+
$this->addColumn(
|
14 |
+
'page_type',
|
15 |
+
array(
|
16 |
+
'label' => Mage::helper('ampersand_richrelevance')->__('Page Type'),
|
17 |
+
'style' => 'width:100px',
|
18 |
+
)
|
19 |
+
);
|
20 |
+
|
21 |
+
$this->addColumn(
|
22 |
+
'name',
|
23 |
+
array(
|
24 |
+
'label' => Mage::helper('ampersand_richrelevance')->__('Placement Name'),
|
25 |
+
'style' => 'width:150px',
|
26 |
+
)
|
27 |
+
);
|
28 |
+
|
29 |
+
$this->_addAfter = false;
|
30 |
+
$this->_addButtonLabel = Mage::helper('ampersand_richrelevance')->__('Add Placement');
|
31 |
+
|
32 |
+
return $this;
|
33 |
+
}
|
34 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Cart.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Cart extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Retrieve ids of items in the cart from the session
|
6 |
+
*
|
7 |
+
* @return array
|
8 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
9 |
+
*/
|
10 |
+
public function getCartItemIds()
|
11 |
+
{
|
12 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
13 |
+
|
14 |
+
$itemCollection = Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection();
|
15 |
+
|
16 |
+
$cartItemIds = array();
|
17 |
+
foreach ($itemCollection as $_item) {
|
18 |
+
// Don't use simple products that have associated configurables
|
19 |
+
if (!is_null($_item->getParentItemId())) {
|
20 |
+
continue;
|
21 |
+
}
|
22 |
+
|
23 |
+
$cartItemId = $_item->getSku();
|
24 |
+
$cartItemIds[] = $cartItemId;
|
25 |
+
$log->addItem(
|
26 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_CART,
|
27 |
+
"R3_CART.addItemId({$cartItemId});"
|
28 |
+
);
|
29 |
+
}
|
30 |
+
|
31 |
+
return $cartItemIds;
|
32 |
+
}
|
33 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Category.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Category extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Retrieve category object from registry
|
6 |
+
*
|
7 |
+
* @return Mage_Catalog_Model_Category $category
|
8 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
9 |
+
*/
|
10 |
+
public function getCategory()
|
11 |
+
{
|
12 |
+
$category = Mage::registry('current_category');
|
13 |
+
|
14 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
15 |
+
$log->addItem(
|
16 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_CATEGORY,
|
17 |
+
"R3_CATEGORY.setId({$category->getId()});"
|
18 |
+
);
|
19 |
+
$log->addItem(
|
20 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_CATEGORY,
|
21 |
+
"R3_CATEGORY.setName({$category->getName()});"
|
22 |
+
);
|
23 |
+
|
24 |
+
return $category;
|
25 |
+
}
|
26 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Checkout.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Checkout extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
protected $_orderNumber;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Retrieve order number from registry
|
8 |
+
*
|
9 |
+
* @return int
|
10 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
11 |
+
*/
|
12 |
+
public function getOrderNumber()
|
13 |
+
{
|
14 |
+
if (!$this->_orderNumber) {
|
15 |
+
$orderIds = Mage::registry(Ampersand_RichRelevance_Helper_Data::REGISTRY_KEY_ORDER_IDS);
|
16 |
+
$orderId = reset($orderIds);
|
17 |
+
|
18 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
19 |
+
$this->_orderNumber = $order->getIncrementId();
|
20 |
+
}
|
21 |
+
|
22 |
+
return $this->_orderNumber;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Retrieve items from an order
|
27 |
+
*
|
28 |
+
* @return array
|
29 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
30 |
+
*/
|
31 |
+
public function getOrderItems()
|
32 |
+
{
|
33 |
+
$orderIds = Mage::registry(Ampersand_RichRelevance_Helper_Data::REGISTRY_KEY_ORDER_IDS);
|
34 |
+
|
35 |
+
$orderItems = array();
|
36 |
+
foreach ($orderIds as $_orderId) {
|
37 |
+
$order = Mage::getModel('sales/order')->load($_orderId);
|
38 |
+
$items = $order->getAllItems();
|
39 |
+
|
40 |
+
foreach ($items as $_item) {
|
41 |
+
// Don't use simple products that have associated configurables
|
42 |
+
if (!is_null($_item->getParentItemId())) {
|
43 |
+
continue;
|
44 |
+
}
|
45 |
+
|
46 |
+
$_productId = $_item->getProductId();
|
47 |
+
if (array_key_exists($_productId, $orderItems)) {
|
48 |
+
$orderItems[$_productId]->setQty(
|
49 |
+
$orderItems[$_productId]->getQty() + $_item->getQtyToInvoice()
|
50 |
+
);
|
51 |
+
} else {
|
52 |
+
$formattedPrice = Mage::helper('ampersand_richrelevance')
|
53 |
+
->formatPrice($_item->getPrice());
|
54 |
+
|
55 |
+
$orderItems[$_productId] = new Varien_Object(
|
56 |
+
array(
|
57 |
+
'sku' => $_item->getSku(),
|
58 |
+
'price' => $formattedPrice,
|
59 |
+
'qty' => $_item->getQtyToInvoice(),
|
60 |
+
)
|
61 |
+
);
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
67 |
+
$log->addItem(
|
68 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_CHECKOUT,
|
69 |
+
"R3_PURCHASED.setOrderNumber({$this->getOrderNumber()});"
|
70 |
+
);
|
71 |
+
foreach ($orderItems as $_productData) {
|
72 |
+
$log->addItem(
|
73 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_CHECKOUT,
|
74 |
+
'R3_PURCHASED.addItemIdPriceQuantity('
|
75 |
+
. $_productData->getSku() . ', '
|
76 |
+
. $_productData->getPrice() . ', '
|
77 |
+
. $_productData->getQty() .');'
|
78 |
+
);
|
79 |
+
}
|
80 |
+
|
81 |
+
return $orderItems;
|
82 |
+
}
|
83 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Header.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Header extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Retrieve session id
|
6 |
+
*
|
7 |
+
* @return string
|
8 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
9 |
+
*/
|
10 |
+
public function getSessionId()
|
11 |
+
{
|
12 |
+
$sessionId = Mage::getSingleton('core/session')->getData('visitor_data/session_id');
|
13 |
+
|
14 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
15 |
+
$log->addItem(
|
16 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SETTINGS,
|
17 |
+
"R3_COMMON.setSessionId({$sessionId});"
|
18 |
+
);
|
19 |
+
|
20 |
+
return $sessionId;
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Retrieve customer id
|
25 |
+
*
|
26 |
+
* @return int
|
27 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
28 |
+
*/
|
29 |
+
|
30 |
+
public function getCustomerId()
|
31 |
+
{
|
32 |
+
if (!$customerId = Mage::getSingleton('customer/session')->getCustomer()->getId()) {
|
33 |
+
$customerId = $this->getSessionId();
|
34 |
+
}
|
35 |
+
|
36 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
37 |
+
$log->addItem(
|
38 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SETTINGS,
|
39 |
+
"R3_COMMON.setUserId({$customerId});"
|
40 |
+
);
|
41 |
+
|
42 |
+
return $customerId;
|
43 |
+
}
|
44 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Item.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Item extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Retrieve product from the Mage registry
|
6 |
+
*
|
7 |
+
* @return Mage_Catalog_Model_Product $product
|
8 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
9 |
+
*/
|
10 |
+
public function getProduct()
|
11 |
+
{
|
12 |
+
$product = Mage::registry('current_product');
|
13 |
+
|
14 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
15 |
+
$log->addItem(
|
16 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_ITEM,
|
17 |
+
"R3_ITEM.setId({$product->getSku()});"
|
18 |
+
);
|
19 |
+
|
20 |
+
return $product;
|
21 |
+
}
|
22 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Placement.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Placement extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Set the template
|
6 |
+
*
|
7 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
8 |
+
*/
|
9 |
+
public function __construct()
|
10 |
+
{
|
11 |
+
parent::__construct();
|
12 |
+
$this->setTemplate('ampersand_richrelevance/placement.phtml');
|
13 |
+
}
|
14 |
+
}
|
app/code/community/Ampersand/RichRelevance/Block/Search.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Block_Search extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Retrieve search terms
|
6 |
+
*
|
7 |
+
* @return string
|
8 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
9 |
+
*/
|
10 |
+
public function getTerms()
|
11 |
+
{
|
12 |
+
$terms = Mage::helper('catalogsearch')->getQueryText();
|
13 |
+
|
14 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
15 |
+
$log->addItem(
|
16 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SEARCH,
|
17 |
+
"R3_SEARCH.setTerms({$terms});"
|
18 |
+
);
|
19 |
+
|
20 |
+
return $terms;
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Retrieves an array of SKUs from a search result
|
25 |
+
*
|
26 |
+
* @param int $limit
|
27 |
+
* @return array
|
28 |
+
*/
|
29 |
+
public function getSkus($limit = Ampersand_RichRelevance_Helper_Data::SEARCH_RESULT_LIMIT)
|
30 |
+
{
|
31 |
+
$resultCollection = $this->getLayout()->getBlock('search_result_list')
|
32 |
+
->getLoadedProductCollection();
|
33 |
+
|
34 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
35 |
+
|
36 |
+
$counter = 0;
|
37 |
+
$skus = array();
|
38 |
+
foreach ($resultCollection as $_result) {
|
39 |
+
$_sku = $_result->getSku();
|
40 |
+
$skus[] = $_sku;
|
41 |
+
|
42 |
+
$log->addItem(
|
43 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SEARCH,
|
44 |
+
"R3_SEARCH.addItemId({$_sku});"
|
45 |
+
);
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Limiting this collection size will limit the actual search result set,
|
49 |
+
* so instead we must use a counter to break once we have enough results.
|
50 |
+
*/
|
51 |
+
$counter++;
|
52 |
+
if ($counter >= $limit) {
|
53 |
+
break;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
return $skus;
|
58 |
+
}
|
59 |
+
}
|
app/code/community/Ampersand/RichRelevance/Helper/Data.php
ADDED
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Helper_Data extends Mage_Core_Helper_Abstract
|
3 |
+
{
|
4 |
+
const SEARCH_RESULT_LIMIT = 15;
|
5 |
+
|
6 |
+
const SESSION_KEY_LAST_ADDED_ITEM_ID = 'richrelevance_last_added_item_id';
|
7 |
+
|
8 |
+
const REGISTRY_KEY_ORDER_IDS = 'richrelevance_last_order_ids';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Retrieve directory separator constant not available to integration
|
12 |
+
* xml files
|
13 |
+
*
|
14 |
+
* @todo Find out if this is a mapper in the integration module
|
15 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.co.uk>
|
16 |
+
*/
|
17 |
+
public function getDirectorySeparator()
|
18 |
+
{
|
19 |
+
return DS;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Retrieve the store config to check that RichRelevance is enabled
|
24 |
+
* for a particular store, also returns false if the API key is not
|
25 |
+
* set
|
26 |
+
*
|
27 |
+
* @param Mage_Core_Model_Store $store
|
28 |
+
* @return boolean
|
29 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
30 |
+
*/
|
31 |
+
public function isEnabled($store = null)
|
32 |
+
{
|
33 |
+
if (!Mage::getStoreConfig('ampersand_richrelevance/general_settings/enabled', $store)) {
|
34 |
+
return false;
|
35 |
+
}
|
36 |
+
|
37 |
+
if (!Mage::getStoreConfig('ampersand_richrelevance/api_conn_settings/api_key', $store)) {
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
|
41 |
+
return true;
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Retrieve the HTML for a placement specified in the parameter
|
46 |
+
*
|
47 |
+
* @param string $placementName
|
48 |
+
* @return string
|
49 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
50 |
+
*/
|
51 |
+
public function getPlacement($placementName)
|
52 |
+
{
|
53 |
+
$block = Mage::app()->getLayout()->createBlock('ampersand_richrelevance/placement')
|
54 |
+
->setPlacementName($placementName);
|
55 |
+
|
56 |
+
return $block->toHtml();
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Retrieves an array of placements for a particular page type as
|
61 |
+
* specified in the admin panel
|
62 |
+
*
|
63 |
+
* @param string $pageType
|
64 |
+
* @return array
|
65 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
66 |
+
*/
|
67 |
+
public function getPagePlacements($pageType)
|
68 |
+
{
|
69 |
+
$placements = Mage::getStoreConfig('ampersand_richrelevance/placement_settings/placements');
|
70 |
+
$placements = unserialize($placements);
|
71 |
+
|
72 |
+
$placementsArray = array();
|
73 |
+
$_placementObject = new Varien_Object();
|
74 |
+
foreach ($placements as $_placement) {
|
75 |
+
$_placementObject->setData($_placement);
|
76 |
+
$_placementType = $_placementObject->getPageType();
|
77 |
+
$_placementName = $_placementObject->getName();
|
78 |
+
if ($_placementType == $pageType) {
|
79 |
+
$placementsArray[] = $_placementName;
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
84 |
+
foreach ($placementsArray as $_pagePlacement) {
|
85 |
+
$log->addItem(
|
86 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_PLACEMENT,
|
87 |
+
"R3_COMMON.addPlacementType({$pageType}.{$_pagePlacement});"
|
88 |
+
);
|
89 |
+
}
|
90 |
+
|
91 |
+
return $placementsArray;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Retrieve the FTP Host from the configuration file
|
96 |
+
*
|
97 |
+
* @return string
|
98 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
99 |
+
*/
|
100 |
+
public function getFtpHost()
|
101 |
+
{
|
102 |
+
return Mage::app()->getConfig()->getNode('ampersand_richrelevance/ftp_host');
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Retrieve the API key from the admin panel
|
107 |
+
*
|
108 |
+
* @return string
|
109 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
110 |
+
*/
|
111 |
+
public function getApiKey()
|
112 |
+
{
|
113 |
+
$apiKey = Mage::getStoreConfig('ampersand_richrelevance/api_conn_settings/api_key');
|
114 |
+
|
115 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
116 |
+
$log->addItem(
|
117 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SETTINGS,
|
118 |
+
"R3_COMMON.setApiKey({$apiKey});"
|
119 |
+
);
|
120 |
+
|
121 |
+
return $apiKey;
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Determine whether developer mode is enabled
|
126 |
+
*
|
127 |
+
* @return boolean
|
128 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
129 |
+
*/
|
130 |
+
public function getDeveloperMode()
|
131 |
+
{
|
132 |
+
$developerMode =
|
133 |
+
Mage::getStoreConfig('ampersand_richrelevance/developer_settings/developer_mode');
|
134 |
+
|
135 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
136 |
+
$developerModeVerbose = $developerMode ? 'true' : 'false';
|
137 |
+
$log->addItem(
|
138 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SETTINGS,
|
139 |
+
"R3_COMMON.forceDevMode({$developerModeVerbose});"
|
140 |
+
);
|
141 |
+
|
142 |
+
return $developerMode;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Determine whether force display mode is enabled
|
147 |
+
*
|
148 |
+
* @return boolean
|
149 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
150 |
+
*/
|
151 |
+
public function getForceDisplayMode()
|
152 |
+
{
|
153 |
+
$forceDisplayMode =
|
154 |
+
Mage::getStoreConfig('ampersand_richrelevance/developer_settings/display_mode');
|
155 |
+
|
156 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
157 |
+
$forceDisplayModeVerbose = $forceDisplayMode ? 'true' : 'false';
|
158 |
+
$log->addItem(
|
159 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SETTINGS,
|
160 |
+
"R3_COMMON.forceDisplayMode({$forceDisplayModeVerbose});"
|
161 |
+
);
|
162 |
+
|
163 |
+
return $forceDisplayMode;
|
164 |
+
}
|
165 |
+
|
166 |
+
/**
|
167 |
+
* Determine whether dummy data mode is enabled
|
168 |
+
*
|
169 |
+
* @return boolean
|
170 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
171 |
+
*/
|
172 |
+
public function getDummyDataMode()
|
173 |
+
{
|
174 |
+
$dummyDataMode =
|
175 |
+
Mage::getStoreConfig('ampersand_richrelevance/developer_settings/allow_dummy_products');
|
176 |
+
|
177 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
178 |
+
$dummyDataModeVerbose = $dummyDataMode ? 'true' : 'false';
|
179 |
+
$log->addItem(
|
180 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_SETTINGS,
|
181 |
+
"R3_COMMON.useDummyData({$dummyDataModeVerbose});"
|
182 |
+
);
|
183 |
+
|
184 |
+
return $dummyDataMode;
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Generate HTML for add to basket
|
189 |
+
*
|
190 |
+
* @return string
|
191 |
+
*/
|
192 |
+
public function getAddToBasketBlock()
|
193 |
+
{
|
194 |
+
$block = Mage::app()->getLayout()->createBlock('ampersand_richrelevance/addToCart');
|
195 |
+
|
196 |
+
return $block;
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* Convert the price to a USD format with 2 decimal places
|
201 |
+
*
|
202 |
+
* @param string $price
|
203 |
+
* @return string
|
204 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
205 |
+
*/
|
206 |
+
public function formatPrice($price)
|
207 |
+
{
|
208 |
+
return number_format($price, 2, '.', '');
|
209 |
+
}
|
210 |
+
}
|
app/code/community/Ampersand/RichRelevance/Helper/Feed.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Helper_Feed extends Mage_Core_Helper_Abstract
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* @todo These values should be in the transformations as subject to change
|
6 |
+
*/
|
7 |
+
const RECOMMENDABLE_YES = 'y';
|
8 |
+
const RECOMMENDABLE_NO = 'n';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Retrieve whether a product is recommendable based on its recommendable
|
12 |
+
* settings, inclusion of out of stock products, and its availability
|
13 |
+
*
|
14 |
+
* @param Mage_Catalog_Model_Product $product
|
15 |
+
* @return string
|
16 |
+
*/
|
17 |
+
public function getIsRecommendable($product)
|
18 |
+
{
|
19 |
+
// if the product is not recommendable, we don't need to check any further
|
20 |
+
if (!$product->getIsRecommendable()) {
|
21 |
+
return self::RECOMMENDABLE_NO;
|
22 |
+
}
|
23 |
+
|
24 |
+
// if we dont care about out of stock products, we don't need to check any further
|
25 |
+
$includeOutOfStockProducts =
|
26 |
+
'ampersand_richrelevance/placement_settings/include_out_of_stock_products';
|
27 |
+
$store = Mage::helper('ampersand_richrelevance/service')->getCurrentStore();
|
28 |
+
if (Mage::getStoreConfig($includeOutOfStockProducts, $store)) {
|
29 |
+
return self::RECOMMENDABLE_YES;
|
30 |
+
}
|
31 |
+
|
32 |
+
// the final decision is based on whether this product is in stock
|
33 |
+
$stockItem = $product->getStockItem();
|
34 |
+
if (!is_object($stockItem)) {
|
35 |
+
// product is not under stock control
|
36 |
+
return self::RECOMMENDABLE_YES;
|
37 |
+
} elseif ($stockItem->getIsInStock() && $stockItem->getQty() > 0) {
|
38 |
+
// product is in stock and has quantity
|
39 |
+
return self::RECOMMENDABLE_YES;
|
40 |
+
} else {
|
41 |
+
// product is not in stock
|
42 |
+
return self::RECOMMENDABLE_NO;
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Retrieve the number of reviews for a specified product in the current store.
|
48 |
+
*
|
49 |
+
* @param int $productId
|
50 |
+
* @return int
|
51 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
52 |
+
*/
|
53 |
+
public function getNumOfReviews($productId)
|
54 |
+
{
|
55 |
+
$store = Mage::helper('ampersand_richrelevance/service')->getCurrentStore();
|
56 |
+
$summaryData = $this->_getReviewSummary($productId, $store);
|
57 |
+
$noOfReviews = $summaryData->getReviewsCount();
|
58 |
+
return is_null($noOfReviews) ? '0' : $noOfReviews;
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Retrieve the rating of a particular product as a percentage.
|
63 |
+
*
|
64 |
+
* @param int $productId
|
65 |
+
* @return string
|
66 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
67 |
+
*/
|
68 |
+
public function getRating($productId)
|
69 |
+
{
|
70 |
+
$store = Mage::helper('ampersand_richrelevance/service')->getCurrentStore();
|
71 |
+
$summaryData = $this->_getReviewSummary($productId, $store);
|
72 |
+
return $summaryData->getRatingSummary();
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Common functionality to retrieve review information for a product.
|
77 |
+
*
|
78 |
+
* @param type $productId
|
79 |
+
* @param type $storeId
|
80 |
+
* @return type
|
81 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
82 |
+
*/
|
83 |
+
protected function _getReviewSummary($productId, $storeId = null)
|
84 |
+
{
|
85 |
+
$store = Mage::app()->getStore($storeId);
|
86 |
+
$summaryCollection = Mage::getResourceModel('review/review_summary_collection')
|
87 |
+
->addStoreFilter($store->getId())
|
88 |
+
->addEntityFilter($productId);
|
89 |
+
|
90 |
+
return $summaryCollection->getFirstItem();
|
91 |
+
}
|
92 |
+
}
|
app/code/community/Ampersand/RichRelevance/Helper/Log.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Helper_Log extends Mage_Core_Helper_Abstract
|
3 |
+
{
|
4 |
+
const TYPE_FEED = 'feed';
|
5 |
+
|
6 |
+
const TYPE_ITEM = 'item';
|
7 |
+
|
8 |
+
const TYPE_CATEGORY = 'category';
|
9 |
+
|
10 |
+
const TYPE_SEARCH = 'search';
|
11 |
+
|
12 |
+
const TYPE_ADDTOCART = 'addtocart';
|
13 |
+
|
14 |
+
const TYPE_CART = 'cart';
|
15 |
+
|
16 |
+
const TYPE_CHECKOUT = 'checkout';
|
17 |
+
|
18 |
+
const TYPE_PLACEMENT = 'placement';
|
19 |
+
|
20 |
+
const TYPE_SETTINGS = 'settings';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Adds a log message
|
24 |
+
*
|
25 |
+
* This needs to be refactored to push data in to the integration database table
|
26 |
+
*
|
27 |
+
* @param string $type
|
28 |
+
* @param string $message
|
29 |
+
* @param mixed $store
|
30 |
+
* @return Ampersand_RichRelevance_Helper_Log
|
31 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
32 |
+
*/
|
33 |
+
public function addItem($type, $message, $storeId = null)
|
34 |
+
{
|
35 |
+
$store = Mage::app()->getStore($storeId);
|
36 |
+
|
37 |
+
if (!Mage::getStoreConfig("ampersand_richrelevance/log_settings/{$type}", $store)) {
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
Mage::log($message, null, "richrelevance-{$store->getCode()}-{$type}.log");
|
42 |
+
|
43 |
+
return $this;
|
44 |
+
}
|
45 |
+
}
|
app/code/community/Ampersand/RichRelevance/Helper/Service.php
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Helper_Service extends Ampersand_Integration_Helper_ServiceAbstract
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Retrieves service code for use in integration module
|
6 |
+
*
|
7 |
+
* @return string
|
8 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
9 |
+
*/
|
10 |
+
protected function _getServiceCode()
|
11 |
+
{
|
12 |
+
return 'richrelevance';
|
13 |
+
}
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Retrieves the store code for the current store as set in
|
17 |
+
* Ampersand_Integration_Helper_ServiceAbstract
|
18 |
+
*
|
19 |
+
* @return string
|
20 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
21 |
+
*/
|
22 |
+
public function getCurrentStoreCode()
|
23 |
+
{
|
24 |
+
return $this->getCurrentStore()->getCode();
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Executes the creation of the catalog feed using the integration
|
29 |
+
* module, returns the directory where the feed was placed
|
30 |
+
*
|
31 |
+
* @return string
|
32 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
33 |
+
*/
|
34 |
+
public function exportCatalogData()
|
35 |
+
{
|
36 |
+
$currentStore = $this->getCurrentStore();
|
37 |
+
|
38 |
+
$maxProductsToSend =
|
39 |
+
Mage::app()->getConfig()->getNode('ampersand_richrelevance/max_products_to_send');
|
40 |
+
|
41 |
+
$productCollection = Mage::getModel('catalog/product')->getCollection()
|
42 |
+
->addAttributeToSelect('*')
|
43 |
+
->setStore($currentStore)
|
44 |
+
->addAttributeToFilter('price', array('gt' => '0'))
|
45 |
+
->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
|
46 |
+
->setPageSize($maxProductsToSend);
|
47 |
+
|
48 |
+
Mage::getModel('catalog/product_visibility')
|
49 |
+
->addVisibleInSiteFilterToCollection($productCollection);
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Really dirty, but we need to be absolutely sure each product is in the correct scope.
|
53 |
+
* Setting the scope of the collection above does not seem to be enough for product urls.
|
54 |
+
*/
|
55 |
+
foreach ($productCollection as $_product) {
|
56 |
+
$_product->setStoreId($currentStore->getId());
|
57 |
+
}
|
58 |
+
|
59 |
+
$maxCategoriesToSend =
|
60 |
+
Mage::app()->getConfig()->getNode('ampersand_richrelevance/max_categories_to_send');
|
61 |
+
|
62 |
+
$rootCategory = $currentStore->getRootCategoryId();
|
63 |
+
$rootPath = Mage::getModel('catalog/category')->load($rootCategory)->getPath();
|
64 |
+
$categoryCollection = Mage::getModel('catalog/category')->getCollection()
|
65 |
+
->addAttributeToSelect('*')
|
66 |
+
->addAttributeToFilter('path', array('like' => "$rootPath%"))
|
67 |
+
->addAttributeToFilter('level', array('gt' => '1'))
|
68 |
+
->setPageSize($maxCategoriesToSend);
|
69 |
+
|
70 |
+
// we need to override the admin area for images to work
|
71 |
+
$currentArea = Mage::getDesign()->getArea();
|
72 |
+
Mage::getDesign()->setArea(Mage_Core_Model_App_Area::AREA_FRONTEND);
|
73 |
+
|
74 |
+
$filePath = $this->exportProducts($productCollection);
|
75 |
+
$this->exportCategories($categoryCollection);
|
76 |
+
$this->exportProductCategories($productCollection);
|
77 |
+
|
78 |
+
// set the current area back to what it was
|
79 |
+
Mage::getDesign()->setArea($currentArea);
|
80 |
+
|
81 |
+
return dirname($filePath);
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Export the product feed specifically
|
86 |
+
*
|
87 |
+
* @param Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $productCollection
|
88 |
+
* @return string
|
89 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
90 |
+
*/
|
91 |
+
public function exportProducts($productCollection)
|
92 |
+
{
|
93 |
+
return $this->getService()->exportProducts($productCollection);
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Export the category feed specifically
|
98 |
+
*
|
99 |
+
* @param Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection $categoryCollection
|
100 |
+
* @return string
|
101 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
102 |
+
*/
|
103 |
+
public function exportCategories($categoryCollection)
|
104 |
+
{
|
105 |
+
return $this->getService()->exportCategories($categoryCollection);
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Export the products in categories feed specifically
|
110 |
+
*
|
111 |
+
* @param Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $productCollection
|
112 |
+
* @return string
|
113 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
114 |
+
*/
|
115 |
+
public function exportProductCategories($productCollection)
|
116 |
+
{
|
117 |
+
$productCategories = array();
|
118 |
+
|
119 |
+
foreach ($productCollection as $_product) {
|
120 |
+
foreach ($_product->getCategoryIds() as $_categoryId)
|
121 |
+
$productCategories[] = array(
|
122 |
+
'sku' => $_product->getSku(),
|
123 |
+
'category_id' => $_categoryId,
|
124 |
+
);
|
125 |
+
}
|
126 |
+
|
127 |
+
return $this->getService()->exportProductCategories($productCategories);
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Return whether a category is a root category for the current store.
|
132 |
+
*
|
133 |
+
* @param int $categoryId
|
134 |
+
* @return bool
|
135 |
+
* @author Joseph McDermott <joseph.mcdermott@ampersandcommerce.com>
|
136 |
+
*/
|
137 |
+
public function getIsRootCategory($categoryId, $store = null)
|
138 |
+
{
|
139 |
+
if (!$store) {
|
140 |
+
$store = $this->getCurrentStore();
|
141 |
+
}
|
142 |
+
|
143 |
+
return ($categoryId == $store->getRootCategoryId()) ? true : false;
|
144 |
+
}
|
145 |
+
}
|
app/code/community/Ampersand/RichRelevance/Model/Cron.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Model_Cron
|
3 |
+
{
|
4 |
+
const KEEP_ZIP_INTERVAL_IN_SECONDS = 86400; // A day in seconds
|
5 |
+
|
6 |
+
/**
|
7 |
+
* For each store, create the feeds and push them to RichRelevance via FTP
|
8 |
+
*
|
9 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.co.uk>
|
10 |
+
*/
|
11 |
+
public function run()
|
12 |
+
{
|
13 |
+
$stores = Mage::app()->getStores();
|
14 |
+
|
15 |
+
$richRelevanceAccounts = array();
|
16 |
+
foreach ($stores as $_store) {
|
17 |
+
$ftpUser = Mage::getStoreConfig(
|
18 |
+
'ampersand_richrelevance/api_conn_settings/ftp_user',
|
19 |
+
$_store
|
20 |
+
);
|
21 |
+
|
22 |
+
if (!in_array($ftpUser, $richRelevanceAccounts)) {
|
23 |
+
$richRelevanceAccounts[] = $ftpUser;
|
24 |
+
Mage::getModel('ampersand_richrelevance/push')->pushToFtp($_store);
|
25 |
+
}
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Delete feed zip files that are more than x days old as specified
|
31 |
+
* in the admin panel
|
32 |
+
*
|
33 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.co.uk>
|
34 |
+
*/
|
35 |
+
public function deleteOldZipFiles()
|
36 |
+
{
|
37 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
38 |
+
|
39 |
+
$zipFiles = Mage::getBaseDir('var') . DS . 'rich_relevance' . DS . 'zips';
|
40 |
+
|
41 |
+
|
42 |
+
if (!$handle = opendir($zipFiles)) {
|
43 |
+
return;
|
44 |
+
}
|
45 |
+
|
46 |
+
while (false !== ($file = readdir($handle))) {
|
47 |
+
if ($file == ".." || $file == ".") {
|
48 |
+
continue;
|
49 |
+
}
|
50 |
+
|
51 |
+
$zipKeepTimePath = 'ampersand_richrelevance/log_settings/time_to_keep_zip_files';
|
52 |
+
$zipKeepTime = Mage::getStoreConfig($zipKeepTimePath);
|
53 |
+
$deleteBefore = time() - ($zipKeepTime * self::KEEP_ZIP_INTERVAL_IN_SECONDS);
|
54 |
+
|
55 |
+
$filePath = $zipFiles . DS . $file;
|
56 |
+
|
57 |
+
if (filemtime($filePath) < $deleteBefore) {
|
58 |
+
try {
|
59 |
+
unlink($filePath);
|
60 |
+
$log->addItem(
|
61 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_FEED,
|
62 |
+
"File successfully deleted: {$file}"
|
63 |
+
);
|
64 |
+
} catch (Exception $e) {
|
65 |
+
$log->addItem(
|
66 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_FEED,
|
67 |
+
$e->getMessage()
|
68 |
+
);
|
69 |
+
Mage::throwException($e);
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}
|
app/code/community/Ampersand/RichRelevance/Model/Observer.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Model_Observer extends Mage_Core_Model_Abstract
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Get the newly created order Ids from the even and set them in the registry
|
6 |
+
* to make them accessible from a block
|
7 |
+
*
|
8 |
+
* @param Varien_Event_Observer $observer
|
9 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
10 |
+
*/
|
11 |
+
public function getOrderData(Varien_Event_Observer $observer)
|
12 |
+
{
|
13 |
+
$orderIds = $observer->getEvent()->getData('order_ids');
|
14 |
+
Mage::register(Ampersand_RichRelevance_Helper_Data::REGISTRY_KEY_ORDER_IDS, $orderIds);
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Retrieve the SKU of the product that was last added to the cart and
|
19 |
+
* set it as a session variable
|
20 |
+
*
|
21 |
+
* @param Varien_Event_Observer $observer
|
22 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
23 |
+
*/
|
24 |
+
public function getJustAddedProductSku(Varien_Event_Observer $observer)
|
25 |
+
{
|
26 |
+
$product = $observer->getEvent()->getProduct();
|
27 |
+
|
28 |
+
Mage::getSingleton('core/session')->setData(
|
29 |
+
Ampersand_RichRelevance_Helper_Data::SESSION_KEY_LAST_ADDED_ITEM_ID,
|
30 |
+
$product->getSku()
|
31 |
+
);
|
32 |
+
}
|
33 |
+
}
|
app/code/community/Ampersand/RichRelevance/Model/Push.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Model_Push extends Mage_Core_Model_Abstract
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Checks RichRelevance is enabled for a particular store, if it is then
|
6 |
+
* send all the feeds via FTP
|
7 |
+
*
|
8 |
+
* @param Mage_Core_Model_Store $store
|
9 |
+
* @return Ampersand_RichRelevance_Model_Push
|
10 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
11 |
+
*/
|
12 |
+
public function pushToFtp($store)
|
13 |
+
{
|
14 |
+
$log = Mage::helper('ampersand_richrelevance/log');
|
15 |
+
$enabled = Mage::helper('ampersand_richrelevance')->isEnabled($store);
|
16 |
+
if (!$enabled) {
|
17 |
+
return;
|
18 |
+
}
|
19 |
+
try {
|
20 |
+
Mage::helper('ampersand_richrelevance/service')->setCurrentStore($store);
|
21 |
+
Mage::helper('ampersand_richrelevance/service')->getService()->sendAll();
|
22 |
+
$log->addItem(
|
23 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_FEED,
|
24 |
+
'Successfully transmitted feeds',
|
25 |
+
$store
|
26 |
+
);
|
27 |
+
} catch (Exception $e) {
|
28 |
+
$log->addItem(
|
29 |
+
Ampersand_RichRelevance_Helper_Log::TYPE_FEED,
|
30 |
+
$e->getMessage(),
|
31 |
+
$store
|
32 |
+
);
|
33 |
+
Mage::throwException($e);
|
34 |
+
}
|
35 |
+
|
36 |
+
return $this;
|
37 |
+
}
|
38 |
+
}
|
app/code/community/Ampersand/RichRelevance/changelog.txt
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
27/09/2011 - v0.1.2 - Corrected bug from v0.1.1 where Ampersand_RichRelevance_Helper_Service::getCurrentStoreCode() was incorrectly removed. This was uncovered in Magento RichRelevance error logs rather than test suite exceptions due to try/catch in Push::pushToFtp() not re-throwing exceptions after logging.
|
2 |
+
|
3 |
+
23/09/2011 - v0.1.1 - When exporting catalog data to RichRelevance, ensure product urls are generated in the correct store scope.
|
4 |
+
|
5 |
+
22/09/2011 - v0.1.0 - Initial release.
|
app/code/community/Ampersand/RichRelevance/controllers/Adminhtml/RequestController.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Ampersand_RichRelevance_Adminhtml_RequestController extends Mage_Adminhtml_Controller_Action
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Prepare feeds for download and send download headers
|
6 |
+
*
|
7 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
8 |
+
*/
|
9 |
+
public function downloadAction()
|
10 |
+
{
|
11 |
+
$storeCode = $this->getRequest()->getParam('store_id');
|
12 |
+
Mage::helper('ampersand_richrelevance/service')->setCurrentStore($storeCode);
|
13 |
+
|
14 |
+
Mage::helper('ampersand_richrelevance/service')->getService()->exportAll();
|
15 |
+
|
16 |
+
$uriData = array(
|
17 |
+
'type' => 'filename',
|
18 |
+
'value' => Mage::getBaseDir('var') . DS . 'rich_relevance' . DS . 'catalog.zip',
|
19 |
+
);
|
20 |
+
|
21 |
+
// buffer output to prevent 'Headers already sent' warnings
|
22 |
+
ob_start();
|
23 |
+
|
24 |
+
$this->_prepareDownloadResponse($storeCode . '_catalog.zip', $uriData);
|
25 |
+
}
|
26 |
+
|
27 |
+
/*
|
28 |
+
* Push feeds to FTP host and redirect back to the admin panel
|
29 |
+
*
|
30 |
+
* @author Matthew Haworth <matthew.haworth@ampersandcommerce.com>
|
31 |
+
*/
|
32 |
+
public function pushAction()
|
33 |
+
{
|
34 |
+
$storeId = $this->getRequest()->getParam('store_id');
|
35 |
+
|
36 |
+
Mage::getModel('ampersand_richrelevance/push')->pushToFtp($storeId);
|
37 |
+
|
38 |
+
$store = Mage::app()->getStore($storeId);
|
39 |
+
$website = $store->getWebsite();
|
40 |
+
$this->_redirect(
|
41 |
+
"adminhtml/system_config/edit",
|
42 |
+
array('section' => 'ampersand_richrelevance',
|
43 |
+
'website' => $website->getCode(),
|
44 |
+
'store' => $store->getCode(),
|
45 |
+
)
|
46 |
+
);
|
47 |
+
}
|
48 |
+
}
|
app/code/community/Ampersand/RichRelevance/etc/adminhtml.xml
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<adminhtml>
|
3 |
+
<acl>
|
4 |
+
<resources>
|
5 |
+
<admin>
|
6 |
+
<children>
|
7 |
+
<system>
|
8 |
+
<children>
|
9 |
+
<config>
|
10 |
+
<children>
|
11 |
+
<ampersand_richrelevance translate="title" module="ampersand_richrelevance">
|
12 |
+
<title>RichRelevance</title>
|
13 |
+
</ampersand_richrelevance>
|
14 |
+
</children>
|
15 |
+
</config>
|
16 |
+
</children>
|
17 |
+
</system>
|
18 |
+
</children>
|
19 |
+
</admin>
|
20 |
+
</resources>
|
21 |
+
</acl>
|
22 |
+
</adminhtml>
|
app/code/community/Ampersand/RichRelevance/etc/config.xml
ADDED
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Ampersand_RichRelevance>
|
5 |
+
<version>0.1.2</version>
|
6 |
+
</Ampersand_RichRelevance>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<blocks>
|
10 |
+
<ampersand_richrelevance>
|
11 |
+
<class>Ampersand_RichRelevance_Block</class>
|
12 |
+
</ampersand_richrelevance>
|
13 |
+
</blocks>
|
14 |
+
<models>
|
15 |
+
<ampersand_richrelevance>
|
16 |
+
<class>Ampersand_RichRelevance_Model</class>
|
17 |
+
</ampersand_richrelevance>
|
18 |
+
</models>
|
19 |
+
<events>
|
20 |
+
<checkout_onepage_controller_success_action>
|
21 |
+
<observers>
|
22 |
+
<ampersand_richrelevance_product>
|
23 |
+
<type>singleton</type>
|
24 |
+
<class>ampersand_richrelevance/observer</class>
|
25 |
+
<method>getProductData</method>
|
26 |
+
</ampersand_richrelevance_product>
|
27 |
+
<ampersand_richrelevance_order>
|
28 |
+
<type>singleton</type>
|
29 |
+
<class>ampersand_richrelevance/observer</class>
|
30 |
+
<method>getOrderData</method>
|
31 |
+
</ampersand_richrelevance_order>
|
32 |
+
</observers>
|
33 |
+
</checkout_onepage_controller_success_action>
|
34 |
+
<checkout_multishipping_controller_success_action>
|
35 |
+
<observers>
|
36 |
+
<ampersand_richrelevance_product>
|
37 |
+
<type>singleton</type>
|
38 |
+
<class>ampersand_richrelevance/observer</class>
|
39 |
+
<method>getProductData</method>
|
40 |
+
</ampersand_richrelevance_product>
|
41 |
+
<ampersand_richrelevance_order>
|
42 |
+
<type>singleton</type>
|
43 |
+
<class>ampersand_richrelevance/observer</class>
|
44 |
+
<method>getOrderData</method>
|
45 |
+
</ampersand_richrelevance_order>
|
46 |
+
</observers>
|
47 |
+
</checkout_multishipping_controller_success_action>
|
48 |
+
<checkout_cart_product_add_after>
|
49 |
+
<observers>
|
50 |
+
<ampersand_richrelevance>
|
51 |
+
<type>singleton</type>
|
52 |
+
<class>ampersand_richrelevance/observer</class>
|
53 |
+
<method>getJustAddedProductSku</method>
|
54 |
+
</ampersand_richrelevance>
|
55 |
+
</observers>
|
56 |
+
</checkout_cart_product_add_after>
|
57 |
+
</events>
|
58 |
+
<resources>
|
59 |
+
<ampersand_richrelevance_setup>
|
60 |
+
<setup>
|
61 |
+
<module>Ampersand_RichRelevance</module>
|
62 |
+
</setup>
|
63 |
+
<connection>
|
64 |
+
<use>core_setup</use>
|
65 |
+
</connection>
|
66 |
+
</ampersand_richrelevance_setup>
|
67 |
+
</resources>
|
68 |
+
<helpers>
|
69 |
+
<ampersand_richrelevance>
|
70 |
+
<class>Ampersand_RichRelevance_Helper</class>
|
71 |
+
</ampersand_richrelevance>
|
72 |
+
</helpers>
|
73 |
+
</global>
|
74 |
+
<frontend>
|
75 |
+
<layout>
|
76 |
+
<updates>
|
77 |
+
<ampersand_richrelevance module="Ampersand_RichRelevance">
|
78 |
+
<file>ampersand_richrelevance.xml</file>
|
79 |
+
</ampersand_richrelevance>
|
80 |
+
</updates>
|
81 |
+
</layout>
|
82 |
+
</frontend>
|
83 |
+
<admin>
|
84 |
+
<routers>
|
85 |
+
<ampersand_richrelevance_admin>
|
86 |
+
<use>admin</use>
|
87 |
+
<args>
|
88 |
+
<module>Ampersand_RichRelevance_Adminhtml</module>
|
89 |
+
<frontName>ampersand-richrelevance-admin</frontName>
|
90 |
+
</args>
|
91 |
+
</ampersand_richrelevance_admin>
|
92 |
+
</routers>
|
93 |
+
</admin>
|
94 |
+
<crontab>
|
95 |
+
<jobs>
|
96 |
+
<ampersand_richrelevance_cron_run>
|
97 |
+
<schedule>
|
98 |
+
<cron_expr>0 2 * * *</cron_expr>
|
99 |
+
</schedule>
|
100 |
+
<run>
|
101 |
+
<model>ampersand_richrelevance/cron::run</model>
|
102 |
+
</run>
|
103 |
+
</ampersand_richrelevance_cron_run>
|
104 |
+
<ampersand_richrelevance_cron_deleteOldZips>
|
105 |
+
<schedule>
|
106 |
+
<cron_expr>0 1 * * *</cron_expr>
|
107 |
+
</schedule>
|
108 |
+
<run>
|
109 |
+
<model>ampersand_richrelevance/cron::deleteOldZipFiles</model>
|
110 |
+
</run>
|
111 |
+
</ampersand_richrelevance_cron_deleteOldZips>
|
112 |
+
</jobs>
|
113 |
+
</crontab>
|
114 |
+
<ampersand_richrelevance>
|
115 |
+
<max_products_to_send>25000</max_products_to_send>
|
116 |
+
<max_categories_to_send>5000</max_categories_to_send>
|
117 |
+
<ftp_host>dashboard.richrelevance.com</ftp_host>
|
118 |
+
</ampersand_richrelevance>
|
119 |
+
<default>
|
120 |
+
<ampersand_richrelevance>
|
121 |
+
<placement_settings>
|
122 |
+
<placements><![CDATA[a:6:{i:0;a:2:{s:9:"page_type";s:9:"cart_page";s:4:"name";s:10:"placement1";}i:1;a:2:{s:9:"page_type";s:13:"category_page";s:4:"name";s:10:"placement1";}i:2;a:2:{s:9:"page_type";s:9:"home_page";s:4:"name";s:10:"placement1";}i:3;a:2:{s:9:"page_type";s:9:"item_page";s:4:"name";s:10:"placement1";}i:4;a:2:{s:9:"page_type";s:9:"item_page";s:4:"name";s:10:"placement2";}i:5;a:2:{s:9:"page_type";s:11:"search_page";s:4:"name";s:10:"placement1";}}]]></placements>
|
123 |
+
</placement_settings>
|
124 |
+
<log_settings>
|
125 |
+
<feed>1</feed>
|
126 |
+
<checkout>1</checkout>
|
127 |
+
<time_to_keep_zip_files>10</time_to_keep_zip_files>
|
128 |
+
</log_settings>
|
129 |
+
</ampersand_richrelevance>
|
130 |
+
</default>
|
131 |
+
</config>
|
app/code/community/Ampersand/RichRelevance/etc/integration/out.messages.xml
ADDED
@@ -0,0 +1,228 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<integration xmlns:richrelevance="http://www.ampersandit.co.uk/richrelevance">
|
3 |
+
<richrelevance:export>
|
4 |
+
<transport>
|
5 |
+
<type>file</type>
|
6 |
+
<config>
|
7 |
+
<base_directory_path mapper="method">
|
8 |
+
<_class>Mage</_class>
|
9 |
+
<_method>getBaseDir</_method>
|
10 |
+
<_params>
|
11 |
+
<type>var</type>
|
12 |
+
</_params>
|
13 |
+
</base_directory_path>
|
14 |
+
<directory_path>rich_relevance/zip_data</directory_path>
|
15 |
+
<filename_extension>tsv</filename_extension>
|
16 |
+
<on_file_exists>truncate</on_file_exists>
|
17 |
+
</config>
|
18 |
+
</transport>
|
19 |
+
<response_handlers>
|
20 |
+
<get_file_path>
|
21 |
+
<type>filter</type>
|
22 |
+
<input_key>response/file_path</input_key>
|
23 |
+
<output_key>output</output_key>
|
24 |
+
</get_file_path>
|
25 |
+
</response_handlers>
|
26 |
+
</richrelevance:export>
|
27 |
+
|
28 |
+
<richrelevance:exportAll>
|
29 |
+
<transport>
|
30 |
+
<type>file</type>
|
31 |
+
<config>
|
32 |
+
<base_directory_path mapper="method">
|
33 |
+
<_class>Mage</_class>
|
34 |
+
<_method>getBaseDir</_method>
|
35 |
+
<_params>
|
36 |
+
<type>var</type>
|
37 |
+
</_params>
|
38 |
+
</base_directory_path>
|
39 |
+
<directory_path>rich_relevance</directory_path>
|
40 |
+
<filename>catalog</filename>
|
41 |
+
<filename_extension>zip</filename_extension>
|
42 |
+
<on_file_exists>truncate</on_file_exists>
|
43 |
+
</config>
|
44 |
+
</transport>
|
45 |
+
<request_handlers>
|
46 |
+
<export_catalog>
|
47 |
+
<type>callback</type>
|
48 |
+
<output_key>export_directory_path</output_key>
|
49 |
+
<config>
|
50 |
+
<object mapper="method">
|
51 |
+
<_class>Mage</_class>
|
52 |
+
<_method>helper</_method>
|
53 |
+
<_params>
|
54 |
+
<helper>ampersand_richrelevance/service</helper>
|
55 |
+
</_params>
|
56 |
+
</object>
|
57 |
+
<method>exportCatalogData</method>
|
58 |
+
</config>
|
59 |
+
</export_catalog>
|
60 |
+
<zip_content>
|
61 |
+
<type>filter</type>
|
62 |
+
<input_key>export_directory_path</input_key>
|
63 |
+
<output_key>request/content</output_key>
|
64 |
+
<after>export_catalog</after>
|
65 |
+
<config>
|
66 |
+
<type>compress_dir</type>
|
67 |
+
<config>
|
68 |
+
<adapter>zip</adapter>
|
69 |
+
</config>
|
70 |
+
</config>
|
71 |
+
</zip_content>
|
72 |
+
</request_handlers>
|
73 |
+
</richrelevance:exportAll>
|
74 |
+
|
75 |
+
<richrelevance:sendAll>
|
76 |
+
<transport>
|
77 |
+
<type>ftp</type>
|
78 |
+
<config>
|
79 |
+
<host mapper="mage_helper">
|
80 |
+
<_helper>ampersand_richrelevance/data</_helper>
|
81 |
+
<_method>getFtpHost</_method>
|
82 |
+
</host>
|
83 |
+
<user mapper="mage_store_config">
|
84 |
+
<_path>ampersand_richrelevance/api_conn_settings/ftp_user</_path>
|
85 |
+
<_store mapper="mage_helper">
|
86 |
+
<_helper>ampersand_richrelevance/service</_helper>
|
87 |
+
<_method>getCurrentStoreCode</_method>
|
88 |
+
</_store>
|
89 |
+
</user>
|
90 |
+
<password mapper="mage_store_config">
|
91 |
+
<_path>ampersand_richrelevance/api_conn_settings/ftp_password</_path>
|
92 |
+
<_store mapper="mage_helper">
|
93 |
+
<_helper>ampersand_richrelevance/service</_helper>
|
94 |
+
<_method>getCurrentStoreCode</_method>
|
95 |
+
</_store>
|
96 |
+
</password>
|
97 |
+
<filename>catalog</filename>
|
98 |
+
<filename mapper="concatenate">
|
99 |
+
<storeCode mapper="mage_helper">
|
100 |
+
<_helper>ampersand_richrelevance/service</_helper>
|
101 |
+
<_method>getCurrentStoreCode</_method>
|
102 |
+
</storeCode>
|
103 |
+
<catalog>_catalog</catalog>
|
104 |
+
</filename>
|
105 |
+
<filename_extension>zip</filename_extension>
|
106 |
+
<on_file_exists>truncate</on_file_exists>
|
107 |
+
</config>
|
108 |
+
</transport>
|
109 |
+
<request_handlers>
|
110 |
+
<export_catalog>
|
111 |
+
<type>callback</type>
|
112 |
+
<output_key>export_directory_path</output_key>
|
113 |
+
<config>
|
114 |
+
<object mapper="method">
|
115 |
+
<_class>Mage</_class>
|
116 |
+
<_method>helper</_method>
|
117 |
+
<_params>
|
118 |
+
<helper>ampersand_richrelevance/service</helper>
|
119 |
+
</_params>
|
120 |
+
</object>
|
121 |
+
<method>exportCatalogData</method>
|
122 |
+
</config>
|
123 |
+
</export_catalog>
|
124 |
+
<zip_content>
|
125 |
+
<type>filter</type>
|
126 |
+
<input_key>export_directory_path</input_key>
|
127 |
+
<output_key>request/content</output_key>
|
128 |
+
<after>export_catalog</after>
|
129 |
+
<config>
|
130 |
+
<type>compress_dir</type>
|
131 |
+
<config>
|
132 |
+
<adapter>zip</adapter>
|
133 |
+
<adapterOptions>
|
134 |
+
<archive mapper="concatenate">
|
135 |
+
<fromRootDirectory mapper="method">
|
136 |
+
<_object>Mage</_object>
|
137 |
+
<_method>getBaseDir</_method>
|
138 |
+
<_params>
|
139 |
+
<var>var</var>
|
140 |
+
</_params>
|
141 |
+
</fromRootDirectory>
|
142 |
+
<directory_sep mapper="mage_helper">
|
143 |
+
<_helper>ampersand_richrelevance/data</_helper>
|
144 |
+
<_method>getDirectorySeparator</_method>
|
145 |
+
</directory_sep>
|
146 |
+
<richrelevance>rich_relevance</richrelevance>
|
147 |
+
<directory_sep mapper="mage_helper">
|
148 |
+
<_helper>ampersand_richrelevance/data</_helper>
|
149 |
+
<_method>getDirectorySeparator</_method>
|
150 |
+
</directory_sep>
|
151 |
+
<zips>zips</zips>
|
152 |
+
<directory_sep mapper="mage_helper">
|
153 |
+
<_helper>ampersand_richrelevance/data</_helper>
|
154 |
+
<_method>getDirectorySeparator</_method>
|
155 |
+
</directory_sep>
|
156 |
+
<filename mapper="concatenate">
|
157 |
+
<storeCode mapper="mage_helper">
|
158 |
+
<_helper>ampersand_richrelevance/service</_helper>
|
159 |
+
<_method>getCurrentStoreCode</_method>
|
160 |
+
</storeCode>
|
161 |
+
<catalog>-catalog-</catalog>
|
162 |
+
<time mapper="function">
|
163 |
+
<_function>time</_function>
|
164 |
+
</time>
|
165 |
+
<fileExtension>.zip</fileExtension>
|
166 |
+
</filename>
|
167 |
+
</archive>
|
168 |
+
</adapterOptions>
|
169 |
+
</config>
|
170 |
+
</config>
|
171 |
+
</zip_content>
|
172 |
+
</request_handlers>
|
173 |
+
</richrelevance:sendAll>
|
174 |
+
|
175 |
+
<richrelevance:exportProducts extends="richrelevance:export">
|
176 |
+
<transport>
|
177 |
+
<config>
|
178 |
+
<filename>products_full</filename>
|
179 |
+
</config>
|
180 |
+
</transport>
|
181 |
+
<request_handlers>
|
182 |
+
<map_order>
|
183 |
+
<type>transform</type>
|
184 |
+
<input_key>input</input_key>
|
185 |
+
<output_key>request/content</output_key>
|
186 |
+
<config>
|
187 |
+
<type>richrelevance:products_full</type>
|
188 |
+
</config>
|
189 |
+
</map_order>
|
190 |
+
</request_handlers>
|
191 |
+
</richrelevance:exportProducts>
|
192 |
+
|
193 |
+
<richrelevance:exportCategories extends="richrelevance:export">
|
194 |
+
<transport>
|
195 |
+
<config>
|
196 |
+
<filename>categories_full</filename>
|
197 |
+
</config>
|
198 |
+
</transport>
|
199 |
+
<request_handlers>
|
200 |
+
<map_order>
|
201 |
+
<type>transform</type>
|
202 |
+
<input_key>input</input_key>
|
203 |
+
<output_key>request/content</output_key>
|
204 |
+
<config>
|
205 |
+
<type>richrelevance:categories_full</type>
|
206 |
+
</config>
|
207 |
+
</map_order>
|
208 |
+
</request_handlers>
|
209 |
+
</richrelevance:exportCategories>
|
210 |
+
|
211 |
+
<richrelevance:exportProductCategories extends="richrelevance:export">
|
212 |
+
<transport>
|
213 |
+
<config>
|
214 |
+
<filename>products_in_categories_full</filename>
|
215 |
+
</config>
|
216 |
+
</transport>
|
217 |
+
<request_handlers>
|
218 |
+
<map_order>
|
219 |
+
<type>transform</type>
|
220 |
+
<input_key>input</input_key>
|
221 |
+
<output_key>request/content</output_key>
|
222 |
+
<config>
|
223 |
+
<type>richrelevance:products_in_categories_full</type>
|
224 |
+
</config>
|
225 |
+
</map_order>
|
226 |
+
</request_handlers>
|
227 |
+
</richrelevance:exportProductCategories>
|
228 |
+
</integration>
|
app/code/community/Ampersand/RichRelevance/etc/integration/out.types.xml
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<integration xmlns:richrelevance="http://www.ampersandit.co.uk/richrelevance">
|
3 |
+
<richrelevance_tsv renderer="xsv" value_separator="\t" value_delimiter="" line_separator="\n"/>
|
4 |
+
<richrelevance:products_full extends="richrelevance_tsv">
|
5 |
+
<_iterate>
|
6 |
+
<product>
|
7 |
+
<product_id mapper="accessor">sku</product_id>
|
8 |
+
<name mapper="accessor">name</name>
|
9 |
+
<price mapper="mage_helper">
|
10 |
+
<_helper>ampersand_richrelevance/data</_helper>
|
11 |
+
<_method>formatPrice</_method>
|
12 |
+
<_params>
|
13 |
+
<price mapper="accessor">price</price>
|
14 |
+
</_params>
|
15 |
+
</price>
|
16 |
+
<price_display mapper="mage_helper">
|
17 |
+
<_helper>core</_helper>
|
18 |
+
<_method>formatPrice</_method>
|
19 |
+
<_params>
|
20 |
+
<price mapper="accessor">price</price>
|
21 |
+
</_params>
|
22 |
+
</price_display>
|
23 |
+
<recommendable mapper="mage_helper">
|
24 |
+
<_helper>ampersand_richrelevance/feed</_helper>
|
25 |
+
<_method>getIsRecommendable</_method>
|
26 |
+
<_params>
|
27 |
+
<product mapper="all_data" />
|
28 |
+
</_params>
|
29 |
+
</recommendable>
|
30 |
+
<brand mapper="accessor">brand</brand>
|
31 |
+
<image_url mapper="accessor">image_url</image_url>
|
32 |
+
<link_url mapper="accessor">product_url</link_url>
|
33 |
+
<rating mapper="mage_helper">
|
34 |
+
<_helper>ampersand_richrelevance/feed</_helper>
|
35 |
+
<_method>getRating</_method>
|
36 |
+
<_params>
|
37 |
+
<productId mapper="accessor">entity_id</productId>
|
38 |
+
</_params>
|
39 |
+
</rating>
|
40 |
+
<rating_image_url/>
|
41 |
+
<num_reviews mapper="mage_helper">
|
42 |
+
<_helper>ampersand_richrelevance/feed</_helper>
|
43 |
+
<_method>getNumOfReviews</_method>
|
44 |
+
<_params>
|
45 |
+
<productId mapper="accessor">entity_id</productId>
|
46 |
+
</_params>
|
47 |
+
</num_reviews>
|
48 |
+
</product>
|
49 |
+
</_iterate>
|
50 |
+
</richrelevance:products_full>
|
51 |
+
|
52 |
+
<richrelevance:categories_full extends="richrelevance_tsv">
|
53 |
+
<_iterate>
|
54 |
+
<category>
|
55 |
+
<category_id mapper="accessor">entity_id</category_id>
|
56 |
+
<_if>
|
57 |
+
<_condition mapper="mage_helper" type="bool">
|
58 |
+
<_helper>ampersand_richrelevance/service</_helper>
|
59 |
+
<_method>getIsRootCategory</_method>
|
60 |
+
<_params>
|
61 |
+
<category_id mapper="accessor">parent_id</category_id>
|
62 |
+
</_params>
|
63 |
+
</_condition>
|
64 |
+
<_then>
|
65 |
+
<parent_id/>
|
66 |
+
</_then>
|
67 |
+
<_else>
|
68 |
+
<parent_id mapper="accessor">parent_id</parent_id>
|
69 |
+
</_else>
|
70 |
+
</_if>
|
71 |
+
<name mapper="accessor">name</name>
|
72 |
+
</category>
|
73 |
+
</_iterate>
|
74 |
+
</richrelevance:categories_full>
|
75 |
+
|
76 |
+
<richrelevance:products_in_categories_full extends="richrelevance_tsv">
|
77 |
+
<_iterate>
|
78 |
+
<product_category>
|
79 |
+
<product_id mapper="array">sku</product_id>
|
80 |
+
<category_id mapper="array">category_id</category_id>
|
81 |
+
</product_category>
|
82 |
+
</_iterate>
|
83 |
+
</richrelevance:products_in_categories_full>
|
84 |
+
</integration>
|
app/code/community/Ampersand/RichRelevance/etc/system.xml
ADDED
@@ -0,0 +1,281 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<tabs>
|
4 |
+
<tabname translate="label" module="ampersand_richrelevance">
|
5 |
+
<label>Integration</label>
|
6 |
+
<sort_order>100</sort_order>
|
7 |
+
</tabname>
|
8 |
+
</tabs>
|
9 |
+
<sections>
|
10 |
+
<ampersand_richrelevance translate="label" module="ampersand_richrelevance">
|
11 |
+
<label>RichRelevance</label>
|
12 |
+
<tab>tabname</tab>
|
13 |
+
<frontend_type>text</frontend_type>
|
14 |
+
<sort_order>20</sort_order>
|
15 |
+
<show_in_default>1</show_in_default>
|
16 |
+
<show_in_website>1</show_in_website>
|
17 |
+
<show_in_store>1</show_in_store>
|
18 |
+
<groups>
|
19 |
+
<general_settings>
|
20 |
+
<label>General Settings</label>
|
21 |
+
<sort_order>100</sort_order>
|
22 |
+
<show_in_default>1</show_in_default>
|
23 |
+
<show_in_website>1</show_in_website>
|
24 |
+
<show_in_store>1</show_in_store>
|
25 |
+
<fields>
|
26 |
+
<enabled translate="label">
|
27 |
+
<label><![CDATA[Enable RichRecs Express<sup>TM</sup>]]>
|
28 |
+
</label>
|
29 |
+
<frontend_type>select</frontend_type>
|
30 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
31 |
+
<comment></comment>
|
32 |
+
<sort_order>10</sort_order>
|
33 |
+
<show_in_default>1</show_in_default>
|
34 |
+
<show_in_website>1</show_in_website>
|
35 |
+
<show_in_store>1</show_in_store>
|
36 |
+
</enabled>
|
37 |
+
</fields>
|
38 |
+
</general_settings>
|
39 |
+
<manual_download translate="label">
|
40 |
+
<label>Manual Feed Download and Push</label>
|
41 |
+
<sort_order>120</sort_order>
|
42 |
+
<show_in_default>0</show_in_default>
|
43 |
+
<show_in_website>0</show_in_website>
|
44 |
+
<show_in_store>1</show_in_store>
|
45 |
+
<fields>
|
46 |
+
<download_button>
|
47 |
+
<label>Download feed file</label>
|
48 |
+
<frontend_type>button</frontend_type>
|
49 |
+
<frontend_model>ampersand_richrelevance/adminhtml_downloadButton</frontend_model>
|
50 |
+
<sort_order>10</sort_order>
|
51 |
+
<show_in_default>0</show_in_default>
|
52 |
+
<show_in_website>0</show_in_website>
|
53 |
+
<show_in_store>1</show_in_store>
|
54 |
+
<comment>Click this button to manually generate and download the catalog feed for the current store</comment>
|
55 |
+
</download_button>
|
56 |
+
<push_button>
|
57 |
+
<label>Push feed file to RichRelevance</label>
|
58 |
+
<frontend_type>button</frontend_type>
|
59 |
+
<frontend_model>ampersand_richrelevance/adminhtml_pushButton</frontend_model>
|
60 |
+
<sort_order>12</sort_order>
|
61 |
+
<show_in_default>0</show_in_default>
|
62 |
+
<show_in_website>0</show_in_website>
|
63 |
+
<show_in_store>1</show_in_store>
|
64 |
+
<comment>Click this button to manually generate the catalog feed for the current store and push to RichRelevance</comment>
|
65 |
+
</push_button>
|
66 |
+
</fields>
|
67 |
+
</manual_download>
|
68 |
+
<api_conn_settings translate="label">
|
69 |
+
<label>API Data</label>
|
70 |
+
<sort_order>140</sort_order>
|
71 |
+
<show_in_default>1</show_in_default>
|
72 |
+
<show_in_website>1</show_in_website>
|
73 |
+
<show_in_store>1</show_in_store>
|
74 |
+
<fields>
|
75 |
+
<api_key translate="label">
|
76 |
+
<label>API Key</label>
|
77 |
+
<frontend_type>text</frontend_type>
|
78 |
+
<sort_order>10</sort_order>
|
79 |
+
<show_in_default>1</show_in_default>
|
80 |
+
<show_in_website>1</show_in_website>
|
81 |
+
<show_in_store>1</show_in_store>
|
82 |
+
</api_key>
|
83 |
+
<ftp_user>
|
84 |
+
<label>FTP User</label>
|
85 |
+
<frontend_type>text</frontend_type>
|
86 |
+
<sort_order>30</sort_order>
|
87 |
+
<show_in_default>1</show_in_default>
|
88 |
+
<show_in_website>1</show_in_website>
|
89 |
+
<show_in_store>1</show_in_store>
|
90 |
+
</ftp_user>
|
91 |
+
<ftp_password>
|
92 |
+
<label>FTP Password</label>
|
93 |
+
<frontend_type>password</frontend_type>
|
94 |
+
<sort_order>40</sort_order>
|
95 |
+
<show_in_default>1</show_in_default>
|
96 |
+
<show_in_website>1</show_in_website>
|
97 |
+
<show_in_store>1</show_in_store>
|
98 |
+
</ftp_password>
|
99 |
+
</fields>
|
100 |
+
</api_conn_settings>
|
101 |
+
<placement_settings translate="label">
|
102 |
+
<label>Placement Settings</label>
|
103 |
+
<sort_order>200</sort_order>
|
104 |
+
<show_in_default>1</show_in_default>
|
105 |
+
<show_in_website>1</show_in_website>
|
106 |
+
<show_in_store>1</show_in_store>
|
107 |
+
<fields>
|
108 |
+
<placements translate="label">
|
109 |
+
<label>Placements</label>
|
110 |
+
<frontend_model>ampersand_richrelevance/adminhtml_system_config_renderer_placements</frontend_model>
|
111 |
+
<backend_model>adminhtml/system_config_backend_serialized_array</backend_model>
|
112 |
+
<sort_order>10</sort_order>
|
113 |
+
<comment><![CDATA[This must be kept in sync with the placements table on your <a href='http://dashboard.richrelevance.com'>RichRelevance dashboard</a>]]>
|
114 |
+
</comment>
|
115 |
+
<show_in_default>1</show_in_default>
|
116 |
+
<show_in_website>1</show_in_website>
|
117 |
+
<show_in_store>1</show_in_store>
|
118 |
+
</placements>
|
119 |
+
<include_out_of_stock_products>
|
120 |
+
<label>Include Out of Stock Products In Feed</label>
|
121 |
+
<frontend_type>select</frontend_type>
|
122 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
123 |
+
<sort_order>20</sort_order>
|
124 |
+
<comment>If not enabled, the recommendable flag will be set to 'n' on feed outputs</comment>
|
125 |
+
<show_in_default>1</show_in_default>
|
126 |
+
<show_in_website>1</show_in_website>
|
127 |
+
<show_in_store>1</show_in_store>
|
128 |
+
</include_out_of_stock_products>
|
129 |
+
</fields>
|
130 |
+
</placement_settings>
|
131 |
+
<developer_settings>
|
132 |
+
<label>Developer Settings</label>
|
133 |
+
<sort_order>300</sort_order>
|
134 |
+
<show_in_default>1</show_in_default>
|
135 |
+
<show_in_website>1</show_in_website>
|
136 |
+
<show_in_store>1</show_in_store>
|
137 |
+
<fields>
|
138 |
+
<developer_mode translate="label">
|
139 |
+
<label>Developer Mode</label>
|
140 |
+
<frontend_type>select</frontend_type>
|
141 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
142 |
+
<comment>When enabled RichRelevance ignores the user data</comment>
|
143 |
+
<sort_order>12</sort_order>
|
144 |
+
<show_in_default>1</show_in_default>
|
145 |
+
<show_in_website>1</show_in_website>
|
146 |
+
<show_in_store>1</show_in_store>
|
147 |
+
</developer_mode>
|
148 |
+
<display_mode translate="label">
|
149 |
+
<label>Force Display Mode</label>
|
150 |
+
<frontend_type>select</frontend_type>
|
151 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
152 |
+
<sort_order>13</sort_order>
|
153 |
+
<comment>Override RichRelevance's display mode</comment>
|
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 |
+
</display_mode>
|
158 |
+
<allow_dummy_products translate="label">
|
159 |
+
<label>Allow Dummy Products</label>
|
160 |
+
<frontend_type>select</frontend_type>
|
161 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
162 |
+
<sort_order>14</sort_order>
|
163 |
+
<show_in_default>1</show_in_default>
|
164 |
+
<show_in_website>1</show_in_website>
|
165 |
+
<show_in_store>1</show_in_store>
|
166 |
+
</allow_dummy_products>
|
167 |
+
</fields>
|
168 |
+
</developer_settings>
|
169 |
+
<log_settings>
|
170 |
+
<label>Log Settings</label>
|
171 |
+
<sort_order>400</sort_order>
|
172 |
+
<show_in_default>1</show_in_default>
|
173 |
+
<show_in_website>1</show_in_website>
|
174 |
+
<show_in_store>1</show_in_store>
|
175 |
+
<fields>
|
176 |
+
<time_to_keep_zip_files translate="label">
|
177 |
+
<label>Feed file retention</label>
|
178 |
+
<frontend_type>text</frontend_type>
|
179 |
+
<comment></comment>
|
180 |
+
<sort_order>5</sort_order>
|
181 |
+
<show_in_default>1</show_in_default>
|
182 |
+
<show_in_website>0</show_in_website>
|
183 |
+
<show_in_store>0</show_in_store>
|
184 |
+
<comment>Number of days to retain Feed zip files that have been transmitted to RichRelevance</comment>
|
185 |
+
</time_to_keep_zip_files>
|
186 |
+
<feed translate="label">
|
187 |
+
<label>Feed transmission</label>
|
188 |
+
<frontend_type>select</frontend_type>
|
189 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
190 |
+
<comment>Success or failure of catalog feed transmission (recommended)</comment>
|
191 |
+
<sort_order>10</sort_order>
|
192 |
+
<show_in_default>1</show_in_default>
|
193 |
+
<show_in_website>1</show_in_website>
|
194 |
+
<show_in_store>1</show_in_store>
|
195 |
+
</feed>
|
196 |
+
<checkout translate="label">
|
197 |
+
<label>Checkout information</label>
|
198 |
+
<frontend_type>select</frontend_type>
|
199 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
200 |
+
<comment>Order and item information on successful orders (recommended)</comment>
|
201 |
+
<sort_order>20</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 |
+
</checkout>
|
206 |
+
<item translate="label">
|
207 |
+
<label>Item information</label>
|
208 |
+
<frontend_type>select</frontend_type>
|
209 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
210 |
+
<comment>Item information being transmitted to RichRelevance on each product view</comment>
|
211 |
+
<sort_order>30</sort_order>
|
212 |
+
<show_in_default>1</show_in_default>
|
213 |
+
<show_in_website>1</show_in_website>
|
214 |
+
<show_in_store>1</show_in_store>
|
215 |
+
</item>
|
216 |
+
<category translate="label">
|
217 |
+
<label>Category information</label>
|
218 |
+
<frontend_type>select</frontend_type>
|
219 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
220 |
+
<comment>Category information being transmitted to RichRelevance on each category view</comment>
|
221 |
+
<sort_order>40</sort_order>
|
222 |
+
<show_in_default>1</show_in_default>
|
223 |
+
<show_in_website>1</show_in_website>
|
224 |
+
<show_in_store>1</show_in_store>
|
225 |
+
</category>
|
226 |
+
<search translate="label">
|
227 |
+
<label>Search information</label>
|
228 |
+
<frontend_type>select</frontend_type>
|
229 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
230 |
+
<comment>Search information being transmitted to RichRelevance on each Magento search</comment>
|
231 |
+
<sort_order>50</sort_order>
|
232 |
+
<show_in_default>1</show_in_default>
|
233 |
+
<show_in_website>1</show_in_website>
|
234 |
+
<show_in_store>1</show_in_store>
|
235 |
+
</search>
|
236 |
+
<addtocart translate="label">
|
237 |
+
<label>Add to cart information</label>
|
238 |
+
<frontend_type>select</frontend_type>
|
239 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
240 |
+
<comment>Item information being transmitted to RichRelevance when a product is added to the basket</comment>
|
241 |
+
<sort_order>60</sort_order>
|
242 |
+
<show_in_default>1</show_in_default>
|
243 |
+
<show_in_website>1</show_in_website>
|
244 |
+
<show_in_store>1</show_in_store>
|
245 |
+
</addtocart>
|
246 |
+
<cart translate="label">
|
247 |
+
<label>Cart information</label>
|
248 |
+
<frontend_type>select</frontend_type>
|
249 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
250 |
+
<comment>Item information being transmitted to RichRelevance on each cart view</comment>
|
251 |
+
<sort_order>70</sort_order>
|
252 |
+
<show_in_default>1</show_in_default>
|
253 |
+
<show_in_website>1</show_in_website>
|
254 |
+
<show_in_store>1</show_in_store>
|
255 |
+
</cart>
|
256 |
+
<placement translate="label">
|
257 |
+
<label>Placement information</label>
|
258 |
+
<frontend_type>select</frontend_type>
|
259 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
260 |
+
<comment>Information on placements being included on your Magento pages</comment>
|
261 |
+
<sort_order>80</sort_order>
|
262 |
+
<show_in_default>1</show_in_default>
|
263 |
+
<show_in_website>1</show_in_website>
|
264 |
+
<show_in_store>1</show_in_store>
|
265 |
+
</placement>
|
266 |
+
<settings translate="label">
|
267 |
+
<label>Setting information</label>
|
268 |
+
<frontend_type>select</frontend_type>
|
269 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
270 |
+
<comment>Settings that are currently in use such as API key, developer mode, etc.</comment>
|
271 |
+
<sort_order>90</sort_order>
|
272 |
+
<show_in_default>1</show_in_default>
|
273 |
+
<show_in_website>1</show_in_website>
|
274 |
+
<show_in_store>1</show_in_store>
|
275 |
+
</settings>
|
276 |
+
</fields>
|
277 |
+
</log_settings>
|
278 |
+
</groups>
|
279 |
+
</ampersand_richrelevance>
|
280 |
+
</sections>
|
281 |
+
</config>
|
app/code/community/Ampersand/RichRelevance/sql/ampersand_richrelevance_setup/mysql4-install-0.0.1.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$this->startSetup();
|
3 |
+
$setup = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup();
|
4 |
+
|
5 |
+
$setup->addAttributeGroup('catalog_product', 'Default', 'RichRelevance');
|
6 |
+
|
7 |
+
$setup->addAttribute(
|
8 |
+
'catalog_product',
|
9 |
+
'is_recommendable',
|
10 |
+
array(
|
11 |
+
'group' => 'RichRelevance',
|
12 |
+
'type' => 'int',
|
13 |
+
'input' => 'select',
|
14 |
+
'default' => '1',
|
15 |
+
'required' => false,
|
16 |
+
'source' => 'eav/entity_attribute_source_boolean',
|
17 |
+
'label' => Mage::helper('core')->__('Recommendable'),
|
18 |
+
'note' => Mage::helper('core')
|
19 |
+
->__("Choose 'No' to prevent RichRelevance from recommending this product."),
|
20 |
+
)
|
21 |
+
);
|
22 |
+
|
23 |
+
$setup->addAttributeToGroup(
|
24 |
+
'catalog_product', 'Default', 'RichRelevance', 'is_recommendable'
|
25 |
+
);
|
26 |
+
|
27 |
+
$this->endSetup();
|
app/design/frontend/base/default/layout/ampersand_richrelevance.xml
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<layout>
|
3 |
+
<_rr_init>
|
4 |
+
<reference name="head">
|
5 |
+
<action method="addCss"><link>ampersand_richrelevance/css/default.css</link></action>
|
6 |
+
</reference>
|
7 |
+
<reference name="content">
|
8 |
+
<block type="ampersand_richrelevance/header" name="richrelevance_header" before="-" template="ampersand_richrelevance/header.phtml"/>
|
9 |
+
</reference>
|
10 |
+
<reference name="before_body_end">
|
11 |
+
<block type="core/template" name="richrelevance_footer" after="-" template="ampersand_richrelevance/footer.phtml" />
|
12 |
+
</reference>
|
13 |
+
</_rr_init>
|
14 |
+
|
15 |
+
<cms_index_index>
|
16 |
+
<update handle="_rr_init"/>
|
17 |
+
<reference name="richrelevance_header">
|
18 |
+
<block type="core/template" name="richrelevance_page_type" template="ampersand_richrelevance/types/home.phtml" />
|
19 |
+
</reference>
|
20 |
+
</cms_index_index>
|
21 |
+
|
22 |
+
<catalogsearch_result_index>
|
23 |
+
<update handle="_rr_init"/>
|
24 |
+
<reference name="richrelevance_header">
|
25 |
+
<block type="ampersand_richrelevance/search" name="richrelevance_page_type" template="ampersand_richrelevance/types/search.phtml"/>
|
26 |
+
</reference>
|
27 |
+
</catalogsearch_result_index>
|
28 |
+
|
29 |
+
<catalog_category_view>
|
30 |
+
<update handle="_rr_init" />
|
31 |
+
<reference name="richrelevance_header">
|
32 |
+
<block type="ampersand_richrelevance/category" name="richrelevance_page_type" template="ampersand_richrelevance/types/category.phtml"/>
|
33 |
+
</reference>
|
34 |
+
</catalog_category_view>
|
35 |
+
|
36 |
+
<catalog_product_view>
|
37 |
+
<update handle="_rr_init" />
|
38 |
+
<reference name="richrelevance_header">
|
39 |
+
<block type="ampersand_richrelevance/item" name="richrelevance_page_type" template="ampersand_richrelevance/types/item.phtml"/>
|
40 |
+
</reference>
|
41 |
+
</catalog_product_view>
|
42 |
+
|
43 |
+
<checkout_cart_index>
|
44 |
+
<update handle="_rr_init" />
|
45 |
+
<reference name="richrelevance_header">
|
46 |
+
<block type="ampersand_richrelevance/cart" name="richrelevance_page_type" template="ampersand_richrelevance/types/cart.phtml"/>
|
47 |
+
</reference>
|
48 |
+
</checkout_cart_index>
|
49 |
+
|
50 |
+
<checkout_onepage_success>
|
51 |
+
<update handle="_rr_init" />
|
52 |
+
<reference name="richrelevance_header">
|
53 |
+
<block type="ampersand_richrelevance/checkout" name="richrelevance_page_type" template="ampersand_richrelevance/types/checkout.phtml"/>
|
54 |
+
</reference>
|
55 |
+
</checkout_onepage_success>
|
56 |
+
|
57 |
+
<checkout_multishipping_success>
|
58 |
+
<update handle="_rr_init" />
|
59 |
+
<reference name="richrelevance_header">
|
60 |
+
<block type="ampersand_richrelevance/checkout" name="richrelevance_page_type" template="ampersand_richrelevance/types/checkout.phtml"/>
|
61 |
+
</reference>
|
62 |
+
</checkout_multishipping_success>
|
63 |
+
|
64 |
+
<!-- Start of example placements
|
65 |
+
|
66 |
+
<cms_index_index>
|
67 |
+
<reference name="content">
|
68 |
+
<block type="ampersand_richrelevance/placement" name="richrelevance_home_placement1">
|
69 |
+
<action method="setPlacementName"><name>home_page.placement1</name></action>
|
70 |
+
</block>
|
71 |
+
</reference>
|
72 |
+
</cms_index_index>
|
73 |
+
<catalogsearch_result_index>
|
74 |
+
<reference name="content">
|
75 |
+
<block type="ampersand_richrelevance/placement" name="richrelevance_search_placement1">
|
76 |
+
<action method="setPlacementName"><name>search_page.placement1</name></action>
|
77 |
+
</block>
|
78 |
+
</reference>
|
79 |
+
</catalogsearch_result_index>
|
80 |
+
<catalog_category_view>
|
81 |
+
<reference name="content">
|
82 |
+
<block type="ampersand_richrelevance/placement" name="richrelevance_category_placement1">
|
83 |
+
<action method="setPlacementName"><name>category_page.placement1</name></action>
|
84 |
+
</block>
|
85 |
+
</reference>
|
86 |
+
</catalog_category_view>
|
87 |
+
<catalog_product_view>
|
88 |
+
<reference name="content">
|
89 |
+
<block type="ampersand_richrelevance/placement" name="richrelevance_item_placement1">
|
90 |
+
<action method="setPlacementName"><name>item_page.placement1</name></action>
|
91 |
+
</block>
|
92 |
+
<block type="ampersand_richrelevance/placement" name="richrelevance_item_placement2">
|
93 |
+
<action method="setPlacementName"><name>item_page.placement2</name></action>
|
94 |
+
</block>
|
95 |
+
</reference>
|
96 |
+
</catalog_product_view>
|
97 |
+
<checkout_cart_index>
|
98 |
+
<reference name="content">
|
99 |
+
<block type="ampersand_richrelevance/placement" name="richrelevance_cart_placement1">
|
100 |
+
<action method="setPlacementName"><name>cart_page.placement1</name></action>
|
101 |
+
</block>
|
102 |
+
</reference>
|
103 |
+
</checkout_cart_index>
|
104 |
+
|
105 |
+
End of example placements -->
|
106 |
+
|
107 |
+
</layout>
|
app/design/frontend/base/default/template/ampersand_richrelevance/footer.phtml
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if($this->helper('ampersand_richrelevance')->isEnabled()): ?>
|
2 |
+
<script charset="utf-8" type="text/javascript">
|
3 |
+
//<![CDATA[
|
4 |
+
rr_flush_onload();
|
5 |
+
//]]>
|
6 |
+
</script>
|
7 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/header.phtml
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if($this->helper('ampersand_richrelevance')->isEnabled()): ?>
|
2 |
+
<?php $helper = $this->helper('ampersand_richrelevance') ?>
|
3 |
+
|
4 |
+
<script charset="utf-8" type="text/javascript" src="//media.richrelevance.com/rrserver/js/1.0/p13n.js"></script>
|
5 |
+
<script charset="utf-8" type="text/javascript">
|
6 |
+
//<![CDATA[
|
7 |
+
var R3_COMMON = new r3_common();
|
8 |
+
R3_COMMON.setApiKey("<?php echo $helper->getApiKey() ?>");
|
9 |
+
R3_COMMON.setBaseUrl(window.location.protocol + "//recs.richrelevance.com/rrserver/");
|
10 |
+
R3_COMMON.setSessionId("<?php echo $this->getSessionId() ?>");
|
11 |
+
R3_COMMON.setUserId("<?php echo $this->getCustomerId() ?>");
|
12 |
+
//]]>
|
13 |
+
</script>
|
14 |
+
|
15 |
+
<?php echo $this->getChildHtml('richrelevance_page_type') ?>
|
16 |
+
|
17 |
+
<script charset="utf-8" type="text/javascript">
|
18 |
+
//<![CDATA[
|
19 |
+
<?php if ($helper->getDeveloperMode()): ?>
|
20 |
+
R3_COMMON.forceDevMode();
|
21 |
+
<?php endif; ?>
|
22 |
+
|
23 |
+
<?php if ($helper->getForceDisplayMode()): ?>
|
24 |
+
R3_COMMON.forceDisplayMode();
|
25 |
+
<?php endif; ?>
|
26 |
+
|
27 |
+
<?php if ($helper->getDummyDataMode()): ?>
|
28 |
+
R3_COMMON.useDummyData();
|
29 |
+
R3_COMMON.debugMode = 't';
|
30 |
+
<?php endif; ?>
|
31 |
+
|
32 |
+
r3();
|
33 |
+
//]]>
|
34 |
+
</script>
|
35 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/placement.phtml
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if($this->helper('ampersand_richrelevance')->isEnabled()): ?>
|
2 |
+
<script charset="utf-8" type="text/javascript">
|
3 |
+
//<![CDATA[
|
4 |
+
r3_placement("<?php echo $this->getPlacementName() ?>");
|
5 |
+
//]]>
|
6 |
+
</script>
|
7 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/add-to-cart.phtml
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ($itemId = $this->getAddedToCartItemId()): ?>
|
2 |
+
<script charset="utf-8" type="text/javascript">
|
3 |
+
//<![CDATA[
|
4 |
+
var R3_ADDTOCART = new r3_addtocart();
|
5 |
+
R3_ADDTOCART.addItemIdToCart("<?php echo $itemId ?>");
|
6 |
+
//]]>
|
7 |
+
</script>
|
8 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/cart.phtml
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script charset="utf-8" type="text/javascript">
|
2 |
+
//<![CDATA[
|
3 |
+
<?php $placements = Mage::helper('ampersand_richrelevance')->getPagePlacements('cart_page'); ?>
|
4 |
+
<?php foreach ($placements as $_placement): ?>
|
5 |
+
R3_COMMON.addPlacementType("cart_page.<?php echo $_placement ?>");
|
6 |
+
<?php endforeach; ?>
|
7 |
+
|
8 |
+
var R3_CART = new r3_cart();
|
9 |
+
<?php foreach ($this->getCartItemIds() as $_itemId): ?>
|
10 |
+
R3_CART.addItemId("<?php echo $_itemId; ?>");
|
11 |
+
<?php endforeach; ?>
|
12 |
+
//]]>
|
13 |
+
</script>
|
14 |
+
<?php if ($this->helper('checkout/cart')->getShouldRedirectToCart()): ?>
|
15 |
+
<?php echo $this->helper('ampersand_richrelevance')->getAddToBasketBlock()->toHtml() ?>
|
16 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/category.phtml
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script charset="utf-8" type="text/javascript">
|
2 |
+
//<![CDATA[
|
3 |
+
<?php $placements = $this->helper('ampersand_richrelevance')->getPagePlacements('category_page'); ?>
|
4 |
+
<?php foreach ($placements as $_placement): ?>
|
5 |
+
R3_COMMON.addPlacementType("category_page.<?php echo $_placement ?>");
|
6 |
+
<?php endforeach; ?>
|
7 |
+
|
8 |
+
var R3_CATEGORY = new r3_category();
|
9 |
+
<?php $category = $this->getCategory() ?>
|
10 |
+
R3_CATEGORY.setId("<?php echo $category->getId(); ?>");
|
11 |
+
R3_CATEGORY.setName("<?php echo $category->getName(); ?>");
|
12 |
+
//]]>
|
13 |
+
</script>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/checkout.phtml
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php if ($orderNumber = $this->getOrderNumber()): ?>
|
2 |
+
<script charset="utf-8" type="text/javascript">
|
3 |
+
//<![CDATA[
|
4 |
+
var R3_PURCHASED = new r3_purchased();
|
5 |
+
R3_PURCHASED.setOrderNumber("<?php echo $orderNumber ?>");
|
6 |
+
|
7 |
+
<?php foreach($this->getOrderItems() as $_item): ?>
|
8 |
+
R3_PURCHASED.addItemIdPriceQuantity("<?php echo $_item->getSku() ?>", "<?php echo $_item->getPrice() ?>", "<?php echo $_item->getQty() ?>");
|
9 |
+
<?php endforeach; ?>
|
10 |
+
//]]>
|
11 |
+
</script>
|
12 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/home.phtml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script charset="utf-8" type="text/javascript">
|
2 |
+
//<![CDATA[
|
3 |
+
<?php $placements = Mage::helper('ampersand_richrelevance')->getPagePlacements('home_page'); ?>
|
4 |
+
<?php foreach ($placements as $_placement): ?>
|
5 |
+
R3_COMMON.addPlacementType("home_page.<?php echo $_placement ?>");
|
6 |
+
<?php endforeach; ?>
|
7 |
+
|
8 |
+
var R3_HOME = new r3_home();
|
9 |
+
//]]>
|
10 |
+
</script>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/item.phtml
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script charset="utf-8" type="text/javascript">
|
2 |
+
//<![CDATA[
|
3 |
+
<?php $placements = Mage::helper('ampersand_richrelevance')->getPagePlacements('item_page'); ?>
|
4 |
+
<?php foreach ($placements as $_placement): ?>
|
5 |
+
R3_COMMON.addPlacementType("item_page.<?php echo $_placement ?>");
|
6 |
+
<?php endforeach; ?>
|
7 |
+
|
8 |
+
var R3_ITEM = new r3_item();
|
9 |
+
<?php $product = $this->getProduct() ?>
|
10 |
+
R3_ITEM.setId("<?php echo $product->getSku(); ?>");
|
11 |
+
//]]>
|
12 |
+
</script>
|
13 |
+
<?php if (!$this->helper('checkout/cart')->getShouldRedirectToCart()): ?>
|
14 |
+
<?php echo $this->helper('ampersand_richrelevance')->getAddToBasketBlock()->toHtml() ?>
|
15 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/ampersand_richrelevance/types/search.phtml
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script charset="utf-8" type="text/javascript">
|
2 |
+
//<![CDATA[
|
3 |
+
<?php $placements = Mage::helper('ampersand_richrelevance')->getPagePlacements('search_page'); ?>
|
4 |
+
<?php foreach ($placements as $_placement): ?>
|
5 |
+
R3_COMMON.addPlacementType("search_page.<?php echo $_placement ?>");
|
6 |
+
<?php endforeach; ?>
|
7 |
+
|
8 |
+
var R3_SEARCH = new r3_search();
|
9 |
+
R3_SEARCH.setTerms("<?php echo $this->getTerms() ?>");
|
10 |
+
|
11 |
+
<?php foreach ($this->getSkus() as $_itemSku): ?>
|
12 |
+
R3_SEARCH.addItemId("<?php echo $_itemSku ?>");
|
13 |
+
<?php endforeach; ?>
|
14 |
+
//]]>
|
15 |
+
</script>
|
app/etc/modules/Ampersand_RichRelevance.xml
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Ampersand_RichRelevance>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
<depends>
|
8 |
+
<Ampersand_Integration/>
|
9 |
+
</depends>
|
10 |
+
</Ampersand_RichRelevance>
|
11 |
+
</modules>
|
12 |
+
</config>
|
lib/licenses/service_richrelevance.lic
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
message,outgoing,richrelevance:export,6e5631ab46e48c2138646817d8abcbd62af4ccf2
|
2 |
+
message,outgoing,richrelevance:exportAll,dcba520073989cf51e528766d75c1a3087ab17ee
|
3 |
+
message,outgoing,richrelevance:sendAll,5bb4d1566b4d329bedea34f8b173433f1f9a2bc0
|
4 |
+
message,outgoing,richrelevance:exportProducts,67665ed6783e12571e9c35cac3f6b36e1bb331ac
|
5 |
+
message,outgoing,richrelevance:exportCategories,d880b1db67d851ddaa071e1be56b6a04b4d4b43e
|
6 |
+
message,outgoing,richrelevance:exportProductCategories,c2a76e81341a7a41afab80b776f724c871175ad4
|
7 |
+
|
8 |
+
$ϯf�� aS��k�'�D��G��v�N�ܡ[x�11)�+w�8y���0��)�2W��ܬ+"A�x�|X���ԿE��Y�S;�n�~3��&��]�o��%Z�5$�Bf��^쩖��
|
9 |
+
��]$
|
10 |
+
8ȸ������
|
package.xml
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Ampersand_RichRelevance</name>
|
4 |
+
<version>0.1.3</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://www.ampersandcommerce.com">GNU General Public License (GPL)</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Seamlessly integrate Magento with the RichRelevance recommendations engine.</summary>
|
10 |
+
<description><p>RichRelevance powers personalized shopping experiences for the world's largest and most innovative retail brands, helping retailers increase average order values and conversion rates by providing more relevant product suggestions and cross sell opportunities.</p>
|
11 |
+
<p>Ampersand have developed an exclusive Magento package extension that provides a sophisticated interface with RichRelevance's RichRecs Express recommendation engine. It is built using our innovative integration framework that allows us to deliver robust integrations between Magento and other systems.</p>
|
12 |
+
<p>This module gives small to mid-size retailers easy access to the leading personalized recommendations solution used by some of the worlds largest retail brands.</p>
|
13 |
+
<p>The RichRecs Express integration module is able to:</p>
|
14 |
+
<ul>
|
15 |
+
<li>Display product recommendations to your customers throughout your Magento website</li>
|
16 |
+
<li>Customise the appearance of the RichRecs Express recommendations via CSS stylesheets</li>
|
17 |
+
<li>Transmit visitor information to RichRecs Express for recommendation building</li>
|
18 |
+
<li>Generate a feed of the Magento product catalog and transmit to RichRecs Express via FTP</li>
|
19 |
+
</ul>
|
20 |
+
<p>Ampersand's comprehensive integration framework combined with the power of Magento and intuitive product recommendations from RichRelevance will increase sales and effectively monetize your site traffic by providing the most relevant products, content and offers to shoppers.</p></description>
|
21 |
+
<notes>Ampersand Commerce RichRelevance v0.1.3</notes>
|
22 |
+
<authors><author><name>Ampersand Commerce</name><user>ampersandhq</user><email>integrations@ampersandit.co.uk</email></author></authors>
|
23 |
+
<date>2011-09-28</date>
|
24 |
+
<time>12:53:26</time>
|
25 |
+
<contents><target name="magecommunity"><dir name="Ampersand"><dir name="RichRelevance"><dir name="Block"><file name="AddToCart.php" hash="dca0bb04e5a664f8886f34aa217369ea"/><dir name="Adminhtml"><file name="DownloadButton.php" hash="e5dad6b11ceef0223aca77b7e8e791b7"/><file name="PushButton.php" hash="fc41b65b21a32f61e1439a56cf758367"/><dir name="System"><dir name="Config"><dir name="Renderer"><file name="Placements.php" hash="3ca310798640845081a2efbc2856e147"/></dir></dir></dir></dir><file name="Cart.php" hash="da8e94020311b1367f2fbc9b2a83cddc"/><file name="Category.php" hash="7fb509517ce4f59e132e67d7df0f1bf0"/><file name="Checkout.php" hash="78197cb56ac6b40a5820529ff0957a73"/><file name="Header.php" hash="da1d24347127d28104a4bb008164c7b4"/><file name="Item.php" hash="a1ecd280716dde630d99260de4d3c3bb"/><file name="Placement.php" hash="395f65115180040d3437883ab4b18dae"/><file name="Search.php" hash="a7bb306d60de4ea742a7c189845b0cd2"/></dir><dir name="Helper"><file name="Data.php" hash="de094c2458c0721f043a0bc81772dbce"/><file name="Feed.php" hash="4fe289a45fc824c6af26e427857c6e16"/><file name="Log.php" hash="0eeb4070f067f63c934a15d797383644"/><file name="Service.php" hash="84bd3594fee23fd1d6112504d450e221"/></dir><dir name="Model"><file name="Cron.php" hash="98cab9a04d857caf0cbb865b1475012b"/><file name="Observer.php" hash="82898ec6f993e6a38737fb97ff7bdedf"/><file name="Push.php" hash="1e820036c18aa111597bf5748fa1a669"/></dir><file name="changelog.txt" hash="ae981eeb5480a8be4e6e40d9c3110e82"/><dir name="controllers"><dir name="Adminhtml"><file name="RequestController.php" hash="922bb5af6c2971e5e992ebae6f307d1c"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="9284e3e9ce1e209c8361c8fd40338420"/><file name="config.xml" hash="82bd8ccf423b56966cd525397a17856d"/><dir name="integration"><file name="out.messages.xml" hash="2f105b3ce9ba85ce12b64700d60828f8"/><file name="out.types.xml" hash="7c0a9a10a1918a72a2faa028f8b934a2"/></dir><file name="system.xml" hash="4d3c3476490d359186ee603b76046685"/></dir><dir name="sql"><dir name="ampersand_richrelevance_setup"><file name="mysql4-install-0.0.1.php" hash="ce0205e4eed85a7a4436f7097f0d6125"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="ampersand_richrelevance.xml" hash="83cd1bd9bf91f9cb2573ab308c491345"/></dir><dir name="template"><dir name="ampersand_richrelevance"><file name="footer.phtml" hash="1ea8c0e094a530e35fe8a30c9c5c5427"/><file name="header.phtml" hash="6306c4e06d61815638442a42612a97f3"/><file name="placement.phtml" hash="af1df8e0bc7caf63d743346458cd751f"/><dir name="types"><file name="add-to-cart.phtml" hash="de7367c164830190f21825c686553c72"/><file name="cart.phtml" hash="fed0ebe8109743844a685116ca380de1"/><file name="category.phtml" hash="a4709fcc8de432a29ffb755389ec8bbd"/><file name="checkout.phtml" hash="8a27f51b408ff66434982b763c2a8d06"/><file name="home.phtml" hash="59a73aea2f906f8d7fb05f760125d6e3"/><file name="item.phtml" hash="985f897a03bdf59b5561aa7c74b44bf8"/><file name="search.phtml" hash="1a22e4b691707d5ca424ab8e5144d965"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Ampersand_RichRelevance.xml" hash="e5d4065dcfb79225759dc9625c4587fc"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="ampersand_richrelevance"><dir name="css"><file name="default.css" hash="3acf622ae4e43e4896bf787743f1ebe6"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="licenses"><file name="service_richrelevance.lic" hash="b223e585d88c5c9f872402e3845897db"/></dir></target></contents>
|
26 |
+
<compatible/>
|
27 |
+
<dependencies><required><php><min>5.0.0</min><max>5.9.9</max></php></required></dependencies>
|
28 |
+
</package>
|
skin/frontend/base/default/ampersand_richrelevance/css/default.css
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
Document : home_page
|
3 |
+
Created on : 19-Aug-2011, 16:03:16
|
4 |
+
Author : Matthew Haworth
|
5 |
+
Description:
|
6 |
+
Styles placements in Magento module RichRelevance
|
7 |
+
*/
|
8 |
+
|
9 |
+
|
10 |
+
.rr_strategy_message{
|
11 |
+
font-weight: bold;
|
12 |
+
font-size: 14px;
|
13 |
+
color: black;
|
14 |
+
}
|
15 |
+
.rr_list{
|
16 |
+
list-style: none;
|
17 |
+
margin: 0;
|
18 |
+
padding: 0;
|
19 |
+
display: inline-block
|
20 |
+
}
|
21 |
+
.rr_item{
|
22 |
+
list-style: none;
|
23 |
+
float: left;
|
24 |
+
width: 150px;
|
25 |
+
border: 1px solid silver;
|
26 |
+
padding: 10px;
|
27 |
+
margin-top: 10px;
|
28 |
+
}
|
29 |
+
.rr_image{
|
30 |
+
border: 0;
|
31 |
+
width: 150px;
|
32 |
+
}
|
33 |
+
.rr_divider {
|
34 |
+
float: left;
|
35 |
+
}
|
36 |
+
.rr_divider div{
|
37 |
+
float: left;
|
38 |
+
width: 10px;
|
39 |
+
height: 1px;
|
40 |
+
}
|
41 |
+
.rr_product_name{
|
42 |
+
display: block;
|
43 |
+
}
|