Version Notes
Initial production release
Download this release
Release Info
Developer | David Webber |
Extension | recapture |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/local/Recapture/Connector/Block/Adminhtml/System/Config/Authenticate.php +19 -0
- app/code/local/Recapture/Connector/Block/Adminhtml/System/Config/Key.php +12 -0
- app/code/local/Recapture/Connector/Block/Adminhtml/System/Config/Status.php +19 -0
- app/code/local/Recapture/Connector/Helper/Data.php +17 -0
- app/code/local/Recapture/Connector/Helper/Transport.php +24 -0
- app/code/local/Recapture/Connector/Model/Observer.php +105 -0
- app/code/local/Recapture/Connector/controllers/Adminhtml/AuthenticateController.php +39 -0
- app/code/local/Recapture/Connector/controllers/ExportController.php +115 -0
- app/code/local/Recapture/Connector/etc/config.xml +114 -0
- app/code/local/Recapture/Connector/etc/system.xml +69 -0
- app/etc/modules/Recapture_Connector.xml +9 -0
- package.xml +18 -0
app/code/local/Recapture/Connector/Block/Adminhtml/System/Config/Authenticate.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Recapture_Connector_Block_Adminhtml_System_Config_Authenticate extends Mage_Adminhtml_Block_System_Config_Form_Field
|
3 |
+
implements Varien_Data_Form_Element_Renderer_Interface {
|
4 |
+
|
5 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element){
|
6 |
+
|
7 |
+
$buttonBlock = Mage::app()->getLayout()->createBlock('adminhtml/widget_button');
|
8 |
+
|
9 |
+
$data = array(
|
10 |
+
'label' => Mage::helper('adminhtml')->__('Authenticate Account'),
|
11 |
+
'onclick' => 'setLocation(\''.Mage::helper('adminhtml')->getUrl("recapture_admin/authenticate") . '\' )',
|
12 |
+
'class' => '',
|
13 |
+
);
|
14 |
+
|
15 |
+
$html = $buttonBlock->setData($data)->toHtml();
|
16 |
+
|
17 |
+
return $html;
|
18 |
+
}
|
19 |
+
}
|
app/code/local/Recapture/Connector/Block/Adminhtml/System/Config/Key.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Recapture_Connector_Block_Adminhtml_System_Config_Key extends Mage_Adminhtml_Block_System_Config_Form_Field {
|
4 |
+
|
5 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
|
6 |
+
|
7 |
+
$element->setDisabled('disabled');
|
8 |
+
return parent::_getElementHtml($element);
|
9 |
+
|
10 |
+
}
|
11 |
+
|
12 |
+
}
|
app/code/local/Recapture/Connector/Block/Adminhtml/System/Config/Status.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Recapture_Connector_Block_Adminhtml_System_Config_Status extends Mage_Adminhtml_Block_System_Config_Form_Field {
|
4 |
+
|
5 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
|
6 |
+
|
7 |
+
$authenticated = Mage::getStoreConfig('recapture/configuration/authenticated');
|
8 |
+
|
9 |
+
$image = $this->getSkinUrl('images/' . ($authenticated ? 'success' : 'error') . '_msg_icon.gif');
|
10 |
+
$text = '<img style="float: left; margin-right: 6px;" src="' . $image . '" /> ';
|
11 |
+
$text .= '<span class="' . ($authenticated ? 'success' : 'error') . '">';
|
12 |
+
$text .= $authenticated ? 'Authenticated!' : 'Not Authenticated';
|
13 |
+
$text .= '</span>';
|
14 |
+
|
15 |
+
return $text;
|
16 |
+
|
17 |
+
}
|
18 |
+
|
19 |
+
}
|
app/code/local/Recapture/Connector/Helper/Data.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Recapture_Connector_Helper_Data extends Mage_Core_Helper_Abstract {
|
4 |
+
|
5 |
+
public function isEnabled(){
|
6 |
+
|
7 |
+
return Mage::getStoreConfig('recapture/configuration/enabled');
|
8 |
+
|
9 |
+
}
|
10 |
+
|
11 |
+
public function getApiKey(){
|
12 |
+
|
13 |
+
return Mage::getStoreConfig('recapture/configuration/api_key');
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
}
|
app/code/local/Recapture/Connector/Helper/Transport.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Recapture_Connector_Helper_Transport extends Mage_Core_Helper_Abstract {
|
4 |
+
|
5 |
+
public function dispatch($route = '', $data = array()){
|
6 |
+
|
7 |
+
if (!Mage::helper('recapture')->isEnabled()) return false;
|
8 |
+
if (empty($route)) return false;
|
9 |
+
|
10 |
+
$adapter = new Zend_Http_Client_Adapter_Curl();
|
11 |
+
$client = new Zend_Http_Client('http://www.recapture.io/beacon/' . $route, array(
|
12 |
+
'timeout' => 1
|
13 |
+
));
|
14 |
+
|
15 |
+
$client->setParameterPost($data);
|
16 |
+
$client->setAdapter($adapter);
|
17 |
+
$client->setHeaders('Api-Key', Mage::helper('recapture')->getApiKey());
|
18 |
+
$response = $client->request('POST');
|
19 |
+
|
20 |
+
return $response;
|
21 |
+
|
22 |
+
}
|
23 |
+
|
24 |
+
}
|
app/code/local/Recapture/Connector/Model/Observer.php
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Recapture_Connector_Model_Observer {
|
4 |
+
|
5 |
+
public function itemUpdate($observer){
|
6 |
+
|
7 |
+
return $this->_updateQuote($observer->getEvent()->getQuoteItem()->getQuote());
|
8 |
+
|
9 |
+
}
|
10 |
+
|
11 |
+
public function quoteUpdate($observer){
|
12 |
+
|
13 |
+
return $this->_updateQuote($observer->getEvent()->getQuote());
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
protected function _updateQuote(Mage_Sales_Model_Quote $quote){
|
18 |
+
|
19 |
+
if (!Mage::helper('recapture')->isEnabled()) return $this;
|
20 |
+
|
21 |
+
if (!$quote->getId()) return;
|
22 |
+
|
23 |
+
//sales_quote_save_before gets called like 5 times on some page loads, we don't want to do 5 updates per page load
|
24 |
+
if (Mage::registry('recapture_has_posted')) return;
|
25 |
+
|
26 |
+
Mage::register('recapture_has_posted', true);
|
27 |
+
|
28 |
+
$transportData = array(
|
29 |
+
'email' => $quote->getCustomerEmail(),
|
30 |
+
'external_id' => $quote->getId(),
|
31 |
+
'grand_total' => $quote->getGrandTotal(),
|
32 |
+
'products' => array(),
|
33 |
+
'totals' => array()
|
34 |
+
);
|
35 |
+
|
36 |
+
$cartItems = $quote->getAllVisibleItems();
|
37 |
+
|
38 |
+
foreach ($cartItems as $item){
|
39 |
+
|
40 |
+
$product = array(
|
41 |
+
'name' => $item->getName(),
|
42 |
+
'sku' => $item->getSku(),
|
43 |
+
'price' => $item->getPrice(),
|
44 |
+
'qty' => $item->getQty(),
|
45 |
+
'image' => (string)Mage::helper('catalog/image')->init($item->getProduct(), 'thumbnail')
|
46 |
+
);
|
47 |
+
|
48 |
+
$transportData['products'][] = $product;
|
49 |
+
|
50 |
+
}
|
51 |
+
|
52 |
+
$totals = $quote->getTotals();
|
53 |
+
|
54 |
+
foreach ($totals as $total){
|
55 |
+
|
56 |
+
//we pass grand total on the top level
|
57 |
+
if ($total->getCode() == 'grand_total') continue;
|
58 |
+
|
59 |
+
$total = array(
|
60 |
+
'name' => $total->getTitle(),
|
61 |
+
'amount' => $total->getValue()
|
62 |
+
);
|
63 |
+
|
64 |
+
$transportData['totals'][] = $total;
|
65 |
+
|
66 |
+
}
|
67 |
+
|
68 |
+
Mage::helper('recapture/transport')->dispatch('cart', $transportData);
|
69 |
+
|
70 |
+
return $this;
|
71 |
+
|
72 |
+
}
|
73 |
+
|
74 |
+
public function quoteDelete($observer){
|
75 |
+
|
76 |
+
if (!Mage::helper('recapture')->isEnabled()) return $this;
|
77 |
+
|
78 |
+
$quote = $observer->getEvent()->getQuote();
|
79 |
+
|
80 |
+
$transportData = array(
|
81 |
+
'external_id' => $quote->getId()
|
82 |
+
);
|
83 |
+
|
84 |
+
Mage::helper('recapture/transport')->dispatch('cart/remove', $transportData);
|
85 |
+
|
86 |
+
return $this;
|
87 |
+
|
88 |
+
}
|
89 |
+
|
90 |
+
public function cartConversion($observer){
|
91 |
+
|
92 |
+
if (!Mage::helper('recapture')->isEnabled()) return $this;
|
93 |
+
|
94 |
+
$order = $observer->getEvent()->getOrder();
|
95 |
+
|
96 |
+
$transportData = array(
|
97 |
+
'external_id' => $order->getQuoteId()
|
98 |
+
);
|
99 |
+
|
100 |
+
Mage::helper('recapture/transport')->dispatch('conversion', $transportData);
|
101 |
+
|
102 |
+
return $this;
|
103 |
+
|
104 |
+
}
|
105 |
+
}
|
app/code/local/Recapture/Connector/controllers/Adminhtml/AuthenticateController.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Recapture_Connector_Adminhtml_AuthenticateController extends Mage_Adminhtml_Controller_Action {
|
4 |
+
|
5 |
+
public function indexAction(){
|
6 |
+
|
7 |
+
$query = http_build_query(array(
|
8 |
+
'return' => Mage::helper('adminhtml')->getUrl('recapture_admin/authenticate/return'),
|
9 |
+
'recapture' => Mage::getUrl('recapture/cart/index')
|
10 |
+
));
|
11 |
+
|
12 |
+
$authenticateUrl = 'http://recapture.io/account/auth?' . $query;
|
13 |
+
return $this->_redirectUrl($authenticateUrl);
|
14 |
+
|
15 |
+
}
|
16 |
+
|
17 |
+
public function returnAction(){
|
18 |
+
|
19 |
+
$apiKey = $this->getRequest()->getParam('api_key');
|
20 |
+
|
21 |
+
if ($apiKey){
|
22 |
+
|
23 |
+
$config = new Mage_Core_Model_Config();
|
24 |
+
$config->saveConfig('recapture/configuration/authenticated', true, 'default', 0);
|
25 |
+
$config->saveConfig('recapture/configuration/api_key', $apiKey, 'default', 0);
|
26 |
+
|
27 |
+
Mage::getSingleton('adminhtml/session')->addSuccess('Your account has been authenticated successfully!');
|
28 |
+
|
29 |
+
} else {
|
30 |
+
|
31 |
+
Mage::getSingleton('adminhtml/session')->addError('Unable to authenticate your account. Please ensure you are logged in to your Recapture account.');
|
32 |
+
|
33 |
+
}
|
34 |
+
|
35 |
+
return $this->_redirect('adminhtml/system_config/edit', array('section' => 'recapture'));
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
app/code/local/Recapture/Connector/controllers/ExportController.php
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Soshify_Connector_ExportController extends Mage_Core_Controller_Front_Action {
|
4 |
+
|
5 |
+
public function indexAction(){
|
6 |
+
|
7 |
+
$resource = Mage::getSingleton('core/resource');
|
8 |
+
$readConnection = $resource->getConnection('core_read');
|
9 |
+
$productResource = Mage::getModel('catalog/product')->getResource();
|
10 |
+
|
11 |
+
$name = $productResource->getAttribute('name');
|
12 |
+
$visibility = $productResource->getAttribute('visibility');
|
13 |
+
$status = $productResource->getAttribute('status');
|
14 |
+
|
15 |
+
$nameId = $name->getId();
|
16 |
+
$visibilityId = $visibility->getId();
|
17 |
+
$statusId = $status->getId();
|
18 |
+
|
19 |
+
$select = $readConnection->select();
|
20 |
+
$select = $select->from(array('e' => $resource->getTableName('catalog/product')), array('sku'))->where(new Zend_Db_Expr('sku IS NOT NULL'));
|
21 |
+
|
22 |
+
//is active
|
23 |
+
$select->joinLeft(array('table_status' => $status->getBackendTable()), "(table_status.entity_id = e.entity_id AND table_status.attribute_id = $statusId)", null)->where("table_status.value = '" . Mage_Catalog_Model_Product_Status::STATUS_ENABLED . "'");
|
24 |
+
|
25 |
+
//name
|
26 |
+
$select->joinLeft(array('table_name' => $name->getBackendTable()), "(table_name.entity_id = e.entity_id AND table_name.attribute_id = $nameId)", array('name' => 'value'));
|
27 |
+
|
28 |
+
//visibility
|
29 |
+
$select->joinLeft(array('table_visibility' => $visibility->getBackendTable()), "(table_visibility.entity_id = e.entity_id AND table_visibility.attribute_id = $visibilityId)", array('visibility' => 'value'))->where("table_visibility.value != '" . Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE . "'");
|
30 |
+
|
31 |
+
$query = $select->query();
|
32 |
+
|
33 |
+
$dir = Mage::getBaseDir('var') . '/soshify/';
|
34 |
+
$file = 'soshify.csv';
|
35 |
+
|
36 |
+
mkdir($dir, 0777, true);
|
37 |
+
|
38 |
+
$fh = fopen($dir . '/' . $file, 'w');
|
39 |
+
$csv = new Varien_File_Csv();
|
40 |
+
|
41 |
+
while ($product = $query->fetch()){
|
42 |
+
|
43 |
+
$csv->fputcsv($fh, $product);
|
44 |
+
|
45 |
+
}
|
46 |
+
|
47 |
+
fclose($fh);
|
48 |
+
|
49 |
+
}
|
50 |
+
|
51 |
+
public function exportAction(){
|
52 |
+
|
53 |
+
$resource = Mage::getSingleton('core/resource');
|
54 |
+
$readConnection = $resource->getConnection('core_read');
|
55 |
+
$productResource = Mage::getModel('catalog/product')->getResource();
|
56 |
+
|
57 |
+
$name = $productResource->getAttribute('name');
|
58 |
+
$photos = $productResource->getAttribute('instagram_photos');
|
59 |
+
|
60 |
+
$nameId = $name->getId();
|
61 |
+
$photosId = $photos->getId();
|
62 |
+
|
63 |
+
$select = $readConnection->select();
|
64 |
+
$select = $select->from(array('e' => $resource->getTableName('catalog/product')), array('sku'))->where(new Zend_Db_Expr('sku IS NOT NULL'));
|
65 |
+
|
66 |
+
//name
|
67 |
+
$select->joinLeft(array('table_name' => $name->getBackendTable()), "(table_name.entity_id = e.entity_id AND table_name.attribute_id = $nameId)", array('name' => 'value'));
|
68 |
+
|
69 |
+
//name
|
70 |
+
$select->joinLeft(array('table_photos' => $photos->getBackendTable()), "(table_photos.entity_id = e.entity_id AND table_photos.attribute_id = $photosId)", array('photos' => 'value'));
|
71 |
+
|
72 |
+
$query = $select->query();
|
73 |
+
|
74 |
+
$ids = array();
|
75 |
+
|
76 |
+
while ($product = $query->fetch()){
|
77 |
+
|
78 |
+
$theseIds = explode(',', $product['photos']);
|
79 |
+
|
80 |
+
if (count($theseIds)){
|
81 |
+
|
82 |
+
foreach ($theseIds as $id){
|
83 |
+
|
84 |
+
if (empty($id)) continue;
|
85 |
+
|
86 |
+
if (!isset($ids[$id])) $ids[$id] = array();
|
87 |
+
|
88 |
+
$ids[$id][] = $product['sku'];
|
89 |
+
|
90 |
+
}
|
91 |
+
|
92 |
+
}
|
93 |
+
|
94 |
+
}
|
95 |
+
|
96 |
+
$dir = Mage::getBaseDir('var') . '/soshify/';
|
97 |
+
$file = 'soshify-photos.csv';
|
98 |
+
|
99 |
+
$fh = fopen($dir . '/' . $file, 'w');
|
100 |
+
$csv = new Varien_File_Csv();
|
101 |
+
|
102 |
+
foreach ($ids as $id => $products){
|
103 |
+
|
104 |
+
$csv->fputcsv($fh, array(
|
105 |
+
'code' => $id,
|
106 |
+
'products' => implode(',', $products)
|
107 |
+
));
|
108 |
+
|
109 |
+
}
|
110 |
+
|
111 |
+
fclose($fh);
|
112 |
+
|
113 |
+
}
|
114 |
+
|
115 |
+
}
|
app/code/local/Recapture/Connector/etc/config.xml
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Recapture_Connector>
|
5 |
+
<version>0.1.0</version>
|
6 |
+
</Recapture_Connector>
|
7 |
+
</modules>
|
8 |
+
|
9 |
+
<global>
|
10 |
+
|
11 |
+
<blocks>
|
12 |
+
<recapture>
|
13 |
+
<class>Recapture_Connector_Block</class>
|
14 |
+
</recapture>
|
15 |
+
</blocks>
|
16 |
+
|
17 |
+
<helpers>
|
18 |
+
<recapture>
|
19 |
+
<class>Recapture_Connector_Helper</class>
|
20 |
+
</recapture>
|
21 |
+
</helpers>
|
22 |
+
|
23 |
+
<events>
|
24 |
+
|
25 |
+
<sales_quote_save_after>
|
26 |
+
<observers>
|
27 |
+
<recapture_cart_update>
|
28 |
+
<type>singleton</type>
|
29 |
+
<class>Recapture_Connector_Model_Observer</class>
|
30 |
+
<method>quoteUpdate</method>
|
31 |
+
</recapture_cart_update>
|
32 |
+
</observers>
|
33 |
+
</sales_quote_save_after>
|
34 |
+
|
35 |
+
<sales_quote_delete_after>
|
36 |
+
<observers>
|
37 |
+
<recapture_cart_update>
|
38 |
+
<type>singleton</type>
|
39 |
+
<class>Recapture_Connector_Model_Observer</class>
|
40 |
+
<method>quoteDelete</method>
|
41 |
+
</recapture_cart_update>
|
42 |
+
</observers>
|
43 |
+
</sales_quote_delete_after>
|
44 |
+
|
45 |
+
<sales_order_place_after>
|
46 |
+
<observers>
|
47 |
+
<recapture_cart_conversion>
|
48 |
+
<type>singleton</type>
|
49 |
+
<class>Recapture_Connector_Model_Observer</class>
|
50 |
+
<method>cartConversion</method>
|
51 |
+
</recapture_cart_conversion>
|
52 |
+
</observers>
|
53 |
+
</sales_order_place_after>
|
54 |
+
</events>
|
55 |
+
|
56 |
+
</global>
|
57 |
+
|
58 |
+
<frontend>
|
59 |
+
<routers>
|
60 |
+
<recapture>
|
61 |
+
<use>standard</use>
|
62 |
+
<args>
|
63 |
+
<module>Recapture_Connector</module>
|
64 |
+
<frontName>recapture</frontName>
|
65 |
+
</args>
|
66 |
+
</recapture>
|
67 |
+
</routers>
|
68 |
+
<layout>
|
69 |
+
<updates>
|
70 |
+
<recapture>
|
71 |
+
<file>recapture.xml</file>
|
72 |
+
</recapture>
|
73 |
+
</updates>
|
74 |
+
</layout>
|
75 |
+
</frontend>
|
76 |
+
|
77 |
+
<admin>
|
78 |
+
<routers>
|
79 |
+
<recapture_admin>
|
80 |
+
<use>admin</use>
|
81 |
+
<args>
|
82 |
+
<module>Recapture_Connector_Adminhtml</module>
|
83 |
+
<frontName>recapture_admin</frontName>
|
84 |
+
</args>
|
85 |
+
</recapture_admin>
|
86 |
+
</routers>
|
87 |
+
</admin>
|
88 |
+
|
89 |
+
<adminhtml>
|
90 |
+
<acl>
|
91 |
+
<resources>
|
92 |
+
<all>
|
93 |
+
<title>Allow Everything</title>
|
94 |
+
</all>
|
95 |
+
<admin>
|
96 |
+
<children>
|
97 |
+
<system>
|
98 |
+
<children>
|
99 |
+
<config>
|
100 |
+
<children>
|
101 |
+
<recapture>
|
102 |
+
<title>Recapture Connector - All</title>
|
103 |
+
</recapture>
|
104 |
+
</children>
|
105 |
+
</config>
|
106 |
+
</children>
|
107 |
+
</system>
|
108 |
+
</children>
|
109 |
+
</admin>
|
110 |
+
</resources>
|
111 |
+
</acl>
|
112 |
+
</adminhtml>
|
113 |
+
|
114 |
+
</config>
|
app/code/local/Recapture/Connector/etc/system.xml
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<tabs>
|
4 |
+
<recapture translate="label" module="recapture">
|
5 |
+
<label>Recapture Connector</label>
|
6 |
+
<sort_order>100</sort_order>
|
7 |
+
</recapture>
|
8 |
+
</tabs>
|
9 |
+
<sections>
|
10 |
+
<recapture translate="label" module="soshify">
|
11 |
+
<label>Extension Options</label>
|
12 |
+
<tab>recapture</tab>
|
13 |
+
<sort_order>1000</sort_order>
|
14 |
+
<show_in_default>1</show_in_default>
|
15 |
+
<show_in_website>1</show_in_website>
|
16 |
+
<show_in_store>1</show_in_store>
|
17 |
+
|
18 |
+
<groups>
|
19 |
+
<configuration translate="label" module="soshify">
|
20 |
+
<label>Configuration</label>
|
21 |
+
<frontend_type>text</frontend_type>
|
22 |
+
<sort_order>1000</sort_order>
|
23 |
+
<show_in_default>1</show_in_default>
|
24 |
+
<show_in_website>1</show_in_website>
|
25 |
+
<show_in_store>1</show_in_store>
|
26 |
+
|
27 |
+
<fields>
|
28 |
+
<status translate="label">
|
29 |
+
<label>Authentication Status</label>
|
30 |
+
<sort_order>0</sort_order>
|
31 |
+
<type>text</type>
|
32 |
+
<show_in_default>1</show_in_default>
|
33 |
+
<show_in_website>1</show_in_website>
|
34 |
+
<show_in_store>1</show_in_store>
|
35 |
+
<frontend_model>recapture/adminhtml_system_config_status</frontend_model>
|
36 |
+
</status>
|
37 |
+
<authenticate translate="label">
|
38 |
+
<label>Authenticate Account</label>
|
39 |
+
<sort_order>1</sort_order>
|
40 |
+
<type>button</type>
|
41 |
+
<show_in_default>1</show_in_default>
|
42 |
+
<show_in_website>1</show_in_website>
|
43 |
+
<show_in_store>1</show_in_store>
|
44 |
+
<frontend_model>recapture/adminhtml_system_config_authenticate</frontend_model>
|
45 |
+
</authenticate>
|
46 |
+
<enabled translate="label">
|
47 |
+
<label>Enabled</label>
|
48 |
+
<frontend_type>select</frontend_type>
|
49 |
+
<sort_order>2</sort_order>
|
50 |
+
<show_in_default>1</show_in_default>
|
51 |
+
<show_in_website>1</show_in_website>
|
52 |
+
<show_in_store>1</show_in_store>
|
53 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
54 |
+
</enabled>
|
55 |
+
<api_key translate="label">
|
56 |
+
<label>API Key</label>
|
57 |
+
<frontend_type>text</frontend_type>
|
58 |
+
<frontend_model>recapture/adminhtml_system_config_key</frontend_model>
|
59 |
+
<sort_order>20</sort_order>
|
60 |
+
<show_in_default>1</show_in_default>
|
61 |
+
<show_in_website>1</show_in_website>
|
62 |
+
<show_in_store>1</show_in_store>
|
63 |
+
</api_key>
|
64 |
+
</fields>
|
65 |
+
</configuration>
|
66 |
+
</groups>
|
67 |
+
</recapture>
|
68 |
+
</sections>
|
69 |
+
</config>
|
app/etc/modules/Recapture_Connector.xml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Recapture_Connector>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>local</codePool>
|
7 |
+
</Recapture_Connector>
|
8 |
+
</modules>
|
9 |
+
</config>
|
package.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>recapture</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license>OSL</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Free analytics dashboard for abandoned carts. Set up automated cart recovery email campaigns in minutes.</summary>
|
10 |
+
<description>Free analytics dashboard for abandoned carts. Set up automated cart recovery email campaigns in minutes.</description>
|
11 |
+
<notes>Initial production release</notes>
|
12 |
+
<authors><author><name>David Webber</name><user>Adstream</user><email>david@adstreaminc.com</email></author></authors>
|
13 |
+
<date>2015-07-09</date>
|
14 |
+
<time>22:53:31</time>
|
15 |
+
<contents><target name="magelocal"><dir name="Recapture"><dir name="Connector"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="Authenticate.php" hash="b4def4c279d801f7e9c327d8ee87c414"/><file name="Key.php" hash="f95c74992894b0a823793ef605c103e1"/><file name="Status.php" hash="003133a47fb37e6f522314778eec9632"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="AuthenticateController.php" hash="1c5ad4701f9fc353c1f387212ea0c0c5"/></dir><file name="ExportController.php" hash="6da6668ecd201d5dbc627b831c3b37ba"/></dir><dir name="etc"><file name="config.xml" hash="76f5b73047cb0efbec06b847f55a0d00"/><file name="system.xml" hash="45be095b48cbb0c6f24003d5db492e71"/></dir><dir name="Helper"><file name="Data.php" hash="a20da6edda255919ade055203ac459ac"/><file name="Transport.php" hash="a13bf58b13e207f5260fe2bdbe86fb5e"/></dir><dir name="Model"><file name="Observer.php" hash="3dbcbfc25944aedb3cc6658c495bb70b"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Recapture_Connector.xml" hash="e8fea9dc4237af6b34219c7f52bd02d8"/></dir></target></contents>
|
16 |
+
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
+
</package>
|