Version Notes
No comments
Download this release
Release Info
| Developer | Remarkety |
| Extension | Remarkety_Mgconnector |
| Version | 1.4.3.0 |
| Comparing to | |
| See all releases | |
Version 1.4.3.0
- CHANGELOG.txt +79 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration.php +24 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Complete.php +35 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Complete/Form.php +62 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Configuration.php +41 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Configuration/Form.php +64 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Install.php +35 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Install/Form.php +90 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Upgrade.php +35 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Upgrade/Form.php +71 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Complete.php +37 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Complete/Form.php +63 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Create.php +33 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Create/Form.php +140 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Login.php +33 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Login/Form.php +130 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Upgrade.php +37 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Upgrade/Form.php +62 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Welcome.php +39 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Welcome/Form.php +56 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Welcome/Store.php +60 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue.php +24 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Configure.php +38 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Configure/Form.php +104 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Grid.php +116 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Grid/Column/Renderer/EventType.php +29 -0
- app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Grid/Column/Renderer/Status.php +25 -0
- app/code/community/Remarkety/Mgconnector/Block/Tracking/Base.php +35 -0
- app/code/community/Remarkety/Mgconnector/Block/Tracking/General.php +5 -0
- app/code/community/Remarkety/Mgconnector/Block/Tracking/Product.php +57 -0
- app/code/community/Remarkety/Mgconnector/Helper/Data.php +74 -0
- app/code/community/Remarkety/Mgconnector/Helper/Links.php +64 -0
- app/code/community/Remarkety/Mgconnector/Helper/Urls.php +46 -0
- app/code/community/Remarkety/Mgconnector/Model/Core.php +1399 -0
- app/code/community/Remarkety/Mgconnector/Model/Core/Api.php +211 -0
- app/code/community/Remarkety/Mgconnector/Model/Install.php +484 -0
- app/code/community/Remarkety/Mgconnector/Model/Observer.php +499 -0
- app/code/community/Remarkety/Mgconnector/Model/Queue.php +16 -0
- app/code/community/Remarkety/Mgconnector/Model/Recovery.php +92 -0
- app/code/community/Remarkety/Mgconnector/Model/Request.php +131 -0
- app/code/community/Remarkety/Mgconnector/Model/Resource/Coupon.php +77 -0
- app/code/community/Remarkety/Mgconnector/Model/Resource/Queue.php +30 -0
- app/code/community/Remarkety/Mgconnector/Model/Resource/Queue/Collection.php +30 -0
- app/code/community/Remarkety/Mgconnector/Model/Resource/Rule/Collection.php +138 -0
- app/code/community/Remarkety/Mgconnector/Model/Resource/Setup.php +13 -0
- app/code/community/Remarkety/Mgconnector/Model/Webtracking.php +40 -0
- app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/ConfigureController.php +55 -0
- app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/InstallController.php +186 -0
- app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/MgconnectorController.php +192 -0
- app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/QueueController.php +129 -0
- app/code/community/Remarkety/Mgconnector/controllers/RecoveryController.php +53 -0
- app/code/community/Remarkety/Mgconnector/controllers/WebtrackingController.php +31 -0
- app/code/community/Remarkety/Mgconnector/etc/adminhtml.xml +55 -0
- app/code/community/Remarkety/Mgconnector/etc/api.xml +68 -0
- app/code/community/Remarkety/Mgconnector/etc/config.xml +163 -0
- app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-install-1.0.0.13.php +26 -0
- app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.0.0.13-1.0.0.14.php +26 -0
- app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.0.0.14-1.0.0.15.php +13 -0
- app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.0.0.14-1.1.0.0.php +13 -0
- app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.1.0.5-1.1.0.6.php +15 -0
- app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.1.2.8-1.3.0.0.php +21 -0
- app/design/adminhtml/default/default/template/mgconnector/element.phtml +26 -0
- app/design/adminhtml/default/default/template/mgconnector/install/welcome/store.phtml +70 -0
- app/design/adminhtml/default/default/template/mgconnector/widget/form/renderer/fieldset/element.phtml +26 -0
- app/design/frontend/base/default/layout/mgconnector.xml +13 -0
- app/design/frontend/base/default/template/mgconnector/tracking/general.phtml +23 -0
- app/design/frontend/base/default/template/mgconnector/tracking/product_view.phtml +10 -0
- app/etc/modules/Remarkety_Mgconnector.xml +12 -0
- package.xml +31 -0
CHANGELOG.txt
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1.4.3.0
|
| 2 |
+
-------
|
| 3 |
+
- Bypass store cache for website tracking
|
| 4 |
+
- Changed menu titles
|
| 5 |
+
|
| 6 |
+
1.4.2.0
|
| 7 |
+
-------
|
| 8 |
+
- Clear cache after enable/disable website tracking
|
| 9 |
+
- Bugfix: Array declaration error on old PHP versions
|
| 10 |
+
|
| 11 |
+
1.4.1.0
|
| 12 |
+
-------
|
| 13 |
+
Allow admin to change Remarkety's api key
|
| 14 |
+
|
| 15 |
+
1.4.0.2
|
| 16 |
+
-------
|
| 17 |
+
Bug fix subscribers view id
|
| 18 |
+
|
| 19 |
+
1.4.0.1
|
| 20 |
+
-------
|
| 21 |
+
Newsletter subscription saves the email address to the cart
|
| 22 |
+
|
| 23 |
+
1.4.0.0
|
| 24 |
+
-------
|
| 25 |
+
Enable website tracking from the Remarkety installation menu
|
| 26 |
+
|
| 27 |
+
1.3.0.1
|
| 28 |
+
-------
|
| 29 |
+
Automatic tagging for newsletter subscribers
|
| 30 |
+
|
| 31 |
+
1.3.0.0
|
| 32 |
+
-------
|
| 33 |
+
- Add support for per-coupon expiration dates
|
| 34 |
+
|
| 35 |
+
1.2.0.0
|
| 36 |
+
-------
|
| 37 |
+
- Automatic tagging for newsletter subscribers
|
| 38 |
+
- Add cart recovery link
|
| 39 |
+
- Payment method field added for segmentation
|
| 40 |
+
|
| 41 |
+
1.1.2.7
|
| 42 |
+
-------
|
| 43 |
+
- Don't sync products which are not visible
|
| 44 |
+
- Deal with no tags collection
|
| 45 |
+
- Fix table prefix issue
|
| 46 |
+
|
| 47 |
+
1.1.2.6
|
| 48 |
+
-------
|
| 49 |
+
- Backward compatibility for PHP 5.3
|
| 50 |
+
|
| 51 |
+
1.1.0.10
|
| 52 |
+
--------
|
| 53 |
+
- Support installation of multiple views through the plugin
|
| 54 |
+
- Error logging improvements
|
| 55 |
+
|
| 56 |
+
1.1.0.9
|
| 57 |
+
-------
|
| 58 |
+
- API can return log for analysis
|
| 59 |
+
- Return more information: Discount prices, stock levels, parent product
|
| 60 |
+
- Performance improvements when fetching products
|
| 61 |
+
|
| 62 |
+
1.1.0.4
|
| 63 |
+
-------
|
| 64 |
+
- Fix bug in creating a Magento Web Service user, when another WS user already has the same email
|
| 65 |
+
|
| 66 |
+
1.1.0.3
|
| 67 |
+
-------
|
| 68 |
+
- Fix bug in comparing what's changed in customer observer
|
| 69 |
+
|
| 70 |
+
1.1.0.1
|
| 71 |
+
-------
|
| 72 |
+
- Resend / delete queue events
|
| 73 |
+
|
| 74 |
+
1.1.0.0
|
| 75 |
+
-------
|
| 76 |
+
- Implement one-click install for Magento
|
| 77 |
+
- Send customer update events (signup / subscribe / unsubscribe) immediately (push)
|
| 78 |
+
- Fix problem with multiple views
|
| 79 |
+
- Resend / delete queue events
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration.php
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration extends Mage_Adminhtml_Block_Widget_Grid_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
$this->_blockGroup = 'mgconnector';
|
| 18 |
+
$this->_controller = 'adminhtml_configuration';
|
| 19 |
+
$this->_headerText = Mage::helper('mgconnector')->__('Remarkety Configuration');
|
| 20 |
+
$this->_removeButton('add');
|
| 21 |
+
|
| 22 |
+
parent::__construct();
|
| 23 |
+
}
|
| 24 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Complete.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration complete block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Complete extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'complete_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_configuration';
|
| 22 |
+
$this->_mode = 'complete';
|
| 23 |
+
|
| 24 |
+
$ver = Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 25 |
+
$this->_headerText = $this->__('Install Complete (version: %s)', $ver);
|
| 26 |
+
|
| 27 |
+
$this->_removeButton('back');
|
| 28 |
+
$this->_removeButton('reset');
|
| 29 |
+
$this->_addButton('save', array(
|
| 30 |
+
'label' => Mage::helper('adminhtml')->__('Done'),
|
| 31 |
+
'onclick' => 'editForm.submit();',
|
| 32 |
+
'class' => 'save',
|
| 33 |
+
), 1);
|
| 34 |
+
}
|
| 35 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Complete/Form.php
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration complete form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Complete_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/*/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Installation Complete')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'complete',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 41 |
+
'text' => '',
|
| 42 |
+
'label' => false,
|
| 43 |
+
'after_element_html' => '<p style="font-weight:bold;">' . $this->__('Installation complete!') . '</p>'
|
| 44 |
+
));
|
| 45 |
+
$instruction->getRenderer()->setTemplate('mgconnector/widget/form/renderer/fieldset/element.phtml');
|
| 46 |
+
|
| 47 |
+
$response = unserialize(Mage::getStoreConfig('remarkety/mgconnector/last_response'),true);
|
| 48 |
+
$fieldset->addField('response', 'note', array(
|
| 49 |
+
'label' => false,
|
| 50 |
+
'after_element_html' => !empty($response['info']) ? $response['info'] : $this->__('There is no response to display')
|
| 51 |
+
));
|
| 52 |
+
|
| 53 |
+
$fieldset->addField('button', 'note', array(
|
| 54 |
+
'label' => false,
|
| 55 |
+
'name' => 'button',
|
| 56 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 57 |
+
. $this->__('Done') . '</span></span></button>'
|
| 58 |
+
));
|
| 59 |
+
|
| 60 |
+
return parent::_prepareForm();
|
| 61 |
+
}
|
| 62 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Configuration.php
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration configuration block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Configuration extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'configuration_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_configuration';
|
| 22 |
+
$this->_mode = 'configuration';
|
| 23 |
+
|
| 24 |
+
$ver = Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 25 |
+
$this->_headerText = $this->__('Remarkety configuration (version: %s)', $ver);
|
| 26 |
+
|
| 27 |
+
$this->_removeButton('back');
|
| 28 |
+
$this->_removeButton('reset');
|
| 29 |
+
$this->_addButton('save', array(
|
| 30 |
+
'label' => Mage::helper('adminhtml')->__('Save'),
|
| 31 |
+
'onclick' => 'editForm.submit();',
|
| 32 |
+
'class' => 'save',
|
| 33 |
+
), 1);
|
| 34 |
+
|
| 35 |
+
$this->_addButton('reinstall', array(
|
| 36 |
+
'label' => Mage::helper('adminhtml')->__('Reinstall'),
|
| 37 |
+
'onclick' => "return confirm('Are you sure?') ? window.location = '" . $this->getUrl('*/*/reinstall')."' : false;",
|
| 38 |
+
'class' => 'delete',
|
| 39 |
+
), 0);
|
| 40 |
+
}
|
| 41 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Configuration/Form.php
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration configuration form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Configuration_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/*/configuration'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Remarkety configuration')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'configuration',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$fieldset->addField('intervals', 'text', array(
|
| 41 |
+
'label' => $this->__('Intervals:'),
|
| 42 |
+
'name' => 'data[intervals]',
|
| 43 |
+
'required' => true,
|
| 44 |
+
'after_element_html' => '<small style="float:left;width:100%;">' . $this->__(
|
| 45 |
+
'Here you have to type amount of minutes separated by commas.For example "1,3,10" -
|
| 46 |
+
it means that second attempt will be after 1 minute, third after 3 minutes,
|
| 47 |
+
and fourth after 10 minutes.If last attempt will not be successful,
|
| 48 |
+
status will be changed to "failed" and it will not be processed anymore.'
|
| 49 |
+
) . '</small>',
|
| 50 |
+
'value' => Mage::getStoreConfig('remarkety/mgconnector/intervals'),
|
| 51 |
+
'style' => 'float:left',
|
| 52 |
+
));
|
| 53 |
+
|
| 54 |
+
$button = $fieldset->addField('button', 'note', array(
|
| 55 |
+
'label' => false,
|
| 56 |
+
'name' => 'button',
|
| 57 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 58 |
+
. $this->__('Save') . '</span></span></button>',
|
| 59 |
+
));
|
| 60 |
+
$button->getRenderer()->setTemplate('mgconnector/widget/form/renderer/fieldset/element.phtml');
|
| 61 |
+
|
| 62 |
+
return parent::_prepareForm();
|
| 63 |
+
}
|
| 64 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Install.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration install block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Install extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'install_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_configuration';
|
| 22 |
+
$this->_mode = 'install';
|
| 23 |
+
|
| 24 |
+
$ver = Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 25 |
+
$this->_headerText = $this->__('Install Remarkety extension (version: %s)', $ver);
|
| 26 |
+
|
| 27 |
+
$this->_removeButton('back');
|
| 28 |
+
$this->_removeButton('reset');
|
| 29 |
+
$this->_addButton('save', array(
|
| 30 |
+
'label' => Mage::helper('adminhtml')->__('Complete Installation'),
|
| 31 |
+
'onclick' => 'editForm.submit();',
|
| 32 |
+
'class' => 'save',
|
| 33 |
+
), 1);
|
| 34 |
+
}
|
| 35 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Install/Form.php
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration install form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Install_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/*/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Install Remarkety extension')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'install',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 41 |
+
'text' => '',
|
| 42 |
+
'label' => false,
|
| 43 |
+
'after_element_html' =>
|
| 44 |
+
'<p style="font-weight:bold;">' . $this->__('Thank you for installing the Remarkety Magento plugin.
|
| 45 |
+
You are one click away from finishing setting up Remarkety on your store and sending effective, targeted emails!')
|
| 46 |
+
. '<br><br>'
|
| 47 |
+
. $this->__('The plugin will automatically create a Magento WebService API user so that
|
| 48 |
+
Remarkety can synchronize with your store.') . '</p>',
|
| 49 |
+
));
|
| 50 |
+
$instruction->getRenderer()->setTemplate('mgconnector/widget/form/renderer/fieldset/element.phtml');
|
| 51 |
+
|
| 52 |
+
$fieldset->addField('email', 'text', array(
|
| 53 |
+
'label' => $this->__('Email address for the Remarkety account:'),
|
| 54 |
+
'name' => 'data[email]',
|
| 55 |
+
'required' => true,
|
| 56 |
+
'class' => 'validate-email',
|
| 57 |
+
'after_element_html' => '<small style="float:left;width:100%;">' . $this->__(
|
| 58 |
+
'If you’ve already registered to Remarkety, please use the email you used to open your account.
|
| 59 |
+
If you haven’t, an email will be sent to this address with the login information. You will then be able
|
| 60 |
+
to choose your password.'
|
| 61 |
+
) . '</small>',
|
| 62 |
+
'style' => 'float:left',
|
| 63 |
+
));
|
| 64 |
+
|
| 65 |
+
$fieldset->addField('store_id', 'select', array(
|
| 66 |
+
'name' => 'data[store_id]',
|
| 67 |
+
'label' => $this->__('Sync Remarkety with this view:'),
|
| 68 |
+
'required' => true,
|
| 69 |
+
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, false),
|
| 70 |
+
));
|
| 71 |
+
|
| 72 |
+
$fieldset->addField('terms', 'checkbox', array(
|
| 73 |
+
'label' => false,
|
| 74 |
+
'name' => 'data[terms]',
|
| 75 |
+
'checked' => false,
|
| 76 |
+
'value' => '1',
|
| 77 |
+
'class' => 'required-entry',
|
| 78 |
+
'after_element_html' => $this->__('I agree to Remarkety’s <a href="%s">terms of use</a>.', '#'),
|
| 79 |
+
));
|
| 80 |
+
|
| 81 |
+
$fieldset->addField('button', 'note', array(
|
| 82 |
+
'label' => false,
|
| 83 |
+
'name' => 'button',
|
| 84 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 85 |
+
. $this->__('Complete Installation') . '</span></span></button>'
|
| 86 |
+
));
|
| 87 |
+
|
| 88 |
+
return parent::_prepareForm();
|
| 89 |
+
}
|
| 90 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Upgrade.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration upgrade block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Upgrade extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'upgrade_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_configuration';
|
| 22 |
+
$this->_mode = 'upgrade';
|
| 23 |
+
|
| 24 |
+
$ver = Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 25 |
+
$this->_headerText = $this->__('Upgrade Remarkety extension (version: %s)', $ver);
|
| 26 |
+
|
| 27 |
+
$this->_removeButton('back');
|
| 28 |
+
$this->_removeButton('reset');
|
| 29 |
+
$this->_addButton('save', array(
|
| 30 |
+
'label' => Mage::helper('adminhtml')->__('Complete Installation'),
|
| 31 |
+
'onclick' => 'editForm.submit();',
|
| 32 |
+
'class' => 'save',
|
| 33 |
+
), 1);
|
| 34 |
+
}
|
| 35 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Configuration/Upgrade/Form.php
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration upgrade form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Configuration_Upgrade_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/*/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Upgrade Remarkety extension')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'upgrade',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 41 |
+
'text' => '',
|
| 42 |
+
'label' => false,
|
| 43 |
+
'after_element_html' =>
|
| 44 |
+
'<p style="font-weight:bold;">' . $this->__('Thank you for installing the Remarkety Magento plugin.
|
| 45 |
+
You are one click away from finishing setting up Remarkety on your store and sending effective, targeted emails!')
|
| 46 |
+
. '<br><br>'
|
| 47 |
+
. $this->__('It seems that you have already installed Remarkety on this website before. This
|
| 48 |
+
version of the plugin will create a new API key, and automatically inform
|
| 49 |
+
Remarkety. If this is a mistake, please <a href="%s">click here</a>.</p>', $this->getUrl('*/*/installation', array('mode' => 'install')))
|
| 50 |
+
));
|
| 51 |
+
$instruction->getRenderer()->setTemplate('mgconnector/widget/form/renderer/fieldset/element.phtml');
|
| 52 |
+
|
| 53 |
+
$fieldset->addField('terms', 'checkbox', array(
|
| 54 |
+
'label' => false,
|
| 55 |
+
'name' => 'data[terms]',
|
| 56 |
+
'checked' => false,
|
| 57 |
+
'value' => '1',
|
| 58 |
+
'class' => 'required-entry',
|
| 59 |
+
'after_element_html' => $this->__('I agree to Remarkety’s <a href="%s">terms of use</a>.', '#'),
|
| 60 |
+
));
|
| 61 |
+
|
| 62 |
+
$fieldset->addField('button', 'note', array(
|
| 63 |
+
'label' => false,
|
| 64 |
+
'name' => 'button',
|
| 65 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 66 |
+
. $this->__('Complete Installation') . '</span></span></button>'
|
| 67 |
+
));
|
| 68 |
+
|
| 69 |
+
return parent::_prepareForm();
|
| 70 |
+
}
|
| 71 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Complete.php
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration complete block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Complete extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'complete_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_install';
|
| 22 |
+
$this->_mode = 'complete';
|
| 23 |
+
|
| 24 |
+
$this->_headerText = $this->__(
|
| 25 |
+
'Install Complete (version: %s)',
|
| 26 |
+
Mage::helper('mgconnector')->getInstalledVersion()
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
$this->_removeButton('back');
|
| 30 |
+
$this->_removeButton('reset');
|
| 31 |
+
$this->_addButton('save', array(
|
| 32 |
+
'label' => Mage::helper('adminhtml')->__('Done'),
|
| 33 |
+
'onclick' => 'editForm.submit();',
|
| 34 |
+
'class' => 'save',
|
| 35 |
+
), 1);
|
| 36 |
+
}
|
| 37 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Complete/Form.php
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration complete form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Complete_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/*/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Installation Complete')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'complete',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 41 |
+
'text' => '',
|
| 42 |
+
'label' => false,
|
| 43 |
+
'after_element_html' => '<p style="font-weight:bold;">' . $this->__('Installation complete!') . '</p>'
|
| 44 |
+
));
|
| 45 |
+
$instruction->getRenderer()->setTemplate('mgconnector/element.phtml');
|
| 46 |
+
|
| 47 |
+
$response = Mage::getSingleton('core/session')->getRemarketyLastResponseMessage();
|
| 48 |
+
$response = !empty($response) ? unserialize($response) : array();
|
| 49 |
+
$fieldset->addField('response', 'note', array(
|
| 50 |
+
'label' => false,
|
| 51 |
+
'after_element_html' => !empty($response['info']) ? $response['info'] : $this->__('There is no response to display')
|
| 52 |
+
));
|
| 53 |
+
|
| 54 |
+
$fieldset->addField('button', 'note', array(
|
| 55 |
+
'label' => false,
|
| 56 |
+
'name' => 'button',
|
| 57 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 58 |
+
. $this->__('Done') . '</span></span></button>'
|
| 59 |
+
));
|
| 60 |
+
|
| 61 |
+
return parent::_prepareForm();
|
| 62 |
+
}
|
| 63 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Create.php
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml install install block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Install_Create extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'install_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_install_install';
|
| 22 |
+
$this->_mode = 'create';
|
| 23 |
+
|
| 24 |
+
$this->_headerText = $this->__(
|
| 25 |
+
'Install Remarkety extension (version: %s)',
|
| 26 |
+
Mage::helper('mgconnector')->getInstalledVersion()
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
$this->_removeButton('back');
|
| 30 |
+
$this->_removeButton('reset');
|
| 31 |
+
$this->_removeButton('save');
|
| 32 |
+
}
|
| 33 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Create/Form.php
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml install install form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Install_Create_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/install/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$multipleStores = Remarkety_Mgconnector_Model_Install::isMultipleStores();
|
| 29 |
+
$accountWithLoginUrl = $this->getUrl('*/install/install', array('mode' => Remarkety_Mgconnector_Model_Install::MODE_INSTALL_LOGIN));
|
| 30 |
+
|
| 31 |
+
$fieldset = $form->addFieldset(
|
| 32 |
+
'general',
|
| 33 |
+
array(
|
| 34 |
+
'legend' => $this->__('Install Remarkety extension')
|
| 35 |
+
)
|
| 36 |
+
);
|
| 37 |
+
|
| 38 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 39 |
+
'name' => 'data[mode]',
|
| 40 |
+
'value' => 'install_create',
|
| 41 |
+
));
|
| 42 |
+
|
| 43 |
+
$headingHtml =
|
| 44 |
+
'<p><b>' . $this->__('Thank you for installing the Remarkety Magento plugin.
|
| 45 |
+
You are one click away from finishing setting up Remarkety on your store and sending effective, targeted emails!')
|
| 46 |
+
. '</b><br><br>'
|
| 47 |
+
. $this->__('The plugin will automatically create a Magento WebService API user so that
|
| 48 |
+
Remarkety can synchronize with your store.') . '</p><hr/>'
|
| 49 |
+
. '<h2>'.$this->__('Create a new Remarkety account') . '</h2>'
|
| 50 |
+
. '<p>'.
|
| 51 |
+
sprintf($this->__(
|
| 52 |
+
'Already registered to Remarkety? <a href="%s">Click here</a>'
|
| 53 |
+
), $accountWithLoginUrl)
|
| 54 |
+
. '</p>';
|
| 55 |
+
|
| 56 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 57 |
+
'text' => '',
|
| 58 |
+
'label' => false,
|
| 59 |
+
'after_element_html' => $headingHtml,
|
| 60 |
+
|
| 61 |
+
));
|
| 62 |
+
$instruction->getRenderer()->setTemplate('mgconnector/element.phtml');
|
| 63 |
+
|
| 64 |
+
$html = '<small style="float:left;width:100%;">' . sprintf($this->__(
|
| 65 |
+
'Already registered to Remarkety? <a href="%s">Click here</a>'
|
| 66 |
+
), $accountWithLoginUrl) . '</small>';
|
| 67 |
+
|
| 68 |
+
$fieldset->addField('email', 'text', array(
|
| 69 |
+
'label' => $this->__('Email address for the Remarkety account:'),
|
| 70 |
+
'name' => 'data[email]',
|
| 71 |
+
'required' => true,
|
| 72 |
+
'class' => 'validate-email',
|
| 73 |
+
//'after_element_html' => $html,
|
| 74 |
+
'style' => 'float:left',
|
| 75 |
+
));
|
| 76 |
+
|
| 77 |
+
$fieldset->addField('first_name', 'text', array(
|
| 78 |
+
'label' => $this->__('First Name:'),
|
| 79 |
+
'name' => 'data[first_name]',
|
| 80 |
+
'required' => true,
|
| 81 |
+
'class' => 'required-entry'
|
| 82 |
+
));
|
| 83 |
+
|
| 84 |
+
$fieldset->addField('last_name', 'text', array(
|
| 85 |
+
'label' => $this->__('Last Name:'),
|
| 86 |
+
'name' => 'data[last_name]',
|
| 87 |
+
'required' => true,
|
| 88 |
+
'class' => 'required-entry'
|
| 89 |
+
));
|
| 90 |
+
|
| 91 |
+
$fieldset->addField('phone', 'text', array(
|
| 92 |
+
'label' => $this->__('Phone:'),
|
| 93 |
+
'name' => 'data[phone]',
|
| 94 |
+
'required' => true,
|
| 95 |
+
'class' => 'required-entry'
|
| 96 |
+
));
|
| 97 |
+
|
| 98 |
+
$fieldset->addField('password', 'password', array(
|
| 99 |
+
'label' => $this->__('Password:'),
|
| 100 |
+
'name' => 'data[password]',
|
| 101 |
+
'required' => true,
|
| 102 |
+
'class' => 'required-entry'
|
| 103 |
+
));
|
| 104 |
+
|
| 105 |
+
|
| 106 |
+
$fieldset->addField('store_id', $multipleStores ? 'multiselect' : 'select', array(
|
| 107 |
+
'name' => 'data[store_id]',
|
| 108 |
+
'label' => $this->__('Sync Remarkety with this view:'),
|
| 109 |
+
'required' => true,
|
| 110 |
+
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, false),
|
| 111 |
+
));
|
| 112 |
+
|
| 113 |
+
$fieldset->addField('terms', 'checkbox', array(
|
| 114 |
+
'label' => false,
|
| 115 |
+
'name' => 'data[terms]',
|
| 116 |
+
'checked' => false,
|
| 117 |
+
'value' => '1',
|
| 118 |
+
'class' => 'required-entry',
|
| 119 |
+
'after_element_html' => $this->__('I agree to Remarkety’s <a href="%s">terms of use</a>.', '#'),
|
| 120 |
+
));
|
| 121 |
+
|
| 122 |
+
$fieldset->addField('create', 'note', array(
|
| 123 |
+
'label' => false,
|
| 124 |
+
'name' => 'button',
|
| 125 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 126 |
+
. $this->__('Create New Account And Connect') . '</span></span></button>',
|
| 127 |
+
));
|
| 128 |
+
|
| 129 |
+
// $fieldset->addField('login', 'note', array(
|
| 130 |
+
// 'label' => false,
|
| 131 |
+
// 'name' => 'button',
|
| 132 |
+
// 'after_element_html' => '<button type="button" class="save"
|
| 133 |
+
// onclick="window.location = \'' . $this->getUrl('*/install/install', array('mode' => Remarkety_Mgconnector_Model_Install::MODE_INSTALL_LOGIN)) . '\'"
|
| 134 |
+
// ><span><span>'
|
| 135 |
+
// . $this->__('I Already Have An Account') . '</span></span></button>',
|
| 136 |
+
// ));
|
| 137 |
+
|
| 138 |
+
return parent::_prepareForm();
|
| 139 |
+
}
|
| 140 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Login.php
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml install install block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Install_Login extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'install_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_install_install';
|
| 22 |
+
$this->_mode = 'login';
|
| 23 |
+
|
| 24 |
+
$this->_headerText = $this->__(
|
| 25 |
+
'Install Remarkety extension (version: %s)',
|
| 26 |
+
Mage::helper('mgconnector')->getInstalledVersion()
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
$this->_removeButton('back');
|
| 30 |
+
$this->_removeButton('reset');
|
| 31 |
+
$this->_removeButton('save');
|
| 32 |
+
}
|
| 33 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Install/Login/Form.php
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml install install form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Install_Login_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/install/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Install Remarkety extension')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'install_login',
|
| 38 |
+
));
|
| 39 |
+
$noAccountUrl = $this->getUrl('*/install/install', array('mode' => Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE));
|
| 40 |
+
|
| 41 |
+
/*$headingHtml =
|
| 42 |
+
'<p><b>' . $this->__('Thank you for installing the Remarkety Magento plugin.
|
| 43 |
+
You are one click away from finishing setting up Remarkety on your store and sending effective, targeted emails!')
|
| 44 |
+
. '</b><br><br>'
|
| 45 |
+
. $this->__('The plugin will automatically create a Magento WebService API user so that
|
| 46 |
+
Remarkety can synchronize with your store.') . '</p><hr/>'
|
| 47 |
+
. '<h2>'.$this->__('Login to Remarkety') . '</h2>'
|
| 48 |
+
. '<p>'.
|
| 49 |
+
sprintf($this->__(
|
| 50 |
+
'Don\'t have a Remarkety account yet? <a href="%s">Click here</a>'
|
| 51 |
+
), $noAccountUrl)
|
| 52 |
+
. '</p>';
|
| 53 |
+
|
| 54 |
+
/$instruction = $fieldset->addField('instruction', 'note', array(
|
| 55 |
+
'text' => '',
|
| 56 |
+
'label' => false,
|
| 57 |
+
'after_element_html' => $headingHtml,
|
| 58 |
+
// '<p style="font-weight:bold;">' . $this->__('Thank you for installing the Remarkety Magento plugin.
|
| 59 |
+
// You are one click away from finishing setting up Remarkety on your store and sending effective, targeted emails!')
|
| 60 |
+
// . '<br><br>'
|
| 61 |
+
// . $this->__('The plugin will automatically create a Magento WebService API user so that
|
| 62 |
+
// Remarkety can synchronize with your store.') . '</p>',
|
| 63 |
+
));
|
| 64 |
+
$instruction->getRenderer()->setTemplate('mgconnector/element.phtml');*/
|
| 65 |
+
|
| 66 |
+
$noAccountUrl = $this->getUrl('*/install/install', array('mode' => Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE));
|
| 67 |
+
|
| 68 |
+
$html = '<small style="float:left;width:100%;">' . sprintf($this->__(
|
| 69 |
+
'Don\'t have a Remarkety account yet? <a href="%s">Click here</a>'
|
| 70 |
+
), $noAccountUrl) . '</small>';
|
| 71 |
+
|
| 72 |
+
$fieldset->addField('email', 'text', array(
|
| 73 |
+
'label' => $this->__('Email address for the Remarkety account:'),
|
| 74 |
+
'name' => 'data[email]',
|
| 75 |
+
'required' => true,
|
| 76 |
+
'class' => 'validate-email',
|
| 77 |
+
/*
|
| 78 |
+
'after_element_html' => $html,
|
| 79 |
+
'<small style="float:left;width:100%;">' . $this->__(
|
| 80 |
+
'If you’ve already registered to Remarkety, please use the email you used to open your account.
|
| 81 |
+
If you haven’t, please click on the button "Create New Account And Install" below.'
|
| 82 |
+
) . '</small>',
|
| 83 |
+
*/
|
| 84 |
+
'style' => 'float:left',
|
| 85 |
+
));
|
| 86 |
+
|
| 87 |
+
$fieldset->addField('password', 'password', array(
|
| 88 |
+
'label' => $this->__('Password:'),
|
| 89 |
+
'name' => 'data[password]',
|
| 90 |
+
'required' => true,
|
| 91 |
+
'class' => 'required-entry'
|
| 92 |
+
));
|
| 93 |
+
|
| 94 |
+
$fieldset->addField('store_id', 'select', array(
|
| 95 |
+
'name' => 'data[store_id]',
|
| 96 |
+
'label' => $this->__('Connect this view:'),
|
| 97 |
+
'required' => true,
|
| 98 |
+
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, false),
|
| 99 |
+
//'value' => $this->getRequest()->getParam('store'),
|
| 100 |
+
));
|
| 101 |
+
|
| 102 |
+
// $fieldset->addField('terms', 'checkbox', array(
|
| 103 |
+
// 'label' => false,
|
| 104 |
+
// 'name' => 'data[terms]',
|
| 105 |
+
// 'checked' => false,
|
| 106 |
+
// 'value' => '1',
|
| 107 |
+
// 'class' => 'required-entry',
|
| 108 |
+
// 'after_element_html' => $this->__('I agree to Remarkety’s <a href="%s">terms of use</a>.', '#'),
|
| 109 |
+
// ));
|
| 110 |
+
|
| 111 |
+
$fieldset->addField('login', 'note', array(
|
| 112 |
+
'label' => false,
|
| 113 |
+
'name' => 'button',
|
| 114 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span>'
|
| 115 |
+
. $this->__('Login And Connect') . '
|
| 116 |
+
</span></button>',
|
| 117 |
+
));
|
| 118 |
+
|
| 119 |
+
// $fieldset->addField('create', 'note', array(
|
| 120 |
+
// 'label' => false,
|
| 121 |
+
// 'name' => 'button',
|
| 122 |
+
// 'after_element_html' => '<button type="button" class="save"
|
| 123 |
+
// onclick="window.location = \'' . $this->getUrl('*/install/install', array('mode' => Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE)) . '\'"
|
| 124 |
+
// ><span><span>'
|
| 125 |
+
// . $this->__('Create New Account And Install') . '</span></span></button>',
|
| 126 |
+
// ));
|
| 127 |
+
|
| 128 |
+
return parent::_prepareForm();
|
| 129 |
+
}
|
| 130 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Upgrade.php
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration upgrade block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Upgrade extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'upgrade_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_install';
|
| 22 |
+
$this->_mode = 'upgrade';
|
| 23 |
+
|
| 24 |
+
$this->_headerText = $this->__(
|
| 25 |
+
'Upgrade Remarkety extension (version: %s)',
|
| 26 |
+
Mage::helper('mgconnector')->getInstalledVersion()
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
$this->_removeButton('back');
|
| 30 |
+
$this->_removeButton('reset');
|
| 31 |
+
$this->_addButton('save', array(
|
| 32 |
+
'label' => Mage::helper('adminhtml')->__('Complete Installation'),
|
| 33 |
+
'onclick' => 'editForm.submit();',
|
| 34 |
+
'class' => 'save',
|
| 35 |
+
), 1);
|
| 36 |
+
}
|
| 37 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Upgrade/Form.php
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configuration upgrade form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Upgrade_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/install/complete'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Upgrade Remarkety extension')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'upgrade',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 41 |
+
'text' => '',
|
| 42 |
+
'label' => false,
|
| 43 |
+
'after_element_html' =>
|
| 44 |
+
'<p style="font-weight:bold;">' . $this->__('Thank you for installing the Remarkety Magento plugin.
|
| 45 |
+
You are one click away from finishing setting up Remarkety on your store and sending effective, targeted emails!')
|
| 46 |
+
. '<br><br>'
|
| 47 |
+
. $this->__('It seems that you have already installed Remarkety on this website before. This
|
| 48 |
+
version of the plugin will create a new API key, and automatically inform
|
| 49 |
+
Remarkety. If this is a mistake, please <a href="%s">click here</a>.</p>', $this->getUrl('*/install/install', array('mode' => 'install_create')))
|
| 50 |
+
));
|
| 51 |
+
$instruction->getRenderer()->setTemplate('mgconnector/element.phtml');
|
| 52 |
+
|
| 53 |
+
$fieldset->addField('button', 'note', array(
|
| 54 |
+
'label' => false,
|
| 55 |
+
'name' => 'button',
|
| 56 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 57 |
+
. $this->__('Complete Installation') . '</span></span></button>'
|
| 58 |
+
));
|
| 59 |
+
|
| 60 |
+
return parent::_prepareForm();
|
| 61 |
+
}
|
| 62 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Welcome.php
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml welcome complete block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Welcome extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'welcome_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_install';
|
| 22 |
+
$this->_mode = 'welcome';
|
| 23 |
+
|
| 24 |
+
$this->_headerText = $this->__(
|
| 25 |
+
'Remarkety (version: %s)',
|
| 26 |
+
Mage::helper('mgconnector')->getInstalledVersion()
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
$this->_removeButton('back');
|
| 30 |
+
$this->_removeButton('reset');
|
| 31 |
+
$this->_removeButton('save');
|
| 32 |
+
|
| 33 |
+
$this->_addButton('reinstall', array(
|
| 34 |
+
'label' => Mage::helper('adminhtml')->__('Reinstall'),
|
| 35 |
+
'onclick' => "return confirm('Are you sure?') ? window.location = '" . $this->getUrl('*/install/reinstall')."' : false;",
|
| 36 |
+
'class' => 'delete',
|
| 37 |
+
), 0);
|
| 38 |
+
}
|
| 39 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Welcome/Form.php
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml welcome complete form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Welcome_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/*/install'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Remarkety')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'complete',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
$instruction = $fieldset->addField('instruction', 'note', array(
|
| 41 |
+
'text' => '',
|
| 42 |
+
'label' => false,
|
| 43 |
+
'after_element_html' => '<p style="font-weight:bold;font-size:25px;">' . $this->__('Welcome to Remarkety - What\'s next?') . '</p>
|
| 44 |
+
<ol style="list-style-type:decimal;margin-left:20px;font-weight:bold;font-size:12px;">
|
| 45 |
+
<li>Sign in to your account <a href="https://app.remarkety.com/?utm_source=plugin&utm_medium=link&utm_campaign=magento-plugin" target="_blank">here</a></li>
|
| 46 |
+
<li>Create campaigns, send emails and monitor results.</li>
|
| 47 |
+
<li>Increase sales and customer\'s Life Time Value</li>
|
| 48 |
+
<li>Need help? We are here for you: <a href="mailto:support@remarkety.com">support@remarkety.com</a> <a href="tel:%28%2B1%20800%20570-7564">(+1 800 570-7564)</a></li>
|
| 49 |
+
</ol>
|
| 50 |
+
'
|
| 51 |
+
));
|
| 52 |
+
$instruction->getRenderer()->setTemplate('mgconnector/element.phtml');
|
| 53 |
+
|
| 54 |
+
return parent::_prepareForm();
|
| 55 |
+
}
|
| 56 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Install/Welcome/Store.php
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Install_Welcome_Store extends Mage_Adminhtml_Block_Template
|
| 4 |
+
{
|
| 5 |
+
/**
|
| 6 |
+
* Prepare block
|
| 7 |
+
*/
|
| 8 |
+
public function __construct()
|
| 9 |
+
{
|
| 10 |
+
$this->setTemplate('mgconnector/install/welcome/store.phtml');
|
| 11 |
+
parent::__construct();
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
public function getStoresStatus()
|
| 15 |
+
{
|
| 16 |
+
/**
|
| 17 |
+
* @var $wtModel Remarkety_Mgconnector_Model_Webtracking
|
| 18 |
+
*/
|
| 19 |
+
$wtModel = Mage::getModel('mgconnector/webtracking');
|
| 20 |
+
|
| 21 |
+
$stores = array();
|
| 22 |
+
|
| 23 |
+
foreach (Mage::app()->getWebsites() as $_website) {
|
| 24 |
+
$stores[$_website->getCode()] = array(
|
| 25 |
+
'name' => $_website->getName(),
|
| 26 |
+
'id' => $_website->getWebsiteId(),
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
foreach ($_website->getGroups() as $_group) {
|
| 30 |
+
$stores[$_website->getCode()]['store_groups'][$_group->getCode()] = array(
|
| 31 |
+
'name' => $_group->getName(),
|
| 32 |
+
'id' => $_group->getGroupId(),
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
foreach ($_group->getStores() as $_store) {
|
| 36 |
+
$isInstalled = $_store->getConfig(Remarkety_Mgconnector_Model_Install::XPATH_INSTALLED);
|
| 37 |
+
$webtracking = $wtModel->getRemarketyPublicId($_store->getStoreId());
|
| 38 |
+
$stores[$_website->getCode()]['store_groups'][$_group->getCode()]['store_views'][$_store->getCode()] = array(
|
| 39 |
+
'name' => $_store->getName(),
|
| 40 |
+
'id' => $_store->getStoreId(),
|
| 41 |
+
'isInstalled' => $isInstalled,
|
| 42 |
+
'webTracking' => $webtracking
|
| 43 |
+
);
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
return $stores;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function checkAPIKey(){
|
| 52 |
+
try {
|
| 53 |
+
$uModel = Mage::getModel('api/user');
|
| 54 |
+
$apiKey = Mage::getStoreConfig('remarkety/mgconnector/api_key');
|
| 55 |
+
return $uModel->authenticate(\Remarkety_Mgconnector_Model_Install::WEB_SERVICE_USERNAME, $apiKey);
|
| 56 |
+
} catch (Exception $ex){
|
| 57 |
+
return false;
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue.php
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml queue block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Queue extends Mage_Adminhtml_Block_Widget_Grid_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_blockGroup = 'mgconnector';
|
| 20 |
+
$this->_controller = 'adminhtml_queue';
|
| 21 |
+
$this->_headerText = Mage::helper('mgconnector')->__('Queue Contents');
|
| 22 |
+
$this->_removeButton('add');
|
| 23 |
+
}
|
| 24 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Configure.php
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configure block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Queue_Configure extends Mage_Adminhtml_Block_Widget_Form_Container
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this->_objectId = 'configure_id';
|
| 20 |
+
$this->_blockGroup = 'mgconnector';
|
| 21 |
+
$this->_controller = 'adminhtml_queue';
|
| 22 |
+
$this->_mode = 'configure';
|
| 23 |
+
|
| 24 |
+
$this->_headerText = $this->__(
|
| 25 |
+
'Configuration'
|
| 26 |
+
// Mage::helper('mgconnector')->getInstalledVersion()
|
| 27 |
+
);
|
| 28 |
+
|
| 29 |
+
$this->_removeButton('back');
|
| 30 |
+
$this->_removeButton('reset');
|
| 31 |
+
|
| 32 |
+
// $this->_addButton('save', array(
|
| 33 |
+
// 'label' => Mage::helper('adminhtml')->__('Save'),
|
| 34 |
+
// 'onclick' => 'editForm.submit();',
|
| 35 |
+
// 'class' => 'save',
|
| 36 |
+
// ), 0);
|
| 37 |
+
}
|
| 38 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Configure/Form.php
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml configure form block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Queue_Configure_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare form
|
| 14 |
+
*
|
| 15 |
+
* @return Mage_Adminhtml_Block_Widget_Form
|
| 16 |
+
*/
|
| 17 |
+
protected function _prepareForm()
|
| 18 |
+
{
|
| 19 |
+
$form = new Varien_Data_Form(array(
|
| 20 |
+
'id' => 'edit_form',
|
| 21 |
+
'action' => $this->getUrl('*/queue/save'),
|
| 22 |
+
'method' => 'post',
|
| 23 |
+
));
|
| 24 |
+
$form->setFieldContainerIdPrefix('data');
|
| 25 |
+
$form->setUseContainer(true);
|
| 26 |
+
$this->setForm($form);
|
| 27 |
+
|
| 28 |
+
$fieldset = $form->addFieldset(
|
| 29 |
+
'general',
|
| 30 |
+
array(
|
| 31 |
+
'legend' => $this->__('Remarkety Configuration')
|
| 32 |
+
)
|
| 33 |
+
);
|
| 34 |
+
|
| 35 |
+
$fieldset->addField('mode', 'hidden', array(
|
| 36 |
+
'name' => 'data[mode]',
|
| 37 |
+
'value' => 'configuration',
|
| 38 |
+
));
|
| 39 |
+
|
| 40 |
+
if(!$this->checkAPIKey()) {
|
| 41 |
+
$fieldset->addField('api_warning', 'note', array(
|
| 42 |
+
'text' => '<span style="color: red;">' . $this->__('Attention! Remarkety\'s API key is not the same as the Magento API key. Please set it below.') . '</span>'.
|
| 43 |
+
' <a target="_blank" href="https://support.remarkety.com/hc/en-us/articles/209184646-Synchronizing-the-API-key">More Info</a>.',
|
| 44 |
+
));
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
$fieldset->addField('api_key', 'text', array(
|
| 48 |
+
'label' => $this->__('API Key:'),
|
| 49 |
+
'name' => 'data[api_key]',
|
| 50 |
+
'required' => true,
|
| 51 |
+
'after_element_html' => '<small style="float:left;width:100%;">' . $this->__(
|
| 52 |
+
'This API key will be used for Remarkety\'s sync and queue.'
|
| 53 |
+
) . '</small>',
|
| 54 |
+
'value' => Mage::getStoreConfig('remarkety/mgconnector/api_key'),
|
| 55 |
+
'style' => 'float:left',
|
| 56 |
+
));
|
| 57 |
+
|
| 58 |
+
$fieldset->addField('intervals', 'text', array(
|
| 59 |
+
'label' => $this->__('Intervals:'),
|
| 60 |
+
'name' => 'data[intervals]',
|
| 61 |
+
'required' => true,
|
| 62 |
+
'after_element_html' => '<small style="float:left;width:100%;">' . $this->__(
|
| 63 |
+
'This defines the queue retry interval.<br/>
|
| 64 |
+
Type the amount of minutes between retries, separated by commas. For example "1,3,10" -
|
| 65 |
+
the second attempt will be after 1 minute, third after 3 minutes,<br/>
|
| 66 |
+
and fourth after 10 minutes. If the last attempt is unsuccessful,
|
| 67 |
+
the status will be changed to "failed" and will not be retried anymore.'
|
| 68 |
+
) . '</small>',
|
| 69 |
+
'value' => Mage::getStoreConfig('remarkety/mgconnector/intervals'),
|
| 70 |
+
'style' => 'float:left',
|
| 71 |
+
));
|
| 72 |
+
|
| 73 |
+
$fieldset->addField('bypasscache', 'checkbox', array(
|
| 74 |
+
'label' => $this->__('Bypass page cache for website tracking:'),
|
| 75 |
+
'name' => 'data[bypasscache]',
|
| 76 |
+
'after_element_html' => '<small style="float:left;width:100%;">' . $this->__(
|
| 77 |
+
'Enable this checkbox if you use caching on your store pages.'
|
| 78 |
+
) . '</small>',
|
| 79 |
+
'value' => 1,
|
| 80 |
+
'checked' => \Remarkety_Mgconnector_Model_Webtracking::getBypassCache() ? 'checked' : '',
|
| 81 |
+
'style' => 'float:left',
|
| 82 |
+
));
|
| 83 |
+
|
| 84 |
+
$button = $fieldset->addField('button', 'note', array(
|
| 85 |
+
'label' => false,
|
| 86 |
+
'name' => 'button',
|
| 87 |
+
'after_element_html' => '<button type="button" class="save" onclick="editForm.submit();"><span><span>'
|
| 88 |
+
. $this->__('Save') . '</span></span></button>',
|
| 89 |
+
));
|
| 90 |
+
$button->getRenderer()->setTemplate('mgconnector/element.phtml');
|
| 91 |
+
|
| 92 |
+
return parent::_prepareForm();
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
private function checkAPIKey(){
|
| 96 |
+
try {
|
| 97 |
+
$uModel = Mage::getModel('api/user');
|
| 98 |
+
$apiKey = Mage::getStoreConfig('remarkety/mgconnector/api_key');
|
| 99 |
+
return $uModel->authenticate(\Remarkety_Mgconnector_Model_Install::WEB_SERVICE_USERNAME, $apiKey);
|
| 100 |
+
} catch (Exception $ex){
|
| 101 |
+
return false;
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Grid.php
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml queue grid block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Prepare block
|
| 14 |
+
*/
|
| 15 |
+
public function __construct()
|
| 16 |
+
{
|
| 17 |
+
parent::__construct();
|
| 18 |
+
|
| 19 |
+
$this
|
| 20 |
+
->setId('queue_grid')
|
| 21 |
+
->setDefaultSort('next_attempt')
|
| 22 |
+
->setDefaultDir('ASC')
|
| 23 |
+
->setSaveParametersInSession(true)
|
| 24 |
+
->setUseAjax(true);
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Prepare collection
|
| 29 |
+
*
|
| 30 |
+
* @return Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid
|
| 31 |
+
*/
|
| 32 |
+
protected function _prepareCollection()
|
| 33 |
+
{
|
| 34 |
+
$collection = Mage::getResourceModel('mgconnector/queue_collection');
|
| 35 |
+
$this->setCollection($collection);
|
| 36 |
+
|
| 37 |
+
return parent::_prepareCollection();
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* Prepare columns
|
| 42 |
+
*
|
| 43 |
+
* @return Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid
|
| 44 |
+
* @throws Exception
|
| 45 |
+
*/
|
| 46 |
+
protected function _prepareColumns()
|
| 47 |
+
{
|
| 48 |
+
$helper = Mage::helper('mgconnector');
|
| 49 |
+
|
| 50 |
+
$this->addColumn('queue_id', array(
|
| 51 |
+
'header' => $helper->__('Queue #'),
|
| 52 |
+
'width' => '50px',
|
| 53 |
+
'type' => 'number',
|
| 54 |
+
'index' => 'queue_id'
|
| 55 |
+
));
|
| 56 |
+
$this->addColumn('event_type', array(
|
| 57 |
+
'header' => $helper->__('Event Type'),
|
| 58 |
+
'index' => 'event_type',
|
| 59 |
+
'renderer' => 'Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid_Column_Renderer_EventType',
|
| 60 |
+
));
|
| 61 |
+
$this->addColumn('status', array(
|
| 62 |
+
'header' => $helper->__('Status'),
|
| 63 |
+
'width' => '200px',
|
| 64 |
+
'renderer' => 'Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid_Column_Renderer_Status',
|
| 65 |
+
'index' => 'status'
|
| 66 |
+
));
|
| 67 |
+
$this->addColumn('attempts', array(
|
| 68 |
+
'header' => $helper->__('Attempts'),
|
| 69 |
+
'index' => 'attempts'
|
| 70 |
+
));
|
| 71 |
+
$this->addColumn('last_attempt', array(
|
| 72 |
+
'header' => $helper->__('Last Attempt'),
|
| 73 |
+
'width' => '200px',
|
| 74 |
+
'type' => 'datetime',
|
| 75 |
+
'index' => 'last_attempt'
|
| 76 |
+
));
|
| 77 |
+
$this->addColumn('next_attempt', array(
|
| 78 |
+
'header' => $helper->__('Next Attempt'),
|
| 79 |
+
'width' => '200px',
|
| 80 |
+
'type' => 'datetime',
|
| 81 |
+
'index' => 'next_attempt'
|
| 82 |
+
));
|
| 83 |
+
|
| 84 |
+
return parent::_prepareColumns();
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/**
|
| 88 |
+
* Return grid url
|
| 89 |
+
*
|
| 90 |
+
* @return string
|
| 91 |
+
*/
|
| 92 |
+
public function getGridUrl()
|
| 93 |
+
{
|
| 94 |
+
return $this->getUrl('*/*/grid', array('_current' => true));
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
protected function _prepareMassaction()
|
| 99 |
+
{
|
| 100 |
+
$this->setMassactionIdField('queue_id');
|
| 101 |
+
$this->getMassactionBlock()->setFormFieldName('queue');
|
| 102 |
+
|
| 103 |
+
$this->getMassactionBlock()->addItem('resend', array(
|
| 104 |
+
'label' => $this->__('Resend'),
|
| 105 |
+
'url' => $this->getUrl('*/*/massResend')
|
| 106 |
+
));
|
| 107 |
+
|
| 108 |
+
$this->getMassactionBlock()->addItem('delete', array(
|
| 109 |
+
'label' => $this->__('Delete'),
|
| 110 |
+
'url' => $this->getUrl('*/*/massDelete'),
|
| 111 |
+
'confirm' => $this->__('Really delete all these events?')
|
| 112 |
+
));
|
| 113 |
+
|
| 114 |
+
return $this;
|
| 115 |
+
}
|
| 116 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Grid/Column/Renderer/EventType.php
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml queue grid status column renderer block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid_Column_Renderer_EventType
|
| 11 |
+
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* Column renderer
|
| 15 |
+
*
|
| 16 |
+
* @param Varien_Object $row
|
| 17 |
+
* @return string
|
| 18 |
+
*/
|
| 19 |
+
public function render(Varien_Object $row)
|
| 20 |
+
{
|
| 21 |
+
$value = $row->getData($this->getColumn()->getIndex());
|
| 22 |
+
try {
|
| 23 |
+
$payload = json_encode(unserialize($row->getData('payload')));
|
| 24 |
+
} catch (\Exception $e) {
|
| 25 |
+
$payload = "?";
|
| 26 |
+
}
|
| 27 |
+
return '<span title="'.htmlentities($payload).'">'.$value.'</span>';
|
| 28 |
+
}
|
| 29 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Adminhtml/Queue/Grid/Column/Renderer/Status.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml queue grid status column renderer block
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Block_Adminhtml_Queue_Grid_Column_Renderer_Status
|
| 11 |
+
extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* Column renderer
|
| 15 |
+
*
|
| 16 |
+
* @param Varien_Object $row
|
| 17 |
+
* @return string
|
| 18 |
+
*/
|
| 19 |
+
public function render(Varien_Object $row)
|
| 20 |
+
{
|
| 21 |
+
$value = $row->getData($this->getColumn()->getIndex());
|
| 22 |
+
|
| 23 |
+
return Mage::helper('mgconnector')->__($value ? 'Queued' : 'Failed');
|
| 24 |
+
}
|
| 25 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Tracking/Base.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Remarkety_Mgconnector_Block_Tracking_Base extends Mage_Core_Block_Template
|
| 3 |
+
{
|
| 4 |
+
public function isWebtrackingActivated()
|
| 5 |
+
{
|
| 6 |
+
return ($this->getRemarketyPublicId() !== false);
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
public function getRemarketyPublicId()
|
| 10 |
+
{
|
| 11 |
+
$store = Mage::app()->getStore();
|
| 12 |
+
/**
|
| 13 |
+
* @var $m Remarkety_Mgconnector_Model_Webtracking
|
| 14 |
+
*/
|
| 15 |
+
$m = Mage::getModel('mgconnector/webtracking');
|
| 16 |
+
return $m->getRemarketyPublicId($store);
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
public function shouldBypassCache(){
|
| 20 |
+
return \Remarkety_Mgconnector_Model_Webtracking::getBypassCache();
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
public function getCustomer()
|
| 24 |
+
{
|
| 25 |
+
return Mage::getSingleton('customer/session')->getCustomer();
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function getEmail(){
|
| 29 |
+
if(Mage::getSingleton('customer/session')->isLoggedIn()){
|
| 30 |
+
return $this->getCustomer()->getEmail();
|
| 31 |
+
}
|
| 32 |
+
$email = Mage::getSingleton('customer/session')->getSubscriberEmail();
|
| 33 |
+
return empty($email) ? false : $email;
|
| 34 |
+
}
|
| 35 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Tracking/General.php
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Remarkety_Mgconnector_Block_Tracking_General extends Remarkety_Mgconnector_Block_Tracking_Base
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
}
|
app/code/community/Remarkety/Mgconnector/Block/Tracking/Product.php
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Remarkety_Mgconnector_Block_Tracking_Product extends Remarkety_Mgconnector_Block_Tracking_Base
|
| 3 |
+
{
|
| 4 |
+
private $_CategoryNames = array();
|
| 5 |
+
private $_CategoryIds = array();
|
| 6 |
+
/**
|
| 7 |
+
* Get the active product object
|
| 8 |
+
*
|
| 9 |
+
* @return Mage_Catalog_Model_Product
|
| 10 |
+
*/
|
| 11 |
+
public function getActiveProduct()
|
| 12 |
+
{
|
| 13 |
+
if($this->getProduct()){
|
| 14 |
+
return $this->getProduct();
|
| 15 |
+
}
|
| 16 |
+
return Mage::registry('product');
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Get arrays of Category ids and names
|
| 21 |
+
* @return array
|
| 22 |
+
*/
|
| 23 |
+
public function getCategories(){
|
| 24 |
+
if(empty($this->_CategoryNames) || empty($this->_CategoryIds)) {
|
| 25 |
+
$cats = $this->getActiveProduct()->getCategoryIds();
|
| 26 |
+
$productCategoryNames = Array();
|
| 27 |
+
foreach ($cats as $category_id) {
|
| 28 |
+
$_cat = Mage::getModel('catalog/category')->load($category_id);
|
| 29 |
+
$productCategoryNames[] = $_cat->getName();
|
| 30 |
+
}
|
| 31 |
+
$this->_CategoryNames = $productCategoryNames;
|
| 32 |
+
$this->_CategoryIds = $cats;
|
| 33 |
+
}
|
| 34 |
+
return Array(
|
| 35 |
+
"ids" => $this->_CategoryIds,
|
| 36 |
+
"names" => $this->_CategoryNames
|
| 37 |
+
);
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* Return array of Category names
|
| 42 |
+
* @return array
|
| 43 |
+
*/
|
| 44 |
+
public function getCategoryNames(){
|
| 45 |
+
$info = $this->getCategories();
|
| 46 |
+
return $info['names'];
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* Return array of Category ids
|
| 51 |
+
* @return array
|
| 52 |
+
*/
|
| 53 |
+
public function getCategoryIds(){
|
| 54 |
+
$info = $this->getCategories();
|
| 55 |
+
return $info['ids'];
|
| 56 |
+
}
|
| 57 |
+
}
|
app/code/community/Remarkety/Mgconnector/Helper/Data.php
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Mgconnector helper
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Helper_Data extends Mage_Core_Helper_Abstract
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Return installed extension version
|
| 14 |
+
*
|
| 15 |
+
* @return string
|
| 16 |
+
*/
|
| 17 |
+
public function getInstalledVersion()
|
| 18 |
+
{
|
| 19 |
+
return Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Return mode
|
| 24 |
+
*
|
| 25 |
+
* @return string
|
| 26 |
+
* @throws Mage_Core_Exception
|
| 27 |
+
*/
|
| 28 |
+
public function getMode()
|
| 29 |
+
{
|
| 30 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* If remarkety extension was installed in version lower than 1.0.0.15
|
| 34 |
+
* and remarkety web service user already exists
|
| 35 |
+
*/
|
| 36 |
+
$webServiceUser = Mage::getModel('api/user')
|
| 37 |
+
->setUsername(Remarkety_Mgconnector_Model_Install::WEB_SERVICE_USERNAME)
|
| 38 |
+
->userExists();
|
| 39 |
+
|
| 40 |
+
if($webServiceUser === true) {
|
| 41 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_UPGRADE;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
$response = Mage::getSingleton('core/session')->getRemarketyLastResponseStatus();
|
| 45 |
+
//$response = Mage::getModel('core/config')->getConfig('remarkety/mgconnector/last_response_status');
|
| 46 |
+
if($response == 1) {
|
| 47 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_COMPLETE;
|
| 48 |
+
} elseif($response == 0) {
|
| 49 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
$configuredStores = Mage::getModel('mgconnector/install')->getConfiguredStores();
|
| 53 |
+
if($configuredStores->getSize()) {
|
| 54 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_WELCOME;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
$forceMode = Mage::app()->getRequest()->getParam('mode', false);
|
| 58 |
+
if(!empty($forceMode)) {
|
| 59 |
+
$mode = $forceMode;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
if(!in_array($mode, array(
|
| 63 |
+
Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE,
|
| 64 |
+
Remarkety_Mgconnector_Model_Install::MODE_INSTALL_LOGIN,
|
| 65 |
+
Remarkety_Mgconnector_Model_Install::MODE_UPGRADE,
|
| 66 |
+
Remarkety_Mgconnector_Model_Install::MODE_COMPLETE,
|
| 67 |
+
Remarkety_Mgconnector_Model_Install::MODE_WELCOME,
|
| 68 |
+
))) {
|
| 69 |
+
throw new Mage_Core_Exception('Installation mode can not be handled.');
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
return $mode;
|
| 73 |
+
}
|
| 74 |
+
}
|
app/code/community/Remarkety/Mgconnector/Helper/Links.php
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Remarkety_Mgconnector_Helper_Links extends Mage_Core_Helper_Abstract
|
| 4 |
+
{
|
| 5 |
+
private $parentId = null;
|
| 6 |
+
private $simpleIds = null;
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
private function loadProductLinks()
|
| 10 |
+
{
|
| 11 |
+
|
| 12 |
+
if ($this->parentId && $this->simpleIds) {
|
| 13 |
+
return;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_read');
|
| 17 |
+
$tableName = Mage::getSingleton('core/resource')->getTableName('catalog_product_super_link');
|
| 18 |
+
|
| 19 |
+
$query = 'select product_id,parent_id from ' . $tableName;
|
| 20 |
+
$this->simpleIds = array();
|
| 21 |
+
$this->parentId = array();
|
| 22 |
+
|
| 23 |
+
foreach ($connection->fetchAll($query) as $row) {
|
| 24 |
+
$productId = $row['product_id'];
|
| 25 |
+
$parentId = $row['parent_id'];
|
| 26 |
+
|
| 27 |
+
if (!isset($this->simpleIds[$parentId])) {
|
| 28 |
+
$this->simpleIds[$parentId] = array();
|
| 29 |
+
}
|
| 30 |
+
$this->simpleIds[$parentId][] = $productId;
|
| 31 |
+
$this->parentId[$productId] = $parentId;
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
public function getParentId($productId = null)
|
| 36 |
+
{
|
| 37 |
+
$this->loadProductLinks();
|
| 38 |
+
|
| 39 |
+
if (!$productId) {
|
| 40 |
+
return false;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
if (isset($this->parentId[$productId])) {
|
| 44 |
+
return $this->parentId[$productId];
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
return null;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
public function getSimpleIds($productId = null)
|
| 51 |
+
{
|
| 52 |
+
|
| 53 |
+
$this->loadProductLinks();
|
| 54 |
+
|
| 55 |
+
if (!isset($productId)) {
|
| 56 |
+
return $this->simpleIds;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
if (isset($this->simpleIds[$productId])) {
|
| 60 |
+
return $this->simpleIds[$productId];
|
| 61 |
+
}
|
| 62 |
+
return null;
|
| 63 |
+
}
|
| 64 |
+
}
|
app/code/community/Remarkety/Mgconnector/Helper/Urls.php
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Remarkety_Mgconnector_Helper_Urls extends Mage_Core_Helper_Abstract
|
| 4 |
+
{
|
| 5 |
+
private $_attributeId = false;
|
| 6 |
+
private $_urlKey = false;
|
| 7 |
+
|
| 8 |
+
public function getValue($productId, $store_id)
|
| 9 |
+
{
|
| 10 |
+
if(isset($this->_urlKey[$store_id]) && isset($this->_urlKey[$store_id][$productId])) {
|
| 11 |
+
return $this->_urlKey[$store_id][$productId];
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_read');
|
| 15 |
+
$tableName = Mage::getSingleton('core/resource')->getTableName('catalog_product_entity_varchar');
|
| 16 |
+
$attrbuteId = $this->_getAttributeId();
|
| 17 |
+
$query = 'SELECT `value`, `store_id` FROM ' . $tableName . ' WHERE (store_id = "'.$store_id.'" OR store_id = 0) AND attribute_id = "' . $attrbuteId . '" AND entity_id = "'. $productId .'"';
|
| 18 |
+
|
| 19 |
+
$value = $connection->fetchAll($query);
|
| 20 |
+
|
| 21 |
+
if(count($value) > 0) {
|
| 22 |
+
if(count($value) == 1) {
|
| 23 |
+
$this->_urlKey[$store_id][$productId] = $value[0]['value'];
|
| 24 |
+
} else {
|
| 25 |
+
foreach($value AS $sValue) {
|
| 26 |
+
if($sValue['store_id'] != 0) {
|
| 27 |
+
$this->_urlKey[$store_id][$productId] = $sValue['value'];
|
| 28 |
+
}
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
return $this->_urlKey[$store_id][$productId];
|
| 33 |
+
|
| 34 |
+
}
|
| 35 |
+
return false;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
private function _getAttributeId() {
|
| 39 |
+
if(!$this->_attributeId) {
|
| 40 |
+
$this->_attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('catalog_product', 'url_key');
|
| 41 |
+
}
|
| 42 |
+
return $this->_attributeId;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Core.php
ADDED
|
@@ -0,0 +1,1399 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* @copyright Copyright (C) 2016 InteraMind Ltd (Remarkety). All rights reserved.
|
| 4 |
+
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
|
| 5 |
+
* @package This file is part of Magento Connector Plugin for Remarkety
|
| 6 |
+
**/
|
| 7 |
+
|
| 8 |
+
define('REMARKETY_MGCONNECTOR_STATUS', 'STATUS');
|
| 9 |
+
define('REMARKETY_MGCONNECTOR_CALLED_STATUS', 'CALLED');
|
| 10 |
+
define('REMARKETY_MGCONNECTOR_SUCCESS_STATUS', 'SUCCESS');
|
| 11 |
+
define('REMARKETY_MGCONNECTOR_FAILED_STATUS', 'FAILED');
|
| 12 |
+
define('REMARKETY_MGCONNECTOR_ERROR', 'ERROR');
|
| 13 |
+
define('REMARKETY_MGCONNECTOR_DATA', 'DATA');
|
| 14 |
+
define('REMARKETY_MGCONNECTOR_MAGE_VERSION', 'MAGENTO_VERSION');
|
| 15 |
+
define('REMARKETY_MGCONNECTOR_EXT_VERSION', 'PLUGIN_VERSION');
|
| 16 |
+
define('REMARKETY_EXECUTION_TIME', 'EXECUTION_TIME_MS');
|
| 17 |
+
define('REMARKETY_LOG', 'remarkety_mgconnector.log');
|
| 18 |
+
define('REMARKETY_LOG_SEPARATOR', '|');
|
| 19 |
+
|
| 20 |
+
class Remarkety_Mgconnector_Model_Core extends Mage_Core_Model_Abstract {
|
| 21 |
+
|
| 22 |
+
const XPATH_CATEGORIES_TO_IGNORE = 'remarkety/mgconnector/categories-to-ignore';
|
| 23 |
+
private $_categoriesToIgnore = array();
|
| 24 |
+
|
| 25 |
+
private $configurable_product_model = null;
|
| 26 |
+
|
| 27 |
+
private $_productCache = array();
|
| 28 |
+
private $_categoryCache = array();
|
| 29 |
+
|
| 30 |
+
private $_sendLogInResponse = false;
|
| 31 |
+
private $_log = array();
|
| 32 |
+
|
| 33 |
+
private $_startTime = 0;
|
| 34 |
+
|
| 35 |
+
private $response_mask = array(
|
| 36 |
+
'customer' => array(
|
| 37 |
+
'entity_id',
|
| 38 |
+
'firstname',
|
| 39 |
+
'lastname',
|
| 40 |
+
'email',
|
| 41 |
+
'created_at',
|
| 42 |
+
'updated_at',
|
| 43 |
+
'is_active',
|
| 44 |
+
'default_billing',
|
| 45 |
+
'default_shipping',
|
| 46 |
+
'registered_to_newsletter',
|
| 47 |
+
'group_id',
|
| 48 |
+
'group_name',
|
| 49 |
+
'gender',
|
| 50 |
+
'prefix',
|
| 51 |
+
'rewards_points',
|
| 52 |
+
'store_credits',
|
| 53 |
+
'address' => array(
|
| 54 |
+
'created_at',
|
| 55 |
+
'updated_at',
|
| 56 |
+
'is_active',
|
| 57 |
+
'firstname',
|
| 58 |
+
'lastname',
|
| 59 |
+
'city',
|
| 60 |
+
'country_id',
|
| 61 |
+
'region',
|
| 62 |
+
'postcode',
|
| 63 |
+
'region_id',
|
| 64 |
+
'street',
|
| 65 |
+
'company',
|
| 66 |
+
'telephone'
|
| 67 |
+
)
|
| 68 |
+
),
|
| 69 |
+
'subscriber' => array(
|
| 70 |
+
'subscriber_id',
|
| 71 |
+
'change_status_at',
|
| 72 |
+
'customer_id',
|
| 73 |
+
'subscriber_email',
|
| 74 |
+
'subscriber_status'
|
| 75 |
+
),
|
| 76 |
+
'quote' => array(
|
| 77 |
+
'entity_id',
|
| 78 |
+
'created_at',
|
| 79 |
+
'updated_at',
|
| 80 |
+
'converted_at',
|
| 81 |
+
'customer_id',
|
| 82 |
+
'customer_is_guest',
|
| 83 |
+
'customer_email',
|
| 84 |
+
'customer_firstname',
|
| 85 |
+
'customer_lastname',
|
| 86 |
+
'is_active',
|
| 87 |
+
'grand_total',
|
| 88 |
+
'discount_amount',
|
| 89 |
+
'base_subtotal',
|
| 90 |
+
'base_subtotal_with_discount',
|
| 91 |
+
'coupon_code',
|
| 92 |
+
'quote_currency_code',
|
| 93 |
+
'customer_registered_to_newsletter',
|
| 94 |
+
'currency',
|
| 95 |
+
'checkout_url',
|
| 96 |
+
'items' => array(
|
| 97 |
+
'*' => array(
|
| 98 |
+
'item_id',
|
| 99 |
+
'parent_item_id',
|
| 100 |
+
'categories',
|
| 101 |
+
'qty',
|
| 102 |
+
'base_price',
|
| 103 |
+
'base_price_incl_tax',
|
| 104 |
+
'name',
|
| 105 |
+
'sku',
|
| 106 |
+
'created_at',
|
| 107 |
+
'updated_at',
|
| 108 |
+
'product_id',
|
| 109 |
+
'type_id',
|
| 110 |
+
'url_path'
|
| 111 |
+
)
|
| 112 |
+
)
|
| 113 |
+
),
|
| 114 |
+
'order' => array(
|
| 115 |
+
'rem_main_increment_id',
|
| 116 |
+
'increment_id',
|
| 117 |
+
'entity_id',
|
| 118 |
+
'grand_total',
|
| 119 |
+
'shipping_amount',
|
| 120 |
+
'coupon_code',
|
| 121 |
+
'created_at',
|
| 122 |
+
'updated_at',
|
| 123 |
+
'order_currency_code',
|
| 124 |
+
'customer_id',
|
| 125 |
+
'customer_is_guest',
|
| 126 |
+
'customer_email',
|
| 127 |
+
'customer_firstname',
|
| 128 |
+
'customer_lastname',
|
| 129 |
+
'customer_group_id',
|
| 130 |
+
'customer_group',
|
| 131 |
+
'state',
|
| 132 |
+
'status',
|
| 133 |
+
'address',
|
| 134 |
+
'currency',
|
| 135 |
+
'discount_amount',
|
| 136 |
+
'customer_registered_to_newsletter',
|
| 137 |
+
'payment_method',
|
| 138 |
+
'items' => array(
|
| 139 |
+
'*' => array(
|
| 140 |
+
'parent_item_id',
|
| 141 |
+
'product_id',
|
| 142 |
+
'qty_ordered',
|
| 143 |
+
'base_price',
|
| 144 |
+
'base_price_incl_tax',
|
| 145 |
+
'sku',
|
| 146 |
+
'name',
|
| 147 |
+
'created_at',
|
| 148 |
+
'updated_at',
|
| 149 |
+
'thumbnail',
|
| 150 |
+
'small_image',
|
| 151 |
+
'categories',
|
| 152 |
+
'type_id',
|
| 153 |
+
'url_path'
|
| 154 |
+
)
|
| 155 |
+
)
|
| 156 |
+
),
|
| 157 |
+
'product' => array(
|
| 158 |
+
'entity_id',
|
| 159 |
+
'sku',
|
| 160 |
+
'name',
|
| 161 |
+
'created_at',
|
| 162 |
+
'updated_at',
|
| 163 |
+
'type_id',
|
| 164 |
+
'thumbnail',
|
| 165 |
+
'is_salable',
|
| 166 |
+
'visibility',
|
| 167 |
+
'categories',
|
| 168 |
+
'small_image',
|
| 169 |
+
'price',
|
| 170 |
+
'special_price',
|
| 171 |
+
'cost',
|
| 172 |
+
'url_path',
|
| 173 |
+
'is_in_stock',
|
| 174 |
+
'parent_id'
|
| 175 |
+
)
|
| 176 |
+
);
|
| 177 |
+
|
| 178 |
+
private function _log($function, $status, $message, $data, $logLevel = null)
|
| 179 |
+
{
|
| 180 |
+
$logMsg = implode(REMARKETY_LOG_SEPARATOR, array($function, $status, $message, json_encode($data)));
|
| 181 |
+
// $force = ($status != REMARKETY_MGCONNECTOR_CALLED_STATUS);
|
| 182 |
+
if ($this->_sendLogInResponse)
|
| 183 |
+
$this->_log[] = $logLevel.": ".$logMsg;
|
| 184 |
+
Mage::log($logMsg, $logLevel, REMARKETY_LOG);
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
private function _debug($function, $status, $message, $data)
|
| 188 |
+
{
|
| 189 |
+
$logMsg = implode(REMARKETY_LOG_SEPARATOR, array($function, $status, $message, json_encode($data)));
|
| 190 |
+
// $force = ($status != REMARKETY_MGCONNECTOR_CALLED_STATUS);
|
| 191 |
+
if ($this->_sendLogInResponse)
|
| 192 |
+
$this->_log[] = Zend_Log::DEBUG.": ".$logMsg;
|
| 193 |
+
Mage::log($logMsg, Zend_Log::DEBUG, REMARKETY_LOG);
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
private function _wrapResponse($data, $status, $statusStr = null)
|
| 197 |
+
{
|
| 198 |
+
$ret = array();
|
| 199 |
+
|
| 200 |
+
$ret[REMARKETY_MGCONNECTOR_DATA] = $data;
|
| 201 |
+
$ret[REMARKETY_MGCONNECTOR_STATUS] = $status;
|
| 202 |
+
$ret[REMARKETY_MGCONNECTOR_ERROR] = $statusStr;
|
| 203 |
+
$ret[REMARKETY_MGCONNECTOR_EXT_VERSION] = (string)Mage::getConfig()->getNode()->modules->Remarkety_Mgconnector->version;
|
| 204 |
+
$ret[REMARKETY_MGCONNECTOR_MAGE_VERSION] = Mage::getVersion();
|
| 205 |
+
$ret[REMARKETY_EXECUTION_TIME] = (microtime(true) - $this->_startTime) * 1000;
|
| 206 |
+
if ($this->_sendLogInResponse)
|
| 207 |
+
$ret["log"] = $this->_log;
|
| 208 |
+
return $ret;
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
private function _store_views_in_group($group_id)
|
| 212 |
+
{
|
| 213 |
+
if (empty($group_id)) {
|
| 214 |
+
return array(-1);
|
| 215 |
+
} else {
|
| 216 |
+
$group = Mage::getModel('core/store_group')->load($group_id);
|
| 217 |
+
if (empty($group)) return array(-1);
|
| 218 |
+
|
| 219 |
+
$codes = array_keys($group->getStoreCodes());
|
| 220 |
+
return $codes;
|
| 221 |
+
}
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
private function _filter_output_data($data, $field_set = array())
|
| 225 |
+
{
|
| 226 |
+
if (empty($field_set)) return $data;
|
| 227 |
+
|
| 228 |
+
foreach (array_keys($data) as $key) {
|
| 229 |
+
if (isset($field_set[$key]) && is_array($field_set[$key])) {
|
| 230 |
+
$data[$key] = $this->_filter_output_data($data[$key], $field_set[$key]);
|
| 231 |
+
} else if (isset($field_set['*']) && is_array($field_set['*'])) {
|
| 232 |
+
$data[$key] = $this->_filter_output_data($data[$key], $field_set['*']);
|
| 233 |
+
} else {
|
| 234 |
+
if (!in_array($key, $field_set)) unset ($data[$key]);
|
| 235 |
+
}
|
| 236 |
+
}
|
| 237 |
+
return $data;
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
private function _productCategories(Mage_Catalog_Model_Product $product)
|
| 241 |
+
{
|
| 242 |
+
$categoryCollection = $product->getCategoryCollection()
|
| 243 |
+
->addAttributeToSelect('name');
|
| 244 |
+
|
| 245 |
+
$categories = array();
|
| 246 |
+
|
| 247 |
+
foreach ($categoryCollection as $category) {
|
| 248 |
+
$categoryId = $category->getId();
|
| 249 |
+
if (!in_array($categoryId, $this->_categoriesToIgnore)) {
|
| 250 |
+
if (!array_key_exists($categoryId, $this->_categoryCache)) {
|
| 251 |
+
$pathInStore = array_reverse(explode(",", $category->getPathInStore()));
|
| 252 |
+
$parentCategories = $category->getParentCategories(); // Uses a single DB query
|
| 253 |
+
$categoryTree = array();
|
| 254 |
+
foreach ($pathInStore as $parentCategoryId) {
|
| 255 |
+
foreach ($parentCategories as $parentCategory) {
|
| 256 |
+
if (!in_array($parentCategoryId, $this->_categoriesToIgnore)) {
|
| 257 |
+
if ($parentCategory->getId() == $parentCategoryId) {
|
| 258 |
+
$parentCategoryName = $parentCategory->getName();
|
| 259 |
+
if (!empty($parentCategoryName) && !in_array($parentCategoryName, $categoryTree)) {
|
| 260 |
+
$categoryTree[] = $parentCategoryName;
|
| 261 |
+
}
|
| 262 |
+
}
|
| 263 |
+
}
|
| 264 |
+
}
|
| 265 |
+
}
|
| 266 |
+
$this->_categoryCache[$categoryId] = implode(" / ", $categoryTree);
|
| 267 |
+
}
|
| 268 |
+
$categories[] = $this->_categoryCache[$categoryId];
|
| 269 |
+
}
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
return $categories;
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
private function _currencyInfo($currencyCode)
|
| 276 |
+
{
|
| 277 |
+
$currencyInfo = array(
|
| 278 |
+
'code' => Mage::app()->getLocale()->currency($currencyCode)->getShortName(),
|
| 279 |
+
'name' => Mage::app()->getLocale()->currency($currencyCode)->getName(),
|
| 280 |
+
'symbol' => Mage::app()->getLocale()->currency($currencyCode)->getSymbol()
|
| 281 |
+
);
|
| 282 |
+
|
| 283 |
+
return $currencyInfo;
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
public function __construct() {
|
| 287 |
+
$this->_startTime = microtime(true);
|
| 288 |
+
$collection = Mage::getModel('core/config_data')->getCollection();
|
| 289 |
+
$collection
|
| 290 |
+
->getSelect()
|
| 291 |
+
->where('path = ?', self::XPATH_CATEGORIES_TO_IGNORE);
|
| 292 |
+
foreach ($collection as $config) {
|
| 293 |
+
$this->_categoriesToIgnore = array_merge($this->_categoriesToIgnore, explode(",",$config->getValue()));
|
| 294 |
+
}
|
| 295 |
+
}
|
| 296 |
+
|
| 297 |
+
public function getSubscribers($mage_store_view_id = null, $limit = null, $page = null, $sinceId = null) {
|
| 298 |
+
register_shutdown_function('handleShutdown');
|
| 299 |
+
$ret = array();
|
| 300 |
+
$pageNumber = null;
|
| 301 |
+
$pageSize = null;
|
| 302 |
+
$myArgs = func_get_args();
|
| 303 |
+
try {
|
| 304 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 305 |
+
$ret = array();
|
| 306 |
+
$subscriberCollection = Mage::getModel('newsletter/subscriber')
|
| 307 |
+
->getCollection()
|
| 308 |
+
->addOrder('subscriber_id', 'ASC');
|
| 309 |
+
|
| 310 |
+
// Get only subscribers who are not shoppers
|
| 311 |
+
$subscriberCollection->addFieldToFilter('customer_id', array('eq' => 0));
|
| 312 |
+
|
| 313 |
+
$store_views = $this->_store_views_in_group($mage_store_view_id);
|
| 314 |
+
$subscriberCollection->addFieldToFilter('store_id', array('in' => $store_views));
|
| 315 |
+
if ($limit != null) {
|
| 316 |
+
$pageNumber = 1; // Note that page numbers begin at 1 in Magento
|
| 317 |
+
$pageSize = $limit;
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
if ($page != null) {
|
| 321 |
+
if (!is_null($pageSize)) {
|
| 322 |
+
$pageNumber = $page + 1; // Note that page numbers begin at 1 in Magento
|
| 323 |
+
}
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
if (!is_null($pageSize)) {
|
| 327 |
+
$subscriberCollection->setPageSize($pageSize)
|
| 328 |
+
->setCurPage($pageNumber);
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
if (!empty($sinceId)) {
|
| 332 |
+
$subscriberCollection->addFieldToFilter('subscriber_id', array('gt' => (int)$sinceId));
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
foreach ($subscriberCollection as $subscriber) {
|
| 336 |
+
$subscriberData = $subscriber->toArray();
|
| 337 |
+
|
| 338 |
+
$subscriberData = $this->_filter_output_data($subscriberData, $this->response_mask['subscriber']);
|
| 339 |
+
$ret[] = $subscriberData;
|
| 340 |
+
}
|
| 341 |
+
|
| 342 |
+
|
| 343 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 344 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 345 |
+
} catch (Mage_Core_Exception $e) {
|
| 346 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 347 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 348 |
+
} catch (Exception $e) {
|
| 349 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 350 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 351 |
+
}
|
| 352 |
+
}
|
| 353 |
+
|
| 354 |
+
public function getSubscriberCount($mage_store_view_id)
|
| 355 |
+
{
|
| 356 |
+
register_shutdown_function('handleShutdown');
|
| 357 |
+
$myArgs = func_get_args();
|
| 358 |
+
|
| 359 |
+
try {
|
| 360 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 361 |
+
$store_views = $this->_store_views_in_group($mage_store_view_id);
|
| 362 |
+
|
| 363 |
+
$subscriberCollection = Mage::getModel('newsletter/subscriber')
|
| 364 |
+
->getCollection();
|
| 365 |
+
|
| 366 |
+
// Get only subscribers who are not shoppers
|
| 367 |
+
$subscriberCollection->addFieldToFilter('customer_id', array('eq' => 0));
|
| 368 |
+
|
| 369 |
+
$store_views = $this->_store_views_in_group($mage_store_view_id);
|
| 370 |
+
$subscriberCollection->addFieldToFilter('store_id', array('in' => $store_views));
|
| 371 |
+
|
| 372 |
+
$count = $subscriberCollection->getSize();
|
| 373 |
+
$ret = array('count' => $count);
|
| 374 |
+
|
| 375 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 376 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 377 |
+
} catch (Mage_Core_Exception $e) {
|
| 378 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 379 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 380 |
+
} catch (Exception $e) {
|
| 381 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 382 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 383 |
+
}
|
| 384 |
+
}
|
| 385 |
+
|
| 386 |
+
|
| 387 |
+
public function getCustomers(
|
| 388 |
+
$mage_store_view_id,
|
| 389 |
+
$updated_at_min = null,
|
| 390 |
+
$updated_at_max = null,
|
| 391 |
+
$limit = null,
|
| 392 |
+
$page = null,
|
| 393 |
+
$since_id = null)
|
| 394 |
+
{
|
| 395 |
+
register_shutdown_function('handleShutdown');
|
| 396 |
+
$ret = array();
|
| 397 |
+
$pageNumber = null;
|
| 398 |
+
$pageSize = null;
|
| 399 |
+
$myArgs = func_get_args();
|
| 400 |
+
|
| 401 |
+
try {
|
| 402 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 403 |
+
$customersCollection = Mage::getModel("customer/customer")
|
| 404 |
+
->getCollection()
|
| 405 |
+
->addOrder('updated_at', 'ASC')
|
| 406 |
+
->addAttributeToSelect('*');
|
| 407 |
+
|
| 408 |
+
|
| 409 |
+
// $customersCollection->addFieldToFilter('store_id', array('eq' => $mage_store_view_id));
|
| 410 |
+
|
| 411 |
+
$store = Mage::getModel('core/store')->load($mage_store_view_id);
|
| 412 |
+
$name= $store->getName();
|
| 413 |
+
// $viewName = Mage::getModel(""); XXX
|
| 414 |
+
$customersCollection->addFieldToFilter('store_id', array('eq' => $mage_store_view_id)); //$mage_store_id));
|
| 415 |
+
if ($updated_at_min != null) {
|
| 416 |
+
$customersCollection->addAttributeToFilter('updated_at', array('gt' => $updated_at_min));
|
| 417 |
+
}
|
| 418 |
+
|
| 419 |
+
if ($updated_at_max != null) {
|
| 420 |
+
$customersCollection->addAttributeToFilter('updated_at', array('lt' => $updated_at_max));
|
| 421 |
+
}
|
| 422 |
+
|
| 423 |
+
if ($since_id != null) {
|
| 424 |
+
$customersCollection->addAttributeToFilter('entity_id', array('gt' => $since_id));
|
| 425 |
+
}
|
| 426 |
+
|
| 427 |
+
if ($limit != null) {
|
| 428 |
+
$pageNumber = 1; // Note that page numbers begin at 1 in Magento
|
| 429 |
+
$pageSize = $limit;
|
| 430 |
+
}
|
| 431 |
+
|
| 432 |
+
if ($page != null) {
|
| 433 |
+
if (!is_null($pageSize)) {
|
| 434 |
+
$pageNumber = $page + 1; // Note that page numbers begin at 1 in Magento
|
| 435 |
+
}
|
| 436 |
+
}
|
| 437 |
+
|
| 438 |
+
if (!is_null($pageSize)) {
|
| 439 |
+
$customersCollection->setPage($pageNumber, $pageSize);
|
| 440 |
+
}
|
| 441 |
+
|
| 442 |
+
$subscriberModel = Mage::getModel("newsletter/subscriber");
|
| 443 |
+
$groupModel = Mage::getModel("customer/group");
|
| 444 |
+
|
| 445 |
+
/**
|
| 446 |
+
*
|
| 447 |
+
* Special code to exclude Amazon's group shoppers
|
| 448 |
+
* You can un-comment this code and change the group name ("amazon") to fit your needs
|
| 449 |
+
*/
|
| 450 |
+
/*
|
| 451 |
+
$ignoredGroupIds = $this->getIgnoredGroupIds("amazon");
|
| 452 |
+
if (!empty($ignoredGroupIds))
|
| 453 |
+
$customersCollection->addAttributeToFilter("group_id", array("nin"=>$ignoredGroupIds));
|
| 454 |
+
*/
|
| 455 |
+
|
| 456 |
+
foreach ($customersCollection as $customer) {
|
| 457 |
+
$customerData = $customer->toArray();
|
| 458 |
+
|
| 459 |
+
$subscriberModel->loadByCustomer($customer);
|
| 460 |
+
$customerData['registered_to_newsletter'] = $subscriberModel->isSubscribed();
|
| 461 |
+
|
| 462 |
+
$groupModel->load($customer->getGroupId());
|
| 463 |
+
$groupName = $groupModel->getCustomerGroupCode();
|
| 464 |
+
$customerData ['group_name'] = $groupName;
|
| 465 |
+
$customerData ['group_id'] = $customer->getGroupId();
|
| 466 |
+
|
| 467 |
+
$addresses_coll = $customer->getAddressesCollection();
|
| 468 |
+
$addresses_array = $addresses_coll->toArray();
|
| 469 |
+
|
| 470 |
+
if (is_array($addresses_array) && !empty($addresses_array)) {
|
| 471 |
+
if (in_array('default_billing', $customerData) && array_key_exists($customerData['default_billing'], $addresses_array)) {
|
| 472 |
+
$customerData['address_origin'] = 'billing';
|
| 473 |
+
$customerData['address'] = $addresses_array[$customerData['default_billing']];
|
| 474 |
+
} else if (in_array('default_shipping', $customerData) && array_key_exists($customerData['default_shipping'], $addresses_array)) {
|
| 475 |
+
$customerData['address_origin'] = 'shipping';
|
| 476 |
+
$customerData['address'] = $addresses_array[$customerData['default_shipping']];
|
| 477 |
+
} else {
|
| 478 |
+
$customerData['address_origin'] = 'first';
|
| 479 |
+
$customerData['address'] = array_shift($addresses_array);
|
| 480 |
+
}
|
| 481 |
+
}
|
| 482 |
+
|
| 483 |
+
$customerData = $this->_filter_output_data($customerData, $this->response_mask['customer']);
|
| 484 |
+
$ret[] = $customerData;
|
| 485 |
+
}
|
| 486 |
+
|
| 487 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 488 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 489 |
+
} catch (Mage_Core_Exception $e) {
|
| 490 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 491 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 492 |
+
} catch (Exception $e) {
|
| 493 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 494 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 495 |
+
}
|
| 496 |
+
}
|
| 497 |
+
|
| 498 |
+
public function getOrders(
|
| 499 |
+
$mage_store_view_id,
|
| 500 |
+
$updated_at_min = null,
|
| 501 |
+
$updated_at_max = null,
|
| 502 |
+
$limit = null,
|
| 503 |
+
$page = null,
|
| 504 |
+
$since_id = null,
|
| 505 |
+
$created_at_min = null,
|
| 506 |
+
$created_at_max = null,
|
| 507 |
+
$order_status = null, // not implemented
|
| 508 |
+
$order_id = null
|
| 509 |
+
)
|
| 510 |
+
{
|
| 511 |
+
|
| 512 |
+
register_shutdown_function('handleShutdown');
|
| 513 |
+
$orders = array();
|
| 514 |
+
$pageNumber = null;
|
| 515 |
+
$pageSize = null;
|
| 516 |
+
$myArgs = func_get_args();
|
| 517 |
+
|
| 518 |
+
try {
|
| 519 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 520 |
+
$ordersCollection = Mage::getModel("sales/order")
|
| 521 |
+
->getCollection()
|
| 522 |
+
->addOrder('updated_at', 'ASC')
|
| 523 |
+
->addAttributeToSelect('*');
|
| 524 |
+
|
| 525 |
+
// $store_views = $this->_store_views_in_group($mage_store_view_id);
|
| 526 |
+
// $ordersCollection->addFieldToFilter('store_id', array('in' => $store_views));
|
| 527 |
+
$ordersCollection->addFieldToFilter('main_table.store_id', array('eq' => $mage_store_view_id));
|
| 528 |
+
if ($updated_at_min != null) {
|
| 529 |
+
$ordersCollection->addAttributeToFilter('main_table.updated_at', array('gt' => $updated_at_min));
|
| 530 |
+
}
|
| 531 |
+
|
| 532 |
+
if ($updated_at_max != null) {
|
| 533 |
+
$ordersCollection->addAttributeToFilter('main_table.updated_at', array('lt' => $updated_at_max));
|
| 534 |
+
}
|
| 535 |
+
|
| 536 |
+
if ($since_id != null) {
|
| 537 |
+
$ordersCollection->addAttributeToFilter('main_table.entity_id', array('gt' => $since_id));
|
| 538 |
+
}
|
| 539 |
+
|
| 540 |
+
if ($created_at_min != null) {
|
| 541 |
+
$ordersCollection->addAttributeToFilter('main_table.created_at', array('gt' => $created_at_min));
|
| 542 |
+
}
|
| 543 |
+
|
| 544 |
+
if ($created_at_max != null) {
|
| 545 |
+
$ordersCollection->addAttributeToFilter('main_table.created_at', array('lt' => $created_at_max));
|
| 546 |
+
}
|
| 547 |
+
|
| 548 |
+
if ($order_id != null) {
|
| 549 |
+
$ordersCollection->addAttributeToFilter('main_table.entity_id', $order_id);
|
| 550 |
+
}
|
| 551 |
+
|
| 552 |
+
if ($limit != null) {
|
| 553 |
+
$pageNumber = 1; // Note that page numbers begin at 1
|
| 554 |
+
$pageSize = $limit;
|
| 555 |
+
}
|
| 556 |
+
|
| 557 |
+
if ($page != null) {
|
| 558 |
+
if (!is_null($pageSize)) {
|
| 559 |
+
$pageNumber = $page + 1; // Note that page numbers begin at 1
|
| 560 |
+
}
|
| 561 |
+
}
|
| 562 |
+
|
| 563 |
+
if (!is_null($pageSize)) {
|
| 564 |
+
$ordersCollection->setPage($pageNumber, $pageSize);
|
| 565 |
+
}
|
| 566 |
+
|
| 567 |
+
$subscriberModel = Mage::getModel("newsletter/subscriber");
|
| 568 |
+
$groupModel = Mage::getModel("customer/group");
|
| 569 |
+
|
| 570 |
+
/**
|
| 571 |
+
* Special code to exclude Amazon's group shoppers
|
| 572 |
+
* You can un-comment this code and change the group name ("amazon") to fit your needs
|
| 573 |
+
*/
|
| 574 |
+
/*
|
| 575 |
+
$ignoredGroupIds = $this->getIgnoredGroupIds("amazon");
|
| 576 |
+
if (!empty($ignoredGroupIds))
|
| 577 |
+
$ordersCollection->addAttributeToFilter("customer_group_id", array("nin"=>$ignoredGroupIds));
|
| 578 |
+
*/
|
| 579 |
+
|
| 580 |
+
$productIdsToLoad = array();
|
| 581 |
+
$orderIds = array();
|
| 582 |
+
|
| 583 |
+
foreach ($ordersCollection as $order) {
|
| 584 |
+
$orderData = $order->toArray();
|
| 585 |
+
if (!empty($orderData['relation_child_id'])) {
|
| 586 |
+
continue;
|
| 587 |
+
}
|
| 588 |
+
$orderIds[] = $orderData['entity_id'];
|
| 589 |
+
$orderData['rem_main_increment_id'] = (empty($orderData['original_increment_id'])) ? $orderData['increment_id'] : $orderData['original_increment_id'];
|
| 590 |
+
$orderData['currency'] = $this->_currencyInfo($orderData['order_currency_code']);
|
| 591 |
+
|
| 592 |
+
$subscriberModel->loadByEmail($orderData['customer_email']);
|
| 593 |
+
$orderData['customer_registered_to_newsletter'] = $subscriberModel->isSubscribed();
|
| 594 |
+
|
| 595 |
+
$addressID = null;
|
| 596 |
+
|
| 597 |
+
if (isset($orderData['billing_address_id']) && $orderData['billing_address_id']) {
|
| 598 |
+
$addressID = $orderData['billing_address_id'];
|
| 599 |
+
} elseif (isset($orderData['shipping_address_id']) && $orderData['shipping_address_id']) {
|
| 600 |
+
$addressID = $orderData['shipping_address_id'];
|
| 601 |
+
}
|
| 602 |
+
|
| 603 |
+
if (!empty($addressID)) {
|
| 604 |
+
$address = Mage::getModel('sales/order_address')->load($addressID)->toArray();
|
| 605 |
+
$orderData['address'] = $address;
|
| 606 |
+
}
|
| 607 |
+
|
| 608 |
+
$storeUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
| 609 |
+
|
| 610 |
+
$itemsCollection = $order->getItemsCollection();
|
| 611 |
+
// $itemsCollection->join(
|
| 612 |
+
//
|
| 613 |
+
// );
|
| 614 |
+
// $itemsCollection = $order->getAllVisibleItems();
|
| 615 |
+
|
| 616 |
+
foreach ($itemsCollection as $item) {
|
| 617 |
+
$product = null;
|
| 618 |
+
|
| 619 |
+
try {
|
| 620 |
+
$itemData = $item->toArray();
|
| 621 |
+
$productIdsToLoad[] = $itemData['product_id'];
|
| 622 |
+
/* The item data is loaded later and populated for performance reasons - get all the products at once instead of one-by-one in a loop */
|
| 623 |
+
$orderData['items'][$itemData['item_id']] = $itemData;
|
| 624 |
+
|
| 625 |
+
} catch (Exception $e) {
|
| 626 |
+
$this->_log(__FUNCTION__, 'Error in handling order items for order ID '.$orderData['entity_id'], $e->getMessage(), $myArgs);
|
| 627 |
+
}
|
| 628 |
+
}
|
| 629 |
+
|
| 630 |
+
$groupModel->load($orderData['customer_group_id']);
|
| 631 |
+
$groupName = $groupModel->getCustomerGroupCode();
|
| 632 |
+
$orderData['customer_group'] = $groupName;
|
| 633 |
+
|
| 634 |
+
|
| 635 |
+
$orders[] = $orderData;
|
| 636 |
+
}
|
| 637 |
+
|
| 638 |
+
//load all payment methods at once
|
| 639 |
+
$paymentMethods = $this->loadPaymentMethods($orderIds);
|
| 640 |
+
|
| 641 |
+
// Load the products all at once and populate the items
|
| 642 |
+
$this->loadProducts($mage_store_view_id, $productIdsToLoad);
|
| 643 |
+
|
| 644 |
+
$ret = array();
|
| 645 |
+
foreach ($orders as &$orderData) {
|
| 646 |
+
if (array_key_exists('items', $orderData)) {
|
| 647 |
+
foreach ($orderData['items'] as &$itemData) {
|
| 648 |
+
$product = $this->loadProduct($itemData['product_id']);
|
| 649 |
+
if (empty($product)) {
|
| 650 |
+
$this->debug("Could not load product, productID: ".$itemData['product_id']);
|
| 651 |
+
continue;
|
| 652 |
+
}
|
| 653 |
+
|
| 654 |
+
// $product->setStoreId($mage_store_view_id)->load($product->getId());
|
| 655 |
+
$itemData['thumbnail'] = $this->getImageUrl($product, 'image', $mage_store_view_id);
|
| 656 |
+
//$itemData['small_image'] = $this->getImageUrl($product, 'thumbnail', $mage_store_view_id);
|
| 657 |
+
$itemData['name'] = $this->getProductName($product, $mage_store_view_id);
|
| 658 |
+
|
| 659 |
+
$itemData['type_id'] = $product->getData('type_id');
|
| 660 |
+
//$itemData['categories'] = $this->_productCategories($product);
|
| 661 |
+
$prodUrl = $this->getProdUrl($product, $storeUrl, $mage_store_view_id);
|
| 662 |
+
$itemData['url_path'] = $prodUrl;
|
| 663 |
+
}
|
| 664 |
+
}
|
| 665 |
+
//set payment method
|
| 666 |
+
if(!empty($orderData['entity_id'])){
|
| 667 |
+
if(isset($paymentMethods[$orderData['entity_id']])){
|
| 668 |
+
$orderData['payment_method'] = $paymentMethods[$orderData['entity_id']];
|
| 669 |
+
}
|
| 670 |
+
}
|
| 671 |
+
$ret[] = $this->_filter_output_data($orderData, $this->response_mask['order']);
|
| 672 |
+
}
|
| 673 |
+
|
| 674 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 675 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 676 |
+
} catch (Mage_Core_Exception $e) {
|
| 677 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 678 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 679 |
+
} catch (Exception $e) {
|
| 680 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 681 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 682 |
+
}
|
| 683 |
+
}
|
| 684 |
+
|
| 685 |
+
public function getQuotes(
|
| 686 |
+
$mage_store_view_id,
|
| 687 |
+
$updated_at_min = null,
|
| 688 |
+
$updated_at_max = null,
|
| 689 |
+
$limit = null,
|
| 690 |
+
$page = null,
|
| 691 |
+
$since_id = null)
|
| 692 |
+
{
|
| 693 |
+
register_shutdown_function('handleShutdown');
|
| 694 |
+
$pageNumber = null;
|
| 695 |
+
$pageSize = null;
|
| 696 |
+
$ret = array();
|
| 697 |
+
$myArgs = func_get_args();
|
| 698 |
+
|
| 699 |
+
try {
|
| 700 |
+
$quotesCollection = Mage::getResourceModel('reports/quote_collection');
|
| 701 |
+
|
| 702 |
+
// $quotesCollection->prepareForAbandonedReport($this->_storeIds);
|
| 703 |
+
$quotesCollection->addFieldToFilter('items_count', array('neq' => '0'))
|
| 704 |
+
->addFieldToFilter('main_table.is_active', '1')
|
| 705 |
+
->addSubtotal($this->_storeIds, null)
|
| 706 |
+
//->addCustomerData($filter)
|
| 707 |
+
->setOrder('updated_at');
|
| 708 |
+
if (is_array($this->_storeIds)) {
|
| 709 |
+
$this->addFieldToFilter('store_id', array('in' => $this->_storeIds));
|
| 710 |
+
}
|
| 711 |
+
|
| 712 |
+
if ($updated_at_min != null) {
|
| 713 |
+
$quotesCollection->addFieldToFilter('main_table.updated_at', array('gt' => $updated_at_min));
|
| 714 |
+
}
|
| 715 |
+
|
| 716 |
+
if ($updated_at_max != null) {
|
| 717 |
+
$quotesCollection->addFieldToFilter('main_table.updated_at', array('lt' => $updated_at_max));
|
| 718 |
+
}
|
| 719 |
+
|
| 720 |
+
if ($since_id != null) {
|
| 721 |
+
$quotesCollection->addFieldToFilter('main_table.entity_id', array('gt' => $since_id));
|
| 722 |
+
}
|
| 723 |
+
|
| 724 |
+
if ($limit != null) {
|
| 725 |
+
$pageNumber = 1; // Note that page numbers begin at 1
|
| 726 |
+
$pageSize = $limit;
|
| 727 |
+
}
|
| 728 |
+
|
| 729 |
+
if ($page != null) {
|
| 730 |
+
if (!is_null($pageSize)) {
|
| 731 |
+
$pageNumber = $page + 1; // Note that page numbers begin at 1
|
| 732 |
+
}
|
| 733 |
+
}
|
| 734 |
+
|
| 735 |
+
if (!is_null($pageSize)){
|
| 736 |
+
$quotesCollection->setPageSize($pageSize)->setCurPage($pageNumber);
|
| 737 |
+
}
|
| 738 |
+
|
| 739 |
+
//$storeUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
| 740 |
+
$this->_debug(__FUNCTION__, " collection SQL: ".$quotesCollection->getSelect()->__toString(), null, null);
|
| 741 |
+
|
| 742 |
+
foreach ($quotesCollection as $quote) {
|
| 743 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, "inside carts loop", null);
|
| 744 |
+
$quoteData = $quote->toArray();
|
| 745 |
+
|
| 746 |
+
if (empty($quoteData['customer_email']))
|
| 747 |
+
continue;
|
| 748 |
+
|
| 749 |
+
$currency = $quoteData['quote_currency_code'];
|
| 750 |
+
$quoteData['currency'] = $this->_currencyInfo($currency);
|
| 751 |
+
|
| 752 |
+
$quoteData['checkout_url'] = $this->getCartRecoveryURL($quoteData['entity_id']);
|
| 753 |
+
|
| 754 |
+
foreach ($quote->getItemsCollection() as $item) {
|
| 755 |
+
$quoteItem = array();
|
| 756 |
+
|
| 757 |
+
foreach ($this->response_mask['quote']['items']['*'] as $field) {
|
| 758 |
+
$quoteItem[$field] = $item->getData($field);
|
| 759 |
+
}
|
| 760 |
+
$_product = $this->loadProduct($quoteItem['product_id']);
|
| 761 |
+
//$_product->setStoreId($mage_store_view_id);
|
| 762 |
+
if (!empty($_product)) {
|
| 763 |
+
$quoteItem['type_id'] = $_product->getData('type_id');
|
| 764 |
+
}
|
| 765 |
+
|
| 766 |
+
//$quoteItem['categories'] = $this->_productCategories($_product);
|
| 767 |
+
//$prodUrl = $this->getProdUrl($_product, $storeUrl, $mage_store_view_id);
|
| 768 |
+
//$quoteItem['url_path'] = $prodUrl;
|
| 769 |
+
|
| 770 |
+
$quoteData['items'][$quoteItem['item_id']] = $quoteItem;
|
| 771 |
+
}
|
| 772 |
+
|
| 773 |
+
$quoteData = $this->_filter_output_data($quoteData, $this->response_mask['quote']);
|
| 774 |
+
if (!empty($quoteData['items'])) {
|
| 775 |
+
$ret[] = $quoteData;
|
| 776 |
+
}
|
| 777 |
+
}
|
| 778 |
+
|
| 779 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 780 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 781 |
+
} catch (Mage_Core_Exception $e) {
|
| 782 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 783 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 784 |
+
} catch (Exception $e) {
|
| 785 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 786 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 787 |
+
}
|
| 788 |
+
}
|
| 789 |
+
|
| 790 |
+
public function getProducts(
|
| 791 |
+
$mage_store_id,
|
| 792 |
+
$updated_at_min = null,
|
| 793 |
+
$updated_at_max = null,
|
| 794 |
+
$limit = null,
|
| 795 |
+
$page = null,
|
| 796 |
+
$handle = null, // Not implemented
|
| 797 |
+
$vendor = null, // Not implemented
|
| 798 |
+
$product_type = null, // Not implemented
|
| 799 |
+
$collection_id = null, // Not implemented
|
| 800 |
+
$since_id = null,
|
| 801 |
+
$created_at_min = null,
|
| 802 |
+
$created_at_max = null,
|
| 803 |
+
$published_status = null, // Not implemented
|
| 804 |
+
$product_id = null)
|
| 805 |
+
{
|
| 806 |
+
|
| 807 |
+
register_shutdown_function('handleShutdown');
|
| 808 |
+
$pageNumber = null;
|
| 809 |
+
$pageSize = null;
|
| 810 |
+
$ret = array();
|
| 811 |
+
$myArgs = func_get_args();
|
| 812 |
+
|
| 813 |
+
try {
|
| 814 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 815 |
+
$productsCollection = Mage::getModel("catalog/product")
|
| 816 |
+
->getCollection()
|
| 817 |
+
->setStoreId($mage_store_id)
|
| 818 |
+
->applyFrontendPriceLimitations()
|
| 819 |
+
->addOrder('updated_at', 'ASC')
|
| 820 |
+
->addFinalPrice()
|
| 821 |
+
->addCategoryIds()
|
| 822 |
+
// ->addUrlRewrite()
|
| 823 |
+
->addAttributeToSelect('*');
|
| 824 |
+
|
| 825 |
+
if ($updated_at_min != null) {
|
| 826 |
+
$productsCollection->addAttributeToFilter('updated_at', array('gt' => $updated_at_min));
|
| 827 |
+
}
|
| 828 |
+
|
| 829 |
+
if ($updated_at_max != null) {
|
| 830 |
+
$productsCollection->addAttributeToFilter('updated_at', array('lt' => $updated_at_max));
|
| 831 |
+
}
|
| 832 |
+
|
| 833 |
+
if ($since_id != null) {
|
| 834 |
+
$productsCollection->addAttributeToFilter('entity_id', array('gt' => $since_id));
|
| 835 |
+
}
|
| 836 |
+
|
| 837 |
+
if ($created_at_min != null) {
|
| 838 |
+
$productsCollection->addAttributeToFilter('created_at', array('gt' => $created_at_min));
|
| 839 |
+
}
|
| 840 |
+
|
| 841 |
+
if ($created_at_max != null) {
|
| 842 |
+
$productsCollection->addAttributeToFilter('created_at', array('lt' => $created_at_max));
|
| 843 |
+
}
|
| 844 |
+
|
| 845 |
+
if ($product_id != null) {
|
| 846 |
+
$productsCollection->addAttributeToFilter('entity_id', $product_id);
|
| 847 |
+
}
|
| 848 |
+
|
| 849 |
+
if ($limit != null) {
|
| 850 |
+
$pageNumber = 1; // Note that page numbers begin at 1
|
| 851 |
+
$pageSize = $limit;
|
| 852 |
+
}
|
| 853 |
+
|
| 854 |
+
if ($page != null) {
|
| 855 |
+
if (!is_null($pageSize)) {
|
| 856 |
+
$pageNumber = $page + 1; // Note that page numbers begin at 1
|
| 857 |
+
}
|
| 858 |
+
}
|
| 859 |
+
|
| 860 |
+
if (!is_null($pageSize)) $productsCollection->setPage($pageNumber, $pageSize);
|
| 861 |
+
|
| 862 |
+
$storeUrl = Mage::app()->getStore($mage_store_id)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB, true);
|
| 863 |
+
|
| 864 |
+
$productIds = array();
|
| 865 |
+
foreach ($productsCollection as $product) {
|
| 866 |
+
$productIds[] = $product->getId();
|
| 867 |
+
}
|
| 868 |
+
$this->loadProducts($mage_store_id, $productIds);
|
| 869 |
+
|
| 870 |
+
foreach ($productsCollection as $product) {
|
| 871 |
+
// $product->setStoreId($mage_store_view_id)->load($product->getId());
|
| 872 |
+
$productData = $product->toArray();
|
| 873 |
+
$productData['thumbnail'] = $this->getImageUrl($product, 'image', $mage_store_id);
|
| 874 |
+
|
| 875 |
+
$productData['categories'] = $this->_productCategories($product);
|
| 876 |
+
$productData['price'] = $product->getFinalPrice();
|
| 877 |
+
|
| 878 |
+
$prodUrl = $this->getProdUrl($product, $storeUrl, $mage_store_id);
|
| 879 |
+
$productData['url_path'] = $prodUrl;
|
| 880 |
+
$productData['name'] = $this->getProductName($product, $mage_store_id);
|
| 881 |
+
$productData['is_salable'] = $product->isSalable();
|
| 882 |
+
$productData['visibility'] = $product->getVisibility();
|
| 883 |
+
|
| 884 |
+
/*
|
| 885 |
+
VISIBILITY_BOTH = 4
|
| 886 |
+
VISIBILITY_IN_CATALOG = 2
|
| 887 |
+
VISIBILITY_IN_SEARCH = 3
|
| 888 |
+
VISIBILITY_NOT_VISIBLE = 1
|
| 889 |
+
*/
|
| 890 |
+
|
| 891 |
+
$parent_id = $this->getProductParentId($product);
|
| 892 |
+
if($parent_id !== false){
|
| 893 |
+
$productData['parent_id'] = $parent_id;
|
| 894 |
+
}
|
| 895 |
+
|
| 896 |
+
$productData = $this->_filter_output_data($productData, $this->response_mask['product']);
|
| 897 |
+
$ret[] = $productData;
|
| 898 |
+
}
|
| 899 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 900 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 901 |
+
} catch (Mage_Core_Exception $e) {
|
| 902 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 903 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 904 |
+
} catch (Exception $e) {
|
| 905 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 906 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 907 |
+
}
|
| 908 |
+
}
|
| 909 |
+
|
| 910 |
+
private function getCategories($product) {
|
| 911 |
+
$categories = array();
|
| 912 |
+
$categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
|
| 913 |
+
foreach ($categoryCollection as $category) {
|
| 914 |
+
$categories[] = $category->getPath(); //getData('name');
|
| 915 |
+
}
|
| 916 |
+
return $categories;
|
| 917 |
+
}
|
| 918 |
+
|
| 919 |
+
public function getStoreSettings($mage_store_view_id = null)
|
| 920 |
+
{
|
| 921 |
+
register_shutdown_function('handleShutdown');
|
| 922 |
+
$myArgs = func_get_args();
|
| 923 |
+
|
| 924 |
+
try {
|
| 925 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 926 |
+
|
| 927 |
+
$currency = Mage::getStoreConfig('currency/options/default', $mage_store_view_id);
|
| 928 |
+
$currencySymbol = Mage::app()->getLocale()->currency($currency)->getSymbol();
|
| 929 |
+
$currencyFormat = Mage::getModel("directory/currency")->load($currency)->getOutputFormat();
|
| 930 |
+
$storeName = Mage::getStoreConfig('general/store_information/name', $mage_store_view_id);
|
| 931 |
+
|
| 932 |
+
$storeView = Mage::getModel('core/store');
|
| 933 |
+
$storeView->load($mage_store_view_id);
|
| 934 |
+
$storeGroup = $storeView->getGroup();
|
| 935 |
+
$storeViewName = $storeView->name;
|
| 936 |
+
$storeGroupName = $storeGroup->name;
|
| 937 |
+
|
| 938 |
+
if (empty($storeName)) {
|
| 939 |
+
$storeName = $storeGroupName;
|
| 940 |
+
}
|
| 941 |
+
$baseUrl = Mage::getStoreConfig('web/unsecure/base_url', $mage_store_view_id);
|
| 942 |
+
$storeUrl = $storeView->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
|
| 943 |
+
$ret = array(
|
| 944 |
+
'domain' => $baseUrl,
|
| 945 |
+
'storeFrontUrl' => $storeUrl,
|
| 946 |
+
'name' => $storeName,
|
| 947 |
+
'viewName' => $storeViewName,
|
| 948 |
+
'phone' => Mage::getStoreConfig('general/store_information/phone', $mage_store_view_id),
|
| 949 |
+
'contactEmail' => Mage::getStoreConfig('contacts/email/recipient_email', $mage_store_view_id),
|
| 950 |
+
'timezone' => Mage::getStoreConfig('general/locale/timezone', $mage_store_view_id),
|
| 951 |
+
'locale' => Mage::getStoreConfig('general/locale/code', $mage_store_view_id),
|
| 952 |
+
'address' => Mage::getStoreConfig('general/store_information/address', $mage_store_view_id),
|
| 953 |
+
'country' => Mage::getStoreConfig('general/store_information/merchant_country', $mage_store_view_id),
|
| 954 |
+
'currency' => $currency,
|
| 955 |
+
'money_format' => $currencySymbol,
|
| 956 |
+
'money_with_currency_format' => $currencyFormat
|
| 957 |
+
);
|
| 958 |
+
|
| 959 |
+
$wsCollection = Mage::getModel("core/website")->getCollection();
|
| 960 |
+
foreach ($wsCollection as $ws) {
|
| 961 |
+
$websiteArr = $ws->toArray();
|
| 962 |
+
$groups = $ws->getGroupCollection();
|
| 963 |
+
foreach ($groups as $group) {
|
| 964 |
+
$groupArr = $group->toArray();
|
| 965 |
+
$stores = $group->getStoreCollection();
|
| 966 |
+
foreach ($stores as $store) {
|
| 967 |
+
$groupArr['views'][] = $store->toArray();
|
| 968 |
+
}
|
| 969 |
+
$websiteArr['groups'][] = $groupArr;
|
| 970 |
+
}
|
| 971 |
+
$ret['websites'][] = $websiteArr;
|
| 972 |
+
}
|
| 973 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 974 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 975 |
+
} catch (Mage_Core_Exception $e) {
|
| 976 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 977 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 978 |
+
} catch (Exception $e) {
|
| 979 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 980 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 981 |
+
}
|
| 982 |
+
}
|
| 983 |
+
|
| 984 |
+
public function getStoreOrderStatuses($mage_store_view_id)
|
| 985 |
+
{
|
| 986 |
+
register_shutdown_function('handleShutdown');
|
| 987 |
+
$myArgs = func_get_args();
|
| 988 |
+
|
| 989 |
+
try {
|
| 990 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 991 |
+
$statusesCollection = Mage::getModel('sales/order_status')->getCollection();
|
| 992 |
+
$ret = array();
|
| 993 |
+
foreach ($statusesCollection as $status) {
|
| 994 |
+
$newStat = array();
|
| 995 |
+
$newStat['status'] = $status->getData('status');
|
| 996 |
+
$newStat['label'] = $status->getStoreLabel($mage_store_view_id);
|
| 997 |
+
$ret[] = $newStat;
|
| 998 |
+
}
|
| 999 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 1000 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 1001 |
+
} catch (Mage_Core_Exception $e) {
|
| 1002 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1003 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1004 |
+
} catch (Exception $e) {
|
| 1005 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1006 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1007 |
+
}
|
| 1008 |
+
}
|
| 1009 |
+
|
| 1010 |
+
|
| 1011 |
+
public function createCoupon($rule_id, $coupon_code, $expiration_date = null)
|
| 1012 |
+
{
|
| 1013 |
+
register_shutdown_function('handleShutdown');
|
| 1014 |
+
$myArgs = func_get_args();
|
| 1015 |
+
|
| 1016 |
+
try {
|
| 1017 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 1018 |
+
$rule = Mage::getModel('salesrule/rule')->load($rule_id);
|
| 1019 |
+
|
| 1020 |
+
if (empty($rule)) {
|
| 1021 |
+
$msg = 'Given promotion ID does not exist';
|
| 1022 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg, $myArgs);
|
| 1023 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg);
|
| 1024 |
+
}
|
| 1025 |
+
|
| 1026 |
+
if (!($rule->getUseAutoGeneration())) {
|
| 1027 |
+
$msg = 'Promotion not configured for multiple coupons generation';
|
| 1028 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg, $myArgs);
|
| 1029 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg);
|
| 1030 |
+
}
|
| 1031 |
+
|
| 1032 |
+
$coupon = Mage::getModel('salesrule/coupon')
|
| 1033 |
+
->setRule($rule)
|
| 1034 |
+
->setIsPrimary(false)
|
| 1035 |
+
->setCode($coupon_code)
|
| 1036 |
+
->setAddedByRemarkety(1)
|
| 1037 |
+
->setUsageLimit($rule->getUsesPerCoupon())
|
| 1038 |
+
->setUsagePerCustomer($rule->getUsesPerCustomer())
|
| 1039 |
+
->setType(Mage_SalesRule_Helper_Coupon::COUPON_TYPE_SPECIFIC_AUTOGENERATED);
|
| 1040 |
+
|
| 1041 |
+
if ($expiration_date != null) {
|
| 1042 |
+
$coupon->setExpirationDate($expiration_date);
|
| 1043 |
+
} else {
|
| 1044 |
+
$coupon->setExpirationDate($rule->getToDate());
|
| 1045 |
+
}
|
| 1046 |
+
|
| 1047 |
+
$coupon->save();
|
| 1048 |
+
|
| 1049 |
+
$msg = "Successfuly created coupon code: " . $coupon_code . " for rule id: " . $rule_id;
|
| 1050 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, $msg, $myArgs);
|
| 1051 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 1052 |
+
} catch (Mage_Core_Exception $e) {
|
| 1053 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1054 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1055 |
+
} catch (Exception $e) {
|
| 1056 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1057 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1058 |
+
}
|
| 1059 |
+
}
|
| 1060 |
+
|
| 1061 |
+
public function getCustomersCount($mage_store_view_id)
|
| 1062 |
+
{
|
| 1063 |
+
register_shutdown_function('handleShutdown');
|
| 1064 |
+
$myArgs = func_get_args();
|
| 1065 |
+
|
| 1066 |
+
try {
|
| 1067 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 1068 |
+
$store_views = $this->_store_views_in_group($mage_store_view_id);
|
| 1069 |
+
$customers = Mage::getModel("customer/customer")->getCollection();
|
| 1070 |
+
$customers->addFieldToFilter('store_id', array('in' => $store_views));
|
| 1071 |
+
$count = $customers->getSize();
|
| 1072 |
+
$ret = array('count' => $count);
|
| 1073 |
+
|
| 1074 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 1075 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 1076 |
+
} catch (Mage_Core_Exception $e) {
|
| 1077 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1078 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1079 |
+
} catch (Exception $e) {
|
| 1080 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1081 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1082 |
+
}
|
| 1083 |
+
}
|
| 1084 |
+
|
| 1085 |
+
public function getOrdersCount($mage_store_view_id)
|
| 1086 |
+
{
|
| 1087 |
+
register_shutdown_function('handleShutdown');
|
| 1088 |
+
$myArgs = func_get_args();
|
| 1089 |
+
|
| 1090 |
+
try {
|
| 1091 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 1092 |
+
// $store_views = $this->_store_views_in_group($mage_store_view_id);
|
| 1093 |
+
$orders = Mage::getModel("sales/order")->getCollection();
|
| 1094 |
+
$orders->addFieldToFilter('store_id', array('eq' => $mage_store_view_id));
|
| 1095 |
+
$count = $orders->getSize();
|
| 1096 |
+
$ret = array('count' => $count);
|
| 1097 |
+
|
| 1098 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 1099 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 1100 |
+
} catch (Mage_Core_Exception $e) {
|
| 1101 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1102 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1103 |
+
} catch (Exception $e) {
|
| 1104 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1105 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1106 |
+
}
|
| 1107 |
+
}
|
| 1108 |
+
|
| 1109 |
+
public function getProductsCount($mage_view_id)
|
| 1110 |
+
{
|
| 1111 |
+
register_shutdown_function('handleShutdown');
|
| 1112 |
+
$myArgs = func_get_args();
|
| 1113 |
+
|
| 1114 |
+
try {
|
| 1115 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 1116 |
+
$products = Mage::getModel("catalog/product")->getCollection();
|
| 1117 |
+
$products->addStoreFilter($mage_view_id);
|
| 1118 |
+
$count = $products->getSize();
|
| 1119 |
+
$ret = array('count' => $count);
|
| 1120 |
+
|
| 1121 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, null, '');
|
| 1122 |
+
return $this->_wrapResponse($ret, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 1123 |
+
} catch (Mage_Core_Exception $e) {
|
| 1124 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1125 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1126 |
+
}
|
| 1127 |
+
}
|
| 1128 |
+
|
| 1129 |
+
public function getProductParentId($product){
|
| 1130 |
+
if ($product->type_id != 'configurable') {
|
| 1131 |
+
$arrayOfParentIds = Mage::helper('mgconnector/links')->getParentId($product->getId());
|
| 1132 |
+
$parentId = null;
|
| 1133 |
+
|
| 1134 |
+
if($arrayOfParentIds && count($arrayOfParentIds)) {
|
| 1135 |
+
if(is_array($arrayOfParentIds)) {
|
| 1136 |
+
$parentId = $arrayOfParentIds[0];
|
| 1137 |
+
} else {
|
| 1138 |
+
$parentId = $arrayOfParentIds;
|
| 1139 |
+
}
|
| 1140 |
+
}
|
| 1141 |
+
|
| 1142 |
+
if (!is_null($parentId)) {
|
| 1143 |
+
return $parentId;
|
| 1144 |
+
}
|
| 1145 |
+
}
|
| 1146 |
+
return false;
|
| 1147 |
+
}
|
| 1148 |
+
|
| 1149 |
+
public function getProdUrl($product, $storeUrl, $mage_store_view_id)
|
| 1150 |
+
{
|
| 1151 |
+
$this->_debug(__FUNCTION__, "Start - prod id ".$product->getId(), null, '');
|
| 1152 |
+
$url = '';
|
| 1153 |
+
$visibility = $product->getVisibility();
|
| 1154 |
+
if ($product->type_id != 'configurable' || $visibility == 1) {
|
| 1155 |
+
$arrayOfParentIds = Mage::helper('mgconnector/links')->getParentId($product->getId());
|
| 1156 |
+
$parentId = null;
|
| 1157 |
+
|
| 1158 |
+
if($arrayOfParentIds && count($arrayOfParentIds)) {
|
| 1159 |
+
if(is_array($arrayOfParentIds)) {
|
| 1160 |
+
$parentId = $arrayOfParentIds[0];
|
| 1161 |
+
} else {
|
| 1162 |
+
$parentId = $arrayOfParentIds;
|
| 1163 |
+
}
|
| 1164 |
+
}
|
| 1165 |
+
|
| 1166 |
+
if (!is_null($parentId)) {
|
| 1167 |
+
$this->_debug(__FUNCTION__, "parent id ".$parentId, null, '');
|
| 1168 |
+
$product_id = $parentId;
|
| 1169 |
+
} else {
|
| 1170 |
+
$product_id = $product->getId();
|
| 1171 |
+
}
|
| 1172 |
+
} else {
|
| 1173 |
+
$product_id = $product->getId();
|
| 1174 |
+
}
|
| 1175 |
+
|
| 1176 |
+
try{
|
| 1177 |
+
$url = Mage::helper('mgconnector/urls')->getValue($product_id, $mage_store_view_id);
|
| 1178 |
+
if(!empty($url)) {
|
| 1179 |
+
$url = $storeUrl . $url;
|
| 1180 |
+
if(Mage::getStoreConfig('catalog/seo/product_url_suffix', $mage_store_view_id)) {
|
| 1181 |
+
$url .= Mage::getStoreConfig('catalog/seo/product_url_suffix', $mage_store_view_id);
|
| 1182 |
+
}
|
| 1183 |
+
}
|
| 1184 |
+
$this->_debug(__FUNCTION__, "after setStoreId getProductUrl: ".$url, null, '');
|
| 1185 |
+
}catch(Exception $e){
|
| 1186 |
+
$this->_log(__FUNCTION__, "failed after setStoreId: ", $e->getMessage(), '');
|
| 1187 |
+
}
|
| 1188 |
+
|
| 1189 |
+
if(!empty($url)) {
|
| 1190 |
+
return $url;
|
| 1191 |
+
} else {
|
| 1192 |
+
$getProductUrl = $product->getProductUrl();
|
| 1193 |
+
$this->_debug(__FUNCTION__, "getProductUrl: ".$getProductUrl, null, '');
|
| 1194 |
+
return $getProductUrl;
|
| 1195 |
+
}
|
| 1196 |
+
|
| 1197 |
+
}
|
| 1198 |
+
|
| 1199 |
+
public function getImageUrl($product, $type = 'image', $mage_store_view_id)
|
| 1200 |
+
{
|
| 1201 |
+
$url = '';
|
| 1202 |
+
if ($product->type_id != 'configurable') {
|
| 1203 |
+
$this->_debug(__FUNCTION__, null, "not config prod id" . $product->getId(), '');
|
| 1204 |
+
$arrayOfParentIds = Mage::helper('mgconnector/links')->getParentId($product->getId());
|
| 1205 |
+
$parentId = null;
|
| 1206 |
+
|
| 1207 |
+
if($arrayOfParentIds && count($arrayOfParentIds)) {
|
| 1208 |
+
if(is_array($arrayOfParentIds)) {
|
| 1209 |
+
$parentId = $arrayOfParentIds[0];
|
| 1210 |
+
} else {
|
| 1211 |
+
$parentId = $arrayOfParentIds;
|
| 1212 |
+
}
|
| 1213 |
+
}
|
| 1214 |
+
|
| 1215 |
+
if (!is_null($parentId)) {
|
| 1216 |
+
$this->_debug(__FUNCTION__, null, "parent id: ".$parentId, '');
|
| 1217 |
+
$product = $this->loadProduct($parentId, $mage_store_view_id);
|
| 1218 |
+
}
|
| 1219 |
+
} else {
|
| 1220 |
+
$this->_debug(__FUNCTION__, null, "configurable prod id" . $product->getId(), '');
|
| 1221 |
+
}
|
| 1222 |
+
$this->_debug(__FUNCTION__, null, "Getting image url for product: " . $product->getId(), '');
|
| 1223 |
+
$url = (string)Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'catalog/product' . $product->getImage();
|
| 1224 |
+
// $url = (string)Mage::helper('catalog/image')->init($product, $type);
|
| 1225 |
+
$this->_debug(__FUNCTION__, null, $type . " url: " . $url, '');
|
| 1226 |
+
return $url;
|
| 1227 |
+
|
| 1228 |
+
}
|
| 1229 |
+
|
| 1230 |
+
public function getCartRecoveryURL($cart_id){
|
| 1231 |
+
$recovery = Mage::getModel('mgconnector/recovery');
|
| 1232 |
+
$id = $recovery->encodeQuoteId($cart_id);
|
| 1233 |
+
$url = (string)Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'remarkety/recovery/cart/quote_id/' . $id;
|
| 1234 |
+
return $url;
|
| 1235 |
+
}
|
| 1236 |
+
|
| 1237 |
+
private function getProductName($product, $mage_store_view_id){
|
| 1238 |
+
$name = '';
|
| 1239 |
+
if($product->type_id != 'configurable') {
|
| 1240 |
+
$this->_debug(__FUNCTION__, null, "not config prod id ".$product->getId(), '');
|
| 1241 |
+
$arrayOfParentIds = Mage::helper('mgconnector/links')->getParentId($product->getId());
|
| 1242 |
+
$parentId = null;
|
| 1243 |
+
|
| 1244 |
+
if($arrayOfParentIds && count($arrayOfParentIds)) {
|
| 1245 |
+
if(is_array($arrayOfParentIds)) {
|
| 1246 |
+
$parentId = $arrayOfParentIds[0];
|
| 1247 |
+
} else {
|
| 1248 |
+
$parentId = $arrayOfParentIds;
|
| 1249 |
+
}
|
| 1250 |
+
}
|
| 1251 |
+
|
| 1252 |
+
if(!is_null($parentId)){
|
| 1253 |
+
$this->_debug(__FUNCTION__, null, "parent id: ".$parentId, '');
|
| 1254 |
+
$product = $this->loadProduct($parentId);
|
| 1255 |
+
// $product->setStoreId($mage_store_view_id)->load($parentId);
|
| 1256 |
+
//$product->setStoreId($mage_store_view_id);
|
| 1257 |
+
}
|
| 1258 |
+
}else{
|
| 1259 |
+
$this->_debug(__FUNCTION__, null, "configurable prod id ".$product->getId(), '');
|
| 1260 |
+
}
|
| 1261 |
+
|
| 1262 |
+
$name = $product->getName();
|
| 1263 |
+
$this->_debug(__FUNCTION__, null, "Prod name: ".$name, '');
|
| 1264 |
+
return $name;
|
| 1265 |
+
}
|
| 1266 |
+
|
| 1267 |
+
public function unsubscribe($email)
|
| 1268 |
+
{
|
| 1269 |
+
register_shutdown_function('handleShutdown');
|
| 1270 |
+
$myArgs = func_get_args();
|
| 1271 |
+
|
| 1272 |
+
try {
|
| 1273 |
+
if (empty($email)) {
|
| 1274 |
+
$msg = 'No email sent passed to unsubsribe';
|
| 1275 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg, $myArgs);
|
| 1276 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg);
|
| 1277 |
+
}
|
| 1278 |
+
|
| 1279 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_CALLED_STATUS, null, $myArgs);
|
| 1280 |
+
$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
|
| 1281 |
+
|
| 1282 |
+
if (empty($subscriber)) {
|
| 1283 |
+
$msg = 'Given subscriber does not exist';
|
| 1284 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg, $myArgs);
|
| 1285 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $msg);
|
| 1286 |
+
}
|
| 1287 |
+
Mage::register('remarkety_subscriber_deleted',true, true);
|
| 1288 |
+
$subscriber->unsubscribe();
|
| 1289 |
+
|
| 1290 |
+
$msg = "Successfuly unsubscribed customer using email: " . $email;
|
| 1291 |
+
$this->_debug(__FUNCTION__, REMARKETY_MGCONNECTOR_SUCCESS_STATUS, $msg, $myArgs);
|
| 1292 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_SUCCESS_STATUS);
|
| 1293 |
+
} catch (Mage_Core_Exception $e) {
|
| 1294 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1295 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1296 |
+
} catch (Exception $e) {
|
| 1297 |
+
$this->_log(__FUNCTION__, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage(), $myArgs);
|
| 1298 |
+
return $this->_wrapResponse(null, REMARKETY_MGCONNECTOR_FAILED_STATUS, $e->getMessage());
|
| 1299 |
+
}
|
| 1300 |
+
}
|
| 1301 |
+
|
| 1302 |
+
private function getConfigProdModel()
|
| 1303 |
+
{
|
| 1304 |
+
if ($this->configurable_product_model == null) {
|
| 1305 |
+
$this->configurable_product_model = Mage::getModel('catalog/product_type_configurable');
|
| 1306 |
+
}
|
| 1307 |
+
return $this->configurable_product_model;
|
| 1308 |
+
}
|
| 1309 |
+
|
| 1310 |
+
private function loadProduct($productId) {
|
| 1311 |
+
if (!isset($this->_productCache[$productId])) {
|
| 1312 |
+
$this->_productCache[$productId] = Mage::getModel("catalog/product")->load($productId);
|
| 1313 |
+
}
|
| 1314 |
+
return $this->_productCache[$productId];
|
| 1315 |
+
}
|
| 1316 |
+
|
| 1317 |
+
/**
|
| 1318 |
+
* Returns a list of payment methods used in each order
|
| 1319 |
+
* @param $orderIds
|
| 1320 |
+
* @return array
|
| 1321 |
+
*/
|
| 1322 |
+
private function loadPaymentMethods($orderIds){
|
| 1323 |
+
|
| 1324 |
+
$orderIds = array_unique($orderIds);
|
| 1325 |
+
$paymentsCollection = Mage::getModel("sales/order_payment")
|
| 1326 |
+
->getCollection()
|
| 1327 |
+
->addOrder('main_table.entity_id', 'DESC')
|
| 1328 |
+
->addAttributeToFilter('main_table.parent_id', array('in' => $orderIds))
|
| 1329 |
+
->addAttributeToSelect('parent_id')
|
| 1330 |
+
->addAttributeToSelect('method');
|
| 1331 |
+
|
| 1332 |
+
$payments = array();
|
| 1333 |
+
$paymentMethodsNames = array();
|
| 1334 |
+
|
| 1335 |
+
foreach($paymentsCollection as $payment){
|
| 1336 |
+
$row = $payment->toArray();
|
| 1337 |
+
if(!isset($payments[$row['parent_id']])){
|
| 1338 |
+
$method = $row['method'];
|
| 1339 |
+
//convert method code to name
|
| 1340 |
+
if(!isset($paymentMethodsNames[$method])){
|
| 1341 |
+
$methodName = Mage::getStoreConfig('payment/'.$method.'/title');
|
| 1342 |
+
if(!empty($methodName)){
|
| 1343 |
+
$paymentMethodsNames[$method] = $methodName;
|
| 1344 |
+
} else {
|
| 1345 |
+
$paymentMethodsNames[$method] = $method;
|
| 1346 |
+
}
|
| 1347 |
+
}
|
| 1348 |
+
//save to list with order id as key
|
| 1349 |
+
$payments[$row['parent_id']] = $paymentMethodsNames[$method];
|
| 1350 |
+
}
|
| 1351 |
+
}
|
| 1352 |
+
|
| 1353 |
+
return $payments;
|
| 1354 |
+
}
|
| 1355 |
+
|
| 1356 |
+
private function loadProducts($storeId, $productIds, $loadParents = true) {
|
| 1357 |
+
if (empty($productIds))
|
| 1358 |
+
return;
|
| 1359 |
+
$productIds = array_unique($productIds);
|
| 1360 |
+
$productsCollection = Mage::getModel("catalog/product")
|
| 1361 |
+
->getCollection()
|
| 1362 |
+
->setStoreId($storeId)
|
| 1363 |
+
->addFieldToFilter('entity_id', array($productIds))
|
| 1364 |
+
->applyFrontendPriceLimitations()
|
| 1365 |
+
->addOrder('updated_at', 'ASC')
|
| 1366 |
+
->addFinalPrice()
|
| 1367 |
+
->addCategoryIds()
|
| 1368 |
+
// ->addUrlRewrite()
|
| 1369 |
+
->addAttributeToSelect('*');
|
| 1370 |
+
$productsCollection->load(false,true);
|
| 1371 |
+
$parentIds = array();
|
| 1372 |
+
foreach ($productsCollection as $product) {
|
| 1373 |
+
$productId = $product->getId();
|
| 1374 |
+
if (!array_key_exists($productId, $this->_productCache)) {
|
| 1375 |
+
$this->_productCache[$productId] = $product; //Mage::getModel("catalog/product")->load($productId);
|
| 1376 |
+
if ($loadParents)
|
| 1377 |
+
$parentIds[] = $this->getProductParentId($product);
|
| 1378 |
+
}
|
| 1379 |
+
}
|
| 1380 |
+
if ($loadParents)
|
| 1381 |
+
$this->loadProducts($storeId, $parentIds, false);
|
| 1382 |
+
}
|
| 1383 |
+
|
| 1384 |
+
public function sendLogInResponse() {
|
| 1385 |
+
$this->_sendLogInResponse = true;
|
| 1386 |
+
}
|
| 1387 |
+
}
|
| 1388 |
+
|
| 1389 |
+
|
| 1390 |
+
function handleShutdown()
|
| 1391 |
+
{
|
| 1392 |
+
$error = error_get_last();
|
| 1393 |
+
if ($error !== NULL) {
|
| 1394 |
+
$error_info = "[SHUTDOWN] file:" . $error['file'] . " | ln:" . $error['line'] . " | msg:" . $error['message'] . PHP_EOL;
|
| 1395 |
+
Mage::log($error_info, null, REMARKETY_LOG, true);
|
| 1396 |
+
} else {
|
| 1397 |
+
Mage::log("SHUTDOWN", null, REMARKETY_LOG);
|
| 1398 |
+
}
|
| 1399 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Core/Api.php
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @copyright Copyright (C) 2014 InteraMind Ltd (Remarkety). All rights reserved.
|
| 5 |
+
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
|
| 6 |
+
* @package This file is part of Magento Connector Plugin for Remarkety
|
| 7 |
+
**/
|
| 8 |
+
class Remarkety_Mgconnector_Model_Core_Api
|
| 9 |
+
{
|
| 10 |
+
public function getCustomers(
|
| 11 |
+
$mage_store_group_id,
|
| 12 |
+
$updated_at_min = null,
|
| 13 |
+
$updated_at_max = null,
|
| 14 |
+
$limit = null,
|
| 15 |
+
$page = null,
|
| 16 |
+
$since_id = null,
|
| 17 |
+
$returnLog = 0)
|
| 18 |
+
{
|
| 19 |
+
|
| 20 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 21 |
+
if ($returnLog)
|
| 22 |
+
$myModel->sendLogInResponse();
|
| 23 |
+
|
| 24 |
+
return $myModel->getCustomers(
|
| 25 |
+
$mage_store_group_id,
|
| 26 |
+
$updated_at_min,
|
| 27 |
+
$updated_at_max,
|
| 28 |
+
$limit,
|
| 29 |
+
$page,
|
| 30 |
+
$since_id);
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
public function getOrders(
|
| 34 |
+
$mage_store_group_id,
|
| 35 |
+
$updated_at_min = null,
|
| 36 |
+
$updated_at_max = null,
|
| 37 |
+
$limit = null,
|
| 38 |
+
$page = null,
|
| 39 |
+
$since_id = null,
|
| 40 |
+
$created_at_min = null,
|
| 41 |
+
$created_at_max = null,
|
| 42 |
+
$order_status = null, // Not implemented
|
| 43 |
+
$order_id = null,
|
| 44 |
+
$returnLog = 0)
|
| 45 |
+
{
|
| 46 |
+
|
| 47 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 48 |
+
if ($returnLog)
|
| 49 |
+
$myModel->sendLogInResponse();
|
| 50 |
+
|
| 51 |
+
return $myModel->getOrders(
|
| 52 |
+
$mage_store_group_id,
|
| 53 |
+
$updated_at_min,
|
| 54 |
+
$updated_at_max,
|
| 55 |
+
$limit,
|
| 56 |
+
$page,
|
| 57 |
+
$since_id,
|
| 58 |
+
$created_at_min,
|
| 59 |
+
$created_at_max,
|
| 60 |
+
$order_status, // Not implemented
|
| 61 |
+
$order_id);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
public function getQuotes(
|
| 65 |
+
$mage_store_group_id,
|
| 66 |
+
$updated_at_min = null,
|
| 67 |
+
$updated_at_max = null,
|
| 68 |
+
$limit = null,
|
| 69 |
+
$page = null,
|
| 70 |
+
$since_id = null,
|
| 71 |
+
$returnLog = 0)
|
| 72 |
+
{
|
| 73 |
+
|
| 74 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 75 |
+
if ($returnLog)
|
| 76 |
+
$myModel->sendLogInResponse();
|
| 77 |
+
|
| 78 |
+
return $myModel->getQuotes(
|
| 79 |
+
$mage_store_group_id,
|
| 80 |
+
$updated_at_min,
|
| 81 |
+
$updated_at_max,
|
| 82 |
+
$limit,
|
| 83 |
+
$page,
|
| 84 |
+
$since_id);
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
public function getProducts(
|
| 88 |
+
$mage_store_view_id,
|
| 89 |
+
$updated_at_min = null,
|
| 90 |
+
$updated_at_max = null,
|
| 91 |
+
$limit = null,
|
| 92 |
+
$page = null,
|
| 93 |
+
$handle = null, // Not implemented
|
| 94 |
+
$vendor = null, // Not implemented
|
| 95 |
+
$product_type = null, // Not implemented
|
| 96 |
+
$collection_id = null, // Not implemented
|
| 97 |
+
$since_id = null,
|
| 98 |
+
$created_at_min = null,
|
| 99 |
+
$created_at_max = null,
|
| 100 |
+
$published_status = null, // Not implemented
|
| 101 |
+
$product_id = null,
|
| 102 |
+
$returnLog = 0)
|
| 103 |
+
{
|
| 104 |
+
|
| 105 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 106 |
+
if ($returnLog)
|
| 107 |
+
$myModel->sendLogInResponse();
|
| 108 |
+
return $myModel->getProducts(
|
| 109 |
+
$mage_store_view_id,
|
| 110 |
+
$updated_at_min,
|
| 111 |
+
$updated_at_max,
|
| 112 |
+
$limit,
|
| 113 |
+
$page,
|
| 114 |
+
$handle,
|
| 115 |
+
$vendor,
|
| 116 |
+
$product_type,
|
| 117 |
+
$collection_id,
|
| 118 |
+
$since_id,
|
| 119 |
+
$created_at_min,
|
| 120 |
+
$created_at_max,
|
| 121 |
+
$published_status,
|
| 122 |
+
$product_id,
|
| 123 |
+
$returnLog);
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
public function getSubscribers($mage_store_view_id = null,
|
| 127 |
+
$limit = null,
|
| 128 |
+
$page = null,
|
| 129 |
+
$sinceId = null,
|
| 130 |
+
$returnLog = 0)
|
| 131 |
+
{
|
| 132 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 133 |
+
if ($returnLog)
|
| 134 |
+
$myModel->sendLogInResponse();
|
| 135 |
+
|
| 136 |
+
return $myModel->getSubscribers(
|
| 137 |
+
$mage_store_view_id,
|
| 138 |
+
$limit,
|
| 139 |
+
$page,
|
| 140 |
+
$sinceId);
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
public function getSubscriberCount($mage_store_view_id = null, $returnLog = 0)
|
| 144 |
+
{
|
| 145 |
+
|
| 146 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 147 |
+
if ($returnLog)
|
| 148 |
+
$myModel->sendLogInResponse();
|
| 149 |
+
|
| 150 |
+
return $myModel->getSubscriberCount($mage_store_view_id);
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
public function getStoreSettings($mage_store_view_id = null, $returnLog = 0)
|
| 154 |
+
{
|
| 155 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 156 |
+
if ($returnLog)
|
| 157 |
+
$myModel->sendLogInResponse();
|
| 158 |
+
return $myModel->getStoreSettings($mage_store_view_id);
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
public function getStoreOrderStatuses($mage_store_view_id, $returnLog = 0)
|
| 162 |
+
{
|
| 163 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 164 |
+
if ($returnLog)
|
| 165 |
+
$myModel->sendLogInResponse();
|
| 166 |
+
return $myModel->getStoreOrderStatuses($mage_store_view_id);
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
public function createCoupon($rule_id, $coupon_code, $expiration, $returnLog = 0)
|
| 170 |
+
{
|
| 171 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 172 |
+
if ($returnLog)
|
| 173 |
+
$myModel->sendLogInResponse();
|
| 174 |
+
$ret = $myModel->createCoupon($rule_id, $coupon_code, $expiration);
|
| 175 |
+
return $ret;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
public function unsubscribe($email, $returnLog = 0)
|
| 179 |
+
{
|
| 180 |
+
$myModel = Mage::getModel('mgconnector/core');
|
| 181 |
+
if ($returnLog)
|
| 182 |
+
$myModel->sendLogInResponse();
|
| 183 |
+
$ret = $myModel->unsubscribe($email);
|
| 184 |
+
return $ret;
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
public function getCustomersCount($mage_store_group_id, $returnLog = 0)
|
| 188 |
+
{
|
| 189 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 190 |
+
if ($returnLog)
|
| 191 |
+
$myModel->sendLogInResponse();
|
| 192 |
+
return $myModel->getCustomersCount($mage_store_group_id);
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
public function getOrdersCount($mage_store_group_id, $returnLog = 0)
|
| 196 |
+
{
|
| 197 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 198 |
+
if ($returnLog)
|
| 199 |
+
$myModel->sendLogInResponse();
|
| 200 |
+
return $myModel->getOrdersCount($mage_store_group_id);
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
public function getProductsCount($mage_view_id, $returnLog = 0)
|
| 204 |
+
{
|
| 205 |
+
$myModel = Mage::getModel("mgconnector/core");
|
| 206 |
+
if ($returnLog)
|
| 207 |
+
$myModel->sendLogInResponse();
|
| 208 |
+
$ret = $myModel->getProductsCount($mage_view_id);
|
| 209 |
+
return $ret;
|
| 210 |
+
}
|
| 211 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Install.php
ADDED
|
@@ -0,0 +1,484 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Install model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Model_Install
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Upgrade mode code
|
| 14 |
+
*/
|
| 15 |
+
const MODE_UPGRADE = 'upgrade';
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Install create mode code
|
| 19 |
+
*/
|
| 20 |
+
const MODE_INSTALL_CREATE = 'install_create';
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Install login mode code
|
| 24 |
+
*/
|
| 25 |
+
const MODE_INSTALL_LOGIN = 'install_login';
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Completed mode code
|
| 29 |
+
*/
|
| 30 |
+
const MODE_COMPLETE = 'complete';
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Welcome mode code
|
| 34 |
+
*/
|
| 35 |
+
const MODE_WELCOME = 'welcome';
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* Web service remarkety username
|
| 39 |
+
*/
|
| 40 |
+
const WEB_SERVICE_USERNAME = 'remarkety';
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Web service role name
|
| 44 |
+
*/
|
| 45 |
+
const WEB_SERVICE_ROLE = 'remarkety';
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Store code scope
|
| 49 |
+
*/
|
| 50 |
+
const STORE_SCOPE = 'stores';
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* Key in config for installed flag
|
| 54 |
+
*/
|
| 55 |
+
const XPATH_INSTALLED = 'remarkety/mgconnector/installed';
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* Install data
|
| 59 |
+
*
|
| 60 |
+
* @var array
|
| 61 |
+
*/
|
| 62 |
+
protected $_data = null;
|
| 63 |
+
|
| 64 |
+
/**
|
| 65 |
+
* Set data
|
| 66 |
+
*
|
| 67 |
+
* @param array $data
|
| 68 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 69 |
+
*/
|
| 70 |
+
public function setData(array $data)
|
| 71 |
+
{
|
| 72 |
+
$this->_data['mode'] = $data['mode'];
|
| 73 |
+
$this->_data['email']= array_key_exists('email', $data) ? $data['email'] : null;
|
| 74 |
+
$this->_data['first_name']= array_key_exists('first_name', $data) ? $data['first_name'] : null;
|
| 75 |
+
$this->_data['last_name']= array_key_exists('last_name', $data) ? $data['last_name'] : null;
|
| 76 |
+
$this->_data['phone']= array_key_exists('phone', $data) ? $data['phone'] : null;
|
| 77 |
+
$this->_data['password']= array_key_exists('password', $data) ? $data['password'] : null;
|
| 78 |
+
$this->_data['terms'] = array_key_exists('terms', $data) ? ($data['terms']== '1' ? 'true' : 'false') : null;
|
| 79 |
+
$this->_data['store_id'] = array_key_exists('store_id', $data) ? $data['store_id'] : null;
|
| 80 |
+
$this->_data['key'] = array_key_exists('key', $data) ? $data['key'] : null;
|
| 81 |
+
|
| 82 |
+
return $this;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
/**
|
| 86 |
+
* Get data
|
| 87 |
+
*
|
| 88 |
+
* @return array
|
| 89 |
+
*/
|
| 90 |
+
public function getData()
|
| 91 |
+
{
|
| 92 |
+
return $this->_data;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
/**
|
| 96 |
+
* Create web service role and user
|
| 97 |
+
*
|
| 98 |
+
* @throws Exception
|
| 99 |
+
* @throws Mage_Core_Exception
|
| 100 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 101 |
+
*/
|
| 102 |
+
protected function _webServiceConfiguration()
|
| 103 |
+
{
|
| 104 |
+
$this->_data['key'] = $this->_generateApiKey();
|
| 105 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/api_key', $this->_data['key']);
|
| 106 |
+
|
| 107 |
+
$wsFirstName = array_key_exists('first_name', $this->data) && !empty($this->_data['first_name']) ? $this->_data['first_name'] : "Remarkety";
|
| 108 |
+
$wsLastName = array_key_exists('last_name', $this->data) && !empty($this->_data['last_name']) ? $this->_data['last_name'] : "API";
|
| 109 |
+
|
| 110 |
+
if(!$this->_getWebServiceUser()->getId()) {
|
| 111 |
+
$email = $this->_data['email'];
|
| 112 |
+
|
| 113 |
+
$role = Mage::getModel('api/roles')
|
| 114 |
+
->setName(self::WEB_SERVICE_ROLE)
|
| 115 |
+
->setPid(false)
|
| 116 |
+
->setRoleType('G')
|
| 117 |
+
->save();
|
| 118 |
+
|
| 119 |
+
Mage::getModel("api/rules")
|
| 120 |
+
->setRoleId($role->getId())
|
| 121 |
+
->setResources(array('all'))
|
| 122 |
+
->saveRel();
|
| 123 |
+
|
| 124 |
+
$user = Mage::getModel('api/user')
|
| 125 |
+
->setData(array(
|
| 126 |
+
'username' => self::WEB_SERVICE_ROLE,
|
| 127 |
+
'firstname' => $wsFirstName,
|
| 128 |
+
'lastname' => $wsLastName,
|
| 129 |
+
'email' => $email,
|
| 130 |
+
'api_key' => $this->_data['key'],
|
| 131 |
+
'api_key_confirmation' => $this->_data['key'],
|
| 132 |
+
'is_active' => 1,
|
| 133 |
+
'user_roles' => '',
|
| 134 |
+
'assigned_user_role' => '',
|
| 135 |
+
'role_name' => '',
|
| 136 |
+
'roles' => array($role->getId())
|
| 137 |
+
));
|
| 138 |
+
|
| 139 |
+
$retries = 0;
|
| 140 |
+
$maxRetries = 5;
|
| 141 |
+
while ($user->userExists() && $retries++ < $maxRetries) {
|
| 142 |
+
$email = "_$email";
|
| 143 |
+
$user->setData("email", $email);
|
| 144 |
+
}
|
| 145 |
+
if ($retries == $maxRetries) {
|
| 146 |
+
throw new Exception("Could not create WebService user - all emails are taken");
|
| 147 |
+
}
|
| 148 |
+
$user->save();
|
| 149 |
+
|
| 150 |
+
$user
|
| 151 |
+
->setRoleIds(array($role->getId()))
|
| 152 |
+
->setRoleUserId($user->getUserId())
|
| 153 |
+
->saveRelations();
|
| 154 |
+
} else {
|
| 155 |
+
$this
|
| 156 |
+
->_getWebServiceUser()
|
| 157 |
+
//->setEmail($this->_data['email'])
|
| 158 |
+
->setFirstname($wsFirstName)
|
| 159 |
+
->setLastname($wsLastName)
|
| 160 |
+
->setNewApiKey($this->_data['key'])
|
| 161 |
+
->save();
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
return $this;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
/**
|
| 168 |
+
* Send request
|
| 169 |
+
*
|
| 170 |
+
* @param $payload
|
| 171 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 172 |
+
*/
|
| 173 |
+
protected function _sendRequest($payload)
|
| 174 |
+
{
|
| 175 |
+
Mage::getModel('mgconnector/request')->makeRequest($payload);
|
| 176 |
+
|
| 177 |
+
return $this;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
/**
|
| 181 |
+
* Install extension creating new remarkety account
|
| 182 |
+
*
|
| 183 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 184 |
+
* @throws Mage_Core_Exception
|
| 185 |
+
*/
|
| 186 |
+
public function installByCreateExtension()
|
| 187 |
+
{
|
| 188 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 189 |
+
|
| 190 |
+
try {
|
| 191 |
+
$connection->beginTransaction();
|
| 192 |
+
|
| 193 |
+
$this->_webServiceConfiguration();
|
| 194 |
+
|
| 195 |
+
$connection->commit();
|
| 196 |
+
} catch(Mage_Core_Exception $e) {
|
| 197 |
+
$connection->rollback();
|
| 198 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
// Make sure that store_id entry is an array
|
| 202 |
+
if(!empty($this->_data['store_id']) && !is_array($this->_data['store_id'])) {
|
| 203 |
+
$this->_data['store_id'] = (array)$this->_data['store_id'];
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
// Create request for each store view separately
|
| 207 |
+
foreach($this->_data['store_id'] as $_storeId) {
|
| 208 |
+
$store = Mage::getModel('core/store')->load($_storeId);
|
| 209 |
+
$this->_sendRequest(array(
|
| 210 |
+
'key' => $this->_data['key'],
|
| 211 |
+
'email' => $this->_data['email'],
|
| 212 |
+
'password' => $this->_data['password'],
|
| 213 |
+
'acceptTerms' => $this->_data['terms'],
|
| 214 |
+
'selectedView' => json_encode(array(
|
| 215 |
+
'website_id' => $store->getWebsiteId(),
|
| 216 |
+
'store_id' => $store->getGroupId(),
|
| 217 |
+
'view_id' => $_storeId,
|
| 218 |
+
)),
|
| 219 |
+
'isNewUser' => true,
|
| 220 |
+
'firstName' => $this->_data['first_name'],
|
| 221 |
+
'lastName' => $this->_data['last_name'],
|
| 222 |
+
'phone' => $this->_data['phone'],
|
| 223 |
+
'storeFrontUrl' => $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK),
|
| 224 |
+
'viewName' => $store->name,
|
| 225 |
+
'ip' => Mage::helper('core/http')->getRemoteAddr()
|
| 226 |
+
));
|
| 227 |
+
|
| 228 |
+
$this->_markInstalled($_storeId);
|
| 229 |
+
}
|
| 230 |
+
|
| 231 |
+
// Reinitialize configuration
|
| 232 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 233 |
+
|
| 234 |
+
return $this;
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
/**
|
| 238 |
+
* Install extension using existing remarkety account
|
| 239 |
+
*
|
| 240 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 241 |
+
* @throws Mage_Core_Exception
|
| 242 |
+
*/
|
| 243 |
+
public function installByLoginExtension()
|
| 244 |
+
{
|
| 245 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 246 |
+
|
| 247 |
+
try {
|
| 248 |
+
$connection->beginTransaction();
|
| 249 |
+
|
| 250 |
+
$this->_webServiceConfiguration();
|
| 251 |
+
|
| 252 |
+
$connection->commit();
|
| 253 |
+
} catch(Mage_Core_Exception $e) {
|
| 254 |
+
$connection->rollback();
|
| 255 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
// Make sure that store_id entry is an array
|
| 259 |
+
if(!empty($this->_data['store_id']) && !is_array($this->_data['store_id'])) {
|
| 260 |
+
$this->_data['store_id'] = (array)$this->_data['store_id'];
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
// Create request for each store view separately
|
| 264 |
+
foreach($this->_data['store_id'] as $_storeId) {
|
| 265 |
+
$store = Mage::getModel('core/store')->load($_storeId);
|
| 266 |
+
|
| 267 |
+
$this->_sendRequest(array(
|
| 268 |
+
'key' => $this->_data['key'],
|
| 269 |
+
'email' => $this->_data['email'],
|
| 270 |
+
'password' => $this->_data['password'],
|
| 271 |
+
'acceptTerms' => $this->_data['terms'],
|
| 272 |
+
'selectedView' => json_encode(array(
|
| 273 |
+
'website_id' => $store->getWebsiteId(),
|
| 274 |
+
'store_id' => $store->getGroupId(),
|
| 275 |
+
'view_id' => $_storeId,
|
| 276 |
+
)),
|
| 277 |
+
'isNewUser' => false,
|
| 278 |
+
'storeFrontUrl' => $store->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK),
|
| 279 |
+
'viewName' => $store->name,
|
| 280 |
+
'ip' => Mage::helper('core/http')->getRemoteAddr()
|
| 281 |
+
));
|
| 282 |
+
|
| 283 |
+
$this->_markInstalled($_storeId);
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
// Reinitialize configuration
|
| 287 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 288 |
+
|
| 289 |
+
return $this;
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
/**
|
| 293 |
+
* Upgrade extension
|
| 294 |
+
*
|
| 295 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 296 |
+
* @throws Mage_Core_Exception
|
| 297 |
+
*/
|
| 298 |
+
public function upgradeExtension()
|
| 299 |
+
{
|
| 300 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 301 |
+
|
| 302 |
+
try {
|
| 303 |
+
$connection->beginTransaction();
|
| 304 |
+
|
| 305 |
+
$webServiceUser = $this->_getWebServiceUser();
|
| 306 |
+
|
| 307 |
+
$this->_data['email'] = $webServiceUser->getEmail();
|
| 308 |
+
$this->_data['key'] = $this->_generateApiKey();
|
| 309 |
+
|
| 310 |
+
$this
|
| 311 |
+
->_getWebServiceUser()
|
| 312 |
+
->setNewApiKey($this->_data['key'])
|
| 313 |
+
->save();
|
| 314 |
+
|
| 315 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/api_key', $this->_data['key']);
|
| 316 |
+
|
| 317 |
+
$connection->commit();
|
| 318 |
+
} catch(Mage_Core_Exception $e) {
|
| 319 |
+
$connection->rollback();
|
| 320 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
$this->_sendRequest(array());
|
| 324 |
+
|
| 325 |
+
return $this;
|
| 326 |
+
}
|
| 327 |
+
|
| 328 |
+
/**
|
| 329 |
+
* Complete extension installation
|
| 330 |
+
*
|
| 331 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 332 |
+
* @throws Mage_Core_Exception
|
| 333 |
+
*/
|
| 334 |
+
public function completeExtensionInstallation()
|
| 335 |
+
{
|
| 336 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 337 |
+
|
| 338 |
+
try {
|
| 339 |
+
$connection->beginTransaction();
|
| 340 |
+
|
| 341 |
+
$ver = Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 342 |
+
Mage::getModel('core/config')->saveConfig(self::XPATH_INSTALLED, $ver);
|
| 343 |
+
|
| 344 |
+
$intervals = Mage::getStoreConfig('mgconnector_options/mgconnector_options_group/intervals');
|
| 345 |
+
if(!empty($intervals)) {
|
| 346 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/intervals', $intervals);
|
| 347 |
+
} else {
|
| 348 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/intervals', "1,3,10");
|
| 349 |
+
}
|
| 350 |
+
|
| 351 |
+
// remove old config entries if exist
|
| 352 |
+
Mage::getModel('core/config')
|
| 353 |
+
->deleteConfig('mgconnector_options/mgconnector_options_group/api_key')
|
| 354 |
+
->deleteConfig('mgconnector_options/mgconnector_options_group/intervals');
|
| 355 |
+
|
| 356 |
+
// remove old files
|
| 357 |
+
$blockDir = Mage::getModuleDir('Block', 'Remarkety_Mgconnector') . DS . 'Block';
|
| 358 |
+
$etcDir = Mage::getModuleDir('etc', 'Remarkety_Mgconnector');
|
| 359 |
+
|
| 360 |
+
if(file_exists($file = $etcDir . DS . 'system.xml')) {
|
| 361 |
+
unlink($file);
|
| 362 |
+
}
|
| 363 |
+
if(file_exists($file = $blockDir . DS . 'Adminhtml' . DS . 'Mgconnector.php')) {
|
| 364 |
+
unlink($file);
|
| 365 |
+
}
|
| 366 |
+
if(file_exists($file = $blockDir . DS . 'Adminhtml' . DS . 'Mgconnector' . DS . 'Grid.php')) {
|
| 367 |
+
unlink($file);
|
| 368 |
+
}
|
| 369 |
+
if(file_exists($file = $blockDir . DS . 'Adminhtml' . DS . 'Mgconnector' . DS . 'Grid' . DS . 'Column' . DS . 'Renderer' . DS . 'Status.php')) {
|
| 370 |
+
unlink($file);
|
| 371 |
+
}
|
| 372 |
+
|
| 373 |
+
$connection->commit();
|
| 374 |
+
} catch(Mage_Core_Exception $e) {
|
| 375 |
+
$connection->rollback();
|
| 376 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
return $this;
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
/**
|
| 383 |
+
* Generate new api key
|
| 384 |
+
*
|
| 385 |
+
* @return string
|
| 386 |
+
* @throws Mage_Core_Exception
|
| 387 |
+
*/
|
| 388 |
+
protected function _generateApiKey()
|
| 389 |
+
{
|
| 390 |
+
$apiKey = Mage::getStoreConfig('remarkety/mgconnector/api_key');
|
| 391 |
+
if (!empty($apiKey))
|
| 392 |
+
return $apiKey;
|
| 393 |
+
if(!empty($this->_data['email'])) {
|
| 394 |
+
return md5($this->_data['email'] . time());
|
| 395 |
+
}
|
| 396 |
+
throw new Mage_Core_Exception('Can not generate api key');
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
+
/**
|
| 400 |
+
* Return remarkety webservice user
|
| 401 |
+
*
|
| 402 |
+
* @return Mage_Api_Model_User
|
| 403 |
+
*/
|
| 404 |
+
protected function _getWebServiceUser()
|
| 405 |
+
{
|
| 406 |
+
$webServiceUser = Mage::getModel('api/user')
|
| 407 |
+
->loadByUsername(self::WEB_SERVICE_USERNAME);
|
| 408 |
+
|
| 409 |
+
return $webServiceUser;
|
| 410 |
+
}
|
| 411 |
+
|
| 412 |
+
/**
|
| 413 |
+
* Return remarkety webservice user by email
|
| 414 |
+
*
|
| 415 |
+
* @param string $email
|
| 416 |
+
* @return Mage_Api_Model_User
|
| 417 |
+
*/
|
| 418 |
+
protected function _getWebServiceUserByEmail($email) {
|
| 419 |
+
$webServiceUser = Mage::getModel('api/user')
|
| 420 |
+
->loadByEmail($email);
|
| 421 |
+
|
| 422 |
+
return $webServiceUser;
|
| 423 |
+
}
|
| 424 |
+
|
| 425 |
+
/**
|
| 426 |
+
* Mark extension as installed for provided store id
|
| 427 |
+
*
|
| 428 |
+
* @param int $storeId
|
| 429 |
+
* @throws Mage_Core_Exception
|
| 430 |
+
* @return Remarkety_Mgconnector_Model_Install
|
| 431 |
+
*/
|
| 432 |
+
protected function _markInstalled($storeId) {
|
| 433 |
+
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 434 |
+
|
| 435 |
+
try {
|
| 436 |
+
$connection->beginTransaction();
|
| 437 |
+
|
| 438 |
+
$ver = Mage::getConfig()->getModuleConfig("Remarkety_Mgconnector")->version;
|
| 439 |
+
Mage::getModel('core/config')->saveConfig(
|
| 440 |
+
self::XPATH_INSTALLED,
|
| 441 |
+
$ver,
|
| 442 |
+
self::STORE_SCOPE,
|
| 443 |
+
$storeId
|
| 444 |
+
);
|
| 445 |
+
|
| 446 |
+
$response = Mage::getSingleton('core/session')->getRemarketyLastResponseMessage();
|
| 447 |
+
$response = !empty($response) ? unserialize($response) : array();
|
| 448 |
+
if(!empty($response['storePublicId'])){
|
| 449 |
+
/**
|
| 450 |
+
* @var $m Remarkety_Mgconnector_Model_Webtracking
|
| 451 |
+
*/
|
| 452 |
+
$m = Mage::getModel('mgconnector/webtracking');
|
| 453 |
+
$m->setRemarketyPublicId($storeId, $response['storePublicId']);
|
| 454 |
+
}
|
| 455 |
+
|
| 456 |
+
$connection->commit();
|
| 457 |
+
} catch(Mage_Core_Exception $e) {
|
| 458 |
+
$connection->rollback();
|
| 459 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 460 |
+
}
|
| 461 |
+
|
| 462 |
+
return $this;
|
| 463 |
+
}
|
| 464 |
+
|
| 465 |
+
/**
|
| 466 |
+
* Return core_config_data entries for stores where extension is installed
|
| 467 |
+
*
|
| 468 |
+
* @return object
|
| 469 |
+
*/
|
| 470 |
+
public function getConfiguredStores()
|
| 471 |
+
{
|
| 472 |
+
$collection = Mage::getModel('core/config_data')->getCollection();
|
| 473 |
+
$collection
|
| 474 |
+
->getSelect()
|
| 475 |
+
->where('scope = ?', self::STORE_SCOPE)
|
| 476 |
+
->where('path = ?', self::XPATH_INSTALLED);
|
| 477 |
+
|
| 478 |
+
return $collection;
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
+
public static function isMultipleStores() {
|
| 482 |
+
return 'true' === 'true';
|
| 483 |
+
}
|
| 484 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Observer.php
ADDED
|
@@ -0,0 +1,499 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Observer model, which handle few events and send post request
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
if (!defined("REMARKETY_LOG"))
|
| 12 |
+
define('REMARKETY_LOG', 'remarkety_mgconnector.log');
|
| 13 |
+
|
| 14 |
+
class Remarkety_Mgconnector_Model_Observer
|
| 15 |
+
{
|
| 16 |
+
const REMARKETY_EVENTS_ENDPOINT = 'https://api-events.remarkety.com/v1';
|
| 17 |
+
const REMARKETY_METHOD = 'POST';
|
| 18 |
+
const REMARKETY_TIMEOUT = 2;
|
| 19 |
+
const REMARKETY_VERSION = 0.9;
|
| 20 |
+
const REMARKETY_PLATFORM = 'MAGENTO';
|
| 21 |
+
|
| 22 |
+
protected $_token = null;
|
| 23 |
+
protected $_intervals = null;
|
| 24 |
+
protected $_customer = null;
|
| 25 |
+
protected $_hasDataChanged = false;
|
| 26 |
+
|
| 27 |
+
protected $_subscriber = null;
|
| 28 |
+
protected $_origSubsciberData = null;
|
| 29 |
+
|
| 30 |
+
protected $_address = null;
|
| 31 |
+
protected $_origAddressData = null;
|
| 32 |
+
|
| 33 |
+
public function __construct()
|
| 34 |
+
{
|
| 35 |
+
$this->_token = Mage::getStoreConfig('remarkety/mgconnector/api_key');
|
| 36 |
+
$intervals = Mage::getStoreConfig('remarkety/mgconnector/intervals');
|
| 37 |
+
$this->_intervals = explode(',', $intervals);
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
public function triggerCustomerAddressBeforeUpdate($observer)
|
| 43 |
+
{
|
| 44 |
+
$address = Mage::getSingleton('customer/session')->getCustomer()->getDefaultBillingAddress();
|
| 45 |
+
if(!empty($address)) {
|
| 46 |
+
$this->_origAddressData = $address->getData();
|
| 47 |
+
}
|
| 48 |
+
return $this;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function beforeBlockToHtml(Varien_Event_Observer $observer) {
|
| 52 |
+
|
| 53 |
+
$grid = $observer->getBlock();
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* Mage_Adminhtml_Block_Customer_Grid
|
| 57 |
+
*/
|
| 58 |
+
if ($grid instanceof Mage_Adminhtml_Block_Promo_Quote_Edit_Tab_Coupons_Grid) {
|
| 59 |
+
$grid->addColumnAfter(
|
| 60 |
+
'expiration_date',
|
| 61 |
+
array(
|
| 62 |
+
'header' => Mage::helper('salesrule')->__('Expiration date'),
|
| 63 |
+
'index' => 'expiration_date',
|
| 64 |
+
'type' => 'datetime',
|
| 65 |
+
'default' => '-',
|
| 66 |
+
'align' => 'center',
|
| 67 |
+
'width' => '160'
|
| 68 |
+
),
|
| 69 |
+
'created_at'
|
| 70 |
+
);
|
| 71 |
+
|
| 72 |
+
$yesnoOptions = array(null => 'No','1' => 'Yes','' => 'No');
|
| 73 |
+
|
| 74 |
+
$grid->addColumnAfter('added_by_remarkety', array(
|
| 75 |
+
'header' => Mage::helper('salesrule')->__('Created By Remarkety'),
|
| 76 |
+
'index' => 'added_by_remarkety',
|
| 77 |
+
'type' => 'options',
|
| 78 |
+
'options' => $yesnoOptions,
|
| 79 |
+
'width' => '30',
|
| 80 |
+
'align' => 'center',
|
| 81 |
+
),'expiration_date');
|
| 82 |
+
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
public function triggerCustomerAddressUpdate($observer)
|
| 88 |
+
{
|
| 89 |
+
$this->_address = $observer->getEvent()->getCustomerAddress();
|
| 90 |
+
$this->_customer = $this->_address->getCustomer();
|
| 91 |
+
|
| 92 |
+
if(Mage::registry('remarkety_customer_save_observer_executed_'.$this->_customer->getId())) {
|
| 93 |
+
return $this;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
$isDefaultBilling =
|
| 97 |
+
($this->_customer == null || $this->_customer->getDefaultBillingAddress() == null)
|
| 98 |
+
? false
|
| 99 |
+
: ($this->_address->getId() == $this->_customer->getDefaultBillingAddress()->getId());
|
| 100 |
+
if (!$isDefaultBilling || !$this->_customer->getId()) {
|
| 101 |
+
return $this;
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
$this->_customerUpdate();
|
| 105 |
+
|
| 106 |
+
Mage::register('remarkety_customer_save_observer_executed_'.$this->_customer->getId(),true);
|
| 107 |
+
return $this;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
public function triggerCustomerUpdate($observer)
|
| 111 |
+
{
|
| 112 |
+
$this->_customer = $observer->getEvent()->getCustomer();
|
| 113 |
+
|
| 114 |
+
if(Mage::registry('remarkety_customer_save_observer_executed_'.$this->_customer->getId()) || !$this->_customer->getId()) {
|
| 115 |
+
return $this;
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
if($this->_customer->getOrigData() === null) {
|
| 119 |
+
$this->_customerRegistration();
|
| 120 |
+
} else {
|
| 121 |
+
$this->_customerUpdate();
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
Mage::register('remarkety_customer_save_observer_executed_'.$this->_customer->getId(),true);
|
| 125 |
+
return $this;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
public function triggerSubscribeUpdate($observer)
|
| 129 |
+
{
|
| 130 |
+
$this->_subscriber = $observer->getEvent()->getSubscriber();
|
| 131 |
+
|
| 132 |
+
$loggedIn = Mage::getSingleton('customer/session')->isLoggedIn();
|
| 133 |
+
|
| 134 |
+
if($this->_subscriber->getId() && !$loggedIn) {
|
| 135 |
+
if($this->_subscriber->getCustomerId() && Mage::registry('remarkety_customer_save_observer_executed_'.$this->_subscriber->getCustomerId())) {
|
| 136 |
+
return $this;
|
| 137 |
+
}
|
| 138 |
+
// Avoid loops - If this unsubsribe was triggered by remarkety, no need to update us
|
| 139 |
+
if (Mage::registry('remarkety_subscriber_deleted'))
|
| 140 |
+
return $this;
|
| 141 |
+
$this->makeRequest('customers/create', $this->_prepareCustomerSubscribtionUpdateData(true));
|
| 142 |
+
$email = $this->_subscriber->getSubscriberEmail();
|
| 143 |
+
if(!empty($email)){
|
| 144 |
+
|
| 145 |
+
//save email to cart if needed
|
| 146 |
+
$cart = Mage::getSingleton('checkout/session')->getQuote();
|
| 147 |
+
if($cart && !is_null($cart->getId()) && is_null($cart->getCustomerEmail())){
|
| 148 |
+
$cart->setCustomerEmail($email)->save();
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
Mage::getSingleton('customer/session')->setSubscriberEmail($email);
|
| 152 |
+
}
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
return $this;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
public function triggerSubscribeDelete($observer)
|
| 159 |
+
{
|
| 160 |
+
$this->_subscriber = $observer->getEvent()->getSubscriber();
|
| 161 |
+
if(!Mage::registry('remarkety_subscriber_deleted_'.$this->_subscriber->getEmail()) && $this->_subscriber->getId()) {
|
| 162 |
+
$this->makeRequest('customers/update', $this->_prepareCustomerSubscribtionDeleteData());
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
return $this;
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
public function triggerCustomerDelete($observer)
|
| 169 |
+
{
|
| 170 |
+
$this->_customer = $observer->getEvent()->getCustomer();
|
| 171 |
+
if (!$this->_customer->getId()) {
|
| 172 |
+
return $this;
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
$this->makeRequest('customers/delete', array(
|
| 176 |
+
'id' => (int)$this->_customer->getId(),
|
| 177 |
+
'email' => $this->_customer->getEmail(),
|
| 178 |
+
));
|
| 179 |
+
return $this;
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
public function triggerProductSave($observer) {
|
| 183 |
+
// TODO - Need to implement
|
| 184 |
+
return $this;
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
protected function _customerRegistration()
|
| 188 |
+
{
|
| 189 |
+
$this->makeRequest('customers/create', $this->_prepareCustomerUpdateData());
|
| 190 |
+
return $this;
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
protected function _customerUpdate()
|
| 194 |
+
{
|
| 195 |
+
if($this->_hasDataChanged()) {
|
| 196 |
+
$this->makeRequest('customers/update', $this->_prepareCustomerUpdateData());
|
| 197 |
+
}
|
| 198 |
+
return $this;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
protected function _hasDataChanged()
|
| 202 |
+
{
|
| 203 |
+
if(!$this->_hasDataChanged && $this->_customer) {
|
| 204 |
+
$validate = array(
|
| 205 |
+
'firstname',
|
| 206 |
+
'lastname',
|
| 207 |
+
'title',
|
| 208 |
+
'birthday',
|
| 209 |
+
'gender',
|
| 210 |
+
'email',
|
| 211 |
+
'group_id',
|
| 212 |
+
'default_billing',
|
| 213 |
+
'is_subscribed',
|
| 214 |
+
);
|
| 215 |
+
$originalData = $this->_customer->getOrigData();
|
| 216 |
+
$currentData = $this->_customer->getData();
|
| 217 |
+
foreach ($validate as $field) {
|
| 218 |
+
if (isset($originalData[$field])) {
|
| 219 |
+
if (!isset($currentData[$field]) || $currentData[$field] != $originalData[$field]) {
|
| 220 |
+
$this->_hasDataChanged = true;
|
| 221 |
+
break;
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
// This part has been replaced by the loop above to avoid comparing objects in array_diff
|
| 226 |
+
// $customerDiffKeys = array_keys( array_diff($this->_customer->getData(), $this->_customer->getOrigData()) );
|
| 227 |
+
//
|
| 228 |
+
// if(array_intersect($customerDiffKeys, $validate)) {
|
| 229 |
+
// $this->_hasDataChanged = true;
|
| 230 |
+
// }
|
| 231 |
+
$customerData = $this->_customer->getData();
|
| 232 |
+
if(!$this->_hasDataChanged && isset($customerData['is_subscribed'])) {
|
| 233 |
+
$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($this->_customer->getEmail());
|
| 234 |
+
$isSubscribed = $subscriber->getId() ? $subscriber->getData('subscriber_status') == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED : false;
|
| 235 |
+
|
| 236 |
+
if($customerData['is_subscribed'] !== $isSubscribed) {
|
| 237 |
+
$this->_hasDataChanged = true;
|
| 238 |
+
}
|
| 239 |
+
}
|
| 240 |
+
}
|
| 241 |
+
if(!$this->_hasDataChanged && $this->_address && $this->_origAddressData) {
|
| 242 |
+
$validate = array(
|
| 243 |
+
'street',
|
| 244 |
+
'city',
|
| 245 |
+
'region',
|
| 246 |
+
'postcode',
|
| 247 |
+
'country_id',
|
| 248 |
+
'telephone',
|
| 249 |
+
);
|
| 250 |
+
$addressDiffKeys = array_keys( array_diff($this->_address->getData(), $this->_origAddressData) );
|
| 251 |
+
|
| 252 |
+
if(array_intersect($addressDiffKeys, $validate)) {
|
| 253 |
+
$this->_hasDataChanged = true;
|
| 254 |
+
}
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
return $this->_hasDataChanged;
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
protected function _getRequestConfig($eventType)
|
| 261 |
+
{
|
| 262 |
+
return array(
|
| 263 |
+
'adapter' => 'Zend_Http_Client_Adapter_Curl',
|
| 264 |
+
'curloptions' => array(
|
| 265 |
+
// CURLOPT_FOLLOWLOCATION => true,
|
| 266 |
+
CURLOPT_HEADER => true,
|
| 267 |
+
CURLOPT_CONNECTTIMEOUT => self::REMARKETY_TIMEOUT
|
| 268 |
+
// CURLOPT_SSL_CIPHER_LIST => "RC4-SHA"
|
| 269 |
+
),
|
| 270 |
+
);
|
| 271 |
+
}
|
| 272 |
+
|
| 273 |
+
protected function _getHeaders($eventType,$payload)
|
| 274 |
+
{
|
| 275 |
+
$domain = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
| 276 |
+
$domain = substr($domain, 7, -1);
|
| 277 |
+
|
| 278 |
+
$headers = array(
|
| 279 |
+
'X-Domain: ' . $domain,
|
| 280 |
+
'X-Token: ' . $this->_token,
|
| 281 |
+
'X-Event-Type: ' . $eventType,
|
| 282 |
+
'X-Platform: ' . self::REMARKETY_PLATFORM,
|
| 283 |
+
'X-Version: ' . self::REMARKETY_VERSION,
|
| 284 |
+
);
|
| 285 |
+
if (isset($payload['storeId']))
|
| 286 |
+
$headers[] = 'X-Magento-Store-Id: ' . $payload['storeId'];
|
| 287 |
+
return $headers;
|
| 288 |
+
}
|
| 289 |
+
|
| 290 |
+
public function makeRequest($eventType, $payload, $attempt = 1, $queueId = null)
|
| 291 |
+
{
|
| 292 |
+
try {
|
| 293 |
+
$client = new Zend_Http_Client(self::REMARKETY_EVENTS_ENDPOINT, $this->_getRequestConfig($eventType));
|
| 294 |
+
$payload = array_merge($payload, $this->_getPayloadBase($eventType));
|
| 295 |
+
$headers = $this->_getHeaders($eventType, $payload);
|
| 296 |
+
unset($payload['storeId']);
|
| 297 |
+
$json = json_encode($payload);
|
| 298 |
+
|
| 299 |
+
$response = $client
|
| 300 |
+
->setHeaders($headers)
|
| 301 |
+
->setRawData($json, 'application/json')
|
| 302 |
+
->request(self::REMARKETY_METHOD);
|
| 303 |
+
|
| 304 |
+
Mage::log("Sent event to endpoint: ".$json."; Response (".$response->getStatus()."): ".$response->getBody(), \Zend_Log::DEBUG, REMARKETY_LOG);
|
| 305 |
+
switch ($response->getStatus()) {
|
| 306 |
+
case '200':
|
| 307 |
+
return true;
|
| 308 |
+
case '400':
|
| 309 |
+
throw new Exception('Request has been malformed.');
|
| 310 |
+
case '401':
|
| 311 |
+
throw new Exception('Request failed, probably wrong API key or inactive account.');
|
| 312 |
+
default:
|
| 313 |
+
$this->_queueRequest($eventType, $payload, $attempt, $queueId);
|
| 314 |
+
}
|
| 315 |
+
} catch(Exception $e) {
|
| 316 |
+
$this->_queueRequest($eventType, $payload, $attempt, $queueId);
|
| 317 |
+
}
|
| 318 |
+
|
| 319 |
+
return false;
|
| 320 |
+
}
|
| 321 |
+
|
| 322 |
+
protected function _queueRequest($eventType, $payload, $attempt, $queueId)
|
| 323 |
+
{
|
| 324 |
+
$queueModel = Mage::getModel('mgconnector/queue');
|
| 325 |
+
|
| 326 |
+
if(!empty($this->_intervals[$attempt-1])) {
|
| 327 |
+
$now = time();
|
| 328 |
+
$nextAttempt = $now + (int)$this->_intervals[$attempt-1] * 60;
|
| 329 |
+
if($queueId) {
|
| 330 |
+
$queueModel->load($queueId);
|
| 331 |
+
$queueModel->setAttempts($attempt);
|
| 332 |
+
$queueModel->setLastAttempt( date("Y-m-d H:i:s", $now) );
|
| 333 |
+
$queueModel->setNextAttempt( date("Y-m-d H:i:s", $nextAttempt) );
|
| 334 |
+
} else {
|
| 335 |
+
$queueModel->setData(array(
|
| 336 |
+
'event_type' => $eventType,
|
| 337 |
+
'payload' => serialize($payload),
|
| 338 |
+
'attempts' => $attempt,
|
| 339 |
+
'last_attempt' => date("Y-m-d H:i:s", $now),
|
| 340 |
+
'next_attempt' => date("Y-m-d H:i:s", $nextAttempt),
|
| 341 |
+
));
|
| 342 |
+
}
|
| 343 |
+
return $queueModel->save();
|
| 344 |
+
} elseif($queueId) {
|
| 345 |
+
$queueModel->load($queueId);
|
| 346 |
+
$queueModel->setStatus(0);
|
| 347 |
+
return $queueModel->save();
|
| 348 |
+
}
|
| 349 |
+
return false;
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
+
protected function _getPayloadBase($eventType)
|
| 353 |
+
{
|
| 354 |
+
date_default_timezone_set('UTC');
|
| 355 |
+
$arr = array(
|
| 356 |
+
'timestamp' => (string)time(),
|
| 357 |
+
'event_id' => $eventType,
|
| 358 |
+
);
|
| 359 |
+
return $arr;
|
| 360 |
+
}
|
| 361 |
+
|
| 362 |
+
protected function _prepareCustomerUpdateData()
|
| 363 |
+
{
|
| 364 |
+
$arr = array(
|
| 365 |
+
'id' => (int)$this->_customer->getId(),
|
| 366 |
+
'email' => $this->_customer->getEmail(),
|
| 367 |
+
'created_at' => date('c', strtotime($this->_customer->getCreatedAt())),
|
| 368 |
+
'first_name' => $this->_customer->getFirstname(),
|
| 369 |
+
'last_name' => $this->_customer->getLastname(),
|
| 370 |
+
'store_id' => $this->_customer->getStoreId(),
|
| 371 |
+
//'extra_info' => array(),
|
| 372 |
+
);
|
| 373 |
+
|
| 374 |
+
$isSubscribed = $this->_customer->getIsSubscribed();
|
| 375 |
+
if($isSubscribed === null) {
|
| 376 |
+
$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($this->_customer->getEmail());
|
| 377 |
+
if($subscriber->getId()) {
|
| 378 |
+
$isSubscribed = $subscriber->getData('subscriber_status') == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
|
| 379 |
+
} else {
|
| 380 |
+
$isSubscribed = false;
|
| 381 |
+
}
|
| 382 |
+
}
|
| 383 |
+
$arr = array_merge($arr, array('accepts_marketing' => (bool)$isSubscribed));
|
| 384 |
+
|
| 385 |
+
if($title = $this->_customer->getPrefix()) {
|
| 386 |
+
$arr = array_merge($arr, array('title' => $title));
|
| 387 |
+
}
|
| 388 |
+
|
| 389 |
+
if($dob = $this->_customer->getDob()) {
|
| 390 |
+
$arr = array_merge($arr, array('birthdate' => $dob));
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
if($gender = $this->_customer->getGender()) {
|
| 394 |
+
$arr = array_merge($arr, array('gender' => $gender));
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
if($address = $this->_customer->getDefaultBillingAddress()) {
|
| 398 |
+
$street = $address->getStreet();
|
| 399 |
+
$arr = array_merge($arr, array('default_address' => array(
|
| 400 |
+
'address1' => isset($street[0]) ? $street[0] : '',
|
| 401 |
+
'address2' => isset($street[1]) ? $street[1] : '',
|
| 402 |
+
'city' => $address->getCity(),
|
| 403 |
+
'province' => $address->getRegion(),
|
| 404 |
+
'phone' => $address->getTelephone(),
|
| 405 |
+
'country_code' => $address->getCountryId(),
|
| 406 |
+
'zip' => $address->getPostcode(),
|
| 407 |
+
)));
|
| 408 |
+
}
|
| 409 |
+
|
| 410 |
+
$tags = $this->_getCustomerProductTags();
|
| 411 |
+
if(!empty($tags) && $tags->getSize()) {
|
| 412 |
+
$tagsArr = array();
|
| 413 |
+
foreach ($tags as $_tag) {
|
| 414 |
+
$tagsArr[] = $_tag->getName();
|
| 415 |
+
}
|
| 416 |
+
$arr = array_merge($arr, array('tags' => $tagsArr));
|
| 417 |
+
}
|
| 418 |
+
|
| 419 |
+
if($group = Mage::getModel('customer/group')->load($this->_customer->getGroupId())) {
|
| 420 |
+
$arr = array_merge($arr, array('groups' => array(
|
| 421 |
+
array(
|
| 422 |
+
'id' => (int)$this->_customer->getGroupId(),
|
| 423 |
+
'name' => $group->getCustomerGroupCode(),
|
| 424 |
+
)
|
| 425 |
+
)));
|
| 426 |
+
}
|
| 427 |
+
|
| 428 |
+
return $arr;
|
| 429 |
+
}
|
| 430 |
+
|
| 431 |
+
protected function _getCustomerProductTags()
|
| 432 |
+
{
|
| 433 |
+
$tags = Mage::getModel('tag/tag')->getResourceCollection();
|
| 434 |
+
if (!empty($tags)) {
|
| 435 |
+
$tags = $tags
|
| 436 |
+
->joinRel()
|
| 437 |
+
->addCustomerFilter($this->_customer->getId());
|
| 438 |
+
}
|
| 439 |
+
return $tags;
|
| 440 |
+
}
|
| 441 |
+
|
| 442 |
+
protected function _prepareCustomerSubscribtionUpdateData($newsletter = false)
|
| 443 |
+
{
|
| 444 |
+
$quote = Mage::getSingleton('checkout/session')->getQuote();
|
| 445 |
+
$store = Mage::app()->getStore();
|
| 446 |
+
|
| 447 |
+
$arr = array(
|
| 448 |
+
'email' => $this->_subscriber->getSubscriberEmail(),
|
| 449 |
+
'accepts_marketing' => $this->_subscriber->getData('subscriber_status') == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED,
|
| 450 |
+
'storeId' => $store->getStoreId()
|
| 451 |
+
);
|
| 452 |
+
|
| 453 |
+
if($newsletter && (!is_object($quote) || $quote->getCheckoutMethod() !== Mage_Sales_Model_Quote::CHECKOUT_METHOD_GUEST) ){
|
| 454 |
+
$arr['is_newsletter_subscriber'] = true;
|
| 455 |
+
}
|
| 456 |
+
|
| 457 |
+
return $arr;
|
| 458 |
+
}
|
| 459 |
+
|
| 460 |
+
protected function _prepareCustomerSubscribtionDeleteData()
|
| 461 |
+
{
|
| 462 |
+
$store = Mage::app()->getStore();
|
| 463 |
+
|
| 464 |
+
$arr = array(
|
| 465 |
+
'email' => $this->_subscriber->getSubscriberEmail(),
|
| 466 |
+
'accepts_marketing' => false,
|
| 467 |
+
'storeId' => $store->getStoreId()
|
| 468 |
+
);
|
| 469 |
+
|
| 470 |
+
return $arr;
|
| 471 |
+
}
|
| 472 |
+
|
| 473 |
+
public function resend($queueItems,$resetAttempts = false) {
|
| 474 |
+
$sent=0;
|
| 475 |
+
foreach($queueItems as $_queue) {
|
| 476 |
+
$result = $this->makeRequest($_queue->getEventType(), unserialize($_queue->getPayload()), $resetAttempts ? 1 : ($_queue->getAttempts()+1), $_queue->getId());
|
| 477 |
+
if($result) {
|
| 478 |
+
Mage::getModel('mgconnector/queue')
|
| 479 |
+
->load($_queue->getId())
|
| 480 |
+
->delete();
|
| 481 |
+
$sent++;
|
| 482 |
+
}
|
| 483 |
+
}
|
| 484 |
+
return $sent;
|
| 485 |
+
}
|
| 486 |
+
|
| 487 |
+
public function run()
|
| 488 |
+
{
|
| 489 |
+
$collection = Mage::getModel('mgconnector/queue')->getCollection();
|
| 490 |
+
$nextAttempt = date("Y-m-d H:i:s");
|
| 491 |
+
$collection
|
| 492 |
+
->getSelect()
|
| 493 |
+
->where('next_attempt <= ?', $nextAttempt)
|
| 494 |
+
->where('status = 1')
|
| 495 |
+
->order('main_table.next_attempt asc');
|
| 496 |
+
$this->resend($collection);
|
| 497 |
+
return $this;
|
| 498 |
+
}
|
| 499 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Queue.php
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Queue model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Model_Queue extends Mage_Core_Model_Abstract
|
| 11 |
+
{
|
| 12 |
+
protected function _construct()
|
| 13 |
+
{
|
| 14 |
+
$this->_init('mgconnector/queue');
|
| 15 |
+
}
|
| 16 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Recovery.php
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Remarkety Mgconnector recovery controller.
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Model_Recovery
|
| 11 |
+
{
|
| 12 |
+
private $_apikey;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Remarkety_Mgconnector_Model_Recovery constructor.
|
| 16 |
+
*/
|
| 17 |
+
public function __construct()
|
| 18 |
+
{
|
| 19 |
+
$this->_apikey = Mage::getStoreConfig('remarkety/mgconnector/api_key');
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Restore quote.
|
| 24 |
+
*
|
| 25 |
+
* @param int $quoteId
|
| 26 |
+
* @return Remarkety_Mgconnector_Model_Recovery
|
| 27 |
+
* @throws Mage_Core_Exception
|
| 28 |
+
*/
|
| 29 |
+
public function quoteRestore($quoteId)
|
| 30 |
+
{
|
| 31 |
+
/** @var Mage_Checkout_Model_Session $checkoutSession */
|
| 32 |
+
$checkoutSession = Mage::getSingleton('checkout/session');
|
| 33 |
+
|
| 34 |
+
$checkoutSession->setQuoteId($quoteId);
|
| 35 |
+
|
| 36 |
+
/** @var Mage_Sales_Model_Quote $quoteModel */
|
| 37 |
+
$quote = $checkoutSession->getQuote();
|
| 38 |
+
|
| 39 |
+
$quote->getAddressesCollection();
|
| 40 |
+
$quote->getItemsCollection();
|
| 41 |
+
$quote->getPaymentsCollection();
|
| 42 |
+
|
| 43 |
+
$quote->getPaymentsCollection()->walk('delete');
|
| 44 |
+
$quote->getAddressesCollection()->walk('delete');
|
| 45 |
+
|
| 46 |
+
$quote
|
| 47 |
+
->setIsActive(true)
|
| 48 |
+
->setCustomerId(null)
|
| 49 |
+
->setCustomerEmail(null)
|
| 50 |
+
->setCustomerFirstname(null)
|
| 51 |
+
->setCustomerMiddlename(null)
|
| 52 |
+
->setCustomerLastname(null)
|
| 53 |
+
->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID)
|
| 54 |
+
->save();
|
| 55 |
+
|
| 56 |
+
return $this;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* Generates signed cart id for urls
|
| 61 |
+
* @param $id
|
| 62 |
+
* @return string
|
| 63 |
+
*/
|
| 64 |
+
public function encodeQuoteId($id){
|
| 65 |
+
$sign = md5($id . '.' . $this->_apikey);
|
| 66 |
+
return base64_encode($id . ':' . $sign);
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* Decodes signed cart ids from urls
|
| 71 |
+
* @param $hashed_id
|
| 72 |
+
* @return bool|int
|
| 73 |
+
*/
|
| 74 |
+
public function decodeQuoteId($hashed_id){
|
| 75 |
+
$id = null;
|
| 76 |
+
$parts = base64_decode($hashed_id);
|
| 77 |
+
if(!empty($parts)){
|
| 78 |
+
$split = explode(':', $parts);
|
| 79 |
+
if(count($split) == 2){
|
| 80 |
+
$cart_id = $split[0];
|
| 81 |
+
if(is_numeric($cart_id)){
|
| 82 |
+
$sign = md5($cart_id . '.' . $this->_apikey);
|
| 83 |
+
$sign_from_request = $split[1];
|
| 84 |
+
if($sign === $sign_from_request){
|
| 85 |
+
return (int)$cart_id;
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
return false;
|
| 91 |
+
}
|
| 92 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Request.php
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Request model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Model_Request
|
| 11 |
+
{
|
| 12 |
+
const REMARKETY_URI = 'https://app.remarkety.com/public/install/notify';
|
| 13 |
+
const REMARKETY_STOREID_URI = 'https://app.remarkety.com/public/install/get-store-id';
|
| 14 |
+
const REMARKETY_METHOD = 'POST';
|
| 15 |
+
const REMARKETY_TIMEOUT = 10;
|
| 16 |
+
const REMARKETY_VERSION = 0.9;
|
| 17 |
+
const REMARKETY_PLATFORM = 'MAGENTO';
|
| 18 |
+
const REMARKETY_OEM = 'remarkety';
|
| 19 |
+
|
| 20 |
+
protected function _getRequestConfig()
|
| 21 |
+
{
|
| 22 |
+
return array(
|
| 23 |
+
'adapter' => 'Zend_Http_Client_Adapter_Curl',
|
| 24 |
+
'curloptions' => array(
|
| 25 |
+
// CURLOPT_FOLLOWLOCATION => true,
|
| 26 |
+
CURLOPT_HEADER => true,
|
| 27 |
+
CURLOPT_CONNECTTIMEOUT => self::REMARKETY_TIMEOUT,
|
| 28 |
+
// CURLOPT_SSL_CIPHER_LIST => "RC4-SHA"
|
| 29 |
+
// CURLOPT_SSL_VERIFYPEER => false,
|
| 30 |
+
),
|
| 31 |
+
);
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
protected function _getPayloadBase()
|
| 35 |
+
{
|
| 36 |
+
$domain = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
| 37 |
+
$domain = substr($domain, 7, -1);
|
| 38 |
+
|
| 39 |
+
$version = Mage::getVersion();
|
| 40 |
+
$version .= ' ' . (Mage::helper('core')->isModuleEnabled('Enterprise_Enterprise') ? 'EE' : 'CE');
|
| 41 |
+
|
| 42 |
+
$arr = array(
|
| 43 |
+
'domain' => $domain,
|
| 44 |
+
'platform' => Remarkety_Mgconnector_Model_Request::REMARKETY_PLATFORM,
|
| 45 |
+
'version' => $version,
|
| 46 |
+
'oem' => Remarkety_Mgconnector_Model_Request::REMARKETY_OEM,
|
| 47 |
+
);
|
| 48 |
+
return $arr;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function getStoreID($magento_store_id){
|
| 52 |
+
try {
|
| 53 |
+
$store = Mage::getModel('core/store')->load($magento_store_id);
|
| 54 |
+
$payload = $this->_getPayloadBase();
|
| 55 |
+
|
| 56 |
+
$payload['selectedView'] = json_encode(array(
|
| 57 |
+
'website_id' => $store->getWebsiteId(),
|
| 58 |
+
'store_id' => $store->getGroupId(),
|
| 59 |
+
'view_id' => $magento_store_id,
|
| 60 |
+
));
|
| 61 |
+
$payload['key'] = Mage::getStoreConfig('remarkety/mgconnector/api_key');
|
| 62 |
+
|
| 63 |
+
$client = new Zend_Http_Client(
|
| 64 |
+
self::REMARKETY_STOREID_URI,
|
| 65 |
+
$this->_getRequestConfig()
|
| 66 |
+
);
|
| 67 |
+
$client->setParameterPost($payload);
|
| 68 |
+
$response = $client->request(self::REMARKETY_METHOD);
|
| 69 |
+
|
| 70 |
+
Mage::log(var_export($payload, true), null, 'remarkety-ext.log');
|
| 71 |
+
Mage::log($response->getStatus(), null, 'remarkety-ext.log');
|
| 72 |
+
Mage::log($response->getBody(), null, 'remarkety-ext.log');
|
| 73 |
+
|
| 74 |
+
$body = (array)json_decode($response->getBody());
|
| 75 |
+
|
| 76 |
+
Mage::getSingleton('core/session')->setRemarketyLastResponseStatus($response->getStatus() === 200 ? 1 : 0);
|
| 77 |
+
Mage::getSingleton('core/session')->setRemarketyLastResponseMessage(serialize($body));
|
| 78 |
+
if($response->getStatus() == "200"){
|
| 79 |
+
if(!empty($body['storePublicId'])){
|
| 80 |
+
return $body['storePublicId'];
|
| 81 |
+
}
|
| 82 |
+
//if no store id
|
| 83 |
+
throw new Exception('Response from Remarkety without storeId');
|
| 84 |
+
}
|
| 85 |
+
switch ($response->getStatus()) {
|
| 86 |
+
case '200':
|
| 87 |
+
return $body;
|
| 88 |
+
case '400':
|
| 89 |
+
throw new Exception('Request failed. ' . $body['message']);
|
| 90 |
+
default:
|
| 91 |
+
throw new Exception('Request to remarkety servers failed ('.$response->getStatus().')');
|
| 92 |
+
}
|
| 93 |
+
} catch(Exception $e) {
|
| 94 |
+
Mage::log($e->getMessage(), null, 'remarkety-ext.log');
|
| 95 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
+
public function makeRequest($payload)
|
| 99 |
+
{
|
| 100 |
+
try {
|
| 101 |
+
$payload = array_merge($payload, $this->_getPayloadBase());
|
| 102 |
+
$client = new Zend_Http_Client(
|
| 103 |
+
self::REMARKETY_URI,
|
| 104 |
+
$this->_getRequestConfig()
|
| 105 |
+
);
|
| 106 |
+
$client->setParameterPost($payload);
|
| 107 |
+
$response = $client->request(self::REMARKETY_METHOD);
|
| 108 |
+
|
| 109 |
+
Mage::log(var_export($payload, true), null, 'remarkety-ext.log');
|
| 110 |
+
Mage::log($response->getStatus(), null, 'remarkety-ext.log');
|
| 111 |
+
Mage::log($response->getBody(), null, 'remarkety-ext.log');
|
| 112 |
+
|
| 113 |
+
$body = (array)json_decode($response->getBody());
|
| 114 |
+
|
| 115 |
+
Mage::getSingleton('core/session')->setRemarketyLastResponseStatus($response->getStatus() === 200 ? 1 : 0);
|
| 116 |
+
Mage::getSingleton('core/session')->setRemarketyLastResponseMessage(serialize($body));
|
| 117 |
+
|
| 118 |
+
switch ($response->getStatus()) {
|
| 119 |
+
case '200':
|
| 120 |
+
return $body;
|
| 121 |
+
case '400':
|
| 122 |
+
throw new Exception('Request failed. ' . $body['message']);
|
| 123 |
+
default:
|
| 124 |
+
throw new Exception('Request to remarkety servers failed ('.$response->getStatus().')');
|
| 125 |
+
}
|
| 126 |
+
} catch(Exception $e) {
|
| 127 |
+
Mage::log($e->getMessage(), null, 'remarkety-ext.log');
|
| 128 |
+
throw new Mage_Core_Exception($e->getMessage());
|
| 129 |
+
}
|
| 130 |
+
}
|
| 131 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Resource/Coupon.php
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magento.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magento.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category Mage
|
| 22 |
+
* @package Mage_SalesRule
|
| 23 |
+
* @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
|
| 24 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* SalesRule Resource Coupon
|
| 30 |
+
*
|
| 31 |
+
* @category Remarkety
|
| 32 |
+
* @package Remarkety_Mgconnector
|
| 33 |
+
* @author Rafal Andryanczyk <rafal.andryanczyk@gmail.com>
|
| 34 |
+
*/
|
| 35 |
+
class Remarkety_Mgconnector_Model_Resource_Coupon extends Mage_SalesRule_Model_Resource_Coupon
|
| 36 |
+
{
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* Update auto generated Specific Coupon if it's rule changed
|
| 40 |
+
*
|
| 41 |
+
* @param Mage_SalesRule_Model_Rule $rule
|
| 42 |
+
* @return Mage_SalesRule_Model_Resource_Coupon
|
| 43 |
+
*/
|
| 44 |
+
public function updateSpecificCoupons(Mage_SalesRule_Model_Rule $rule)
|
| 45 |
+
{
|
| 46 |
+
|
| 47 |
+
if (!$rule || !$rule->getId() || !$rule->hasDataChanges()) {
|
| 48 |
+
return $this;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
$updateArray = array();
|
| 52 |
+
if ($rule->dataHasChangedFor('uses_per_coupon')) {
|
| 53 |
+
$updateArray['usage_limit'] = $rule->getUsesPerCoupon();
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
if ($rule->dataHasChangedFor('uses_per_customer')) {
|
| 57 |
+
$updateArray['usage_per_customer'] = $rule->getUsesPerCustomer();
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
$ruleNewDate = new Zend_Date($rule->getToDate());
|
| 61 |
+
$ruleOldDate = new Zend_Date($rule->getOrigData('to_date'));
|
| 62 |
+
|
| 63 |
+
if ($ruleNewDate->compare($ruleOldDate)) {
|
| 64 |
+
$updateArray['expiration_date'] = $rule->getToDate();
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
if (!empty($updateArray)) {
|
| 68 |
+
$this->_getWriteAdapter()->update(
|
| 69 |
+
$this->getTable('salesrule/coupon'),
|
| 70 |
+
$updateArray,
|
| 71 |
+
array('rule_id = ?' => $rule->getId(),'added_by_remarkety is null')
|
| 72 |
+
);
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
return $this;
|
| 76 |
+
}
|
| 77 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Resource/Queue.php
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Queue resource model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
if (version_compare(Mage::getVersion(), '1.6', '>=')) {
|
| 11 |
+
|
| 12 |
+
class Remarkety_Mgconnector_Model_Resource_Queue extends Mage_Core_Model_Resource_Db_Abstract
|
| 13 |
+
{
|
| 14 |
+
protected function _construct()
|
| 15 |
+
{
|
| 16 |
+
$this->_init('mgconnector/queue', 'queue_id');
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
} else {
|
| 21 |
+
|
| 22 |
+
class Remarkety_Mgconnector_Model_Resource_Queue extends Mage_Core_Model_Mysql4_Abstract
|
| 23 |
+
{
|
| 24 |
+
protected function _construct()
|
| 25 |
+
{
|
| 26 |
+
$this->_init('mgconnector/queue', 'queue_id');
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Resource/Queue/Collection.php
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Mgconnector collection resource model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
if (version_compare(Mage::getVersion(), '1.6', '>=')) {
|
| 11 |
+
|
| 12 |
+
class Remarkety_Mgconnector_Model_Resource_Queue_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
| 13 |
+
{
|
| 14 |
+
protected function _construct()
|
| 15 |
+
{
|
| 16 |
+
$this->_init('mgconnector/queue');
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
} else {
|
| 21 |
+
|
| 22 |
+
class Remarkety_Mgconnector_Model_Resource_Queue_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
| 23 |
+
{
|
| 24 |
+
protected function _construct()
|
| 25 |
+
{
|
| 26 |
+
$this->_init('mgconnector/queue');
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Resource/Rule/Collection.php
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Mgconnector Sales Rules resource collection model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Rafał Andryanczyk <rafal.andryanczyk@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Model_Resource_Rule_Collection extends Mage_SalesRule_Model_Resource_Rule_Collection
|
| 11 |
+
{
|
| 12 |
+
|
| 13 |
+
/**
|
| 14 |
+
* Filter collection by specified website, customer group, coupon code, date.
|
| 15 |
+
* Filter collection to use only active rules.
|
| 16 |
+
* Involved sorting by sort_order column.
|
| 17 |
+
*
|
| 18 |
+
* @param int $websiteId
|
| 19 |
+
* @param int $customerGroupId
|
| 20 |
+
* @param string $couponCode
|
| 21 |
+
* @param string|null $now
|
| 22 |
+
* @use $this->addWebsiteGroupDateFilter()
|
| 23 |
+
*
|
| 24 |
+
* @return Mage_SalesRule_Model_Resource_Rule_Collection
|
| 25 |
+
*/
|
| 26 |
+
public function setValidationFilter($websiteId, $customerGroupId, $couponCode = '', $now = null)
|
| 27 |
+
{
|
| 28 |
+
if (!$this->getFlag('validation_filter')) {
|
| 29 |
+
|
| 30 |
+
if (is_null($now)) {
|
| 31 |
+
$now = Mage::getModel('core/date')->date('Y-m-d');
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
/* We need to overwrite joinLeft if coupon is applied */
|
| 36 |
+
$this->getSelect()->reset();
|
| 37 |
+
Mage_Rule_Model_Resource_Rule_Collection_Abstract::_initSelect();
|
| 38 |
+
|
| 39 |
+
$this->addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now);
|
| 40 |
+
$select = $this->getSelect();
|
| 41 |
+
|
| 42 |
+
$connection = $this->getConnection();
|
| 43 |
+
if (strlen($couponCode)) {
|
| 44 |
+
$select->joinLeft(
|
| 45 |
+
array('rule_coupons' => $this->getTable('salesrule/coupon')),
|
| 46 |
+
$connection->quoteInto(
|
| 47 |
+
'main_table.rule_id = rule_coupons.rule_id AND main_table.coupon_type != ?',
|
| 48 |
+
Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON
|
| 49 |
+
),
|
| 50 |
+
array('code')
|
| 51 |
+
);
|
| 52 |
+
|
| 53 |
+
$noCouponCondition = $connection->quoteInto(
|
| 54 |
+
'main_table.coupon_type = ? ',
|
| 55 |
+
Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON
|
| 56 |
+
);
|
| 57 |
+
|
| 58 |
+
$orWhereConditions = array(
|
| 59 |
+
$connection->quoteInto(
|
| 60 |
+
'(main_table.coupon_type = ? AND rule_coupons.type = 0)',
|
| 61 |
+
Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO
|
| 62 |
+
),
|
| 63 |
+
$connection->quoteInto(
|
| 64 |
+
'(main_table.coupon_type = ? AND main_table.use_auto_generation = 1 AND rule_coupons.type = 1)',
|
| 65 |
+
Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC
|
| 66 |
+
),
|
| 67 |
+
$connection->quoteInto(
|
| 68 |
+
'(main_table.coupon_type = ? AND main_table.use_auto_generation = 0 AND rule_coupons.type = 0)',
|
| 69 |
+
Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC
|
| 70 |
+
),
|
| 71 |
+
);
|
| 72 |
+
$orWhereCondition = implode(' OR ', $orWhereConditions);
|
| 73 |
+
$select->where(
|
| 74 |
+
$noCouponCondition . ' OR ((' . $orWhereCondition . ') AND rule_coupons.code = ?)', $couponCode
|
| 75 |
+
);
|
| 76 |
+
|
| 77 |
+
$select->where('(rule_coupons.expiration_date IS NULL) AND
|
| 78 |
+
(to_date is null or to_date >= ?)
|
| 79 |
+
OR
|
| 80 |
+
(rule_coupons.expiration_date IS NOT NULL) AND
|
| 81 |
+
(rule_coupons.expiration_date >= ?) ', $now);
|
| 82 |
+
} else {
|
| 83 |
+
$this->addFieldToFilter('main_table.coupon_type', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON);
|
| 84 |
+
}
|
| 85 |
+
$this->setOrder('sort_order', self::SORT_ORDER_ASC);
|
| 86 |
+
$this->setFlag('validation_filter', true);
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
return $this;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
/**
|
| 93 |
+
* Filter collection by website(s), customer group(s) and date.
|
| 94 |
+
* Filter collection to only active rules.
|
| 95 |
+
* Sorting is not involved
|
| 96 |
+
*
|
| 97 |
+
* @param int $websiteId
|
| 98 |
+
* @param int $customerGroupId
|
| 99 |
+
* @param string|null $now
|
| 100 |
+
* @use $this->addWebsiteFilter()
|
| 101 |
+
*
|
| 102 |
+
* @return Mage_SalesRule_Model_Mysql4_Rule_Collection
|
| 103 |
+
*/
|
| 104 |
+
public function addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now = null)
|
| 105 |
+
{
|
| 106 |
+
|
| 107 |
+
if (!$this->getFlag('website_group_date_filter')) {
|
| 108 |
+
if (is_null($now)) {
|
| 109 |
+
$now = Mage::getModel('core/date')->date('Y-m-d');
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
$this->addWebsiteFilter($websiteId);
|
| 113 |
+
|
| 114 |
+
$entityInfo = $this->_getAssociatedEntityInfo('customer_group');
|
| 115 |
+
$connection = $this->getConnection();
|
| 116 |
+
$this->getSelect()
|
| 117 |
+
->joinInner(
|
| 118 |
+
array('customer_group_ids' => $this->getTable($entityInfo['associations_table'])),
|
| 119 |
+
$connection->quoteInto(
|
| 120 |
+
'main_table.' . $entityInfo['rule_id_field']
|
| 121 |
+
. ' = customer_group_ids.' . $entityInfo['rule_id_field']
|
| 122 |
+
. ' AND customer_group_ids.' . $entityInfo['entity_id_field'] . ' = ?',
|
| 123 |
+
(int)$customerGroupId
|
| 124 |
+
),
|
| 125 |
+
array()
|
| 126 |
+
)
|
| 127 |
+
->where('from_date is null or from_date <= ?', $now);
|
| 128 |
+
|
| 129 |
+
|
| 130 |
+
$this->addIsActiveFilter();
|
| 131 |
+
|
| 132 |
+
$this->setFlag('website_group_date_filter', true);
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
return $this;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Resource/Setup.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Mgconnector resource setup model
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
|
| 11 |
+
{
|
| 12 |
+
|
| 13 |
+
}
|
app/code/community/Remarkety/Mgconnector/Model/Webtracking.php
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
Class Remarkety_Mgconnector_Model_Webtracking extends Mage_Core_Model_Abstract
|
| 4 |
+
{
|
| 5 |
+
const RM_STORE_ID = 'remarkety/mgconnector/public_storeId';
|
| 6 |
+
const RM_BYPASS_CACHE = 'remarkety/mgconnector/bypass_cache';
|
| 7 |
+
const STORE_SCOPE = 'stores';
|
| 8 |
+
public function getRemarketyPublicId($store = null)
|
| 9 |
+
{
|
| 10 |
+
$store = is_null($store) ? Mage::app()->getStore() : $store;
|
| 11 |
+
$store_id = is_numeric($store) ? $store : $store->getStoreId();
|
| 12 |
+
$id = Mage::getStoreConfig(self::RM_STORE_ID, $store_id);
|
| 13 |
+
return (empty($id) || is_null($id)) ? false : $id;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
public function setRemarketyPublicId($store, $newId)
|
| 17 |
+
{
|
| 18 |
+
$store_id = is_numeric($store) ? $store : $store->getStoreId();
|
| 19 |
+
Mage::getModel('core/config')->saveConfig(
|
| 20 |
+
self::RM_STORE_ID,
|
| 21 |
+
$newId,
|
| 22 |
+
self::STORE_SCOPE,
|
| 23 |
+
$store_id
|
| 24 |
+
);
|
| 25 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public static function getBypassCache()
|
| 29 |
+
{
|
| 30 |
+
return $apiKey = Mage::getStoreConfig(self::RM_BYPASS_CACHE);
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* @param bool $bool_val
|
| 35 |
+
*/
|
| 36 |
+
public function setBypassCache($bool_val)
|
| 37 |
+
{
|
| 38 |
+
Mage::getModel('core/config')->saveConfig(self::RM_BYPASS_CACHE, $bool_val);
|
| 39 |
+
}
|
| 40 |
+
}
|
app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/ConfigureController.php
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml Configure controller
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Adminhtml_ConfigureController extends Mage_Adminhtml_Controller_Action
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Init action
|
| 14 |
+
*
|
| 15 |
+
* @return Remarkety_Mgconnector_Adminhtml_ConfigureController
|
| 16 |
+
*/
|
| 17 |
+
protected function _initAction()
|
| 18 |
+
{
|
| 19 |
+
$this
|
| 20 |
+
->loadLayout()
|
| 21 |
+
->_title($this->__('Remarkety'))
|
| 22 |
+
->_setActiveMenu('mgconnector');
|
| 23 |
+
|
| 24 |
+
return $this;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Configuration action
|
| 29 |
+
*/
|
| 30 |
+
public function indexAction()
|
| 31 |
+
{
|
| 32 |
+
$mode = Mage::helper('mgconnector')->getMode();
|
| 33 |
+
if($mode === Remarkety_Mgconnector_Model_Install::MODE_WELCOME) {
|
| 34 |
+
$this
|
| 35 |
+
->_initAction()
|
| 36 |
+
->_title($this->__('Configuration'))
|
| 37 |
+
->_addContent($this->getLayout()->createBlock('mgconnector/adminhtml_configure'))
|
| 38 |
+
->renderLayout();
|
| 39 |
+
} else {
|
| 40 |
+
$this->_redirect('*/install/install');
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
public function saveAction()
|
| 45 |
+
{
|
| 46 |
+
if($this->getRequest()->isPost()) {
|
| 47 |
+
$params = $this->getRequest()->getParams();
|
| 48 |
+
|
| 49 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/intervals', $params['data']['intervals']);
|
| 50 |
+
$this->_getSession()->addSuccess($this->__('Configuration has been saved.'));
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
$this->_redirect('*/queue/index');
|
| 54 |
+
}
|
| 55 |
+
}
|
app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/InstallController.php
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml Install controller
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Adminhtml_InstallController extends Mage_Adminhtml_Controller_Action
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Init action
|
| 14 |
+
*
|
| 15 |
+
* @return Remarkety_Mgconnector_Adminhtml_InstallController
|
| 16 |
+
*/
|
| 17 |
+
protected function _initAction()
|
| 18 |
+
{
|
| 19 |
+
$this
|
| 20 |
+
->loadLayout()
|
| 21 |
+
->_title($this->__('Remarkety'))
|
| 22 |
+
->_setActiveMenu('mgconnector');
|
| 23 |
+
|
| 24 |
+
return $this;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Reinstall action
|
| 29 |
+
*/
|
| 30 |
+
public function reinstallAction()
|
| 31 |
+
{
|
| 32 |
+
$config = Mage::getModel('core/config');
|
| 33 |
+
$config
|
| 34 |
+
->deleteConfig(Remarkety_Mgconnector_Model_Install::XPATH_INSTALLED)
|
| 35 |
+
->deleteConfig('remarkety/mgconnector/api_key')
|
| 36 |
+
->deleteConfig('remarkety/mgconnector/public_storeId')
|
| 37 |
+
->deleteConfig('remarkety/mgconnector/intervals')
|
| 38 |
+
->deleteConfig('remarkety/mgconnector/last_response_status')
|
| 39 |
+
->deleteConfig('remarkety/mgconnector/last_response_message');
|
| 40 |
+
|
| 41 |
+
foreach (Mage::app()->getWebsites() as $_website) {
|
| 42 |
+
foreach ($_website->getGroups() as $_group) {
|
| 43 |
+
foreach ($_group->getStores() as $_store) {
|
| 44 |
+
$scope = $_store->getStoreId();
|
| 45 |
+
$config->deleteConfig(Remarkety_Mgconnector_Model_Install::XPATH_INSTALLED, 'stores', $scope);
|
| 46 |
+
$config->deleteConfig('remarkety/mgconnector/public_storeId', 'stores', $scope);
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 52 |
+
|
| 53 |
+
Mage::getSingleton('core/session')->unsRemarketyLastResponseMessage();
|
| 54 |
+
Mage::getSingleton('core/session')->unsRemarketyLastResponseStatus();
|
| 55 |
+
|
| 56 |
+
$this->_redirect('*/*/install');
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* Installation action
|
| 61 |
+
*/
|
| 62 |
+
public function installAction()
|
| 63 |
+
{
|
| 64 |
+
$mode = Mage::helper('mgconnector')->getMode();
|
| 65 |
+
$this
|
| 66 |
+
->_initAction()
|
| 67 |
+
->_title($this->__($this->_getTitle($mode)));
|
| 68 |
+
|
| 69 |
+
$this
|
| 70 |
+
->_addContent($this->getLayout()->createBlock(sprintf('mgconnector/adminhtml_install_%s', $mode)))
|
| 71 |
+
->_addAdditionalContent()
|
| 72 |
+
->renderLayout();
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* Enable webtracking action
|
| 77 |
+
*/
|
| 78 |
+
public function installWebtrackingAction()
|
| 79 |
+
{
|
| 80 |
+
$store_id = $this->getRequest()->getParam('store');
|
| 81 |
+
if(!is_numeric($store_id) || is_null($store_id)){
|
| 82 |
+
throw new Exception("Missing store id");
|
| 83 |
+
}
|
| 84 |
+
/**
|
| 85 |
+
* @var $m Remarkety_Mgconnector_Model_Webtracking
|
| 86 |
+
*/
|
| 87 |
+
$m = Mage::getModel('mgconnector/webtracking');
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* @var $req Remarkety_Mgconnector_Model_Request
|
| 91 |
+
*/
|
| 92 |
+
$req = Mage::getModel('mgconnector/request');
|
| 93 |
+
$rmStoreId = $req->getStoreID($store_id);
|
| 94 |
+
if($rmStoreId){
|
| 95 |
+
$m->setRemarketyPublicId($store_id, $rmStoreId);
|
| 96 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 97 |
+
}
|
| 98 |
+
$this->_redirect('*/install/install', array('mode' => 'welcome'));
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* Disable webtracking action
|
| 103 |
+
*/
|
| 104 |
+
public function disableWebtrackingAction()
|
| 105 |
+
{
|
| 106 |
+
$store_id = $this->getRequest()->getParam('store');
|
| 107 |
+
if(!is_numeric($store_id) || is_null($store_id)){
|
| 108 |
+
throw new Exception("Missing store id");
|
| 109 |
+
}
|
| 110 |
+
/**
|
| 111 |
+
* @var $m Remarkety_Mgconnector_Model_Webtracking
|
| 112 |
+
*/
|
| 113 |
+
$m = Mage::getModel('mgconnector/webtracking');
|
| 114 |
+
$m->setRemarketyPublicId($store_id, null);
|
| 115 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 116 |
+
$this->_redirect('*/install/install', array('mode' => 'welcome'));
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
protected function _addAdditionalContent()
|
| 120 |
+
{
|
| 121 |
+
$mode = Mage::helper('mgconnector')->getMode();
|
| 122 |
+
|
| 123 |
+
switch($mode) {
|
| 124 |
+
case Remarkety_Mgconnector_Model_Install::MODE_WELCOME:
|
| 125 |
+
$this->_addContent($this->getLayout()->createBlock('mgconnector/adminhtml_install_welcome_store'));
|
| 126 |
+
break;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
return $this;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
/**
|
| 133 |
+
* Return title
|
| 134 |
+
*
|
| 135 |
+
* @param string $mode
|
| 136 |
+
* @return string
|
| 137 |
+
*/
|
| 138 |
+
protected function _getTitle($mode) {
|
| 139 |
+
return ucwords(str_replace('_', ' - ', $mode));
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
/**
|
| 143 |
+
* Complete action
|
| 144 |
+
*/
|
| 145 |
+
public function completeAction()
|
| 146 |
+
{
|
| 147 |
+
$redirectBack = true;
|
| 148 |
+
|
| 149 |
+
if($this->getRequest()->isPost()) {
|
| 150 |
+
$params = $this->getRequest()->getParams();
|
| 151 |
+
|
| 152 |
+
try {
|
| 153 |
+
$install = Mage::getModel('mgconnector/install')
|
| 154 |
+
->setData($params['data']);
|
| 155 |
+
|
| 156 |
+
switch($params['data']['mode']) {
|
| 157 |
+
case Remarkety_Mgconnector_Model_Install::MODE_INSTALL_CREATE:
|
| 158 |
+
$install->installByCreateExtension();
|
| 159 |
+
break;
|
| 160 |
+
case Remarkety_Mgconnector_Model_Install::MODE_INSTALL_LOGIN:
|
| 161 |
+
$install->installByLoginExtension();
|
| 162 |
+
break;
|
| 163 |
+
case Remarkety_Mgconnector_Model_Install::MODE_UPGRADE:
|
| 164 |
+
$install->upgradeExtension();
|
| 165 |
+
break;
|
| 166 |
+
case Remarkety_Mgconnector_Model_Install::MODE_COMPLETE:
|
| 167 |
+
$install->completeExtensionInstallation();
|
| 168 |
+
break;
|
| 169 |
+
default:
|
| 170 |
+
throw new Mage_Core_Exception('Selected mode can not be handled.');
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
$redirectBack = false;
|
| 174 |
+
} catch(Mage_Core_Exception $e) {
|
| 175 |
+
$this->_getSession()->addError($e->getMessage());
|
| 176 |
+
}
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
if($redirectBack) {
|
| 180 |
+
$mode = isset($params['data']['mode']) ? $params['data']['mode'] : null;
|
| 181 |
+
$this->_redirect('*/install/install', array('mode' => $mode));
|
| 182 |
+
} else {
|
| 183 |
+
$this->_redirect('*/install/install', array('mode' => 'welcome'));
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
}
|
app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/MgconnectorController.php
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml Mgconnector controller
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Adminhtml_MgconnectorController extends Mage_Adminhtml_Controller_Action
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Init action
|
| 14 |
+
*
|
| 15 |
+
* @return Remarkety_Mgconnector_Adminhtml_MgconnectorController
|
| 16 |
+
*/
|
| 17 |
+
protected function _initAction()
|
| 18 |
+
{
|
| 19 |
+
$this
|
| 20 |
+
->loadLayout()
|
| 21 |
+
->_title($this->__('Remarkety'))
|
| 22 |
+
->_setActiveMenu('mgconnector');
|
| 23 |
+
|
| 24 |
+
return $this;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Index action
|
| 29 |
+
*/
|
| 30 |
+
public function indexAction()
|
| 31 |
+
{
|
| 32 |
+
$this
|
| 33 |
+
->_initAction()
|
| 34 |
+
->_title($this->__('Queue'));
|
| 35 |
+
|
| 36 |
+
$this->_addContent($this->getLayout()->createBlock('mgconnector/adminhtml_queue'));
|
| 37 |
+
$this->renderLayout();
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* Reinstall action
|
| 42 |
+
*/
|
| 43 |
+
public function reinstallAction()
|
| 44 |
+
{
|
| 45 |
+
Mage::getModel('core/config')
|
| 46 |
+
->deleteConfig('remarkety/mgconnector/apikey')
|
| 47 |
+
->deleteConfig('remarkety/mgconnector/last_response')
|
| 48 |
+
->deleteConfig(Remarkety_Mgconnector_Model_Install::XPATH_INSTALLED)
|
| 49 |
+
->deleteConfig('remarkety/mgconnector/intervals');
|
| 50 |
+
|
| 51 |
+
$this->_redirect('*/*/installation');
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* Configuration action
|
| 56 |
+
*/
|
| 57 |
+
public function configurationAction()
|
| 58 |
+
{
|
| 59 |
+
$mode = $this->_initMode();
|
| 60 |
+
|
| 61 |
+
if($mode === Remarkety_Mgconnector_Model_Install::MODE_CONFIGURATION) {
|
| 62 |
+
if($this->getRequest()->isPost()) {
|
| 63 |
+
$params = $this->getRequest()->getParams();
|
| 64 |
+
|
| 65 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/intervals', $params['data']['intervals']);
|
| 66 |
+
$this->_getSession()->addSuccess($this->__('Configuration has been saved.'));
|
| 67 |
+
|
| 68 |
+
$this->_redirect('*/*/*');
|
| 69 |
+
} else {
|
| 70 |
+
$this
|
| 71 |
+
->_initAction()
|
| 72 |
+
->_title($this->__(ucfirst($mode)));
|
| 73 |
+
|
| 74 |
+
$this->_addContent($this->getLayout()->createBlock(sprintf('mgconnector/adminhtml_configuration_%s', $mode)));
|
| 75 |
+
$this->renderLayout();
|
| 76 |
+
}
|
| 77 |
+
} else {
|
| 78 |
+
$this->_redirect('*/*/installation', array('_current' => true));
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
/**
|
| 83 |
+
* Installation action
|
| 84 |
+
*/
|
| 85 |
+
public function installationAction()
|
| 86 |
+
{
|
| 87 |
+
$mode = $this->_initMode();
|
| 88 |
+
|
| 89 |
+
$this
|
| 90 |
+
->_initAction()
|
| 91 |
+
->_title($this->__(ucfirst($mode)));
|
| 92 |
+
|
| 93 |
+
$this->_addContent($this->getLayout()->createBlock(sprintf('mgconnector/adminhtml_configuration_%s', $mode)));
|
| 94 |
+
$this->renderLayout();
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
/**
|
| 98 |
+
* Complete action
|
| 99 |
+
*/
|
| 100 |
+
public function completeAction()
|
| 101 |
+
{
|
| 102 |
+
$redirectBack = true;
|
| 103 |
+
|
| 104 |
+
if($this->getRequest()->isPost()) {
|
| 105 |
+
$params = $this->getRequest()->getParams();
|
| 106 |
+
|
| 107 |
+
try {
|
| 108 |
+
$install = Mage::getModel('mgconnector/install')
|
| 109 |
+
->setData($params['data']);
|
| 110 |
+
|
| 111 |
+
switch($params['data']['mode']) {
|
| 112 |
+
case Remarkety_Mgconnector_Model_Install::MODE_INSTALL:
|
| 113 |
+
$install->installExtension();
|
| 114 |
+
break;
|
| 115 |
+
case Remarkety_Mgconnector_Model_Install::MODE_UPGRADE:
|
| 116 |
+
$install->upgradeExtension();
|
| 117 |
+
break;
|
| 118 |
+
case Remarkety_Mgconnector_Model_Install::MODE_COMPLETE:
|
| 119 |
+
$install->completeExtensionInstallation();
|
| 120 |
+
break;
|
| 121 |
+
default:
|
| 122 |
+
throw new Mage_Core_Exception('Selected mode can not be handled.');
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
$redirectBack = false;
|
| 126 |
+
} catch(Mage_Core_Exception $e) {
|
| 127 |
+
$this->_getSession()->addError($e->getMessage());
|
| 128 |
+
}
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
$this->_redirect(sprintf('*/*/%s', $redirectBack ? 'installation' : 'configuration'));
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
/**
|
| 135 |
+
* Grid action
|
| 136 |
+
*/
|
| 137 |
+
public function gridAction()
|
| 138 |
+
{
|
| 139 |
+
$this->loadLayout();
|
| 140 |
+
$this->getResponse()->setBody(
|
| 141 |
+
$this->getLayout()->createBlock('mgconnector/adminhtml_mgconnector_grid')->toHtml()
|
| 142 |
+
);
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
/**
|
| 146 |
+
* Return mode
|
| 147 |
+
* @return string
|
| 148 |
+
* @throws Mage_Core_Exception
|
| 149 |
+
*/
|
| 150 |
+
protected function _initMode()
|
| 151 |
+
{
|
| 152 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_INSTALL;
|
| 153 |
+
|
| 154 |
+
/**
|
| 155 |
+
* If remarkety extension was installed in version lower than 1.0.0.15
|
| 156 |
+
* and remarkety web service user already exists
|
| 157 |
+
*/
|
| 158 |
+
$webServiceUser = Mage::getModel('api/user')
|
| 159 |
+
->setUsername(Remarkety_Mgconnector_Model_Install::WEB_SERVICE_USERNAME)
|
| 160 |
+
->userExists();
|
| 161 |
+
|
| 162 |
+
if($webServiceUser === true) {
|
| 163 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_UPGRADE;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
$response = Mage::getStoreConfig('remarkety/mgconnector/last_response');
|
| 167 |
+
if(!empty($response)) {
|
| 168 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_COMPLETE;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
$installed = Mage::getStoreConfig(Remarkety_Mgconnector_Model_Install::XPATH_INSTALLED);
|
| 172 |
+
if(!empty($installed)) {
|
| 173 |
+
$mode = Remarkety_Mgconnector_Model_Install::MODE_CONFIGURATION;
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
$forceMode = $this->getRequest()->getParam('mode', false);
|
| 177 |
+
if(!empty($forceMode)) {
|
| 178 |
+
$mode = $forceMode;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
if(!in_array($mode, array(
|
| 182 |
+
Remarkety_Mgconnector_Model_Install::MODE_INSTALL,
|
| 183 |
+
Remarkety_Mgconnector_Model_Install::MODE_UPGRADE,
|
| 184 |
+
Remarkety_Mgconnector_Model_Install::MODE_COMPLETE,
|
| 185 |
+
Remarkety_Mgconnector_Model_Install::MODE_CONFIGURATION
|
| 186 |
+
))) {
|
| 187 |
+
throw new Mage_Core_Exception('Installation mode can not be handled.');
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
return $mode;
|
| 191 |
+
}
|
| 192 |
+
}
|
app/code/community/Remarkety/Mgconnector/controllers/Adminhtml/QueueController.php
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Adminhtml Queue controller
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_Adminhtml_QueueController extends Mage_Adminhtml_Controller_Action
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* Init action
|
| 14 |
+
*
|
| 15 |
+
* @return Remarkety_Mgconnector_Adminhtml_QueueController
|
| 16 |
+
*/
|
| 17 |
+
protected function _initAction()
|
| 18 |
+
{
|
| 19 |
+
$this
|
| 20 |
+
->loadLayout()
|
| 21 |
+
->_title($this->__('Remarkety'))
|
| 22 |
+
->_setActiveMenu('mgconnector');
|
| 23 |
+
|
| 24 |
+
return $this;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Index action
|
| 29 |
+
*/
|
| 30 |
+
public function indexAction()
|
| 31 |
+
{
|
| 32 |
+
$this
|
| 33 |
+
->_initAction()
|
| 34 |
+
->_title($this->__('Queue'))
|
| 35 |
+
->_addContent($this->getLayout()->createBlock('mgconnector/adminhtml_queue_configure'))
|
| 36 |
+
->_addContent($this->getLayout()->createBlock('mgconnector/adminhtml_queue'))
|
| 37 |
+
->renderLayout();
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
public function saveAction()
|
| 41 |
+
{
|
| 42 |
+
if($this->getRequest()->isPost()) {
|
| 43 |
+
$params = $this->getRequest()->getParams();
|
| 44 |
+
|
| 45 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/intervals', $params['data']['intervals']);
|
| 46 |
+
|
| 47 |
+
if(isset($params['data']['api_key'])){
|
| 48 |
+
$key = $params['data']['api_key'];
|
| 49 |
+
Mage::getModel('core/config')->saveConfig('remarkety/mgconnector/api_key', $key);
|
| 50 |
+
$apiUser = Mage::getModel('api/user')->loadByUsername(\Remarkety_Mgconnector_Model_Install::WEB_SERVICE_USERNAME);
|
| 51 |
+
$apiUser
|
| 52 |
+
->setNewApiKey($key)
|
| 53 |
+
->save();
|
| 54 |
+
}
|
| 55 |
+
if(isset($params['data']['bypasscache'])){
|
| 56 |
+
Mage::getModel('core/config')->saveConfig(\Remarkety_Mgconnector_Model_Webtracking::RM_BYPASS_CACHE, true);
|
| 57 |
+
} else {
|
| 58 |
+
Mage::getModel('core/config')->saveConfig(\Remarkety_Mgconnector_Model_Webtracking::RM_BYPASS_CACHE, false);
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
Mage::app()->getCacheInstance()->cleanType('config');
|
| 62 |
+
$this->_getSession()->addSuccess($this->__('Configuration has been saved.'));
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
$this->_redirect('*/queue/index');
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* Grid action
|
| 70 |
+
*/
|
| 71 |
+
public function gridAction()
|
| 72 |
+
{
|
| 73 |
+
$this->loadLayout();
|
| 74 |
+
$this->getResponse()->setBody(
|
| 75 |
+
$this->getLayout()->createBlock('mgconnector/adminhtml_queue_grid')->toHtml()
|
| 76 |
+
);
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
public function massResendAction() {
|
| 80 |
+
|
| 81 |
+
$queueIds = $this->getRequest()->getParam('queue');
|
| 82 |
+
if (!is_array($queueIds)) {
|
| 83 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__('Please select queue item(s)'));
|
| 84 |
+
}
|
| 85 |
+
else {
|
| 86 |
+
try {
|
| 87 |
+
$collection = Mage::getModel('mgconnector/queue')->getCollection();
|
| 88 |
+
$collection
|
| 89 |
+
->addFieldToFilter('queue_id',$queueIds)
|
| 90 |
+
->getSelect();
|
| 91 |
+
$observer = Mage::getModel('mgconnector/observer');
|
| 92 |
+
$itemsSent = $observer->resend($collection);
|
| 93 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
| 94 |
+
Mage::helper('adminhtml')->__('Total of %d events(s) were resent', $itemsSent)
|
| 95 |
+
);
|
| 96 |
+
} catch (Exception $e) {
|
| 97 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
| 98 |
+
}
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
$this->_redirect('*/queue/index');
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
public function massDeleteAction() {
|
| 105 |
+
|
| 106 |
+
$queueIds = $this->getRequest()->getParam('queue');
|
| 107 |
+
if (!is_array($queueIds)) {
|
| 108 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__('Please select queue item(s)'));
|
| 109 |
+
}
|
| 110 |
+
else {
|
| 111 |
+
try {
|
| 112 |
+
$collection = Mage::getModel('mgconnector/queue')->getCollection();
|
| 113 |
+
$collection
|
| 114 |
+
->addFieldToFilter('queue_id',$queueIds)
|
| 115 |
+
->getSelect();
|
| 116 |
+
foreach ($collection as $item) {
|
| 117 |
+
$item->delete();
|
| 118 |
+
}
|
| 119 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
| 120 |
+
Mage::helper('adminhtml')->__('Total of %d events(s) were deleted', count($queueIds))
|
| 121 |
+
);
|
| 122 |
+
} catch (Exception $e) {
|
| 123 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
$this->_redirect('*/queue/index');
|
| 128 |
+
}
|
| 129 |
+
}
|
app/code/community/Remarkety/Mgconnector/controllers/RecoveryController.php
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Remarkety Mgconnector recovery controller.
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_RecoveryController extends Mage_Core_Controller_Front_Action
|
| 11 |
+
{
|
| 12 |
+
const MESSAGE_ERROR_WRONG_QUOTE_ID = 'Quote identifier has been not passed or it does not exists.';
|
| 13 |
+
const MESSAGE_ERROR_DURING_PROCESSING = 'During quote recovery error has occurred.';
|
| 14 |
+
|
| 15 |
+
/**
|
| 16 |
+
* Cart recovery controller action.
|
| 17 |
+
*/
|
| 18 |
+
public function cartAction()
|
| 19 |
+
{
|
| 20 |
+
/** @var Mage_Core_Controller_Request_Http $requestModel */
|
| 21 |
+
$requestModel = $this->getRequest();
|
| 22 |
+
|
| 23 |
+
/** @var string|bool $hashedQuoteId */
|
| 24 |
+
$hashedQuoteId = $requestModel->getParam('quote_id', false);
|
| 25 |
+
|
| 26 |
+
if (!$hashedQuoteId) {
|
| 27 |
+
Mage::throwException(self::MESSAGE_ERROR_WRONG_QUOTE_ID);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
/** @var Remarkety_Mgconnector_Model_Recovery $recovery */
|
| 31 |
+
$recovery = Mage::getModel('mgconnector/recovery');
|
| 32 |
+
|
| 33 |
+
$quoteId = $recovery->decodeQuoteId($hashedQuoteId);
|
| 34 |
+
if (!is_int($quoteId)) {
|
| 35 |
+
Mage::throwException(self::MESSAGE_ERROR_WRONG_QUOTE_ID);
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
/** @var Mage_Sales_Model_Quote $quoteModel */
|
| 39 |
+
$quote = Mage::getModel('sales/quote')->load($quoteId);
|
| 40 |
+
if (!$quote->getId()) {
|
| 41 |
+
Mage::throwException(self::MESSAGE_ERROR_WRONG_QUOTE_ID);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
try {
|
| 45 |
+
|
| 46 |
+
$recovery->quoteRestore($quoteId);
|
| 47 |
+
} catch (Mage_Core_Exception $e) {
|
| 48 |
+
Mage::throwException(self::MESSAGE_ERROR_DURING_PROCESSING);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
$this->_redirect('checkout/cart');
|
| 52 |
+
}
|
| 53 |
+
}
|
app/code/community/Remarkety/Mgconnector/controllers/WebtrackingController.php
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Remarkety Mgconnector recovery controller.
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
class Remarkety_Mgconnector_WebtrackingController extends Mage_Core_Controller_Front_Action
|
| 11 |
+
{
|
| 12 |
+
public function identifyAction()
|
| 13 |
+
{
|
| 14 |
+
$this->getResponse()->clearHeaders()->setHeader('Content-type','application/x-javascript',true);
|
| 15 |
+
$email = $this->getEmail();
|
| 16 |
+
if($email){
|
| 17 |
+
$this->getResponse()->setBody('_rmData.push(["setCustomer", "'.$email.'"]);');
|
| 18 |
+
} else {
|
| 19 |
+
$this->getResponse()->setBody('');
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
private function getEmail(){
|
| 25 |
+
if(Mage::getSingleton('customer/session')->isLoggedIn()){
|
| 26 |
+
return $this->getCustomer()->getEmail();
|
| 27 |
+
}
|
| 28 |
+
$email = Mage::getSingleton('customer/session')->getSubscriberEmail();
|
| 29 |
+
return empty($email) ? false : $email;
|
| 30 |
+
}
|
| 31 |
+
}
|
app/code/community/Remarkety/Mgconnector/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<menu>
|
| 4 |
+
<mgconnector translate="title" module="mgconnector">
|
| 5 |
+
<title>Remarkety</title>
|
| 6 |
+
<sort_order>90</sort_order>
|
| 7 |
+
<children>
|
| 8 |
+
<mgconnector_configuration translate="title" module="mgconnector">
|
| 9 |
+
<title>Remarkety Installation</title>
|
| 10 |
+
<sort_order>10</sort_order>
|
| 11 |
+
<action>adminhtml/install/complete</action>
|
| 12 |
+
</mgconnector_configuration>
|
| 13 |
+
<mgconnector_queue>
|
| 14 |
+
<title>Configuration</title>
|
| 15 |
+
<sort_order>20</sort_order>
|
| 16 |
+
<action>adminhtml/queue/index</action>
|
| 17 |
+
</mgconnector_queue>
|
| 18 |
+
</children>
|
| 19 |
+
</mgconnector>
|
| 20 |
+
</menu>
|
| 21 |
+
<acl>
|
| 22 |
+
<resources>
|
| 23 |
+
<admin>
|
| 24 |
+
<children>
|
| 25 |
+
<children>
|
| 26 |
+
<mgconnector translate="title" module="mgconnector">
|
| 27 |
+
<title>Remarkety</title>
|
| 28 |
+
<children>
|
| 29 |
+
<mgconnector_configuration translate="title" module="mgconnector">
|
| 30 |
+
<title>Remarkety Configuration</title>
|
| 31 |
+
<sort_order>10</sort_order>
|
| 32 |
+
</mgconnector_configuration>
|
| 33 |
+
<mgconnector_queue>
|
| 34 |
+
<title>Remarkety Queue</title>
|
| 35 |
+
<sort_order>20</sort_order>
|
| 36 |
+
</mgconnector_queue>
|
| 37 |
+
</children>
|
| 38 |
+
</mgconnector>
|
| 39 |
+
</children>
|
| 40 |
+
</children>
|
| 41 |
+
</admin>
|
| 42 |
+
</resources>
|
| 43 |
+
</acl>
|
| 44 |
+
<events>
|
| 45 |
+
<core_block_abstract_to_html_before>
|
| 46 |
+
<observers>
|
| 47 |
+
<multiuseraccounts_add_column_parent_customer>
|
| 48 |
+
<type>singleton</type>
|
| 49 |
+
<class>Cminds_MultiUserAccounts_Model_Observer</class>
|
| 50 |
+
<method>beforeBlockToHtml</method>
|
| 51 |
+
</multiuseraccounts_add_column_parent_customer>
|
| 52 |
+
</observers>
|
| 53 |
+
</core_block_abstract_to_html_before>
|
| 54 |
+
</events>
|
| 55 |
+
</config>
|
app/code/community/Remarkety/Mgconnector/etc/api.xml
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<config>
|
| 2 |
+
<api>
|
| 3 |
+
<resources>
|
| 4 |
+
<mgconnector_core translate="title" module="mgconnector">
|
| 5 |
+
<title>Remarkety Magento Connector Core API calls</title>
|
| 6 |
+
<model>mgconnector/core_api</model>
|
| 7 |
+
<acl>remarkety/mgconnector</acl>
|
| 8 |
+
<methods>
|
| 9 |
+
<getCustomers translate="title" module="mgconnector">
|
| 10 |
+
<title>Returns Customer details</title>
|
| 11 |
+
</getCustomers>
|
| 12 |
+
<getOrders translate="title" module="mgconnector">
|
| 13 |
+
<title>Returns Order Details</title>
|
| 14 |
+
</getOrders>
|
| 15 |
+
<getQuotes translate="title" module="mgconnector">
|
| 16 |
+
<title>Returns Quote Details</title>
|
| 17 |
+
</getQuotes>
|
| 18 |
+
<getProducts translate="title" module="mgconnector">
|
| 19 |
+
<title>Returns Product Details</title>
|
| 20 |
+
</getProducts>
|
| 21 |
+
<getStoreSettings translate="title" module="mgconnector">
|
| 22 |
+
<title>Returns General Store Settings</title>
|
| 23 |
+
</getStoreSettings>
|
| 24 |
+
<getStoreOrderStatuses translate="title" module="mgconnector">
|
| 25 |
+
<title>Returns Optional Order Statuses</title>
|
| 26 |
+
</getStoreOrderStatuses>
|
| 27 |
+
<getCustomersCount translate="title" module="mgconnector">
|
| 28 |
+
<title>Returns Customers Count</title>
|
| 29 |
+
</getCustomersCount>
|
| 30 |
+
<getOrdersCount translate="title" module="mgconnector">
|
| 31 |
+
<title>Returns Orders Count</title>
|
| 32 |
+
</getOrdersCount>
|
| 33 |
+
<getProductsCount translate="title" module="mgconnector">
|
| 34 |
+
<title>Products Count</title>
|
| 35 |
+
</getProductsCount>
|
| 36 |
+
<createCoupon translate="title" module="mgconnector">
|
| 37 |
+
<title>Coupon Creation</title>
|
| 38 |
+
</createCoupon>
|
| 39 |
+
<unsubscribe translate="title" module="mgconnector">
|
| 40 |
+
<title>Unsubscribe</title>
|
| 41 |
+
</unsubscribe>
|
| 42 |
+
<getSubscribers translate="title" module="mgconnector">
|
| 43 |
+
<title>Get newsletter subscribers</title>
|
| 44 |
+
</getSubscribers>
|
| 45 |
+
<getSubscriberCount translate="title" module="mgconnector">
|
| 46 |
+
<title>Get newsletter subscriber count</title>
|
| 47 |
+
</getSubscriberCount>
|
| 48 |
+
</methods>
|
| 49 |
+
</mgconnector_core>
|
| 50 |
+
</resources>
|
| 51 |
+
<resources_alias>
|
| 52 |
+
<dashboard>mgconnector_dashboard</dashboard>
|
| 53 |
+
<core>mgconnector_core</core>
|
| 54 |
+
</resources_alias>
|
| 55 |
+
<acl>
|
| 56 |
+
<resources>
|
| 57 |
+
<remarkety translate="title" module="mgconnector">
|
| 58 |
+
<title>Remarkety</title>
|
| 59 |
+
<sort_order>100</sort_order>
|
| 60 |
+
<mgconnector translate="title" module="mgconnector">
|
| 61 |
+
<title>Store Connector APIs</title>
|
| 62 |
+
<sort_order>100</sort_order>
|
| 63 |
+
</mgconnector>
|
| 64 |
+
</remarkety>
|
| 65 |
+
</resources>
|
| 66 |
+
</acl>
|
| 67 |
+
</api>
|
| 68 |
+
</config>
|
app/code/community/Remarkety/Mgconnector/etc/config.xml
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<config>
|
| 2 |
+
<modules>
|
| 3 |
+
<Remarkety_Mgconnector>
|
| 4 |
+
<version>1.4.3.0</version>
|
| 5 |
+
</Remarkety_Mgconnector>
|
| 6 |
+
</modules>
|
| 7 |
+
<global>
|
| 8 |
+
<models>
|
| 9 |
+
<mgconnector>
|
| 10 |
+
<class>Remarkety_Mgconnector_Model</class>
|
| 11 |
+
<resourceModel>mgconnector_resource</resourceModel>
|
| 12 |
+
</mgconnector>
|
| 13 |
+
<mgconnector_resource>
|
| 14 |
+
<class>Remarkety_Mgconnector_Model_Resource</class>
|
| 15 |
+
<entities>
|
| 16 |
+
<queue>
|
| 17 |
+
<table>remarkety_queue</table>
|
| 18 |
+
</queue>
|
| 19 |
+
</entities>
|
| 20 |
+
</mgconnector_resource>
|
| 21 |
+
<salesrule_resource>
|
| 22 |
+
<rewrite>
|
| 23 |
+
<!-- Model -->
|
| 24 |
+
<rule_collection>Remarkety_Mgconnector_Model_Resource_Rule_Collection</rule_collection>
|
| 25 |
+
<!-- Model -->
|
| 26 |
+
<coupon>Remarkety_Mgconnector_Model_Resource_Coupon</coupon>
|
| 27 |
+
</rewrite>
|
| 28 |
+
|
| 29 |
+
</salesrule_resource>
|
| 30 |
+
|
| 31 |
+
</models>
|
| 32 |
+
<resources>
|
| 33 |
+
<mgconnector_setup>
|
| 34 |
+
<setup>
|
| 35 |
+
<module>Remarkety_Mgconnector</module>
|
| 36 |
+
<class>Remarkety_Mgconnector_Model_Resource_Setup</class>
|
| 37 |
+
</setup>
|
| 38 |
+
</mgconnector_setup>
|
| 39 |
+
</resources>
|
| 40 |
+
<helpers>
|
| 41 |
+
<mgconnector>
|
| 42 |
+
<class>Remarkety_Mgconnector_Helper</class>
|
| 43 |
+
</mgconnector>
|
| 44 |
+
</helpers>
|
| 45 |
+
<blocks>
|
| 46 |
+
<mgconnector>
|
| 47 |
+
<class>Remarkety_Mgconnector_Block</class>
|
| 48 |
+
</mgconnector>
|
| 49 |
+
</blocks>
|
| 50 |
+
<events>
|
| 51 |
+
<catalog_product_save_after>
|
| 52 |
+
<observers>
|
| 53 |
+
<remarkety_catalog_product_save_after>
|
| 54 |
+
<type>singleton</type>
|
| 55 |
+
<class>mgconnector/observer</class>
|
| 56 |
+
<method>triggerProductSave</method>
|
| 57 |
+
</remarkety_catalog_product_save_after>
|
| 58 |
+
</observers>
|
| 59 |
+
</catalog_product_save_after>
|
| 60 |
+
<customer_save_after>
|
| 61 |
+
<observers>
|
| 62 |
+
<remarkety_customer_save_after_observer>
|
| 63 |
+
<type>singleton</type>
|
| 64 |
+
<class>mgconnector/observer</class>
|
| 65 |
+
<method>triggerCustomerUpdate</method>
|
| 66 |
+
</remarkety_customer_save_after_observer>
|
| 67 |
+
</observers>
|
| 68 |
+
</customer_save_after>
|
| 69 |
+
<customer_address_save_after>
|
| 70 |
+
<observers>
|
| 71 |
+
<remarkety_customer_address_save_after_observer>
|
| 72 |
+
<type>singleton</type>
|
| 73 |
+
<class>mgconnector/observer</class>
|
| 74 |
+
<method>triggerCustomerAddressUpdate</method>
|
| 75 |
+
</remarkety_customer_address_save_after_observer>
|
| 76 |
+
</observers>
|
| 77 |
+
</customer_address_save_after>
|
| 78 |
+
<customer_address_save_before>
|
| 79 |
+
<observers>
|
| 80 |
+
<remarkety_customer_address_save_before_observer>
|
| 81 |
+
<type>singleton</type>
|
| 82 |
+
<class>mgconnector/observer</class>
|
| 83 |
+
<method>triggerCustomerAddressBeforeUpdate</method>
|
| 84 |
+
</remarkety_customer_address_save_before_observer>
|
| 85 |
+
</observers>
|
| 86 |
+
</customer_address_save_before>
|
| 87 |
+
<newsletter_subscriber_save_after>
|
| 88 |
+
<observers>
|
| 89 |
+
<remarkety_newsletter_subscriber_save_after_observer>
|
| 90 |
+
<type>singleton</type>
|
| 91 |
+
<class>mgconnector/observer</class>
|
| 92 |
+
<method>triggerSubscribeUpdate</method>
|
| 93 |
+
</remarkety_newsletter_subscriber_save_after_observer>
|
| 94 |
+
</observers>
|
| 95 |
+
</newsletter_subscriber_save_after>
|
| 96 |
+
<newsletter_subscriber_delete_after>
|
| 97 |
+
<observers>
|
| 98 |
+
<remarkety_newsletter_subscriber_delete_after_observer>
|
| 99 |
+
<type>singleton</type>
|
| 100 |
+
<class>mgconnector/observer</class>
|
| 101 |
+
<method>triggerSubscribeDelete</method>
|
| 102 |
+
</remarkety_newsletter_subscriber_delete_after_observer>
|
| 103 |
+
</observers>
|
| 104 |
+
</newsletter_subscriber_delete_after>
|
| 105 |
+
<customer_delete_commit_after>
|
| 106 |
+
<observers>
|
| 107 |
+
<remarkety_customer_delete_commit_after_observer>
|
| 108 |
+
<type>singleton</type>
|
| 109 |
+
<class>mgconnector/observer</class>
|
| 110 |
+
<method>triggerCustomerDelete</method>
|
| 111 |
+
</remarkety_customer_delete_commit_after_observer>
|
| 112 |
+
</observers>
|
| 113 |
+
</customer_delete_commit_after>
|
| 114 |
+
<core_block_abstract_to_html_before>
|
| 115 |
+
<observers>
|
| 116 |
+
<remarkety_add_column_expiration_date>
|
| 117 |
+
<type>singleton</type>
|
| 118 |
+
<class>mgconnector/observer</class>
|
| 119 |
+
<method>beforeBlockToHtml</method>
|
| 120 |
+
</remarkety_add_column_expiration_date>
|
| 121 |
+
</observers>
|
| 122 |
+
</core_block_abstract_to_html_before>
|
| 123 |
+
</events>
|
| 124 |
+
</global>
|
| 125 |
+
<admin>
|
| 126 |
+
<routers>
|
| 127 |
+
<adminhtml>
|
| 128 |
+
<args>
|
| 129 |
+
<modules>
|
| 130 |
+
<Remarkety_Mgconnector before="Mage_Adminhtml">Remarkety_Mgconnector_Adminhtml</Remarkety_Mgconnector>
|
| 131 |
+
</modules>
|
| 132 |
+
</args>
|
| 133 |
+
</adminhtml>
|
| 134 |
+
</routers>
|
| 135 |
+
</admin>
|
| 136 |
+
<frontend>
|
| 137 |
+
<routers>
|
| 138 |
+
<mgconnector>
|
| 139 |
+
<use>standard</use>
|
| 140 |
+
<args>
|
| 141 |
+
<module>Remarkety_Mgconnector</module>
|
| 142 |
+
<frontName>remarkety</frontName>
|
| 143 |
+
</args>
|
| 144 |
+
</mgconnector>
|
| 145 |
+
</routers>
|
| 146 |
+
<layout>
|
| 147 |
+
<updates>
|
| 148 |
+
<mgconnector>
|
| 149 |
+
<file>mgconnector.xml</file>
|
| 150 |
+
</mgconnector>
|
| 151 |
+
</updates>
|
| 152 |
+
</layout>
|
| 153 |
+
</frontend>
|
| 154 |
+
<crontab>
|
| 155 |
+
<jobs>
|
| 156 |
+
<mgconnector_cron>
|
| 157 |
+
<schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
|
| 158 |
+
<run><model>mgconnector/observer::run</model></run>
|
| 159 |
+
</mgconnector_cron>
|
| 160 |
+
</jobs>
|
| 161 |
+
</crontab>
|
| 162 |
+
</config>
|
| 163 |
+
|
app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-install-1.0.0.13.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Install script to version 1.0.0.13
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
$installer = $this;
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
$installer->run("
|
| 14 |
+
CREATE TABLE IF NOT EXISTS `{$installer->getTable('mgconnector/queue')}` (
|
| 15 |
+
`queue_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Remarkety queue ID',
|
| 16 |
+
`event_type` varchar(20) NOT NULL COMMENT 'Event_type',
|
| 17 |
+
`payload` text NOT NULL COMMENT 'Payload',
|
| 18 |
+
`attempts` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT 'Attempts',
|
| 19 |
+
`last_attempt` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Last_attempt',
|
| 20 |
+
`next_attempt` timestamp NULL DEFAULT NULL COMMENT 'Next_attempt',
|
| 21 |
+
`status` smallint(6) NOT NULL DEFAULT '1' COMMENT 'Status',
|
| 22 |
+
PRIMARY KEY (`queue_id`)
|
| 23 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Remarkety queue table';
|
| 24 |
+
");
|
| 25 |
+
|
| 26 |
+
$installer->endSetup();
|
app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.0.0.13-1.0.0.14.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Upgrade script from version 1.0.0.13 to 1.0.0.14
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
$installer = $this;
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
$installer->run("
|
| 14 |
+
CREATE TABLE IF NOT EXISTS `{$installer->getTable('mgconnector/queue')}` (
|
| 15 |
+
`queue_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Remarkety queue ID',
|
| 16 |
+
`event_type` varchar(20) NOT NULL COMMENT 'Event_type',
|
| 17 |
+
`payload` text NOT NULL COMMENT 'Payload',
|
| 18 |
+
`attempts` smallint(5) unsigned NOT NULL DEFAULT '1' COMMENT 'Attempts',
|
| 19 |
+
`last_attempt` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Last_attempt',
|
| 20 |
+
`next_attempt` timestamp NULL DEFAULT NULL COMMENT 'Next_attempt',
|
| 21 |
+
`status` smallint(6) NOT NULL DEFAULT '1' COMMENT 'Status',
|
| 22 |
+
PRIMARY KEY (`queue_id`)
|
| 23 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Remarkety queue table';
|
| 24 |
+
");
|
| 25 |
+
|
| 26 |
+
$installer->endSetup();
|
app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.0.0.14-1.0.0.15.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Upgrade script from version 1.0.0.14 to 1.0.0.15
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
$installer = $this;
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
$installer->endSetup();
|
app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.0.0.14-1.1.0.0.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Upgrade script from version 1.0.0.14 to 1.1.0.0
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
$installer = $this;
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
$installer->endSetup();
|
app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.1.0.5-1.1.0.6.php
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Upgrade script from version 1.1.0.5 to 1.1.0.6
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Piotr Pierzak <piotrek.pierzak@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
$installer = $this;
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
//@TODO remove installed entry for 0 scope with api key
|
| 14 |
+
|
| 15 |
+
$installer->endSetup();
|
app/code/community/Remarkety/Mgconnector/sql/mgconnector_setup/mysql4-upgrade-1.1.2.8-1.3.0.0.php
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Upgrade script from version 1.1.2.8 to 1.3.0.0
|
| 5 |
+
*
|
| 6 |
+
* @category Remarkety
|
| 7 |
+
* @package Remarkety_Mgconnector
|
| 8 |
+
* @author Rafał Andryanczyk <rafal.andryanczyk@gmail.com>
|
| 9 |
+
*/
|
| 10 |
+
$installer = $this;
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
$installer->getConnection()
|
| 14 |
+
->addColumn($installer->getTable('salesrule/coupon'),'added_by_remarkety', array(
|
| 15 |
+
'type' => Varien_Db_Ddl_Table::TYPE_SMALLINT,
|
| 16 |
+
'nullable' => true,
|
| 17 |
+
'default' => null,
|
| 18 |
+
'comment' => '1 = added by remarkety api',
|
| 19 |
+
));
|
| 20 |
+
|
| 21 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/template/mgconnector/element.phtml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$_element = $this->getElement();
|
| 3 |
+
$_note = $_element->getNote();
|
| 4 |
+
$_trId = $_element->getHtmlContainerId();
|
| 5 |
+
$_class = $_element->getFieldsetHtmlClass();
|
| 6 |
+
?>
|
| 7 |
+
<?php if (!$_element->getNoDisplay()): ?>
|
| 8 |
+
<tr<?php if($_trId): ?> id="<?php echo $_trId ?>"<?php endif; ?>>
|
| 9 |
+
<?php if ($_element->getType()=='hidden'): ?>
|
| 10 |
+
<td colspan="2" class="hidden"><?php echo trim($_element->getElementHtml()) ?></td>
|
| 11 |
+
<?php else: ?>
|
| 12 |
+
<?php $label = $_element->getLabel() ? trim($_element->getLabelHtml()) : false ?>
|
| 13 |
+
<?php if(!empty($label)): ?>
|
| 14 |
+
<td class="label<?php echo $_class ? " {$_class}-label" : ''?>"><?php echo $label ?></td>
|
| 15 |
+
<?php endif; ?>
|
| 16 |
+
<td <?php echo empty($label) ? 'colspan="2"' : '' ?>
|
| 17 |
+
class="<?php echo $_element->hasValueClass() ? $_element->getValueClass() : 'value' ?><?php echo $_class ? " {$_class}-value" : ''?>"
|
| 18 |
+
style="padding: 5px 0;">
|
| 19 |
+
<?php echo trim($_element->getElementHtml()) ?>
|
| 20 |
+
<?php if ($_note): ?>
|
| 21 |
+
<p class="note<?php echo $_class ? " {$_class}-note" : ''?>" id="note_<?php echo $_element->getId()?>"><span><?php echo $_note ?></span></p>
|
| 22 |
+
<?php endif ?>
|
| 23 |
+
</td>
|
| 24 |
+
<?php endif; ?>
|
| 25 |
+
</tr>
|
| 26 |
+
<?php endif; ?>
|
app/design/adminhtml/default/default/template/mgconnector/install/welcome/store.phtml
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$stores = $this->getStoresStatus();
|
| 3 |
+
$apiValid = $this->checkAPIKey();
|
| 4 |
+
|
| 5 |
+
if (!$apiValid || \Remarkety_Mgconnector_Model_Install::isMultipleStores()) {
|
| 6 |
+
?>
|
| 7 |
+
|
| 8 |
+
<div class="entry-edit">
|
| 9 |
+
<div class="entry-edit-head">
|
| 10 |
+
<h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('Stores Configuration') ?></h4>
|
| 11 |
+
<div class="form-buttons"></div>
|
| 12 |
+
</div>
|
| 13 |
+
<div class="fieldset " id="general">
|
| 14 |
+
<div class="hor-scroll">
|
| 15 |
+
<?php if(!$apiValid): ?>
|
| 16 |
+
<strong style="color: red;">Attention! Remarkety's API key is not the same as the Magento API key. Please set it <a href="<?php echo $this->getUrl('*/queue/index'); ?>">here</a></strong>
|
| 17 |
+
(<a target="_blank" href="https://support.remarkety.com/hc/en-us/articles/209184646-Synchronizing-the-API-key">More Info</a>).
|
| 18 |
+
<?php endif; ?>
|
| 19 |
+
<?php if (\Remarkety_Mgconnector_Model_Install::isMultipleStores()): ?>
|
| 20 |
+
<table cellspacing="0" class="form-list">
|
| 21 |
+
<tbody>
|
| 22 |
+
<tr>
|
| 23 |
+
<td colspan="2" class="value" style="padding: 5px 0;">
|
| 24 |
+
<ul style="list-style-type:none;margin-left:20px;font-weight:bold;font-size:16px;">
|
| 25 |
+
<?php foreach($stores as $_website): ?>
|
| 26 |
+
<li style="margin-bottom:20px;">
|
| 27 |
+
<?php echo $_website['name']; ?>
|
| 28 |
+
<ul>
|
| 29 |
+
<?php foreach($_website['store_groups'] as $_group): ?>
|
| 30 |
+
<li style="list-style-type:none;margin-left:20px;font-weight:bold;font-size:14px;">
|
| 31 |
+
<?php echo $_group['name']; ?>
|
| 32 |
+
<ul>
|
| 33 |
+
<?php foreach($_group['store_views'] as $_store): ?>
|
| 34 |
+
<li style="list-style-type:none;margin-left:20px;font-weight:bold;font-size:12px;">
|
| 35 |
+
<?php echo $_store['name']; ?>
|
| 36 |
+
|
| 37 |
+
<?php if($_store['isInstalled']): ?>
|
| 38 |
+
<span style="color:green">(<?php echo $this->__('Installed') ?>)</span>
|
| 39 |
+
-
|
| 40 |
+
<?php if($_store['webTracking']): ?>
|
| 41 |
+
<span style="color:green"><?php echo $this->__('Website Tracking Enabled') ?></span>
|
| 42 |
+
- <a href="<?php echo $this->getUrl('*/install/disableWebtracking', array('store' => $_store['id'])) ?>"><?php echo $this->__('Disable Website Tracking'); ?></a>
|
| 43 |
+
<?php else: ?>
|
| 44 |
+
<button id="install_webtracking_button_<?php echo $_store['id'] ?>" title="Webtracking" type="button" class="scalable save" onclick="window.location = '<?php echo $this->getUrl('*/install/installWebtracking', array('store' => $_store['id'])) ?>'" style="">
|
| 45 |
+
<span><span><span>Enable Website Tracking</span></span></span>
|
| 46 |
+
</button>
|
| 47 |
+
<?php endif; ?>
|
| 48 |
+
<?php else: ?>
|
| 49 |
+
<button id="install_button_<?php echo $_store['id'] ?>" title="Save Category" type="button" class="scalable save" onclick="window.location = '<?php echo $this->getUrl('*/install/install', array('mode' => Remarkety_Mgconnector_Model_Install::MODE_INSTALL_LOGIN, 'store' => $_store['id'])) ?>'" style="">
|
| 50 |
+
<span><span><span>Install</span></span></span>
|
| 51 |
+
</button>
|
| 52 |
+
<?php endif; ?>
|
| 53 |
+
</li>
|
| 54 |
+
<?php endforeach; ?>
|
| 55 |
+
</ul>
|
| 56 |
+
</li>
|
| 57 |
+
<?php endforeach; ?>
|
| 58 |
+
</ul>
|
| 59 |
+
</li>
|
| 60 |
+
<?php endforeach; ?>
|
| 61 |
+
</ul>
|
| 62 |
+
</td>
|
| 63 |
+
</tr>
|
| 64 |
+
</tbody>
|
| 65 |
+
</table>
|
| 66 |
+
<?php endif; ?>
|
| 67 |
+
</div>
|
| 68 |
+
</div>
|
| 69 |
+
</div>
|
| 70 |
+
<?php } ?>
|
app/design/adminhtml/default/default/template/mgconnector/widget/form/renderer/fieldset/element.phtml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$_element = $this->getElement();
|
| 3 |
+
$_note = $_element->getNote();
|
| 4 |
+
$_trId = $_element->getHtmlContainerId();
|
| 5 |
+
$_class = $_element->getFieldsetHtmlClass();
|
| 6 |
+
?>
|
| 7 |
+
<?php if (!$_element->getNoDisplay()): ?>
|
| 8 |
+
<tr<?php if($_trId): ?> id="<?php echo $_trId ?>"<?php endif; ?>>
|
| 9 |
+
<?php if ($_element->getType()=='hidden'): ?>
|
| 10 |
+
<td colspan="2" class="hidden"><?php echo trim($_element->getElementHtml()) ?></td>
|
| 11 |
+
<?php else: ?>
|
| 12 |
+
<?php $label = $_element->getLabel() ? trim($_element->getLabelHtml()) : false ?>
|
| 13 |
+
<?php if(!empty($label)): ?>
|
| 14 |
+
<td class="label<?php echo $_class ? " {$_class}-label" : ''?>"><?php echo $label ?></td>
|
| 15 |
+
<?php endif; ?>
|
| 16 |
+
<td <?php echo empty($label) ? 'colspan="2"' : '' ?>
|
| 17 |
+
class="<?php echo $_element->hasValueClass() ? $_element->getValueClass() : 'value' ?><?php echo $_class ? " {$_class}-value" : ''?>"
|
| 18 |
+
style="padding: 5px 0;">
|
| 19 |
+
<?php echo trim($_element->getElementHtml()) ?>
|
| 20 |
+
<?php if ($_note): ?>
|
| 21 |
+
<p class="note<?php echo $_class ? " {$_class}-note" : ''?>" id="note_<?php echo $_element->getId()?>"><span><?php echo $_note ?></span></p>
|
| 22 |
+
<?php endif ?>
|
| 23 |
+
</td>
|
| 24 |
+
<?php endif; ?>
|
| 25 |
+
</tr>
|
| 26 |
+
<?php endif; ?>
|
app/design/frontend/base/default/layout/mgconnector.xml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout version="0.1.0">
|
| 3 |
+
<default>
|
| 4 |
+
<reference name="before_body_end">
|
| 5 |
+
<block type="mgconnector/tracking_general" name="mgconnector.tracking_general" template="mgconnector/tracking/general.phtml" />
|
| 6 |
+
</reference>
|
| 7 |
+
</default>
|
| 8 |
+
<catalog_product_view>
|
| 9 |
+
<reference name="before_body_end">
|
| 10 |
+
<block type="mgconnector/tracking_product" name="mgconnector.tracking_product" template="mgconnector/tracking/product_view.phtml" />
|
| 11 |
+
</reference>
|
| 12 |
+
</catalog_product_view>
|
| 13 |
+
</layout>
|
app/design/frontend/base/default/template/mgconnector/tracking/general.phtml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php if ($this->isWebtrackingActivated()): ?>
|
| 2 |
+
<script>
|
| 3 |
+
var _rmData = _rmData || [];
|
| 4 |
+
_rmData.push(['setStoreKey', '<?php echo $this->getRemarketyPublicId(); ?>']);
|
| 5 |
+
<?php if(!$this->shouldBypassCache()): ?>
|
| 6 |
+
<?php $_rmEmail = $this->getEmail(); if ($_rmEmail): ?>_rmData.push(["setCustomer", "<?php echo $_rmEmail; ?>"]);<?php endif; ?>
|
| 7 |
+
<?php else: ?>
|
| 8 |
+
(function(d, t) {
|
| 9 |
+
var g = d.createElement(t),
|
| 10 |
+
s = d.getElementsByTagName(t)[0];
|
| 11 |
+
g.src = '<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'remarkety/webtracking/identify?noMagentoBoosterCache'; ?>&t='+(new Date().getTime())+'&r='+Math.random();
|
| 12 |
+
s.parentNode.insertBefore(g, s);
|
| 13 |
+
}(document, 'script'));
|
| 14 |
+
<?php endif; ?>
|
| 15 |
+
</script>
|
| 16 |
+
|
| 17 |
+
<script>(function(d, t) {
|
| 18 |
+
var g = d.createElement(t),
|
| 19 |
+
s = d.getElementsByTagName(t)[0];
|
| 20 |
+
g.src = 'https://s3.amazonaws.com/downloads.remarkety.com/webtracking/remarkety.js';
|
| 21 |
+
s.parentNode.insertBefore(g, s);
|
| 22 |
+
}(document, 'script'));</script>
|
| 23 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/mgconnector/tracking/product_view.phtml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php if ($this->isWebtrackingActivated()): ?>
|
| 2 |
+
<script>
|
| 3 |
+
var _rmData = _rmData || [];
|
| 4 |
+
_rmData.push(['productView', {
|
| 5 |
+
productId: <?php echo json_encode($this->getActiveProduct()->getId()); ?>,
|
| 6 |
+
productCategories: <?php echo json_encode($this->getCategoryNames()); ?>,
|
| 7 |
+
productCategoriesIds: <?php echo json_encode($this->getCategoryIds()); ?>,
|
| 8 |
+
}]);
|
| 9 |
+
</script>
|
| 10 |
+
<?php endif; ?>
|
app/etc/modules/Remarkety_Mgconnector.xml
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<config>
|
| 2 |
+
<modules>
|
| 3 |
+
<Remarkety_Mgconnector>
|
| 4 |
+
<active>true</active>
|
| 5 |
+
<codePool>community</codePool>
|
| 6 |
+
<depends>
|
| 7 |
+
<Mage_Api />
|
| 8 |
+
</depends>
|
| 9 |
+
</Remarkety_Mgconnector>
|
| 10 |
+
</modules>
|
| 11 |
+
</config>
|
| 12 |
+
|
package.xml
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Remarkety_Mgconnector</name>
|
| 4 |
+
<version>1.4.3.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://www.gnu.org/licenses/gpl-3.0.html">GPL v3</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Remarkety Magento Connector</summary>
|
| 10 |
+
<description>Remarkety Magento Connector</description>
|
| 11 |
+
<notes>No comments</notes>
|
| 12 |
+
<date>2016-06-07</date>
|
| 13 |
+
<time>8-35-48</time>
|
| 14 |
+
<contents>
|
| 15 |
+
<target name="magecommunity">
|
| 16 |
+
<dir name="Remarkety"><dir name="Mgconnector"><dir name="Block"><dir name="Adminhtml"><dir name="Configuration"><dir name="Complete"><file name="Form.php" hash="dc799532128513364fc3afd17eabb78b"/></dir><file name="Complete.php" hash="b9f7b4ecbd2be587c0efbd16523b167e"/><dir name="Configuration"><file name="Form.php" hash="89b286409ad9d64ae8e51e314198f427"/></dir><file name="Configuration.php" hash="67b3b564c2c3123301f5f97b2b258a7a"/><dir name="Install"><file name="Form.php" hash="59541fe2ad9a49b9fb56a41f00e6a591"/></dir><file name="Install.php" hash="f631fcdfd86d2bc416eb1ad4422fc20c"/><dir name="Upgrade"><file name="Form.php" hash="598f83eca99d0153537e22f9ee6b1934"/></dir><file name="Upgrade.php" hash="c672741b0407f108d2266dd939590846"/></dir><file name="Configuration.php" hash="bf0c9aabe92f669694e0699c009b2a9c"/><dir name="Install"><dir name="Complete"><file name="Form.php" hash="5992149b9ff2d2a7c2b008d98098362d"/></dir><file name="Complete.php" hash="452944c613b88ede358ee4dacd562d05"/><dir name="Install"><dir name="Create"><file name="Form.php" hash="65d98f1449ce6af413a3185692e07533"/></dir><file name="Create.php" hash="0d3182923fd5542e3d0a757625a85ae4"/><dir name="Login"><file name="Form.php" hash="a58c19056e47c7851eb6a5f40517f757"/></dir><file name="Login.php" hash="3ee61a883f843c55b1b32a328af84322"/></dir><dir name="Upgrade"><file name="Form.php" hash="6f4e2ac19d30115de4e275fdb8dca5b6"/></dir><file name="Upgrade.php" hash="f16ba61a8c86007bbc0a980e8faeade1"/><dir name="Welcome"><file name="Form.php" hash="58cb26cc7555498bd0367c77a99c8d60"/><file name="Store.php" hash="9f3b5c7bbd9f4d7201189598e5a64cc4"/></dir><file name="Welcome.php" hash="86589c79b5c38ea5f25d58ac932f33cb"/></dir><dir name="Queue"><dir name="Configure"><file name="Form.php" hash="69619798add1783da4b74b521264d987"/></dir><file name="Configure.php" hash="03d5ebf7644462904c439d172cde3afc"/><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="EventType.php" hash="4ac5971c368b70efa96b4c8297c85c3c"/><file name="Status.php" hash="ec57ddafc2515b952958e6ace6de22ec"/></dir></dir></dir><file name="Grid.php" hash="74d5f3b18d76cdf8219e2d39a83a2f7c"/></dir><file name="Queue.php" hash="2c905cc54a6c08d4d73a392d5b95a25c"/></dir><dir name="Tracking"><file name="Base.php" hash="5e0f245ac5ee59d2f6c6f35087059b56"/><file name="General.php" hash="9ca2796c6f2bf9233553e6b782f3722b"/><file name="Product.php" hash="3a0c1b1a5fcbd23d1dcd04714742ebe9"/></dir></dir><dir name="Helper"><file name="Data.php" hash="b27f970b943e6e989e9061275cc25c7b"/><file name="Links.php" hash="3eb52ad30d952c8b3c697323a5bdc0eb"/><file name="Urls.php" hash="ce396940c96bf8139da8ec59bb498acf"/></dir><dir name="Model"><dir name="Core"><file name="Api.php" hash="948c7965f7fe9d044b532314aaa8e0f9"/></dir><file name="Core.php" hash="74c15a36f270fbb3b799034780b0ed5a"/><file name="Install.php" hash="a932ce10c0387b00147e40e9f42e20d9"/><file name="Observer.php" hash="8975e5b8d9802b616d9b177cd1e58599"/><file name="Queue.php" hash="3a0fda4b18ec947c20e6e81cc1e995de"/><file name="Recovery.php" hash="bd856fdd5788e00bcf29a67446ad8ef1"/><file name="Request.php" hash="47e81216d7bca3f0aba93bf816298221"/><dir name="Resource"><file name="Coupon.php" hash="6079c05e422e9c1ad5327fc881cee7e3"/><dir name="Queue"><file name="Collection.php" hash="ce59b04c8a8146f5094d6622134885d3"/></dir><file name="Queue.php" hash="971a539849d0cde2e413b0642403a6ca"/><dir name="Rule"><file name="Collection.php" hash="d57fff76c25dab67dbdbbd57b3afdfdf"/></dir><file name="Setup.php" hash="13253a5b7a2749f4a3bc84e32e31e27c"/></dir><file name="Webtracking.php" hash="4b2d9d73dcc8d68b40f375f6c55c4999"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ConfigureController.php" hash="b4e51acf22ea798e2d2144a4672bc30f"/><file name="InstallController.php" hash="cebbe5f80c59d6fbc18eecff20e7d432"/><file name="MgconnectorController.php" hash="a8e55464624c5fa9e9641cf97f963b3b"/><file name="QueueController.php" hash="70d05e61daf651dad840b04f21e3022e"/></dir><file name="RecoveryController.php" hash="0a53efaef9019c6b661fe494067473e3"/><file name="WebtrackingController.php" hash="2e1b75f58ada4a091a8d02a04d508f89"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c555aaf95943f74e1c29032e3ed385a1"/><file name="api.xml" hash="9f6d5fd3330bb0640f97efc3f819e684"/><file name="config.xml" hash="c0ac4e7d6b0f6598ded6128d65cb61f4"/></dir><dir name="sql"><dir name="mgconnector_setup"><file name="mysql4-install-1.0.0.13.php" hash="d1033ffd3d6b13af28ad4082d5744c25"/><file name="mysql4-upgrade-1.0.0.13-1.0.0.14.php" hash="db871ba73f3dcc7abfb806991edc12f1"/><file name="mysql4-upgrade-1.0.0.14-1.0.0.15.php" hash="c9ced7a4a2e85c9d594e9f97320cab58"/><file name="mysql4-upgrade-1.0.0.14-1.1.0.0.php" hash="fd445e8c179cdb2718a85adec05c5343"/><file name="mysql4-upgrade-1.1.0.5-1.1.0.6.php" hash="e24831cfd077827ba545f7ea71669729"/><file name="mysql4-upgrade-1.1.2.8-1.3.0.0.php" hash="97bbb9e411bcd45f875f29fcc8c8b420"/></dir></dir></dir></dir></target>
|
| 17 |
+
<target name="mageetc">
|
| 18 |
+
<dir name="modules"><file name="Remarkety_Mgconnector.xml" hash="d584b234f653fbf34376e7dcb8caf117"/></dir></target>
|
| 19 |
+
<target name="magedesign">
|
| 20 |
+
<dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="mgconnector"><file name="element.phtml" hash="b956df05d4eeb30f5199a75deab74fbc"/><dir name="install"><dir name="welcome"><file name="store.phtml" hash="3839928b62115329e0f3af442f44774d"/></dir></dir><dir name="widget"><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="abd5b9848b714779ddecb4536c846395"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="mgconnector.xml" hash="81584e822ae52179c8fb1dfc48cb8a9f"/></dir><dir name="template"><dir name="mgconnector"><dir name="tracking"><file name="general.phtml" hash="9da11c45059c094753ea65b2067be9a7"/><file name="product_view.phtml" hash="cf48e30b61979eaed3813b422959937f"/></dir></dir></dir></dir></dir></dir></target>
|
| 21 |
+
</contents>
|
| 22 |
+
<compatible/>
|
| 23 |
+
<dependencies>
|
| 24 |
+
<required>
|
| 25 |
+
<php>
|
| 26 |
+
<min>5.1.0</min>
|
| 27 |
+
<max>6.0.0</max>
|
| 28 |
+
</php>
|
| 29 |
+
</required>
|
| 30 |
+
</dependencies>
|
| 31 |
+
<authors><author><email>support@remarkety.com</email><name>Remarkety</name><user>remarkety</user></author></authors></package>
|
