Version Notes
Freento Analytics & Reports extension for Magento. Allows to analyze live Magento store
Download this release
Release Info
Developer | Freento.com |
Extension | analytics-and-reports |
Version | 1.0.1 |
Comparing to | |
See all releases |
Code changes from version 1.0.0 to 1.0.1
- app/code/community/Freento/Aconnector/Block/Adminhtml/System/Config/Form/{GenerateKeys.php → Disconnect.php} +8 -3
- app/code/community/Freento/Aconnector/Controller/Abstract.php +3 -2
- app/code/community/Freento/Aconnector/Helper/Data.php +8 -0
- app/code/community/Freento/Aconnector/Model/Keys.php +83 -0
- app/code/community/Freento/Aconnector/Model/Report/Abstract.php +6 -0
- app/code/community/Freento/Aconnector/Model/Report/BestCategory.php +2 -2
- app/code/community/Freento/Aconnector/Model/Report/DaysForTheFirstPurchase.php +0 -1
- app/code/community/Freento/Aconnector/Model/Report/MostRefunded.php +1 -0
- app/code/community/Freento/Aconnector/Model/Report/RefundsPercent.php +1 -1
- app/code/community/Freento/Aconnector/Model/Report/SalesByCustomer.php +10 -4
- app/code/community/Freento/Aconnector/Model/Resource/Keys.php +11 -0
- app/code/community/Freento/Aconnector/Model/Resource/Keys/Collection.php +11 -0
- app/code/community/Freento/Aconnector/controllers/Adminhtml/Freentoaconnectoradmin/ServiceController.php +49 -0
- app/code/community/Freento/Aconnector/controllers/Adminhtml/Freentoaconnectoradmin/System/ConfigController.php +4 -29
- app/code/community/Freento/Aconnector/etc/adminhtml.xml +18 -0
- app/code/community/Freento/Aconnector/etc/config.xml +10 -10
- app/code/community/Freento/Aconnector/etc/system.xml +5 -15
- app/code/community/Freento/Aconnector/sql/freento_aconnector_setup/install-1.0.1.php +33 -0
- app/design/adminhtml/default/default/template/freento/aconnector/connect.phtml +10 -0
- js/freento_aconnector/clipboard.min.js +0 -7
- package.xml +4 -4
app/code/community/Freento/Aconnector/Block/Adminhtml/System/Config/Form/{GenerateKeys.php → Disconnect.php}
RENAMED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
class
|
4 |
{
|
5 |
|
6 |
public function render(Varien_Data_Form_Element_Abstract $element)
|
@@ -14,13 +14,18 @@ class Freento_Aconnector_Block_Adminhtml_System_Config_Form_GenerateKeys extends
|
|
14 |
|
15 |
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
16 |
{
|
|
|
|
|
|
|
|
|
|
|
17 |
$this->setElement($element);
|
18 |
-
$url = $this->getUrl('adminhtml/freentoaconnectoradmin_system_config/
|
19 |
|
20 |
$html = $this->getLayout()->createBlock('adminhtml/widget_button')
|
21 |
->setType('button')
|
22 |
->setClass('scalable')
|
23 |
-
->setLabel(Mage::helper('freento_aconnector')->__('
|
24 |
->setOnClick("setLocation('$url');")
|
25 |
->toHtml();
|
26 |
|
1 |
<?php
|
2 |
|
3 |
+
class Freento_Aconnector_Block_Adminhtml_System_Config_Form_Disconnect extends Mage_Adminhtml_Block_System_Config_Form_Field
|
4 |
{
|
5 |
|
6 |
public function render(Varien_Data_Form_Element_Abstract $element)
|
14 |
|
15 |
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
16 |
{
|
17 |
+
$keyModel = Mage::getModel('freento_aconnector/keys');
|
18 |
+
if(!$keyModel->isKeysGenerated()) {
|
19 |
+
return '';
|
20 |
+
}
|
21 |
+
|
22 |
$this->setElement($element);
|
23 |
+
$url = $this->getUrl('adminhtml/freentoaconnectoradmin_system_config/disconnect');
|
24 |
|
25 |
$html = $this->getLayout()->createBlock('adminhtml/widget_button')
|
26 |
->setType('button')
|
27 |
->setClass('scalable')
|
28 |
+
->setLabel(Mage::helper('freento_aconnector')->__('Disconnect'))
|
29 |
->setOnClick("setLocation('$url');")
|
30 |
->toHtml();
|
31 |
|
app/code/community/Freento/Aconnector/Controller/Abstract.php
CHANGED
@@ -6,8 +6,9 @@ class Freento_Aconnector_Controller_Abstract extends Mage_Core_Controller_Front_
|
|
6 |
protected function _prepareEncodedResponse($body)
|
7 |
{
|
8 |
$encryptor = new Freento_Aconnector_Crypt();
|
9 |
-
$
|
10 |
-
|
|
|
11 |
}
|
12 |
|
13 |
|
6 |
protected function _prepareEncodedResponse($body)
|
7 |
{
|
8 |
$encryptor = new Freento_Aconnector_Crypt();
|
9 |
+
$keyModel = Mage::getModel('freento_aconnector/keys');
|
10 |
+
|
11 |
+
return $this->getResponse()->setBody($encryptor->encrypt($keyModel->getPrivateKey(), $body, false));
|
12 |
}
|
13 |
|
14 |
|
app/code/community/Freento/Aconnector/Helper/Data.php
CHANGED
@@ -1,7 +1,15 @@
|
|
1 |
<?php
|
2 |
class Freento_Aconnector_Helper_Data extends Mage_Core_Helper_Abstract
|
3 |
{
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
public function getExtensionVersion()
|
6 |
{
|
7 |
return Mage::getConfig()->getModuleConfig('Freento_Aconnector')->version;
|
1 |
<?php
|
2 |
class Freento_Aconnector_Helper_Data extends Mage_Core_Helper_Abstract
|
3 |
{
|
4 |
+
const DATETIME_FORMAT = 'Y-m-d H:i:s';
|
5 |
|
6 |
+
const CONNECTION_URL = 'https://analytics.freento.com/connect';
|
7 |
+
|
8 |
+
public static function getServiceConnectionUrl()
|
9 |
+
{
|
10 |
+
return self::CONNECTION_URL;
|
11 |
+
}
|
12 |
+
|
13 |
public function getExtensionVersion()
|
14 |
{
|
15 |
return Mage::getConfig()->getModuleConfig('Freento_Aconnector')->version;
|
app/code/community/Freento/Aconnector/Model/Keys.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Freento_Aconnector_Model_Keys extends Mage_Core_Model_Abstract
|
4 |
+
{
|
5 |
+
|
6 |
+
protected $_record = null;
|
7 |
+
protected $_user = null;
|
8 |
+
protected $_privateKey = null;
|
9 |
+
|
10 |
+
protected function _construct()
|
11 |
+
{
|
12 |
+
$this->_init('freento_aconnector/keys');
|
13 |
+
|
14 |
+
if($userId = Mage::app()->getRequest()->getParam('user_id', false)) {
|
15 |
+
$this->_user = Mage::getModel('admin/user')->load($userId);
|
16 |
+
} else {
|
17 |
+
$this->_user = Mage::getSingleton('admin/session')->getUser();
|
18 |
+
}
|
19 |
+
|
20 |
+
$this->load($this->_user->getId(), 'user_id');
|
21 |
+
}
|
22 |
+
|
23 |
+
public function getUser()
|
24 |
+
{
|
25 |
+
return $this->_user;
|
26 |
+
}
|
27 |
+
|
28 |
+
public function getUserId()
|
29 |
+
{
|
30 |
+
return $this->_user->getId();
|
31 |
+
}
|
32 |
+
|
33 |
+
public function isKeysGenerated()
|
34 |
+
{
|
35 |
+
return $this->getPrivateKey() ? true : false;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function generateKeys()
|
39 |
+
{
|
40 |
+
$publicKey = '';
|
41 |
+
|
42 |
+
try {
|
43 |
+
$key = openssl_pkey_new(array(
|
44 |
+
'private_key_bits' => 2048,
|
45 |
+
'private_key_type' => OPENSSL_KEYTYPE_RSA,
|
46 |
+
));
|
47 |
+
|
48 |
+
$privateKey = '';
|
49 |
+
openssl_pkey_export($key, $privateKey);
|
50 |
+
|
51 |
+
$publicKey = openssl_pkey_get_details($key);
|
52 |
+
$publicKey = $publicKey['key'];
|
53 |
+
|
54 |
+
openssl_free_key($key);
|
55 |
+
|
56 |
+
$this->setUserId($this->getUserId())
|
57 |
+
->setPrivateKey($privateKey)
|
58 |
+
->setPublicKey($publicKey)
|
59 |
+
->save();
|
60 |
+
|
61 |
+
} catch(Exception $e) {
|
62 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
63 |
+
}
|
64 |
+
|
65 |
+
return $publicKey;
|
66 |
+
}
|
67 |
+
|
68 |
+
public function setPrivateKey($key)
|
69 |
+
{
|
70 |
+
$encodedKey = Mage::helper('core')->encrypt($key);
|
71 |
+
$this->setData('private_key', $encodedKey);
|
72 |
+
|
73 |
+
return $this;
|
74 |
+
}
|
75 |
+
|
76 |
+
public function getPrivateKey()
|
77 |
+
{
|
78 |
+
$key = $this->getData('private_key');
|
79 |
+
return Mage::helper('core')->decrypt($key);
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
app/code/community/Freento/Aconnector/Model/Report/Abstract.php
CHANGED
@@ -54,6 +54,12 @@ abstract class Freento_Aconnector_Model_Report_Abstract extends Mage_Core_Model_
|
|
54 |
throw new Exception('Incorrect date to');
|
55 |
}
|
56 |
$this->_dateTo = $dateTo;
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
return $this;
|
58 |
}
|
59 |
|
54 |
throw new Exception('Incorrect date to');
|
55 |
}
|
56 |
$this->_dateTo = $dateTo;
|
57 |
+
|
58 |
+
/* Increase date to for 1 day, because end day should be included in select */
|
59 |
+
$format = Freento_Aconnector_Helper_Data::DATETIME_FORMAT;
|
60 |
+
$d = DateTime::createFromFormat($format, $dateTo);
|
61 |
+
$this->_dateTo = $d->modify('+1 day')->format($format);
|
62 |
+
|
63 |
return $this;
|
64 |
}
|
65 |
|
app/code/community/Freento/Aconnector/Model/Report/BestCategory.php
CHANGED
@@ -16,12 +16,12 @@ class Freento_Aconnector_Model_Report_BestCategory extends Freento_Aconnector_Mo
|
|
16 |
->join(
|
17 |
array('ccp' => Mage::getSingleton('core/resource')->getTableName('catalog/category_product')),
|
18 |
'ccp.product_id = ' . $this->_mainTablePrefix . '.product_id',
|
19 |
-
array(
|
20 |
)
|
21 |
->join(
|
22 |
array('ccev' =>Mage::getSingleton('core/resource')->getTableName('catalog_category_entity_varchar')),
|
23 |
'ccev.entity_id = ccp.category_id',
|
24 |
-
array('
|
25 |
)
|
26 |
->group('ccp.category_id')
|
27 |
;
|
16 |
->join(
|
17 |
array('ccp' => Mage::getSingleton('core/resource')->getTableName('catalog/category_product')),
|
18 |
'ccp.product_id = ' . $this->_mainTablePrefix . '.product_id',
|
19 |
+
array()
|
20 |
)
|
21 |
->join(
|
22 |
array('ccev' =>Mage::getSingleton('core/resource')->getTableName('catalog_category_entity_varchar')),
|
23 |
'ccev.entity_id = ccp.category_id',
|
24 |
+
array('category_name_id' => 'CONCAT(value, " (ID: ", category_id, ")")')
|
25 |
)
|
26 |
->group('ccp.category_id')
|
27 |
;
|
app/code/community/Freento/Aconnector/Model/Report/DaysForTheFirstPurchase.php
CHANGED
@@ -34,7 +34,6 @@ class Freento_Aconnector_Model_Report_DaysForTheFirstPurchase extends Freento_Ac
|
|
34 |
array('total' => 'days', 'qty' => 'COUNT(days)')
|
35 |
)
|
36 |
->group('days')
|
37 |
-
->order('days', 'DESC')
|
38 |
;
|
39 |
|
40 |
$this->_prepareSort();
|
34 |
array('total' => 'days', 'qty' => 'COUNT(days)')
|
35 |
)
|
36 |
->group('days')
|
|
|
37 |
;
|
38 |
|
39 |
$this->_prepareSort();
|
app/code/community/Freento/Aconnector/Model/Report/MostRefunded.php
CHANGED
@@ -9,6 +9,7 @@ class Freento_Aconnector_Model_Report_MostRefunded extends Freento_Aconnector_Mo
|
|
9 |
$this->getSelect()
|
10 |
->from(array($this->_mainTablePrefix => $this->_getTable('sales/order_item')),
|
11 |
array(
|
|
|
12 |
'qty' => 'sum(qty_refunded)',
|
13 |
'total' => 'sum(base_amount_refunded)',
|
14 |
'sku',
|
9 |
$this->getSelect()
|
10 |
->from(array($this->_mainTablePrefix => $this->_getTable('sales/order_item')),
|
11 |
array(
|
12 |
+
'percent' => 'sum(qty_refunded) / sum(qty_invoiced) * 100',
|
13 |
'qty' => 'sum(qty_refunded)',
|
14 |
'total' => 'sum(base_amount_refunded)',
|
15 |
'sku',
|
app/code/community/Freento/Aconnector/Model/Report/RefundsPercent.php
CHANGED
@@ -4,7 +4,7 @@ class Freento_Aconnector_Model_Report_RefundsPercent extends Freento_Aconnector_
|
|
4 |
protected function _mysqlRequest()
|
5 |
{
|
6 |
$this->_fromParams = array(
|
7 |
-
'refunds_percent' => 'IF(SUM(
|
8 |
'total_invoiced' => 'SUM(row_invoiced)',
|
9 |
'total_refunded' => 'SUM(amount_refunded)'
|
10 |
);
|
4 |
protected function _mysqlRequest()
|
5 |
{
|
6 |
$this->_fromParams = array(
|
7 |
+
'refunds_percent' => 'IF(SUM(row_invoiced), SUM(amount_refunded) / SUM(row_invoiced) * 100, 0)',
|
8 |
'total_invoiced' => 'SUM(row_invoiced)',
|
9 |
'total_refunded' => 'SUM(amount_refunded)'
|
10 |
);
|
app/code/community/Freento/Aconnector/Model/Report/SalesByCustomer.php
CHANGED
@@ -19,10 +19,16 @@ class Freento_Aconnector_Model_Report_SalesByCustomer extends Freento_Aconnector
|
|
19 |
$this->getSelect()
|
20 |
->from(array($this->_mainTablePrefix => $this->_getTable('sales/order')), $this->_fromParams)
|
21 |
|
22 |
-
->joinLeft(
|
23 |
-
'items
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
;
|
27 |
|
28 |
$this->getSelect()->where('customers.entity_id IN (?)', explode(',', $additionalParams['customer_ids']));
|
19 |
$this->getSelect()
|
20 |
->from(array($this->_mainTablePrefix => $this->_getTable('sales/order')), $this->_fromParams)
|
21 |
|
22 |
+
->joinLeft(
|
23 |
+
array('items' => $this->_getTable('sales/order_item')),
|
24 |
+
'items.order_id = ' . $this->_mainTablePrefix . '.entity_id',
|
25 |
+
array()
|
26 |
+
)
|
27 |
+
->joinLeft(
|
28 |
+
array('customers' => Mage::getSingleton('core/resource')->getTableName('customer/entity')),
|
29 |
+
'customers.entity_id = ' . $this->_mainTablePrefix . '.customer_id',
|
30 |
+
array()
|
31 |
+
)
|
32 |
;
|
33 |
|
34 |
$this->getSelect()->where('customers.entity_id IN (?)', explode(',', $additionalParams['customer_ids']));
|
app/code/community/Freento/Aconnector/Model/Resource/Keys.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Freento_Aconnector_Model_Resource_Keys extends Mage_Core_Model_Resource_Db_Abstract
|
4 |
+
{
|
5 |
+
|
6 |
+
protected function _construct()
|
7 |
+
{
|
8 |
+
$this->_init('freento_aconnector/keys', 'key_id');
|
9 |
+
}
|
10 |
+
|
11 |
+
}
|
app/code/community/Freento/Aconnector/Model/Resource/Keys/Collection.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Freento_Aconnector_Model_Resource_Keys_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
4 |
+
{
|
5 |
+
|
6 |
+
protected function _construct()
|
7 |
+
{
|
8 |
+
$this->_init('freento_aconnector/keys');
|
9 |
+
}
|
10 |
+
|
11 |
+
}
|
app/code/community/Freento/Aconnector/controllers/Adminhtml/Freentoaconnectoradmin/ServiceController.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Freento_Aconnector_Adminhtml_Freentoaconnectoradmin_ServiceController extends Mage_Adminhtml_Controller_Action
|
4 |
+
{
|
5 |
+
|
6 |
+
public function connectAction()
|
7 |
+
{
|
8 |
+
$keyModel = Mage::getModel('freento_aconnector/keys');
|
9 |
+
|
10 |
+
$publicKey = '';
|
11 |
+
if(!$keyModel->isKeysGenerated()) {
|
12 |
+
$publicKey = $keyModel->generateKeys();
|
13 |
+
}
|
14 |
+
|
15 |
+
$block = $this->getLayout()->createBlock('adminhtml/template', 'freento_aconnector.connection_form')->setTemplate('freento/aconnector/connect.phtml');
|
16 |
+
|
17 |
+
$block->setData(array(
|
18 |
+
'store_url' => Mage::getBaseUrl(),
|
19 |
+
'admin_url' => Mage::helper('adminhtml')->getUrl('*/*/return'),
|
20 |
+
'username' => $keyModel->getUser()->getUsername(),
|
21 |
+
'email' => $keyModel->getUser()->getEmail(),
|
22 |
+
'user_id' => $keyModel->getUser()->getId(),
|
23 |
+
'timezone' => Mage::getSingleton('core/date')->getGmtOffset('hours')
|
24 |
+
));
|
25 |
+
|
26 |
+
if($publicKey) {
|
27 |
+
$block->setData('public_key', $publicKey);
|
28 |
+
}
|
29 |
+
|
30 |
+
$this->getResponse()->setBody($block->toHtml());
|
31 |
+
}
|
32 |
+
|
33 |
+
public function returnAction()
|
34 |
+
{
|
35 |
+
$helper = Mage::helper('freento_aconnector');
|
36 |
+
|
37 |
+
Mage::getSingleton('adminhtml/session')->addError($helper->__('We were unable to connect you to our service. Please, try again or contact support: <a class="email" href="mailto:support@analytics.freento.com">support@analytics.freento.com</a>'));
|
38 |
+
|
39 |
+
$this->loadLayout();
|
40 |
+
$this->renderLayout();
|
41 |
+
}
|
42 |
+
|
43 |
+
protected function _isAllowed()
|
44 |
+
{
|
45 |
+
return Mage::getSingleton('admin/session')->isAllowed('report/freento_aconnector');
|
46 |
+
}
|
47 |
+
|
48 |
+
|
49 |
+
}
|
app/code/community/Freento/Aconnector/controllers/Adminhtml/Freentoaconnectoradmin/System/ConfigController.php
CHANGED
@@ -3,37 +3,12 @@
|
|
3 |
class Freento_Aconnector_Adminhtml_Freentoaconnectoradmin_System_ConfigController extends Mage_Adminhtml_Controller_Action
|
4 |
{
|
5 |
|
6 |
-
public function
|
7 |
{
|
8 |
-
|
9 |
-
|
10 |
-
'private_key_bits' => 2048,
|
11 |
-
'private_key_type' => OPENSSL_KEYTYPE_RSA,
|
12 |
-
));
|
13 |
-
|
14 |
-
$privateKey = '';
|
15 |
-
openssl_pkey_export($key, $privateKey);
|
16 |
-
|
17 |
-
$publicKey = openssl_pkey_get_details($key);
|
18 |
-
$publicKey = $publicKey['key'];
|
19 |
-
Mage::getModel('core/config')->saveConfig('aconnector/global/generate_keys', $privateKey);
|
20 |
-
|
21 |
-
openssl_free_key($key);
|
22 |
-
} catch(Exception $e) {
|
23 |
-
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
24 |
-
}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* @todo replace #URL# with correct analytics URL
|
28 |
-
*/
|
29 |
-
$result = '<script type="text/javascript">var clipboard = new Clipboard("#freento_aconnector_api_key_btn");</script>';
|
30 |
-
$result .= Mage::helper('freento_aconnector')->__('Here is your API key. Enter it in <a href="%s">Analytics service</a>.<pre><span id="freento_aconnector_api_key">%s</span></pre>', '#URL#', $publicKey);
|
31 |
-
$result .= Mage::helper('freento_aconnector')->__('<button id="freento_aconnector_api_key_btn" data-clipboard-target="#freento_aconnector_api_key">%s</button>', 'Copy to clipboard');
|
32 |
-
|
33 |
-
Mage::app()->getCacheInstance()->cleanType('config');
|
34 |
-
Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => 'config'));
|
35 |
|
36 |
-
Mage::getSingleton('
|
37 |
|
38 |
$this->_redirectReferer();
|
39 |
}
|
3 |
class Freento_Aconnector_Adminhtml_Freentoaconnectoradmin_System_ConfigController extends Mage_Adminhtml_Controller_Action
|
4 |
{
|
5 |
|
6 |
+
public function disconnectAction()
|
7 |
{
|
8 |
+
$keyModel = Mage::getModel('freento_aconnector/keys');
|
9 |
+
$keyModel->delete();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
+
Mage::getSingleton('admin/session')->addSuccess(Mage::helper('freento_aconnector')->__('Analytics & Reports service was successfully disconnected'));
|
12 |
|
13 |
$this->_redirectReferer();
|
14 |
}
|
app/code/community/Freento/Aconnector/etc/adminhtml.xml
CHANGED
@@ -7,6 +7,13 @@
|
|
7 |
</all>
|
8 |
<admin>
|
9 |
<children>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
<system>
|
11 |
<children>
|
12 |
<config>
|
@@ -22,4 +29,15 @@
|
|
22 |
</admin>
|
23 |
</resources>
|
24 |
</acl>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
</config>
|
7 |
</all>
|
8 |
<admin>
|
9 |
<children>
|
10 |
+
<report>
|
11 |
+
<children>
|
12 |
+
<freento_aconnector>
|
13 |
+
<title>Freento - Connector to Service</title>
|
14 |
+
</freento_aconnector>
|
15 |
+
</children>
|
16 |
+
</report>
|
17 |
<system>
|
18 |
<children>
|
19 |
<config>
|
29 |
</admin>
|
30 |
</resources>
|
31 |
</acl>
|
32 |
+
<menu>
|
33 |
+
<report translate="title" module="freento_aconnector">
|
34 |
+
<children>
|
35 |
+
<freento_aconnector translate="title" module="freento_aconnector">
|
36 |
+
<title><![CDATA[Analytics & Reports]]></title>
|
37 |
+
<sort_order>200</sort_order>
|
38 |
+
<action>adminhtml/freentoaconnectoradmin_service/connect</action>
|
39 |
+
</freento_aconnector>
|
40 |
+
</children>
|
41 |
+
</report>
|
42 |
+
</menu>
|
43 |
</config>
|
app/code/community/Freento/Aconnector/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Freento_Aconnector>
|
5 |
-
<version>1.0.
|
6 |
</Freento_Aconnector>
|
7 |
</modules>
|
8 |
<global>
|
@@ -19,7 +19,16 @@
|
|
19 |
<models>
|
20 |
<freento_aconnector>
|
21 |
<class>Freento_Aconnector_Model</class>
|
|
|
22 |
</freento_aconnector>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
</models>
|
24 |
<resources>
|
25 |
<freento_aconnector_setup>
|
@@ -64,15 +73,6 @@
|
|
64 |
</adminhtml>
|
65 |
</routers>
|
66 |
</admin>
|
67 |
-
<adminhtml>
|
68 |
-
<layout>
|
69 |
-
<updates>
|
70 |
-
<freento_aconnector>
|
71 |
-
<file>freento_aconnector.xml</file>
|
72 |
-
</freento_aconnector>
|
73 |
-
</updates>
|
74 |
-
</layout>
|
75 |
-
</adminhtml>
|
76 |
<default>
|
77 |
<aconnector>
|
78 |
<global>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Freento_Aconnector>
|
5 |
+
<version>1.0.1</version>
|
6 |
</Freento_Aconnector>
|
7 |
</modules>
|
8 |
<global>
|
19 |
<models>
|
20 |
<freento_aconnector>
|
21 |
<class>Freento_Aconnector_Model</class>
|
22 |
+
<resourceModel>freento_aconnector_resource</resourceModel>
|
23 |
</freento_aconnector>
|
24 |
+
<freento_aconnector_resource>
|
25 |
+
<class>Freento_Aconnector_Model_Resource</class>
|
26 |
+
<entities>
|
27 |
+
<keys>
|
28 |
+
<table>freento_aconnector_keys</table>
|
29 |
+
</keys>
|
30 |
+
</entities>
|
31 |
+
</freento_aconnector_resource>
|
32 |
</models>
|
33 |
<resources>
|
34 |
<freento_aconnector_setup>
|
73 |
</adminhtml>
|
74 |
</routers>
|
75 |
</admin>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
<default>
|
77 |
<aconnector>
|
78 |
<global>
|
app/code/community/Freento/Aconnector/etc/system.xml
CHANGED
@@ -24,27 +24,17 @@
|
|
24 |
<show_in_website>1</show_in_website>
|
25 |
<show_in_store>1</show_in_store>
|
26 |
<fields>
|
27 |
-
<
|
28 |
-
<
|
29 |
-
<frontend_type>select</frontend_type>
|
30 |
-
<source_model>adminhtml/system_config_source_yesno</source_model>
|
31 |
-
<sort_order>10</sort_order>
|
32 |
-
<show_in_default>1</show_in_default>
|
33 |
-
<show_in_website>0</show_in_website>
|
34 |
-
<show_in_store>0</show_in_store>
|
35 |
-
<comment></comment>
|
36 |
-
</enabled>
|
37 |
-
<generate_keys translate="button_label">
|
38 |
-
<button_label>Generate Keys</button_label>
|
39 |
<frontend_type>button</frontend_type>
|
40 |
-
<frontend_model>freento_aconnector/
|
41 |
<sort_order>30</sort_order>
|
42 |
<show_in_default>1</show_in_default>
|
43 |
<show_in_website>0</show_in_website>
|
44 |
<show_in_store>0</show_in_store>
|
45 |
-
</
|
46 |
<log_enabled translate="label">
|
47 |
-
<label>
|
48 |
<frontend_type>select</frontend_type>
|
49 |
<source_model>adminhtml/system_config_source_yesno</source_model>
|
50 |
<sort_order>50</sort_order>
|
24 |
<show_in_website>1</show_in_website>
|
25 |
<show_in_store>1</show_in_store>
|
26 |
<fields>
|
27 |
+
<disconnect translate="button_label">
|
28 |
+
<button_label>Disconnect</button_label>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
<frontend_type>button</frontend_type>
|
30 |
+
<frontend_model>freento_aconnector/adminhtml_system_config_form_disconnect</frontend_model>
|
31 |
<sort_order>30</sort_order>
|
32 |
<show_in_default>1</show_in_default>
|
33 |
<show_in_website>0</show_in_website>
|
34 |
<show_in_store>0</show_in_store>
|
35 |
+
</disconnect>
|
36 |
<log_enabled translate="label">
|
37 |
+
<label>Debug</label>
|
38 |
<frontend_type>select</frontend_type>
|
39 |
<source_model>adminhtml/system_config_source_yesno</source_model>
|
40 |
<sort_order>50</sort_order>
|
app/code/community/Freento/Aconnector/sql/freento_aconnector_setup/install-1.0.1.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$installer = $this;
|
4 |
+
$installer->startSetup();
|
5 |
+
|
6 |
+
$table = $installer->getConnection()
|
7 |
+
->newTable($installer->getTable('freento_aconnector/keys'))
|
8 |
+
->addColumn('key_id', Varien_Db_Ddl_Table::TYPE_INTEGER, 11, array(
|
9 |
+
'unsigned' => true,
|
10 |
+
'nullable' => false,
|
11 |
+
'primary' => true,
|
12 |
+
'identity' => true,
|
13 |
+
), 'Private Key ID')
|
14 |
+
->addColumn('user_id', Varien_Db_Ddl_Table::TYPE_INTEGER, 11, array(
|
15 |
+
'nullable' => false,
|
16 |
+
), 'Admin User ID')
|
17 |
+
->addColumn('private_key', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
|
18 |
+
'nullable' => false,
|
19 |
+
'default' => '',
|
20 |
+
), 'Private Key')
|
21 |
+
->addForeignKey(
|
22 |
+
$installer->getFkName('admin_user', 'user_id', 'freento_aconnector_keys','user_id'),
|
23 |
+
'user_id',
|
24 |
+
$installer->getTable('admin_user'),
|
25 |
+
'user_id',
|
26 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE,
|
27 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE
|
28 |
+
)
|
29 |
+
->setComment('Aconnector Admin Keys')
|
30 |
+
;
|
31 |
+
|
32 |
+
$installer->getConnection()->createTable($table);
|
33 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/template/freento/aconnector/connect.phtml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
You will be redirected to Freento Analytics and Report service in few seconds
|
2 |
+
|
3 |
+
<form method="post" action="<?php echo Mage::helper('freento_aconnector')->getServiceConnectionUrl() ?>" name="connectionForm">
|
4 |
+
<?php foreach($this->getData() as $k => $v): ?>
|
5 |
+
<input type="hidden" name="<?php echo $k ?>" value="<?php echo $v ?>" />
|
6 |
+
<?php endforeach ?>
|
7 |
+
</form>
|
8 |
+
<script type="text/javascript">
|
9 |
+
document.connectionForm.submit();
|
10 |
+
</script>
|
js/freento_aconnector/clipboard.min.js
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
/*!
|
2 |
-
* clipboard.js v1.5.12
|
3 |
-
* https://zenorocha.github.io/clipboard.js
|
4 |
-
*
|
5 |
-
* Licensed MIT © Zeno Rocha
|
6 |
-
*/
|
7 |
-
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,o){function i(a,c){if(!n[a]){if(!e[a]){var s="function"==typeof require&&require;if(!c&&s)return s(a,!0);if(r)return r(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var u=n[a]={exports:{}};e[a][0].call(u.exports,function(t){var n=e[a][1][t];return i(n?n:t)},u,u.exports,t,e,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<o.length;a++)i(o[a]);return i}({1:[function(t,e,n){var o=t("matches-selector");e.exports=function(t,e,n){for(var i=n?t:t.parentNode;i&&i!==document;){if(o(i,e))return i;i=i.parentNode}}},{"matches-selector":5}],2:[function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function i(t,e,n,o){return function(n){n.delegateTarget=r(n.target,e,!0),n.delegateTarget&&o.call(t,n)}}var r=t("closest");e.exports=o},{closest:1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){var e=Object.prototype.toString.call(t);return"[object Function]"===e}},{}],4:[function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return i(t,e,n);if(c.nodeList(t))return r(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function r(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return s(document.body,t,e,n)}var c=t("./is"),s=t("delegate");e.exports=o},{"./is":3,delegate:2}],5:[function(t,e,n){function o(t,e){if(r)return r.call(t,e);for(var n=t.parentNode.querySelectorAll(e),o=0;o<n.length;++o)if(n[o]==t)return!0;return!1}var i=Element.prototype,r=i.matchesSelector||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector;e.exports=o},{}],6:[function(t,e,n){function o(t){var e;if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName)t.focus(),t.setSelectionRange(0,t.value.length),e=t.value;else{t.hasAttribute("contenteditable")&&t.focus();var n=window.getSelection(),o=document.createRange();o.selectNodeContents(t),n.removeAllRanges(),n.addRange(o),e=n.toString()}return e}e.exports=o},{}],7:[function(t,e,n){function o(){}o.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){i.off(t,o),e.apply(n,arguments)}var i=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,i=n.length;for(o;i>o;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],i=[];if(o&&e)for(var r=0,a=o.length;a>r;r++)o[r].fn!==e&&o[r].fn._!==e&&i.push(o[r]);return i.length?n[t]=i:delete n[t],this}},e.exports=o},{}],8:[function(e,n,o){!function(i,r){if("function"==typeof t&&t.amd)t(["module","select"],r);else if("undefined"!=typeof o)r(n,e("select"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(t,e){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=n(e),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},a=function(){function t(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(e,n,o){return n&&t(e.prototype,n),o&&t(e,o),e}}(),c=function(){function t(e){o(this,t),this.resolveOptions(e),this.initSelection()}return t.prototype.resolveOptions=function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.action=e.action,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""},t.prototype.initSelection=function t(){this.text?this.selectFake():this.target&&this.selectTarget()},t.prototype.selectFake=function t(){var e=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px",this.fakeElem.style.top=(window.pageYOffset||document.documentElement.scrollTop)+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()},t.prototype.removeFake=function t(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)},t.prototype.selectTarget=function t(){this.selectedText=(0,i.default)(this.target),this.copyText()},t.prototype.copyText=function t(){var e=void 0;try{e=document.execCommand(this.action)}catch(n){e=!1}this.handleResult(e)},t.prototype.handleResult=function t(e){e?this.emitter.emit("success",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)}):this.emitter.emit("error",{action:this.action,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})},t.prototype.clearSelection=function t(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()},t.prototype.destroy=function t(){this.removeFake()},a(t,[{key:"action",set:function t(){var e=arguments.length<=0||void 0===arguments[0]?"copy":arguments[0];if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function t(){return this._action}},{key:"target",set:function t(e){if(void 0!==e){if(!e||"object"!==("undefined"==typeof e?"undefined":r(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function t(){return this._target}}]),t}();t.exports=c})},{select:6}],9:[function(e,n,o){!function(i,r){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof o)r(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var a={exports:{}};r(a,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=a.exports}}(this,function(t,e,n,o){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function c(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var l=i(e),u=i(n),f=i(o),d=function(t){function e(n,o){r(this,e);var i=a(this,t.call(this));return i.resolveOptions(o),i.listenClick(n),i}return c(e,t),e.prototype.resolveOptions=function t(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText},e.prototype.listenClick=function t(e){var n=this;this.listener=(0,f.default)(e,"click",function(t){return n.onClick(t)})},e.prototype.onClick=function t(e){var n=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})},e.prototype.defaultAction=function t(e){return s("action",e)},e.prototype.defaultTarget=function t(e){var n=s("target",e);return n?document.querySelector(n):void 0},e.prototype.defaultText=function t(e){return s("text",e)},e.prototype.destroy=function t(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)},e}(u.default);t.exports=d})},{"./clipboard-action":8,"good-listener":4,"tiny-emitter":7}]},{},[9])(9)});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>analytics-and-reports</name>
|
4 |
-
<version>1.0.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://freento.com/license.html">Freento.com license</license>
|
7 |
<channel>community</channel>
|
@@ -10,9 +10,9 @@
|
|
10 |
<description>Freento Analytics & Reports extension for Magento. Allows to analyze live Magento store</description>
|
11 |
<notes>Freento Analytics & Reports extension for Magento. Allows to analyze live Magento store</notes>
|
12 |
<authors><author><name>Freento.com</name><user>Freento</user><email>support@freento.com</email></author></authors>
|
13 |
-
<date>2016-10-
|
14 |
-
<time>
|
15 |
-
<contents><target name="magecommunity"><dir name="Freento"><dir name="Aconnector"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.4.0</min><max>7.1.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>analytics-and-reports</name>
|
4 |
+
<version>1.0.1</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://freento.com/license.html">Freento.com license</license>
|
7 |
<channel>community</channel>
|
10 |
<description>Freento Analytics & Reports extension for Magento. Allows to analyze live Magento store</description>
|
11 |
<notes>Freento Analytics & Reports extension for Magento. Allows to analyze live Magento store</notes>
|
12 |
<authors><author><name>Freento.com</name><user>Freento</user><email>support@freento.com</email></author></authors>
|
13 |
+
<date>2016-10-21</date>
|
14 |
+
<time>13:25:34</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="Freento"><dir name="Aconnector"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Disconnect.php" hash="f2c941c43f56f4a645907edc9b219322"/></dir></dir></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="c148d0897f0632608342d988ded7679d"/></dir><file name="Crypt.php" hash="7f5383aa5f67a861f5d11506c26a98dd"/><dir name="Helper"><file name="Data.php" hash="2d5fba11d22c37cf1bf76e87bf0890f0"/></dir><dir name="Model"><file name="Aconnector.php" hash="2bfa93dd6895205b5fa16781f343bae7"/><dir name="Customer"><file name="Group.php" hash="b4abaad78527d0e6238b47daa127c4e0"/></dir><file name="Customer.php" hash="751006e79f343a3f6226fef78dcefc51"/><file name="Keys.php" hash="e04ff51afa99f3d8d2dba3e90d85ff19"/><file name="Log.php" hash="a8f927a896b37b755cc7e806527518a6"/><file name="Order.php" hash="18f180332401bbbd9fa9250121594961"/><file name="Product.php" hash="3c6f4d2d16e91c8af6af3c8bfbf8a116"/><dir name="Report"><file name="Abstract.php" hash="ed5263b45f63d8b0d63316dbc2154e0d"/><file name="AllCustomers.php" hash="89795190f055d5f80ab85d9d12749b84"/><file name="AllProducts.php" hash="7cbabab3219575c1b95c298b7e968f50"/><file name="BestCategory.php" hash="0b34a2dc5a215d64e385870acade46ef"/><file name="BestCoupons.php" hash="e7dc3b5ccb587915e9326976c49c018d"/><file name="Bestsellers.php" hash="61598e5629e708cc85c05de2eb7722c1"/><file name="Comparable.php" hash="baf2b5469417dd21a62057c48279fbb4"/><file name="CustomerPurchases.php" hash="cd79762ec0a9b9900eeedd42387d22fb"/><file name="DaysForTheFirstPurchase.php" hash="57ab11f436336886bf223402b065aacc"/><dir name="Grouped"><file name="Abstract.php" hash="dce3a5d4913a2b3be523dc21209c8c2d"/></dir><file name="MostRefunded.php" hash="cde29cc83fd0718db3254e0e1ac2cc17"/><file name="NewCustomersByPeriod.php" hash="49648fa2dbdd7ada7c577bf000db0f88"/><file name="ProductsByCustomer.php" hash="8d62a1238b646112d524f2394ed88019"/><file name="RefundsPercent.php" hash="3e20337b1923088b883ee715409d78af"/><file name="Sales.php" hash="4995e4abd2fc27e9a64e838002989725"/><file name="SalesByCategory.php" hash="80ee21055a58ef9d7025983da84289c9"/><file name="SalesByCountry.php" hash="2fd1d9e5869081e102aff12bc33abaff"/><file name="SalesByCustomer.php" hash="684b892193a28cfafebf1b6cc1bd2286"/><file name="SalesByCustomerGroup.php" hash="cf78058322a52b640eb0d498d627e1d2"/><file name="SalesByDayOfWeek.php" hash="7905703253012838532bc03e49acc1f9"/><file name="SalesByHour.php" hash="bbb2af36c59e35c907c4eee02de991a7"/><file name="SalesByMonth.php" hash="18b2704c19d6cf36dd3af7268c2a964d"/><file name="SalesByPeriodOfTime.php" hash="e381a045488cd40581ead10feb5f906e"/><file name="SalesByProduct.php" hash="4a0856ade173bf5ec49dc2b5f76e6354"/><file name="SalesByQuarter.php" hash="8a69485150620316a145567e7730160c"/><file name="SalesByState.php" hash="4e85aef8ab322d506aafdb679df538f8"/><file name="SalesByWeek.php" hash="dfa5268f3f52b83697c25aea05c9b9fc"/><file name="SalesByYear.php" hash="21e87b6af89d5a69b1b2827273eafc36"/><file name="SalesDetailed.php" hash="76873c534a0f25ac849133508f462b68"/></dir><dir name="Resource"><dir name="Keys"><file name="Collection.php" hash="809f804e953941c65d66f013d40aebcd"/></dir><file name="Keys.php" hash="5f0521ded6e1e9737928f7506098edb7"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Freentoaconnectoradmin"><file name="ServiceController.php" hash="69288bde8d62d168855821816116f52e"/><dir name="System"><file name="ConfigController.php" hash="3c0e78c8a8049ab56fc3224c77574969"/></dir></dir></dir><file name="CustomerController.php" hash="e3214f8885f340dca32d426dd633c508"/><file name="CustomerGroupController.php" hash="72a43f857d480d816a5aa750f9e85681"/><file name="IndexController.php" hash="544d275d3b410e0f7b911f4a41ebe3db"/><file name="OrderController.php" hash="65dba278031a5395b019e247489fd544"/><file name="ProductController.php" hash="4850a1a5734cbf8a842e0496f04fc861"/></dir><dir name="etc"><file name="adminhtml.xml" hash="a1ea66a062b6cd359a9472d319a2cde0"/><file name="config.xml" hash="8325212121dfa8e49ec3f530febb9384"/><file name="system.xml" hash="444a8a52b246e3f2b74a7ef317089f7a"/></dir><dir name="sql"><dir name="freento_aconnector_setup"><file name="install-1.0.1.php" hash="4e5a7ee5e5213063bce05badba21e9da"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Freento_Aconnector.xml" hash="6ed931f4a1d7db685e90488895278de7"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="freento"><dir name="aconnector"><file name="connect.phtml" hash="97819d04417b56226ac41898e158d139"/></dir></dir></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.4.0</min><max>7.1.0</max></php></required></dependencies>
|
18 |
</package>
|