Version Notes
Product review reminder
Download this release
Release Info
Developer | Commerce Pundit |
Extension | CP_Reviewreminder |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/AddReminder/Grid.php +211 -0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/AddReminder/Renderer/CustomerName.php +42 -0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/Addreminder.php +32 -0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/Closedreminder.php +34 -0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/Closedreminder/Grid.php +195 -0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/Reviewreminder.php +33 -0
- app/code/community/CP/Reviewreminder/Block/Adminhtml/Reviewreminder/Grid.php +268 -0
- app/code/community/CP/Reviewreminder/Helper/Data.php +255 -0
- app/code/community/CP/Reviewreminder/Helper/Mail.php +148 -0
- app/code/community/CP/Reviewreminder/Model/Adminhtml/System/Config/Source/Days.php +35 -0
- app/code/community/CP/Reviewreminder/Model/Adminhtml/System/Config/Source/Status.php +51 -0
- app/code/community/CP/Reviewreminder/Model/Adminhtml/System/Config/Source/Times.php +35 -0
- app/code/community/CP/Reviewreminder/Model/Observer.php +176 -0
- app/code/community/CP/Reviewreminder/Model/Resource/Reviewreminder.php +27 -0
- app/code/community/CP/Reviewreminder/Model/Resource/Reviewreminder/Collection.php +86 -0
- app/code/community/CP/Reviewreminder/Model/Resource/Setup.php +23 -0
- app/code/community/CP/Reviewreminder/Model/Reviewreminder.php +30 -0
- app/code/community/CP/Reviewreminder/controllers/Adminhtml/ClosedremindersController.php +91 -0
- app/code/community/CP/Reviewreminder/controllers/Adminhtml/ManageremindersController.php +278 -0
- app/code/community/CP/Reviewreminder/controllers/IndexController.php +74 -0
- app/code/community/CP/Reviewreminder/etc/adminhtml.xml +87 -0
- app/code/community/CP/Reviewreminder/etc/config.xml +172 -0
- app/code/community/CP/Reviewreminder/etc/system.xml +118 -0
- app/code/community/CP/Reviewreminder/sql/cp_reviewreminder_setup/install-1.0.0.php +84 -0
- app/design/adminhtml/default/default/layout/cp_reviewreminder.xml +34 -0
- app/etc/modules/CP_Reviewreminder.xml +30 -0
- app/locale/en_US/template/email/cp_reviewreminder.html +51 -0
- package.xml +18 -0
app/code/community/CP/Reviewreminder/Block/Adminhtml/AddReminder/Grid.php
ADDED
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Block_Adminhtml_AddReminder_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
22 |
+
{
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
parent::__construct();
|
26 |
+
$this->setId('addReminderGrid');
|
27 |
+
$this->setDefaultSort('created_at');
|
28 |
+
$this->setDefaultDir('DESC');
|
29 |
+
$this->setSaveParametersInSession(true);
|
30 |
+
}
|
31 |
+
|
32 |
+
/*
|
33 |
+
* Customer name filter to the grid
|
34 |
+
* @param object $collection
|
35 |
+
* @param object $column
|
36 |
+
* @return CP_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
37 |
+
*/
|
38 |
+
protected function _customerNameCondition($collection, $column)
|
39 |
+
{
|
40 |
+
if (!$value = $column->getFilter()->getValue()) {
|
41 |
+
return $this;
|
42 |
+
}
|
43 |
+
|
44 |
+
$customerFullName = $value;
|
45 |
+
$arrCustomerFullName = explode(' ', $customerFullName);
|
46 |
+
|
47 |
+
$customerFirstName = isset($arrCustomerFullName[0])? $arrCustomerFullName[0]: '';
|
48 |
+
$customerLastName = isset($arrCustomerFullName[1])? $arrCustomerFullName[1]: '';
|
49 |
+
|
50 |
+
if(!empty($customerFirstName)){
|
51 |
+
$collection->getSelect()
|
52 |
+
->where("customer_firstname like '%" . $customerFirstName."%'");
|
53 |
+
}
|
54 |
+
|
55 |
+
if(!empty($customerLastName)){
|
56 |
+
$collection->getSelect()
|
57 |
+
->where("customer_lastname like '%" . $customerLastName."%'");
|
58 |
+
}
|
59 |
+
//echo $collection->getSelect();
|
60 |
+
return $this;
|
61 |
+
}
|
62 |
+
|
63 |
+
/*
|
64 |
+
* Product name filter to the grid
|
65 |
+
* @param object $collection
|
66 |
+
* @param object $column
|
67 |
+
* @return CP_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
68 |
+
*/
|
69 |
+
protected function _productNameCondition($collection, $column)
|
70 |
+
{
|
71 |
+
if (!$value = $column->getFilter()->getValue()) {
|
72 |
+
return $this;
|
73 |
+
}
|
74 |
+
|
75 |
+
$productName = $value;
|
76 |
+
if(!empty($productName)){
|
77 |
+
$collection->getSelect()
|
78 |
+
->where("pet.value='" . $productName."'");
|
79 |
+
}
|
80 |
+
//echo $collection->getSelect();
|
81 |
+
return $this;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Prepare reviewreminder grid collection object
|
86 |
+
*
|
87 |
+
* @return CP_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
88 |
+
*/
|
89 |
+
protected function _prepareCollection()
|
90 |
+
{
|
91 |
+
//get order item collection
|
92 |
+
$collection = Mage::getModel('sales/order_item')->getCollection();
|
93 |
+
//get order table
|
94 |
+
$orderTable = Mage::getSingleton('core/resource')->getTableName('sales/order');
|
95 |
+
//get review reminder table
|
96 |
+
$reviewReminderTable = Mage::getSingleton('core/resource')->getTableName('cp_reviewreminder/reviewreminder');
|
97 |
+
|
98 |
+
//join with sales_flat_order table
|
99 |
+
$collection->getSelect()
|
100 |
+
->joinLeft(array('sfo' => $orderTable), 'main_table.order_id=sfo.entity_id',
|
101 |
+
array('sfo.entity_id', 'sfo.status', 'sfo.customer_firstname', 'sfo.customer_lastname', 'sfo.customer_id'));
|
102 |
+
|
103 |
+
//Check is customer_id not null
|
104 |
+
$collection->getSelect()
|
105 |
+
->where('sfo.customer_id IS NOT NULL');
|
106 |
+
|
107 |
+
//Check is reminder already added
|
108 |
+
$collection->getSelect()
|
109 |
+
->where('(sfo.customer_id, main_table.product_id) NOT IN (
|
110 |
+
SELECT crr.customer_id, crr.product_id
|
111 |
+
FROM ' . $reviewReminderTable . ' AS crr)');
|
112 |
+
|
113 |
+
//Check is review already added
|
114 |
+
//get review table
|
115 |
+
$reviewTable = Mage::getSingleton('core/resource')->getTableName('review/review');
|
116 |
+
//get review detail table
|
117 |
+
$reviewDetailTable = Mage::getSingleton('core/resource')->getTableName('review/review_detail');
|
118 |
+
$collection->getSelect()
|
119 |
+
->where('(sfo.customer_id, main_table.product_id) NOT IN (
|
120 |
+
SELECT rd.customer_id , r.entity_pk_value AS product_id
|
121 |
+
FROM ' . $reviewTable . ' as r
|
122 |
+
JOIN ' . $reviewDetailTable . ' as rd ON rd.review_id=r.review_id
|
123 |
+
WHERE r.entity_id=1)
|
124 |
+
');
|
125 |
+
|
126 |
+
|
127 |
+
/* @var $collection Mage_Sales_Model_Resource_Order_Collection */
|
128 |
+
$this->setCollection($collection);
|
129 |
+
//echo $collection->getSelect();
|
130 |
+
return parent::_prepareCollection();
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Prepare default grid column
|
135 |
+
*
|
136 |
+
* @return CP_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
137 |
+
*/
|
138 |
+
protected function _prepareColumns()
|
139 |
+
{
|
140 |
+
$yesno = Mage::getModel('adminhtml/system_config_source_yesno')->toArray();
|
141 |
+
|
142 |
+
$this->addColumn('order_id', array(
|
143 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order #'),
|
144 |
+
'sortable'=>true,
|
145 |
+
'index'=>'entity_id',
|
146 |
+
'width' => '100px',
|
147 |
+
));
|
148 |
+
|
149 |
+
$this->addColumn('customer_name', array(
|
150 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Customer Name'),
|
151 |
+
'sortable'=>true,
|
152 |
+
'index'=>'customer_firstname',
|
153 |
+
'width'=>'60px',
|
154 |
+
'renderer' => 'cp_reviewreminder/adminhtml_addReminder_renderer_customerName',
|
155 |
+
'filter_condition_callback' => array($this, '_customerNameCondition')
|
156 |
+
));
|
157 |
+
|
158 |
+
/*$this->addColumn('product_name', array(
|
159 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Product Name'),
|
160 |
+
'sortable'=>true,
|
161 |
+
'index'=>'name',
|
162 |
+
));*/
|
163 |
+
|
164 |
+
$this->addColumn('order_status', array(
|
165 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order Status'),
|
166 |
+
'sortable'=>true,
|
167 |
+
'index'=>'status',
|
168 |
+
'type' => 'options',
|
169 |
+
'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
|
170 |
+
));
|
171 |
+
|
172 |
+
$this->addColumn('order_date', array(
|
173 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order Date'),
|
174 |
+
'sortable'=>true,
|
175 |
+
'index'=>'created_at',
|
176 |
+
'type' => 'datetime',
|
177 |
+
));
|
178 |
+
|
179 |
+
return $this;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Mass Actions.
|
184 |
+
*
|
185 |
+
* These used basically to do operations on multiple rows together.
|
186 |
+
*/
|
187 |
+
protected function _prepareMassaction()
|
188 |
+
{
|
189 |
+
/**
|
190 |
+
* id is the database column that serves as the unique identifier
|
191 |
+
*/
|
192 |
+
$this->setMassactionIdField('item_id');
|
193 |
+
|
194 |
+
/**
|
195 |
+
* By using this we can set name of checkbox, used for selection. Which
|
196 |
+
* is used to pass all the ids to the controller.
|
197 |
+
*/
|
198 |
+
$this->getMassactionBlock()->setFormFieldName('itemIds');
|
199 |
+
|
200 |
+
/**
|
201 |
+
* url - sets url for the delete action
|
202 |
+
* confirm - This shows the user a confirm dialog before submitting the URL
|
203 |
+
*/
|
204 |
+
$this->getMassactionBlock()->addItem('addReminder', array(
|
205 |
+
'label' => Mage::helper('cp_reviewreminder')->__('Add Reminder'),
|
206 |
+
'url' => $this->getUrl('*/*/massAddReminder'),
|
207 |
+
'confirm' => Mage::helper('cp_reviewreminder')->__('Are you sure?')
|
208 |
+
));
|
209 |
+
return $this;
|
210 |
+
}
|
211 |
+
}
|
app/code/community/CP/Reviewreminder/Block/Adminhtml/AddReminder/Renderer/CustomerName.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Block_Adminhtml_Addreminder_Renderer_CustomerName extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Render custome name
|
25 |
+
* @param object $row order data object
|
26 |
+
* @return string
|
27 |
+
*/
|
28 |
+
public function render(Varien_Object $row)
|
29 |
+
{
|
30 |
+
$firstName = $row->getData('customer_firstname');
|
31 |
+
$lastName = $row->getData('customer_lastname');
|
32 |
+
if (!empty($firstName) || !empty($lastName)) {
|
33 |
+
|
34 |
+
if (!empty($lastName)) {
|
35 |
+
return $firstName . ' ' . $lastName;
|
36 |
+
} else {
|
37 |
+
return $firstName;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
42 |
+
?>
|
app/code/community/CP/Reviewreminder/Block/Adminhtml/Addreminder.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Block_Adminhtml_Addreminder extends Mage_Adminhtml_Block_Widget_Grid_Container
|
22 |
+
{
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
$this->_controller = 'adminhtml_addReminder';
|
26 |
+
$this->_blockGroup = 'cp_reviewreminder';
|
27 |
+
$this->_headerText = Mage::helper('cp_reviewreminder')->__('Add Reminders Manually');
|
28 |
+
parent::__construct();
|
29 |
+
$this->_removeButton('add');
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
app/code/community/CP/Reviewreminder/Block/Adminhtml/Closedreminder.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Block_Adminhtml_Closedreminder extends Mage_Adminhtml_Block_Widget_Grid_Container
|
22 |
+
{
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
$this->_controller = 'adminhtml_closedreminder';
|
26 |
+
$this->_blockGroup = 'cp_reviewreminder';
|
27 |
+
$this->_headerText = Mage::helper('cp_reviewreminder')->__('Closed Reminders');
|
28 |
+
|
29 |
+
parent::__construct();
|
30 |
+
|
31 |
+
$this->_removeButton('add');
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
app/code/community/CP/Reviewreminder/Block/Adminhtml/Closedreminder/Grid.php
ADDED
@@ -0,0 +1,195 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Block_Adminhtml_Closedreminder_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
22 |
+
{
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
parent::__construct();
|
26 |
+
$this->setId('closedremindersGrid');
|
27 |
+
$this->setDefaultSort('reminder_id');
|
28 |
+
$this->setDefaultDir('DESC');
|
29 |
+
$this->setSaveParametersInSession(true);
|
30 |
+
}
|
31 |
+
|
32 |
+
/*
|
33 |
+
* Customer name filter to the grid
|
34 |
+
* @param object $collection
|
35 |
+
* @param object $column
|
36 |
+
* @return CP_ReviewReminder_Block_Adminhtml_Closedreminder_Grid
|
37 |
+
*/
|
38 |
+
protected function _customerNameCondition($collection, $column)
|
39 |
+
{
|
40 |
+
if (!$value = $column->getFilter()->getValue()) {
|
41 |
+
return $this;
|
42 |
+
}
|
43 |
+
|
44 |
+
$customerFullName = $value;
|
45 |
+
$arrCustomerFullName = explode(' ', $customerFullName);
|
46 |
+
|
47 |
+
$customerFirstName = isset($arrCustomerFullName[0])? $arrCustomerFullName[0]: '';
|
48 |
+
$customerLastName = isset($arrCustomerFullName[1])? $arrCustomerFullName[1]: '';
|
49 |
+
|
50 |
+
if(!empty($customerFirstName)){
|
51 |
+
$collection->getSelect()
|
52 |
+
->where("cust_ent1.value like '%" . $customerFirstName."%'");
|
53 |
+
}
|
54 |
+
|
55 |
+
if(!empty($customerLastName)){
|
56 |
+
$collection->getSelect()
|
57 |
+
->where("cust_ent2.value like '%" . $customerLastName."%'");
|
58 |
+
}
|
59 |
+
//echo $collection->getSelect();
|
60 |
+
return $this;
|
61 |
+
}
|
62 |
+
|
63 |
+
/*
|
64 |
+
* Product name filter to the grid
|
65 |
+
* @param object $collection
|
66 |
+
* @param object $column
|
67 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Closedreminder_Grid
|
68 |
+
*/
|
69 |
+
protected function _productNameCondition($collection, $column)
|
70 |
+
{
|
71 |
+
if (!$value = $column->getFilter()->getValue()) {
|
72 |
+
return $this;
|
73 |
+
}
|
74 |
+
|
75 |
+
$productName = $value;
|
76 |
+
if(!empty($productName)){
|
77 |
+
$collection->getSelect()
|
78 |
+
->where("pet.value='" . $productName."'");
|
79 |
+
}
|
80 |
+
//echo $collection->getSelect();
|
81 |
+
return $this;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Prepare closedreminder grid collection object
|
86 |
+
*
|
87 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Closedreminder_Grid
|
88 |
+
*/
|
89 |
+
protected function _prepareCollection()
|
90 |
+
{
|
91 |
+
$collection = Mage::getModel('cp_reviewreminder/reviewreminder')->getCollection()
|
92 |
+
->addCustomerNameToSelect()
|
93 |
+
->addProductNameToSelect()
|
94 |
+
->addFieldToFilter('is_review_added', 1);
|
95 |
+
|
96 |
+
/* @var $collection Clarion_ReviewReminder_Model_Resource_Reviewreminder_Collection */
|
97 |
+
$this->setCollection($collection);
|
98 |
+
//echo $collection->getSelect();
|
99 |
+
return parent::_prepareCollection();
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Prepare default grid column
|
104 |
+
*
|
105 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Closedreminder_Grid
|
106 |
+
*/
|
107 |
+
protected function _prepareColumns()
|
108 |
+
{
|
109 |
+
$yesno = Mage::getModel('adminhtml/system_config_source_yesno')->toArray();
|
110 |
+
|
111 |
+
$this->addColumn('reminder_id', array(
|
112 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Reminder Id'),
|
113 |
+
'sortable'=>true,
|
114 |
+
'index'=>'reminder_id',
|
115 |
+
'width' => '100px',
|
116 |
+
));
|
117 |
+
|
118 |
+
$this->addColumn('order_id', array(
|
119 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order #'),
|
120 |
+
'sortable'=>true,
|
121 |
+
'index'=>'order_id',
|
122 |
+
'width' => '100px',
|
123 |
+
));
|
124 |
+
|
125 |
+
$this->addColumn('customer_name', array(
|
126 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Customer Name'),
|
127 |
+
'sortable'=>true,
|
128 |
+
'index'=>'customer_name',
|
129 |
+
'width'=>'60px',
|
130 |
+
'filter_condition_callback' => array($this, '_customerNameCondition')
|
131 |
+
));
|
132 |
+
|
133 |
+
/*$this->addColumn('product_name', array(
|
134 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Product Name'),
|
135 |
+
'sortable'=>true,
|
136 |
+
'index'=>'product_name',
|
137 |
+
'filter_condition_callback' => array($this, '_productNameCondition')
|
138 |
+
));*/
|
139 |
+
|
140 |
+
$this->addColumn('is_reminder_sent', array(
|
141 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Reminder Sent'),
|
142 |
+
'sortable'=>true,
|
143 |
+
'index'=>'is_reminder_sent',
|
144 |
+
'type' => 'options',
|
145 |
+
'options' => $yesno,
|
146 |
+
'width' => '100px',
|
147 |
+
));
|
148 |
+
|
149 |
+
$this->addColumn('sent_at', array(
|
150 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Sent At'),
|
151 |
+
'sortable'=>true,
|
152 |
+
'index'=>'sent_at',
|
153 |
+
'type' => 'datetime',
|
154 |
+
'width' => '100px',
|
155 |
+
));
|
156 |
+
|
157 |
+
$this->addColumn('reminder_count', array(
|
158 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Reminder #'),
|
159 |
+
'sortable'=>true,
|
160 |
+
'index'=>'reminder_count',
|
161 |
+
'width' => '100px',
|
162 |
+
));
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* Mass Actions.
|
167 |
+
*
|
168 |
+
* These used basically to do operations on multiple rows together.
|
169 |
+
*/
|
170 |
+
protected function _prepareMassaction()
|
171 |
+
{
|
172 |
+
/**
|
173 |
+
* id is the database column that serves as the unique identifier
|
174 |
+
*/
|
175 |
+
$this->setMassactionIdField('reminder_id');
|
176 |
+
|
177 |
+
/**
|
178 |
+
* By using this we can set name of checkbox, used for selection. Which
|
179 |
+
* is used to pass all the ids to the controller.
|
180 |
+
*/
|
181 |
+
$this->getMassactionBlock()->setFormFieldName('reminderIds');
|
182 |
+
|
183 |
+
/**
|
184 |
+
* url - sets url for the delete action
|
185 |
+
* confirm - This shows the user a confirm dialog before submitting the URL
|
186 |
+
*/
|
187 |
+
$this->getMassactionBlock()->addItem('delete', array(
|
188 |
+
'label' => Mage::helper('cp_reviewreminder')->__('Delete'),
|
189 |
+
'url' => $this->getUrl('*/*/massDelete'),
|
190 |
+
'confirm' => Mage::helper('cp_reviewreminder')->__('Are you sure?')
|
191 |
+
));
|
192 |
+
|
193 |
+
return $this;
|
194 |
+
}
|
195 |
+
}
|
app/code/community/CP/Reviewreminder/Block/Adminhtml/Reviewreminder.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Block_Adminhtml_Reviewreminder extends Mage_Adminhtml_Block_Widget_Grid_Container
|
22 |
+
{
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
$this->_controller = 'adminhtml_reviewreminder';
|
26 |
+
$this->_blockGroup = 'cp_reviewreminder';
|
27 |
+
$this->_headerText = Mage::helper('cp_reviewreminder')->__('Manage Reminders');
|
28 |
+
$this->_addButtonLabel = Mage::helper('cp_reviewreminder')->__('Add Reminders Manually');
|
29 |
+
parent::__construct();
|
30 |
+
$this->_removeButton('add');
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
app/code/community/CP/Reviewreminder/Block/Adminhtml/Reviewreminder/Grid.php
ADDED
@@ -0,0 +1,268 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class cp_reviewreminder_Block_Adminhtml_Reviewreminder_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
22 |
+
{
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
parent::__construct();
|
26 |
+
$this->setId('reviewreminderGrid');
|
27 |
+
$this->setDefaultSort('reminder_id');
|
28 |
+
$this->setDefaultDir('DESC');
|
29 |
+
$this->setSaveParametersInSession(true);
|
30 |
+
}
|
31 |
+
|
32 |
+
/*
|
33 |
+
* Customer name filter to the grid
|
34 |
+
* @param object $collection
|
35 |
+
* @param object $column
|
36 |
+
* @return CP_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
37 |
+
*/
|
38 |
+
protected function _customerNameCondition($collection, $column)
|
39 |
+
{
|
40 |
+
if (!$value = $column->getFilter()->getValue()) {
|
41 |
+
return $this;
|
42 |
+
}
|
43 |
+
|
44 |
+
$customerFullName = $value;
|
45 |
+
$arrCustomerFullName = explode(' ', $customerFullName);
|
46 |
+
|
47 |
+
$customerFirstName = isset($arrCustomerFullName[0])? $arrCustomerFullName[0]: '';
|
48 |
+
$customerLastName = isset($arrCustomerFullName[1])? $arrCustomerFullName[1]: '';
|
49 |
+
|
50 |
+
if(!empty($customerFirstName)){
|
51 |
+
$collection->getSelect()
|
52 |
+
->where("cust_ent1.value like '%" . $customerFirstName."%'");
|
53 |
+
}
|
54 |
+
|
55 |
+
if(!empty($customerLastName)){
|
56 |
+
$collection->getSelect()
|
57 |
+
->where("cust_ent2.value like '%" . $customerLastName."%'");
|
58 |
+
}
|
59 |
+
//echo $collection->getSelect();
|
60 |
+
return $this;
|
61 |
+
}
|
62 |
+
|
63 |
+
/*
|
64 |
+
* Product name filter to the grid
|
65 |
+
* @param object $collection
|
66 |
+
* @param object $column
|
67 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
68 |
+
*/
|
69 |
+
protected function _productNameCondition($collection, $column)
|
70 |
+
{
|
71 |
+
if (!$value = $column->getFilter()->getValue()) {
|
72 |
+
return $this;
|
73 |
+
}
|
74 |
+
|
75 |
+
$productName = $value;
|
76 |
+
if(!empty($productName)){
|
77 |
+
$collection->getSelect()
|
78 |
+
->where("pet.value='" . $productName."'");
|
79 |
+
}
|
80 |
+
//echo $collection->getSelect();
|
81 |
+
return $this;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Prepare reviewreminder grid collection object
|
86 |
+
*
|
87 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
88 |
+
*/
|
89 |
+
protected function _prepareCollection()
|
90 |
+
{
|
91 |
+
$collection = Mage::getModel('cp_reviewreminder/reviewreminder')->getCollection()
|
92 |
+
->addCustomerNameToSelect()
|
93 |
+
->addProductNameToSelect()
|
94 |
+
->addOrderStatusAndDateToSelect()
|
95 |
+
->addFieldToFilter('is_review_added', 0);
|
96 |
+
|
97 |
+
/* @var $collection Clarion_ReviewReminder_Model_Resource_Reviewreminder_Collection */
|
98 |
+
$this->setCollection($collection);
|
99 |
+
//echo $collection->getSelect();
|
100 |
+
return parent::_prepareCollection();
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Prepare default grid column
|
105 |
+
*
|
106 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
107 |
+
*/
|
108 |
+
protected function _prepareColumns()
|
109 |
+
{
|
110 |
+
$yesno = Mage::getModel('adminhtml/system_config_source_yesno')->toArray();
|
111 |
+
|
112 |
+
$this->addColumn('reminder_id', array(
|
113 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Reminder Id'),
|
114 |
+
'sortable'=>true,
|
115 |
+
'index'=>'reminder_id',
|
116 |
+
'width' => '100px',
|
117 |
+
));
|
118 |
+
|
119 |
+
$this->addColumn('order_incid', array(
|
120 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order #'),
|
121 |
+
'sortable'=>true,
|
122 |
+
'index'=>'order_incid',
|
123 |
+
'width' => '100px',
|
124 |
+
));
|
125 |
+
|
126 |
+
$this->addColumn('customer_name', array(
|
127 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Customer Name'),
|
128 |
+
'sortable'=>true,
|
129 |
+
'index'=>'customer_name',
|
130 |
+
'width'=>'60px',
|
131 |
+
'filter_condition_callback' => array($this, '_customerNameCondition')
|
132 |
+
));
|
133 |
+
|
134 |
+
/*$this->addColumn('product_name', array(
|
135 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Product Name'),
|
136 |
+
'sortable'=>true,
|
137 |
+
'index'=>'product_name',
|
138 |
+
'filter_condition_callback' => array($this, '_productNameCondition')
|
139 |
+
));*/
|
140 |
+
|
141 |
+
$this->addColumn('order_status', array(
|
142 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order Status'),
|
143 |
+
'sortable'=>true,
|
144 |
+
'index'=>'order_status',
|
145 |
+
'type' => 'options',
|
146 |
+
'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
|
147 |
+
'filter_condition_callback' => array($this, '_orderStausCondition'),
|
148 |
+
'width' => '100px',
|
149 |
+
));
|
150 |
+
|
151 |
+
$this->addColumn('order_date', array(
|
152 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Order Date'),
|
153 |
+
'sortable'=>true,
|
154 |
+
'index'=>'order_date',
|
155 |
+
'type' => 'date',
|
156 |
+
'filter_condition_callback' => array($this, '_orderDateCondition'),
|
157 |
+
'width' => '120px',
|
158 |
+
));
|
159 |
+
|
160 |
+
$this->addColumn('is_reminder_sent', array(
|
161 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Reminder Sent'),
|
162 |
+
'sortable'=>true,
|
163 |
+
'index'=>'is_reminder_sent',
|
164 |
+
'type' => 'options',
|
165 |
+
'options' => $yesno,
|
166 |
+
'width' => '100px',
|
167 |
+
));
|
168 |
+
|
169 |
+
$this->addColumn('sent_at', array(
|
170 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Sent At'),
|
171 |
+
'sortable'=>true,
|
172 |
+
'index'=>'sent_at',
|
173 |
+
'type' => 'datetime',
|
174 |
+
'width' => '100px',
|
175 |
+
));
|
176 |
+
|
177 |
+
$this->addColumn('reminder_count', array(
|
178 |
+
'header'=>Mage::helper('cp_reviewreminder')->__('Reminder #'),
|
179 |
+
'sortable'=>true,
|
180 |
+
'index'=>'reminder_count',
|
181 |
+
'width' => '100px',
|
182 |
+
));
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Mass Actions.
|
187 |
+
*
|
188 |
+
* These used basically to do operations on multiple rows together.
|
189 |
+
*/
|
190 |
+
protected function _prepareMassaction()
|
191 |
+
{
|
192 |
+
/**
|
193 |
+
* id is the database column that serves as the unique identifier
|
194 |
+
*/
|
195 |
+
$this->setMassactionIdField('reminder_id');
|
196 |
+
|
197 |
+
/**
|
198 |
+
* By using this we can set name of checkbox, used for selection. Which
|
199 |
+
* is used to pass all the ids to the controller.
|
200 |
+
*/
|
201 |
+
$this->getMassactionBlock()->setFormFieldName('reminderIds');
|
202 |
+
|
203 |
+
/**
|
204 |
+
* url - sets url for the delete action
|
205 |
+
* confirm - This shows the user a confirm dialog before submitting the URL
|
206 |
+
*/
|
207 |
+
$this->getMassactionBlock()->addItem('delete', array(
|
208 |
+
'label' => Mage::helper('cp_reviewreminder')->__('Delete'),
|
209 |
+
'url' => $this->getUrl('*/*/massDelete'),
|
210 |
+
'confirm' => Mage::helper('cp_reviewreminder')->__('Are you sure?')
|
211 |
+
));
|
212 |
+
|
213 |
+
//Send reminder mass action
|
214 |
+
$this->getMassactionBlock()->addItem('Send reminder', array(
|
215 |
+
'label' => Mage::helper('cp_reviewreminder')->__('Send reminder'),
|
216 |
+
'url' => $this->getUrl('*/*/massSendReminder'),
|
217 |
+
'confirm' => Mage::helper('cp_reviewreminder')->__('Are you sure?')
|
218 |
+
));
|
219 |
+
|
220 |
+
return $this;
|
221 |
+
}
|
222 |
+
|
223 |
+
/*
|
224 |
+
* Order status filter to the grid
|
225 |
+
* @param object $collection
|
226 |
+
* @param object $column
|
227 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
228 |
+
*/
|
229 |
+
protected function _orderStausCondition($collection, $column)
|
230 |
+
{
|
231 |
+
if (!$value = $column->getFilter()->getValue()) {
|
232 |
+
return $this;
|
233 |
+
}
|
234 |
+
|
235 |
+
$orderStatus = $value;
|
236 |
+
if(!empty($orderStatus)){
|
237 |
+
$collection->getSelect()
|
238 |
+
->where("sot.status='" . $orderStatus."'");
|
239 |
+
}
|
240 |
+
//echo $collection->getSelect();
|
241 |
+
return $this;
|
242 |
+
}
|
243 |
+
|
244 |
+
/*
|
245 |
+
* Order date filter to the grid
|
246 |
+
* @param object $collection
|
247 |
+
* @param object $column
|
248 |
+
* @return Clarion_ReviewReminder_Block_Adminhtml_Reviewreminder_Grid
|
249 |
+
*/
|
250 |
+
protected function _orderDateCondition($collection, $column)
|
251 |
+
{
|
252 |
+
if (!$value = $column->getFilter()->getValue()) {
|
253 |
+
return $this;
|
254 |
+
}
|
255 |
+
|
256 |
+
$orderDate = $value;
|
257 |
+
|
258 |
+
$fromDate = isset($orderDate['from']) ? (is_object($orderDate['from']) ? date('Y-m-d', $orderDate['from']->get()) :'' ) : '';
|
259 |
+
$toDate = isset($orderDate['to']) ? (is_object($orderDate['to']) ? date('Y-m-d', $orderDate['to']->get()) :'' ) : '';
|
260 |
+
|
261 |
+
if(!empty($fromDate) && !empty($toDate)){
|
262 |
+
$collection->getSelect()
|
263 |
+
->where("DATE(sot.created_at) BETWEEN '".$fromDate."' AND '".$toDate."' ");
|
264 |
+
}
|
265 |
+
//echo $collection->getSelect();
|
266 |
+
return $this;
|
267 |
+
}
|
268 |
+
}
|
app/code/community/CP/Reviewreminder/Helper/Data.php
ADDED
@@ -0,0 +1,255 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Helper_Data extends Mage_Core_Helper_Abstract
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Config extension enabled
|
25 |
+
*
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
const XML_PATH_EXTENSION_ENABLED = 'review_reminder/status/extension_enable';
|
29 |
+
/**
|
30 |
+
* Config order status
|
31 |
+
*
|
32 |
+
* @var string
|
33 |
+
*/
|
34 |
+
const XML_PATH_ORDER_STATUS = 'review_reminder/general_settings/order_status';
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Config number of days after order placed
|
38 |
+
*
|
39 |
+
* @var string
|
40 |
+
*/
|
41 |
+
const XML_PATH_NUM_OF_DAYS_AFTER_ORDER = 'review_reminder/general_settings/number_of_days';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* check is reminder data already added
|
45 |
+
*
|
46 |
+
* @param $productId
|
47 |
+
* @param $cutomerId
|
48 |
+
* @return boolean
|
49 |
+
*/
|
50 |
+
public function isReminderExist($productId, $cutomerId)
|
51 |
+
{
|
52 |
+
if(empty($productId) || empty($cutomerId)){
|
53 |
+
return false;
|
54 |
+
}
|
55 |
+
|
56 |
+
$collection = Mage::getModel('cp_reviewreminder/reviewreminder')->getCollection()
|
57 |
+
->addFieldToFilter('customer_id', $cutomerId)
|
58 |
+
->addFieldToFilter('product_id', $productId);
|
59 |
+
//echo $collection->getSelect();
|
60 |
+
|
61 |
+
if($collection->count() > 0){
|
62 |
+
return true;
|
63 |
+
}
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get config order status
|
69 |
+
*
|
70 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
71 |
+
* @return string
|
72 |
+
*/
|
73 |
+
public function getConfigOrderStatus($store = null)
|
74 |
+
{
|
75 |
+
return Mage::getStoreConfig(self::XML_PATH_ORDER_STATUS, $store);
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Get order status
|
80 |
+
*
|
81 |
+
* @param Clarion_ReviewReminder_Model_Reviewreminder $reminder
|
82 |
+
* @return string
|
83 |
+
*/
|
84 |
+
public function getOrderStatus($reminder)
|
85 |
+
{
|
86 |
+
$orderId = $reminder->getOrderId();
|
87 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
88 |
+
$status = $order->getStatus();
|
89 |
+
|
90 |
+
if($status){
|
91 |
+
return $status;
|
92 |
+
}
|
93 |
+
return false;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Check is order status match with config order status
|
98 |
+
*
|
99 |
+
* @param Clarion_ReviewReminder_Model_Reviewreminder $reminder
|
100 |
+
* @return boolean
|
101 |
+
*/
|
102 |
+
public function isOrderStatusMatchWithConfig($reminder)
|
103 |
+
{
|
104 |
+
$storeId = Mage::app()->getStore()->getStoreId();
|
105 |
+
$configOrderStatus = $this->getConfigOrderStatus($storeId);
|
106 |
+
$orderStatus = $this->getOrderStatus($reminder);
|
107 |
+
|
108 |
+
if($configOrderStatus == $orderStatus){
|
109 |
+
return true;
|
110 |
+
} else {
|
111 |
+
return false;
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Get config number of days after order placed
|
117 |
+
*
|
118 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
119 |
+
* @return int
|
120 |
+
*/
|
121 |
+
public function getConfigNumOfDaysAfterOrder($store = null)
|
122 |
+
{
|
123 |
+
return Mage::getStoreConfig(self::XML_PATH_NUM_OF_DAYS_AFTER_ORDER, $store);
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Get order date
|
128 |
+
*
|
129 |
+
* @param Clarion_ReviewReminder_Model_Reviewreminder $reminder
|
130 |
+
* @return string
|
131 |
+
*/
|
132 |
+
public function getOrderDate($reminder)
|
133 |
+
{
|
134 |
+
$orderId = $reminder->getOrderId();
|
135 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
136 |
+
$orderDate = $order->getCreatedAt();
|
137 |
+
|
138 |
+
if($orderDate){
|
139 |
+
return $orderDate;
|
140 |
+
}
|
141 |
+
return false;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Get number of days after order placed
|
146 |
+
*
|
147 |
+
* @param $orderDate
|
148 |
+
* @return int
|
149 |
+
*/
|
150 |
+
public function getNumOfDaysAfterOrder($orderDate)
|
151 |
+
{
|
152 |
+
$days = 0;
|
153 |
+
if (version_compare(phpversion(), '5.3.0', '<')===true) {
|
154 |
+
$diff = (time() - strtotime($orderDate));
|
155 |
+
$days = floor($diff/(60*60*24));
|
156 |
+
} else {
|
157 |
+
$currentDate = new DateTime();
|
158 |
+
$objOrderDate = new DateTime($orderDate);
|
159 |
+
$interval = $currentDate->diff($objOrderDate);
|
160 |
+
$days = $interval->d;
|
161 |
+
}
|
162 |
+
return $days;
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* check is match number of days after order placed with config number of days
|
167 |
+
*
|
168 |
+
* @param Clarion_ReviewReminder_Model_Reviewreminder $reminder
|
169 |
+
* @return boolean
|
170 |
+
*/
|
171 |
+
public function isMatchNumOfDaysAfterOrder($reminder)
|
172 |
+
{
|
173 |
+
$storeId = Mage::app()->getStore()->getStoreId();
|
174 |
+
$configNumOfDaysAfterOrder = $this->getConfigNumOfDaysAfterOrder($storeId);
|
175 |
+
$orderDate = $this->getOrderDate($reminder);
|
176 |
+
$numOfDaysAfterOrder = $this->getNumOfDaysAfterOrder($orderDate);
|
177 |
+
|
178 |
+
if($numOfDaysAfterOrder >= $configNumOfDaysAfterOrder){
|
179 |
+
return true;
|
180 |
+
} else {
|
181 |
+
return false;
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* check is reminder satishfies all the config conditions.
|
187 |
+
*
|
188 |
+
* @param Clarion_ReviewReminder_Model_Reviewreminder $reminder
|
189 |
+
* @return boolean
|
190 |
+
*/
|
191 |
+
public function isMatchAllConfigSettings($reminder)
|
192 |
+
{
|
193 |
+
if(!$this->isOrderStatusMatchWithConfig($reminder)){
|
194 |
+
return false;
|
195 |
+
}
|
196 |
+
|
197 |
+
if(!$this->isMatchNumOfDaysAfterOrder($reminder)){
|
198 |
+
return false;
|
199 |
+
}
|
200 |
+
|
201 |
+
return true;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Check is review already added by customer
|
206 |
+
*
|
207 |
+
* @param $productId
|
208 |
+
* @param $cutomerId
|
209 |
+
* @return boolean
|
210 |
+
*/
|
211 |
+
public function isReviewAlreadyAdded($productId, $cutomerId)
|
212 |
+
{
|
213 |
+
if(empty($productId) || empty($cutomerId)){
|
214 |
+
return false;
|
215 |
+
}
|
216 |
+
|
217 |
+
$collection = Mage::getModel('review/review')->getProductCollection()
|
218 |
+
->addCustomerFilter($cutomerId)
|
219 |
+
->addEntityFilter($productId);
|
220 |
+
|
221 |
+
//echo $collection->getSelect();
|
222 |
+
//exit;
|
223 |
+
|
224 |
+
if($collection->count() > 0){
|
225 |
+
return true;
|
226 |
+
}
|
227 |
+
return false;
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Check is extension enabled
|
232 |
+
*
|
233 |
+
* @return boolean
|
234 |
+
*/
|
235 |
+
public function isExtensionEnabled()
|
236 |
+
{
|
237 |
+
if($this->getConfigExtensionEnabled()){
|
238 |
+
return true;
|
239 |
+
}else{
|
240 |
+
return false;
|
241 |
+
}
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Get config extension enabled
|
246 |
+
*
|
247 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
248 |
+
* @return string
|
249 |
+
*/
|
250 |
+
public function getConfigExtensionEnabled($store = null)
|
251 |
+
{
|
252 |
+
return Mage::getStoreConfig(self::XML_PATH_EXTENSION_ENABLED, $store);
|
253 |
+
}
|
254 |
+
|
255 |
+
}
|
app/code/community/CP/Reviewreminder/Helper/Mail.php
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Helper_Mail extends Mage_Core_Helper_Abstract
|
22 |
+
{
|
23 |
+
const XML_PATH_EMAIL_TEMPLATE = 'review_reminder/general_settings/email_template';
|
24 |
+
const XML_PATH_EMAIL_SENDER = 'review_reminder/general_settings/sender_email_identity';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Send reminder email
|
28 |
+
*
|
29 |
+
* @param Clarion_ReviewReminder_Model_Reviewreminder $reminder
|
30 |
+
* @return boolean
|
31 |
+
*/
|
32 |
+
public function sendReminderEmail($reminder)
|
33 |
+
{
|
34 |
+
//echo '<pre>'; print_r($reminder); die;
|
35 |
+
|
36 |
+
//check is extension enabled
|
37 |
+
if (!Mage::helper('cp_reviewreminder')->isExtensionEnabled()) {
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
$customerId = $reminder->getCustomerId();
|
42 |
+
if(!$customerId){
|
43 |
+
return false;
|
44 |
+
}
|
45 |
+
|
46 |
+
$customer = Mage::getModel('customer/customer')->load($customerId);
|
47 |
+
$customerEmail = $customer->getEmail();
|
48 |
+
$firstName = $customer->getFirstname();
|
49 |
+
$productId = $reminder->getProductId();
|
50 |
+
$product = Mage::getModel('catalog/product')->load($productId);
|
51 |
+
$productName = $product->getName();
|
52 |
+
$categoryId = $this->getProductCategoryId($product);
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
//Send multiple product detail in reviewReminder email
|
57 |
+
$orderId = $reminder->getorder_id();
|
58 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
59 |
+
$order->getAllVisibleItems();
|
60 |
+
|
61 |
+
$orderItems = $order->getItemsCollection()
|
62 |
+
->addAttributeToSelect('*')
|
63 |
+
->load();
|
64 |
+
|
65 |
+
|
66 |
+
foreach($orderItems as $sItem)
|
67 |
+
{
|
68 |
+
|
69 |
+
$proId = $sItem->getProductId();
|
70 |
+
$proName = $sItem->getName();
|
71 |
+
|
72 |
+
$product = Mage::getModel('catalog/product')->load($proId);
|
73 |
+
$proImage = Mage::getModel('catalog/product_media_config')->getMediaUrl( $product->getSmallImage());
|
74 |
+
$catids = $this->getProductCategoryId($product);
|
75 |
+
|
76 |
+
$reviewUrl = Mage::getBaseUrl()."reviewreminder/index/addReview/id/$proId/category/$catids";
|
77 |
+
|
78 |
+
$html .= '<div style="clear:both; margin-bottom:18px; margin-top:12px; overflow:hidden; width:100%;">';
|
79 |
+
$html .= '<img style="float:left; margin-right:10px;" src="'.$proImage.'" height="50" width="50" />'." ".$proName;
|
80 |
+
$html .= '<br>';
|
81 |
+
$html .= '<a href="'.$reviewUrl.'" target="_blank">Write a review</a>';
|
82 |
+
$html .= '</div>';
|
83 |
+
}
|
84 |
+
|
85 |
+
|
86 |
+
$translate = Mage::getSingleton('core/translate');
|
87 |
+
/* @var $translate Mage_Core_Model_Translate */
|
88 |
+
|
89 |
+
$translate->setTranslateInline(false);
|
90 |
+
try {
|
91 |
+
|
92 |
+
$mailTemplate = Mage::getModel('core/email_template');
|
93 |
+
|
94 |
+
/* @var $mailTemplate Mage_Core_Model_Email_Template */
|
95 |
+
|
96 |
+
//get configured email template
|
97 |
+
$template = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, Mage::app()->getStore()->getId());
|
98 |
+
|
99 |
+
$mailSender = Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER, Mage::app()->getStore()->getId());
|
100 |
+
|
101 |
+
$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>Mage::app()->getStore()->getId()))
|
102 |
+
->sendTransactional(
|
103 |
+
$template,
|
104 |
+
$mailSender,
|
105 |
+
$customerEmail,
|
106 |
+
$firstName,
|
107 |
+
array(
|
108 |
+
'firstName' => $firstName,
|
109 |
+
'productId' => $productId,
|
110 |
+
'productDetail' => $html,
|
111 |
+
'categoryId' => $categoryId
|
112 |
+
)
|
113 |
+
);
|
114 |
+
|
115 |
+
if (!$mailTemplate->getSentSuccess()) {
|
116 |
+
throw new Exception();
|
117 |
+
}
|
118 |
+
|
119 |
+
$translate->setTranslateInline(true);
|
120 |
+
//Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('cp_reviewreminder')->__('Your reminder sent successfully.'));
|
121 |
+
//$this->_redirect('*/*/');
|
122 |
+
return true;
|
123 |
+
} catch (Exception $ex) {
|
124 |
+
$translate->setTranslateInline(true);
|
125 |
+
//Mage::getSingleton('adminhtml/session')->addError(Mage::helper('cp_reviewreminder')->__('Unable to send reminder. Please, try again later'));
|
126 |
+
// $this->_redirect('*/*/');
|
127 |
+
return false;
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Get product category id
|
133 |
+
*
|
134 |
+
* @param Mage_Catalog_Model_Product $product
|
135 |
+
* @return boolean/int categoryId
|
136 |
+
*/
|
137 |
+
public function getProductCategoryId($product) {
|
138 |
+
/* @var $product Mage_Catalog_Model_Product */
|
139 |
+
if ($product->getId()) {
|
140 |
+
$categoryIds = $product->getCategoryIds();
|
141 |
+
if (is_array($categoryIds) and count($categoryIds) > 0) {
|
142 |
+
$categoryId = (isset($categoryIds[0]) ? $categoryIds[0] : null);
|
143 |
+
return $categoryId;
|
144 |
+
};
|
145 |
+
}
|
146 |
+
return false;
|
147 |
+
}
|
148 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Adminhtml/System/Config/Source/Days.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Adminhtml_System_Config_Source_Days
|
22 |
+
{
|
23 |
+
public function toOptionArray()
|
24 |
+
{
|
25 |
+
//create option array for days
|
26 |
+
$options = array();
|
27 |
+
$days = range(1, 20);
|
28 |
+
if(!empty($days)){
|
29 |
+
foreach ($days as $day) {
|
30 |
+
$options[]= array('value'=>$day, 'label'=>Mage::helper('cp_reviewreminder')->__($day));
|
31 |
+
}
|
32 |
+
}
|
33 |
+
return $options;
|
34 |
+
}
|
35 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Adminhtml/System/Config/Source/Status.php
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Adminhtml_System_Config_Source_Status
|
22 |
+
{
|
23 |
+
public function toOptionArray($isMultiselect = false)
|
24 |
+
{
|
25 |
+
$options = array(
|
26 |
+
array('value'=>'canceled', 'label'=>Mage::helper('cp_reviewreminder')->__('Canceled')),
|
27 |
+
array('value'=>'closed', 'label'=>Mage::helper('cp_reviewreminder')->__('Closed')),
|
28 |
+
array('value'=>'complete', 'label'=>Mage::helper('cp_reviewreminder')->__('Complete')),
|
29 |
+
array('value'=>'holded', 'label'=>Mage::helper('cp_reviewreminder')->__('On Hold')),
|
30 |
+
array('value'=>'pending', 'label'=>Mage::helper('cp_reviewreminder')->__('Pending')),
|
31 |
+
array('value'=>'processing', 'label'=>Mage::helper('cp_reviewreminder')->__('Processing')),
|
32 |
+
);
|
33 |
+
|
34 |
+
/*
|
35 |
+
$statuses = Mage::getModel('sales/order_status')->getResourceCollection()->getData();
|
36 |
+
$options = array();
|
37 |
+
if(!empty($statuses) && is_array($statuses)){
|
38 |
+
foreach ($statuses as $status) {
|
39 |
+
$options[] = array('value'=>$status['status'], 'label'=>Mage::helper('cp_reviewreminder')->__($status['label']));
|
40 |
+
}
|
41 |
+
}
|
42 |
+
*/
|
43 |
+
|
44 |
+
if(!$isMultiselect){
|
45 |
+
|
46 |
+
array_unshift($options, array('value'=>'', 'label'=>Mage::helper('cp_reviewreminder')->__('--Please Select--')));
|
47 |
+
|
48 |
+
}
|
49 |
+
return $options;
|
50 |
+
}
|
51 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Adminhtml/System/Config/Source/Times.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Adminhtml_System_Config_Source_Times
|
22 |
+
{
|
23 |
+
public function toOptionArray()
|
24 |
+
{
|
25 |
+
//create option array for times
|
26 |
+
$options = array();
|
27 |
+
$times = range(1, 5);
|
28 |
+
if(!empty($times)){
|
29 |
+
foreach ($times as $time) {
|
30 |
+
$options[]= array('value'=>$time, 'label'=>Mage::helper('cp_reviewreminder')->__($time));
|
31 |
+
}
|
32 |
+
}
|
33 |
+
return $options;
|
34 |
+
}
|
35 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Observer.php
ADDED
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Observer
|
22 |
+
{
|
23 |
+
public function addReviewReminderInformation($observer)
|
24 |
+
{
|
25 |
+
//check is extension enabled
|
26 |
+
if (!Mage::helper('cp_reviewreminder')->isExtensionEnabled()) {
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
|
30 |
+
$event = $observer->getEvent();
|
31 |
+
$orderIds = $event->getOrderIds();
|
32 |
+
if(!empty($orderIds) && is_array($orderIds)){
|
33 |
+
foreach ($orderIds as $orderId) {
|
34 |
+
//check order id
|
35 |
+
if(empty($orderId)){
|
36 |
+
continue;
|
37 |
+
}
|
38 |
+
|
39 |
+
//get order information
|
40 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
41 |
+
$customerId = $order->getCustomerId();
|
42 |
+
//Mage::log("cid=".$customerId);
|
43 |
+
//check customer id
|
44 |
+
if(empty($customerId)){
|
45 |
+
continue;
|
46 |
+
}
|
47 |
+
|
48 |
+
$currentTimestamp = time();
|
49 |
+
|
50 |
+
//product ids from order ids
|
51 |
+
$items = $order->getAllVisibleItems();
|
52 |
+
//Mage::log($items);
|
53 |
+
$productId = array();
|
54 |
+
if(!empty($items) && is_array($items)){
|
55 |
+
foreach ($items as $item) {
|
56 |
+
$productIds[] = $item->getProductId();
|
57 |
+
}
|
58 |
+
}
|
59 |
+
// Mage::log($productIds);
|
60 |
+
|
61 |
+
//Save data
|
62 |
+
if(!empty($productIds) && is_array($productIds)){
|
63 |
+
|
64 |
+
$transactionSave = Mage::getModel('core/resource_transaction');
|
65 |
+
|
66 |
+
foreach ($productIds as $productId) {
|
67 |
+
//Check is reminder exist
|
68 |
+
if(Mage::Helper('cp_reviewreminder')->isReminderExist($productId, $customerId)){
|
69 |
+
continue;
|
70 |
+
}
|
71 |
+
|
72 |
+
//Check is review already added by customer
|
73 |
+
if(Mage::Helper('cp_reviewreminder')->isReviewAlreadyAdded($productId, $customerId)){
|
74 |
+
continue;
|
75 |
+
}
|
76 |
+
|
77 |
+
//add reminder
|
78 |
+
$reviewreminder = Mage::getModel('cp_reviewreminder/reviewreminder');
|
79 |
+
$reviewreminder->setOrderIncid($order->getIncrementId());
|
80 |
+
$reviewreminder->setOrderId($orderId);
|
81 |
+
$reviewreminder->setCustomerId($customerId);
|
82 |
+
$reviewreminder->setProductId($productId);
|
83 |
+
$reviewreminder->setCreatedAt($currentTimestamp);
|
84 |
+
|
85 |
+
$transactionSave->addObject($reviewreminder);
|
86 |
+
break;
|
87 |
+
}
|
88 |
+
$transactionSave->save();
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Update reminder after review added
|
96 |
+
*
|
97 |
+
* @param Varien_Event_Observer $observer
|
98 |
+
* @return void
|
99 |
+
*/
|
100 |
+
public function reviewSaveAfter(Varien_Event_Observer $observer)
|
101 |
+
{
|
102 |
+
$event = $observer->getEvent();
|
103 |
+
$review = $event->getObject();
|
104 |
+
$productId = $review->getEntityPkValue();
|
105 |
+
$cutomerId = $review->getCustomerId();
|
106 |
+
|
107 |
+
if(empty($productId) || empty($cutomerId)){
|
108 |
+
return false;
|
109 |
+
}
|
110 |
+
|
111 |
+
//Check is reminder exist
|
112 |
+
$isRecordExist = Mage::Helper('cp_reviewreminder')->isReminderExist($productId, $cutomerId);
|
113 |
+
//update review flag
|
114 |
+
if($isRecordExist){
|
115 |
+
$collection = Mage::getModel('cp_reviewreminder/reviewreminder')->getCollection()
|
116 |
+
->addFieldToFilter('customer_id', $cutomerId)
|
117 |
+
->addFieldToFilter('product_id', $productId);
|
118 |
+
|
119 |
+
if($collection->count() > 0){
|
120 |
+
foreach($collection as $reminder){
|
121 |
+
$reminder->setIsReviewAdded(1);
|
122 |
+
$reminder->save();
|
123 |
+
}
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Cron job method to send product review reminder
|
130 |
+
*
|
131 |
+
* @param Mage_Cron_Model_Schedule $schedule
|
132 |
+
*/
|
133 |
+
public function sendReviewReminder(Mage_Cron_Model_Schedule $schedule)
|
134 |
+
{
|
135 |
+
//check is extension enabled
|
136 |
+
if (!Mage::helper('cp_reviewreminder')->isExtensionEnabled()) {
|
137 |
+
return;
|
138 |
+
}
|
139 |
+
|
140 |
+
//get all records to send reminder
|
141 |
+
$collection = Mage::getModel('cp_reviewreminder/reviewreminder')->getCollection()
|
142 |
+
->addFieldToFilter('is_review_added', 0)
|
143 |
+
->addFieldToFilter('reminder_count', array('lt' => Mage::getStoreConfig('review_reminder/general_settings/number_of_times')));
|
144 |
+
|
145 |
+
if($collection->count() > 0){
|
146 |
+
foreach ($collection as $reminder){
|
147 |
+
$customerId = $reminder->getCustomerId();
|
148 |
+
if(empty($customerId)){
|
149 |
+
continue;
|
150 |
+
}
|
151 |
+
|
152 |
+
//Check config settings
|
153 |
+
if(!Mage::Helper('cp_reviewreminder')->isMatchAllConfigSettings($reminder)){
|
154 |
+
continue;
|
155 |
+
}
|
156 |
+
|
157 |
+
//send reminder mail
|
158 |
+
$isMailSent = Mage::Helper('cp_reviewreminder/mail')->sendReminderEmail($reminder);
|
159 |
+
|
160 |
+
//update reminder record
|
161 |
+
if($isMailSent){
|
162 |
+
$reminder->setIsReminderSent(1);
|
163 |
+
$reminderCount = $reminder->getReminderCount();
|
164 |
+
|
165 |
+
//Increment reminder count by 1
|
166 |
+
$reminderCount = $reminderCount + 1;
|
167 |
+
$reminder->setReminderCount($reminderCount);
|
168 |
+
$currentTimestamp = time();
|
169 |
+
$reminder->setSentAt($currentTimestamp);
|
170 |
+
$reminder->setUpdatedAt($currentTimestamp);
|
171 |
+
$reminder->save();
|
172 |
+
}
|
173 |
+
}
|
174 |
+
}
|
175 |
+
}
|
176 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Resource/Reviewreminder.php
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Resource_Reviewreminder extends Mage_Core_Model_Resource_Db_Abstract
|
22 |
+
{
|
23 |
+
protected function _construct()
|
24 |
+
{
|
25 |
+
$this->_init('cp_reviewreminder/reviewreminder', 'reminder_id');
|
26 |
+
}
|
27 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Resource/Reviewreminder/Collection.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Resource_Reviewreminder_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Define collection model
|
25 |
+
*
|
26 |
+
*/
|
27 |
+
protected function _construct()
|
28 |
+
{
|
29 |
+
$this->_init('cp_reviewreminder/reviewreminder');
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Get customer name
|
34 |
+
*/
|
35 |
+
public function addCustomerNameToSelect()
|
36 |
+
{
|
37 |
+
$customerEntityType = Mage::getModel('eav/config')->getEntityType('customer');//@return Mage_Eav_Model_Entity_Type
|
38 |
+
$customerEntityTypeId = $customerEntityType->getEntityTypeId();
|
39 |
+
$customerEntityTable = $this->getTable($customerEntityType->getEntityTable()); // Retreive entity table name
|
40 |
+
|
41 |
+
$firstNameAttribute = Mage::getModel('eav/entity_attribute')->loadByCode($customerEntityTypeId, 'firstname');
|
42 |
+
$lastNameAttribute = Mage::getModel('eav/entity_attribute')->loadByCode($customerEntityTypeId, 'lastname');
|
43 |
+
$custmerEntityVarchar1 = $customerEntityTable. '_' . $firstNameAttribute->getBackendType();
|
44 |
+
$custmerEntityVarchar2 = $customerEntityTable. '_' . $lastNameAttribute->getBackendType();
|
45 |
+
|
46 |
+
$this->getSelect()
|
47 |
+
->join(array('cust_ent1' => $custmerEntityVarchar1), 'cust_ent1.entity_id=main_table.customer_id', array('firstname' => 'value'))
|
48 |
+
->where('cust_ent1.attribute_id=' . $firstNameAttribute->getAttributeId())
|
49 |
+
->join(array('cust_ent2' => $custmerEntityVarchar2), 'cust_ent2.entity_id=main_table.customer_id', array('lastname' => 'value'))
|
50 |
+
->where('cust_ent2.attribute_id=' . $lastNameAttribute->getAttributeId())
|
51 |
+
->columns(new Zend_Db_Expr("CONCAT(`cust_ent1`.`value`, ' ',`cust_ent2`.`value`) AS customer_name"));
|
52 |
+
return $this;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Get product name
|
57 |
+
*/
|
58 |
+
public function addProductNameToSelect()
|
59 |
+
{
|
60 |
+
//@return entity type object Mage_Eav_Model_Entity_Type
|
61 |
+
$productEntityType = Mage::getModel('eav/config')->getEntityType('catalog_product');
|
62 |
+
//get entity type id
|
63 |
+
$productEntityTypeId = $productEntityType->getEntityTypeId();
|
64 |
+
$productEntityTable = $this->getTable($productEntityType->getEntityTable()); // Retreive entity table name
|
65 |
+
|
66 |
+
$productName = Mage::getModel('eav/entity_attribute')->loadByCode($productEntityType, 'name');
|
67 |
+
$productNameAttributeId = $productName->getAttributeId();
|
68 |
+
$productEntityTableByType = $productEntityTable. '_' . $productName->getBackendType();
|
69 |
+
|
70 |
+
$this->getSelect()
|
71 |
+
->join(array('pet' => $productEntityTableByType), 'pet.entity_id=main_table.product_id', array('product_name' => 'value'))
|
72 |
+
->where('pet.attribute_id=' . $productNameAttributeId);
|
73 |
+
return $this;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Add order status in collection
|
78 |
+
*/
|
79 |
+
public function addOrderStatusAndDateToSelect()
|
80 |
+
{
|
81 |
+
$this->getSelect()
|
82 |
+
->join(array('sot' => $this->getTable('sales/order')), 'sot.entity_id=main_table.order_id',
|
83 |
+
array('order_status' => 'status', 'order_date' => 'created_at' ));
|
84 |
+
return $this;
|
85 |
+
}
|
86 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Resource/Setup.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2015 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
|
22 |
+
{
|
23 |
+
}
|
app/code/community/CP/Reviewreminder/Model/Reviewreminder.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Model_Reviewreminder extends Mage_Core_Model_Abstract
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Define resource model
|
25 |
+
*/
|
26 |
+
protected function _construct()
|
27 |
+
{
|
28 |
+
$this->_init('cp_reviewreminder/reviewreminder');
|
29 |
+
}
|
30 |
+
}
|
app/code/community/CP/Reviewreminder/controllers/Adminhtml/ClosedremindersController.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Adminhtml_ClosedremindersController extends Mage_Adminhtml_Controller_Action
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Pre dispatch action that allows to redirect to no route page in case of
|
25 |
+
* disabled extension through admin panel
|
26 |
+
*/
|
27 |
+
public function preDispatch()
|
28 |
+
{
|
29 |
+
parent::preDispatch();
|
30 |
+
|
31 |
+
if (!Mage::helper('cp_reviewreminder')->isExtensionEnabled()) {
|
32 |
+
$this->setFlag('', 'no-dispatch', true);
|
33 |
+
$this->_redirect('noRoute');
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Init actions
|
39 |
+
*
|
40 |
+
*/
|
41 |
+
protected function _initAction()
|
42 |
+
{
|
43 |
+
// load layout, set active menu and breadcrumbs
|
44 |
+
$this->_title($this->__('Review Reminder'));
|
45 |
+
|
46 |
+
$this->loadLayout()
|
47 |
+
->_setActiveMenu('catalog/review_reminder')
|
48 |
+
->_addBreadcrumb(Mage::helper('cp_reviewreminder')->__('Review Reminder')
|
49 |
+
, Mage::helper('cp_reviewreminder')->__('Review Reminder'));
|
50 |
+
return $this;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Index action method
|
55 |
+
*/
|
56 |
+
public function indexAction()
|
57 |
+
{
|
58 |
+
$this->_initAction();
|
59 |
+
$this->renderLayout();
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Multiple reminder deletion
|
64 |
+
*
|
65 |
+
*/
|
66 |
+
public function massDeleteAction()
|
67 |
+
{
|
68 |
+
//Get reminder ids from selected checkbox
|
69 |
+
$reminderIds = $this->getRequest()->getParam('reminderIds');
|
70 |
+
|
71 |
+
if (!is_array($reminderIds)) {
|
72 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__('Please select reminder(s).'));
|
73 |
+
} else {
|
74 |
+
if (!empty($reminderIds)) {
|
75 |
+
try {
|
76 |
+
foreach ($reminderIds as $reminderId) {
|
77 |
+
$reminder = Mage::getSingleton('cp_reviewreminder/reviewreminder')->load($reminderId);
|
78 |
+
//delete record
|
79 |
+
$reminder->delete();
|
80 |
+
}
|
81 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
82 |
+
$this->__('Total of %d record(s) have been deleted.', count($reminderIds))
|
83 |
+
);
|
84 |
+
} catch (Exception $e) {
|
85 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
89 |
+
$this->_redirect('*/*/');
|
90 |
+
}
|
91 |
+
}
|
app/code/community/CP/Reviewreminder/controllers/Adminhtml/ManageremindersController.php
ADDED
@@ -0,0 +1,278 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_Adminhtml_ManageremindersController extends Mage_Adminhtml_Controller_Action
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Pre dispatch action that allows to redirect to no route page in case of
|
25 |
+
* disabled extension through admin panel
|
26 |
+
*/
|
27 |
+
public function preDispatch()
|
28 |
+
{
|
29 |
+
parent::preDispatch();
|
30 |
+
|
31 |
+
if (!Mage::helper('cp_reviewreminder')->isExtensionEnabled()) {
|
32 |
+
$this->setFlag('', 'no-dispatch', true);
|
33 |
+
$this->_redirect('noRoute');
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Init actions
|
39 |
+
*
|
40 |
+
*/
|
41 |
+
protected function _initAction()
|
42 |
+
{
|
43 |
+
// load layout, set active menu and breadcrumbs
|
44 |
+
$this->_title($this->__('Review Reminder'));
|
45 |
+
|
46 |
+
$this->loadLayout()
|
47 |
+
->_setActiveMenu('catalog/review_reminder')
|
48 |
+
->_addBreadcrumb(Mage::helper('cp_reviewreminder')->__('Review Reminder')
|
49 |
+
, Mage::helper('cp_reviewreminder')->__('Review Reminder'));
|
50 |
+
return $this;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Index action method
|
55 |
+
*/
|
56 |
+
public function indexAction()
|
57 |
+
{
|
58 |
+
$this->_initAction();
|
59 |
+
$this->renderLayout();
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Multiple reminder deletion
|
64 |
+
*
|
65 |
+
*/
|
66 |
+
public function massDeleteAction()
|
67 |
+
{
|
68 |
+
//Get reminder ids from selected checkbox
|
69 |
+
$reminderIds = $this->getRequest()->getParam('reminderIds');
|
70 |
+
|
71 |
+
if (!is_array($reminderIds)) {
|
72 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__('Please select reminder(s).'));
|
73 |
+
} else {
|
74 |
+
if (!empty($reminderIds)) {
|
75 |
+
try {
|
76 |
+
foreach ($reminderIds as $reminderId) {
|
77 |
+
$reminder = Mage::getSingleton('cp_reviewreminder/reviewreminder')->load($reminderId);
|
78 |
+
//delete record
|
79 |
+
$reminder->delete();
|
80 |
+
}
|
81 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
82 |
+
$this->__('Total of %d record(s) have been deleted.', count($reminderIds))
|
83 |
+
);
|
84 |
+
} catch (Exception $e) {
|
85 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
89 |
+
$this->_redirect('*/*/');
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Send multiple reminder
|
94 |
+
*
|
95 |
+
*/
|
96 |
+
public function massSendReminderAction()
|
97 |
+
{
|
98 |
+
//Get reminder ids from selected checkbox
|
99 |
+
$reminderIds = $this->getRequest()->getParam('reminderIds');
|
100 |
+
|
101 |
+
if (!is_array($reminderIds)) {
|
102 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__('Please select reminder(s).'));
|
103 |
+
} else {
|
104 |
+
if (!empty($reminderIds)) {
|
105 |
+
try {
|
106 |
+
$reminderSentCount = 0;
|
107 |
+
foreach ($reminderIds as $reminderId) {
|
108 |
+
$reminder = Mage::getSingleton('cp_reviewreminder/reviewreminder')->load($reminderId);
|
109 |
+
$customerId = $reminder->getCustomerId();
|
110 |
+
if($customerId){
|
111 |
+
|
112 |
+
//check config settings
|
113 |
+
/*
|
114 |
+
if(!Mage::Helper('cp_reviewreminder')->isMatchAllConfigSettings($reminder)){
|
115 |
+
continue;
|
116 |
+
}
|
117 |
+
*/
|
118 |
+
|
119 |
+
//send reminder mail
|
120 |
+
$isMailSent = Mage::Helper('cp_reviewreminder/mail')->sendReminderEmail($reminder);
|
121 |
+
|
122 |
+
//update reminder record
|
123 |
+
if($isMailSent){
|
124 |
+
$reminder->setIsReminderSent(1);
|
125 |
+
$reminderCount = $reminder->getReminderCount();
|
126 |
+
//Increment reminder count by 1
|
127 |
+
$reminderCount++;
|
128 |
+
$reminder->setReminderCount($reminderCount);
|
129 |
+
$currentTimestamp = time();
|
130 |
+
$reminder->setSentAt($currentTimestamp);
|
131 |
+
$reminder->setUpdatedAt($currentTimestamp);
|
132 |
+
$reminder->save();
|
133 |
+
}
|
134 |
+
}
|
135 |
+
$reminderSentCount++;
|
136 |
+
}
|
137 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
138 |
+
$this->__('Total of %d reminder(s) have been sent.', $reminderSentCount)
|
139 |
+
);
|
140 |
+
} catch (Exception $e) {
|
141 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
142 |
+
}
|
143 |
+
}
|
144 |
+
}
|
145 |
+
$this->_redirect('*/*/');
|
146 |
+
}
|
147 |
+
/**
|
148 |
+
* Create new reminder action
|
149 |
+
*/
|
150 |
+
public function newAction()
|
151 |
+
{
|
152 |
+
$this->_initAction()
|
153 |
+
->_addBreadcrumb(Mage::helper('cp_reviewreminder')->__('Add Reminders'),
|
154 |
+
Mage::helper('cp_reviewreminder')->__('Add Reminders'));
|
155 |
+
$this->_addContent($this->getLayout()->createBlock('cp_reviewreminder/adminhtml_addreminder'));
|
156 |
+
$this->renderLayout();
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Edit store action
|
161 |
+
*/
|
162 |
+
public function editAction()
|
163 |
+
{
|
164 |
+
$this->_title($this->__('Review Reminder'))
|
165 |
+
->_title($this->__('Manage Review Reminders'));
|
166 |
+
|
167 |
+
// 1. Get ID and create model
|
168 |
+
$id = $this->getRequest()->getParam('reminder_id');
|
169 |
+
$model = Mage::getModel('cp_reviewreminder/reviewreminder');
|
170 |
+
|
171 |
+
// 2. Initial checking
|
172 |
+
if ($id) {
|
173 |
+
$model->load($id);
|
174 |
+
if (! $model->getId()) {
|
175 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
176 |
+
Mage::helper('cp_reviewreminder')->__('This reminder no longer exists.'));
|
177 |
+
$this->_redirect('*/*/');
|
178 |
+
return;
|
179 |
+
}
|
180 |
+
}
|
181 |
+
|
182 |
+
$this->_title($model->getId() ? $model->getName() : $this->__('New Store'));
|
183 |
+
|
184 |
+
// 3. Set entered data if was error when we do save
|
185 |
+
$data = Mage::getSingleton('adminhtml/session')->getStorelocatorData(true);
|
186 |
+
if (!empty($data)) {
|
187 |
+
$model->setData($data);
|
188 |
+
}
|
189 |
+
|
190 |
+
// 4. Register model to use later in blocks
|
191 |
+
Mage::register('storelocator_data', $model);
|
192 |
+
|
193 |
+
// 5. Build edit form
|
194 |
+
$this->_initAction()
|
195 |
+
->_addBreadcrumb(
|
196 |
+
$id ? Mage::helper('cp_reviewreminder')->__('Edit Store')
|
197 |
+
: Mage::helper('cp_reviewreminder')->__('New Store'),
|
198 |
+
$id ? Mage::helper('cp_reviewreminder')->__('Edit Store')
|
199 |
+
: Mage::helper('cp_reviewreminder')->__('New Store'));
|
200 |
+
|
201 |
+
$this->_addContent($this->getLayout()->createBlock('cp_storelocator/adminhtml_storelocator_edit'))
|
202 |
+
->_addLeft($this->getLayout()->createBlock('cp_storelocator/adminhtml_storelocator_edit_tabs'));
|
203 |
+
|
204 |
+
$this->renderLayout();
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Add multiple reminder
|
209 |
+
*
|
210 |
+
*/
|
211 |
+
public function massAddReminderAction()
|
212 |
+
{
|
213 |
+
//Get item ids from selected checkbox
|
214 |
+
$itemIds = $this->getRequest()->getParam('itemIds');
|
215 |
+
|
216 |
+
if (!is_array($itemIds)) {
|
217 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__('Please select reminder(s).'));
|
218 |
+
} else {
|
219 |
+
if (!empty($itemIds)) {
|
220 |
+
try {
|
221 |
+
$reminderAddCount = 0;
|
222 |
+
$transactionSave = Mage::getModel('core/resource_transaction');
|
223 |
+
foreach ($itemIds as $itemId) {
|
224 |
+
$item = Mage::getModel('sales/order_item')->load($itemId);
|
225 |
+
//check order id
|
226 |
+
$orderId = $item->getOrderId();
|
227 |
+
if(empty($orderId)){
|
228 |
+
continue;
|
229 |
+
}
|
230 |
+
|
231 |
+
//check product id
|
232 |
+
$productId = $item->getProductId();
|
233 |
+
if(empty($productId)){
|
234 |
+
continue;
|
235 |
+
}
|
236 |
+
|
237 |
+
//check customer id
|
238 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
239 |
+
$customerId = $order->getCustomerId();
|
240 |
+
if(empty($customerId)){
|
241 |
+
continue;
|
242 |
+
}
|
243 |
+
|
244 |
+
//Check is reminder exist
|
245 |
+
if(Mage::Helper('cp_reviewreminder')->isReminderExist($productId, $customerId)){
|
246 |
+
continue;
|
247 |
+
}
|
248 |
+
|
249 |
+
//Check is review already added by customer
|
250 |
+
if(Mage::Helper('cp_reviewreminder')->isReviewAlreadyAdded($productId, $customerId)){
|
251 |
+
continue;
|
252 |
+
}
|
253 |
+
|
254 |
+
//add reminder
|
255 |
+
$reviewreminder = Mage::getModel('cp_reviewreminder/reviewreminder');
|
256 |
+
|
257 |
+
$reviewreminder->setOrderId($orderId);
|
258 |
+
$reviewreminder->setCustomerId($customerId);
|
259 |
+
$reviewreminder->setProductId($productId);
|
260 |
+
$currentTimestamp = time();
|
261 |
+
$reviewreminder->setCreatedAt($currentTimestamp);
|
262 |
+
|
263 |
+
$transactionSave->addObject($reviewreminder);
|
264 |
+
$reminderAddCount++;
|
265 |
+
}
|
266 |
+
$transactionSave->save();
|
267 |
+
|
268 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
269 |
+
$this->__('Total of %d reminder(s) have been added.', $reminderAddCount)
|
270 |
+
);
|
271 |
+
} catch (Exception $e) {
|
272 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
273 |
+
}
|
274 |
+
}
|
275 |
+
}
|
276 |
+
$this->_redirect('*/*/');
|
277 |
+
}
|
278 |
+
}
|
app/code/community/CP/Reviewreminder/controllers/IndexController.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class CP_Reviewreminder_IndexController extends Mage_Core_Controller_Front_Action
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Pre dispatch action that allows to redirect to no route page in case of
|
25 |
+
* disabled extension through admin panel
|
26 |
+
*/
|
27 |
+
public function preDispatch()
|
28 |
+
{
|
29 |
+
parent::preDispatch();
|
30 |
+
|
31 |
+
if (!Mage::helper('cp_reviewreminder')->isExtensionEnabled()) {
|
32 |
+
$this->setFlag('', 'no-dispatch', true);
|
33 |
+
$this->_redirect('noRoute');
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
function indexAction()
|
38 |
+
{
|
39 |
+
Mage::Helper('cp_reviewreminder')->isExtensionEnabled();
|
40 |
+
$this->loadLayout();
|
41 |
+
$this->renderLayout();
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Retrieve customer session model object
|
46 |
+
*
|
47 |
+
* @return Mage_Customer_Model_Session
|
48 |
+
*/
|
49 |
+
protected function _getSession()
|
50 |
+
{
|
51 |
+
return Mage::getSingleton('customer/session');
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* If customer logined in then redirect page to add review otherwise redirect
|
56 |
+
* page to login and after login redirect to add review.
|
57 |
+
*
|
58 |
+
*/
|
59 |
+
|
60 |
+
function addReviewAction()
|
61 |
+
{
|
62 |
+
$productId = (int) $this->getRequest()->getParam('id');
|
63 |
+
$categoryId = (int) $this->getRequest()->getParam('category', false);
|
64 |
+
|
65 |
+
if ($this->_getSession()->isLoggedIn()) {
|
66 |
+
$this->_redirect('review/product/list', array('id' => $productId, 'category' => $categoryId));
|
67 |
+
} else {
|
68 |
+
$this->_getSession()->setBeforeAuthUrl(Mage::getUrl('review/product/list',
|
69 |
+
array('id' => $productId, 'category' => $categoryId)));
|
70 |
+
$this->_redirect('customer/account/login');
|
71 |
+
}
|
72 |
+
return;
|
73 |
+
}
|
74 |
+
}
|
app/code/community/CP/Reviewreminder/etc/adminhtml.xml
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Commerce Pundit Technologies
|
17 |
+
* @package CP_Reviewreminder
|
18 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
19 |
+
* @author <<Ravi Soni>>
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
-->
|
23 |
+
<config>
|
24 |
+
<!-- Review Reminder Menu -->
|
25 |
+
<menu>
|
26 |
+
<catalog>
|
27 |
+
<children>
|
28 |
+
<review_reminder translate="title" module="cp_reviewreminder">
|
29 |
+
<title>Review Reminder</title>
|
30 |
+
<sort_order>210</sort_order>
|
31 |
+
<children>
|
32 |
+
<scheduled_reminders translate="title" module="cp_reviewreminder">
|
33 |
+
<title>Manage Reminders</title>
|
34 |
+
<sort_order>1</sort_order>
|
35 |
+
<action>adminhtml/managereminders</action>
|
36 |
+
</scheduled_reminders>
|
37 |
+
<reminder_history translate="title" module="cp_reviewreminder">
|
38 |
+
<title>Closed Reminders</title>
|
39 |
+
<sort_order>2</sort_order>
|
40 |
+
<action>adminhtml/closedreminders</action>
|
41 |
+
</reminder_history>
|
42 |
+
</children>
|
43 |
+
</review_reminder>
|
44 |
+
</children>
|
45 |
+
</catalog>
|
46 |
+
</menu>
|
47 |
+
<!-- Access permissions -->
|
48 |
+
<acl>
|
49 |
+
<resources>
|
50 |
+
<all>
|
51 |
+
<title>Allow Everything</title>
|
52 |
+
</all>
|
53 |
+
<admin>
|
54 |
+
<children>
|
55 |
+
<catalog>
|
56 |
+
<children>
|
57 |
+
<review_reminder translate="title" module="cp_reviewreminder">
|
58 |
+
<title>Review Reminder</title>
|
59 |
+
<children>
|
60 |
+
<scheduled_reminders translate="title" module="cp_reviewreminder">
|
61 |
+
<title>Scheduled Reminders</title>
|
62 |
+
<sort_order>1</sort_order>
|
63 |
+
</scheduled_reminders>
|
64 |
+
<reminder_history translate="title" module="cp_reviewreminder">
|
65 |
+
<title>Reminder History</title>
|
66 |
+
<sort_order>2</sort_order>
|
67 |
+
</reminder_history>
|
68 |
+
</children>
|
69 |
+
</review_reminder>
|
70 |
+
</children>
|
71 |
+
</catalog>
|
72 |
+
<system>
|
73 |
+
<children>
|
74 |
+
<config>
|
75 |
+
<children>
|
76 |
+
<review_reminder translate="title" module="cp_reviewreminder">
|
77 |
+
<title>Review Reminder</title>
|
78 |
+
</review_reminder>
|
79 |
+
</children>
|
80 |
+
</config>
|
81 |
+
</children>
|
82 |
+
</system>
|
83 |
+
</children>
|
84 |
+
</admin>
|
85 |
+
</resources>
|
86 |
+
</acl>
|
87 |
+
</config>
|
app/code/community/CP/Reviewreminder/etc/config.xml
ADDED
@@ -0,0 +1,172 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Commerce Pundit Technologies
|
17 |
+
* @package CP_Reviewreminder
|
18 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
19 |
+
* @author <<Ravi Soni>>
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
-->
|
23 |
+
<config>
|
24 |
+
<modules>
|
25 |
+
<CP_Reviewreminder>
|
26 |
+
<version>1.0.0</version>
|
27 |
+
</CP_Reviewreminder>
|
28 |
+
</modules>
|
29 |
+
|
30 |
+
<frontend>
|
31 |
+
<routers>
|
32 |
+
<cp_reviewreminder>
|
33 |
+
<use>standard</use>
|
34 |
+
<args>
|
35 |
+
<module>CP_Reviewreminder</module>
|
36 |
+
<frontName>reviewreminder</frontName>
|
37 |
+
</args>
|
38 |
+
</cp_reviewreminder>
|
39 |
+
</routers>
|
40 |
+
|
41 |
+
<events>
|
42 |
+
<checkout_onepage_controller_success_action>
|
43 |
+
<observers>
|
44 |
+
<cp_reviewreminder_save_reviewreminder_information>
|
45 |
+
<class>cp_reviewreminder/observer</class>
|
46 |
+
<method>addReviewReminderInformation</method>
|
47 |
+
</cp_reviewreminder_save_reviewreminder_information>
|
48 |
+
</observers>
|
49 |
+
</checkout_onepage_controller_success_action>
|
50 |
+
<review_save_after>
|
51 |
+
<observers>
|
52 |
+
<cp_reviewreminder_review_save_after>
|
53 |
+
<class>cp_reviewreminder/observer</class>
|
54 |
+
<method>reviewSaveAfter</method>
|
55 |
+
</cp_reviewreminder_review_save_after>
|
56 |
+
</observers>
|
57 |
+
</review_save_after>
|
58 |
+
|
59 |
+
<!-- <controller_action_predispatch_checkout_cart_add>
|
60 |
+
<observers>
|
61 |
+
<cp_reviewreminder_checkout_cart_add>
|
62 |
+
<class>cp_reviewreminder/observer</class>
|
63 |
+
<method>sendReviewReminder</method>
|
64 |
+
</cp_reviewreminder_checkout_cart_add>
|
65 |
+
</observers>
|
66 |
+
</controller_action_predispatch_checkout_cart_add> -->
|
67 |
+
|
68 |
+
</events>
|
69 |
+
</frontend>
|
70 |
+
|
71 |
+
<global>
|
72 |
+
<models>
|
73 |
+
<cp_reviewreminder>
|
74 |
+
<class>CP_Reviewreminder_Model</class>
|
75 |
+
<resourceModel>reviewreminder_resource</resourceModel>
|
76 |
+
</cp_reviewreminder>
|
77 |
+
<reviewreminder_resource>
|
78 |
+
<class>CP_Reviewreminder_Model_Resource</class>
|
79 |
+
<entities>
|
80 |
+
<reviewreminder>
|
81 |
+
<table>cp_reviewreminder</table>
|
82 |
+
</reviewreminder>
|
83 |
+
</entities>
|
84 |
+
</reviewreminder_resource>
|
85 |
+
</models>
|
86 |
+
<helpers>
|
87 |
+
<cp_reviewreminder>
|
88 |
+
<class>CP_Reviewreminder_Helper</class>
|
89 |
+
</cp_reviewreminder>
|
90 |
+
</helpers>
|
91 |
+
<blocks>
|
92 |
+
<cp_reviewreminder>
|
93 |
+
<class>CP_Reviewreminder_Block</class>
|
94 |
+
</cp_reviewreminder>
|
95 |
+
</blocks>
|
96 |
+
|
97 |
+
<!-- Setup resource -->
|
98 |
+
<resources>
|
99 |
+
<cp_reviewreminder_setup>
|
100 |
+
<setup>
|
101 |
+
<module>CP_Reviewreminder</module>
|
102 |
+
<class>CP_Reviewreminder_Model_Resource_Setup</class>
|
103 |
+
</setup>
|
104 |
+
</cp_reviewreminder_setup>
|
105 |
+
</resources>
|
106 |
+
|
107 |
+
<!-- Set email template for reminder -->
|
108 |
+
<template>
|
109 |
+
<email>
|
110 |
+
<!-- name is same as in system.xml file -->
|
111 |
+
<review_reminder_general_settings_email_template translate="label" module="cp_reviewreminder">
|
112 |
+
<label>Product review reminder</label>
|
113 |
+
<file>cp_reviewreminder.html</file>
|
114 |
+
<type>html</type>
|
115 |
+
</review_reminder_general_settings_email_template>
|
116 |
+
</email>
|
117 |
+
</template>
|
118 |
+
</global>
|
119 |
+
|
120 |
+
<!-- Adminhtml layout xml configuration -->
|
121 |
+
<adminhtml>
|
122 |
+
<layout>
|
123 |
+
<updates>
|
124 |
+
<cp_reviewreminder>
|
125 |
+
<file>cp_reviewreminder.xml</file>
|
126 |
+
</cp_reviewreminder>
|
127 |
+
</updates>
|
128 |
+
</layout>
|
129 |
+
</adminhtml>
|
130 |
+
|
131 |
+
<!-- Admin router configuration-->
|
132 |
+
<admin>
|
133 |
+
<routers>
|
134 |
+
<adminhtml>
|
135 |
+
<args>
|
136 |
+
<modules>
|
137 |
+
<cp_reviewreminder after="Mage_Adminhtml">CP_Reviewreminder_Adminhtml</cp_reviewreminder>
|
138 |
+
</modules>
|
139 |
+
</args>
|
140 |
+
</adminhtml>
|
141 |
+
</routers>
|
142 |
+
</admin>
|
143 |
+
|
144 |
+
<default>
|
145 |
+
<!-- Set default values of system configuration varables -->
|
146 |
+
<review_reminder>
|
147 |
+
<status>
|
148 |
+
<extension_enable>1</extension_enable>
|
149 |
+
</status>
|
150 |
+
<general_settings>
|
151 |
+
<order_status>complete</order_status>
|
152 |
+
<number_of_days>5</number_of_days>
|
153 |
+
<sender_email_identity>general</sender_email_identity>
|
154 |
+
<email_template>review_reminder_general_settings_email_template</email_template>
|
155 |
+
</general_settings>
|
156 |
+
</review_reminder>
|
157 |
+
</default>
|
158 |
+
<crontab>
|
159 |
+
<jobs>
|
160 |
+
<cp_reviewreminder>
|
161 |
+
<schedule>
|
162 |
+
<cron_expr>0 6 * * 1</cron_expr>
|
163 |
+
<!-- minute(0-59) Hour(0-23) day of month(1-31) month(1-12) day of week(0-7 0 or 7 is Sunday)-->
|
164 |
+
</schedule>
|
165 |
+
<run>
|
166 |
+
<model>cp_reviewreminder/observer::sendReviewReminder</model>
|
167 |
+
</run>
|
168 |
+
</cp_reviewreminder>
|
169 |
+
</jobs>
|
170 |
+
</crontab>
|
171 |
+
</config>
|
172 |
+
|
app/code/community/CP/Reviewreminder/etc/system.xml
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" ?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Commerce Pundit Technologies
|
17 |
+
* @package CP_Reviewreminder
|
18 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
19 |
+
* @author <<Ravi Soni>>
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
-->
|
23 |
+
<config>
|
24 |
+
<tabs>
|
25 |
+
<review_reminder_tab translate="label" module="cp_reviewreminder">
|
26 |
+
<label>Review Reminder</label>
|
27 |
+
<sort_order>0</sort_order>
|
28 |
+
</review_reminder_tab>
|
29 |
+
</tabs>
|
30 |
+
<sections>
|
31 |
+
<review_reminder translate="label" module="cp_reviewreminder">
|
32 |
+
<label>Review Reminder</label>
|
33 |
+
<tab>review_reminder_tab</tab>
|
34 |
+
<frontend_type>text</frontend_type>
|
35 |
+
<sort_order>130</sort_order>
|
36 |
+
<show_in_default>1</show_in_default>
|
37 |
+
<show_in_website>1</show_in_website>
|
38 |
+
<show_in_store>1</show_in_store>
|
39 |
+
<groups>
|
40 |
+
<status translate="label">
|
41 |
+
<label>Status</label>
|
42 |
+
<frontend_type>text</frontend_type>
|
43 |
+
<sort_order>0</sort_order>
|
44 |
+
<show_in_default>1</show_in_default>
|
45 |
+
<show_in_website>1</show_in_website>
|
46 |
+
<show_in_store>1</show_in_store>
|
47 |
+
<fields>
|
48 |
+
<extension_enable translate="label">
|
49 |
+
<label>Extension enabled</label>
|
50 |
+
<frontend_type>select</frontend_type>
|
51 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
52 |
+
<sort_order>0</sort_order>
|
53 |
+
<show_in_default>1</show_in_default>
|
54 |
+
<show_in_website>1</show_in_website>
|
55 |
+
<show_in_store>1</show_in_store>
|
56 |
+
</extension_enable>
|
57 |
+
</fields>
|
58 |
+
</status>
|
59 |
+
<general_settings>
|
60 |
+
<label>General Settings</label>
|
61 |
+
<frontend_type>text</frontend_type>
|
62 |
+
<sort_order>1</sort_order>
|
63 |
+
<show_in_default>1</show_in_default>
|
64 |
+
<show_in_website>1</show_in_website>
|
65 |
+
<show_in_store>1</show_in_store>
|
66 |
+
<fields>
|
67 |
+
<order_status translate="label">
|
68 |
+
<label>Order Status</label>
|
69 |
+
<frontend_type>select</frontend_type>
|
70 |
+
<source_model>cp_reviewreminder/adminhtml_system_config_source_status</source_model>
|
71 |
+
<sort_order>1</sort_order>
|
72 |
+
<validate>required-entry</validate>
|
73 |
+
<show_in_default>1</show_in_default>
|
74 |
+
<show_in_website>1</show_in_website>
|
75 |
+
<show_in_store>1</show_in_store>
|
76 |
+
</order_status>
|
77 |
+
<number_of_days translate="label">
|
78 |
+
<label>Number of days after order placed</label>
|
79 |
+
<frontend_type>select</frontend_type>
|
80 |
+
<source_model>cp_reviewreminder/adminhtml_system_config_source_days</source_model>
|
81 |
+
<sort_order>2</sort_order>
|
82 |
+
<show_in_default>1</show_in_default>
|
83 |
+
<show_in_website>1</show_in_website>
|
84 |
+
<show_in_store>1</show_in_store>
|
85 |
+
</number_of_days>
|
86 |
+
<number_of_times translate="label">
|
87 |
+
<label>Number of times want to send mail</label>
|
88 |
+
<frontend_type>select</frontend_type>
|
89 |
+
<source_model>cp_reviewreminder/adminhtml_system_config_source_times</source_model>
|
90 |
+
<sort_order>2</sort_order>
|
91 |
+
<show_in_default>1</show_in_default>
|
92 |
+
<show_in_website>1</show_in_website>
|
93 |
+
<show_in_store>1</show_in_store>
|
94 |
+
</number_of_times>
|
95 |
+
<email_template translate="label">
|
96 |
+
<label>Email template</label>
|
97 |
+
<frontend_type>select</frontend_type>
|
98 |
+
<source_model>adminhtml/system_config_source_email_template</source_model>
|
99 |
+
<sort_order>3</sort_order>
|
100 |
+
<show_in_default>1</show_in_default>
|
101 |
+
<show_in_website>1</show_in_website>
|
102 |
+
<show_in_store>1</show_in_store>
|
103 |
+
</email_template>
|
104 |
+
<sender_email_identity translate="label">
|
105 |
+
<label>Email Sender</label>
|
106 |
+
<frontend_type>select</frontend_type>
|
107 |
+
<source_model>adminhtml/system_config_source_email_identity</source_model>
|
108 |
+
<sort_order>4</sort_order>
|
109 |
+
<show_in_default>1</show_in_default>
|
110 |
+
<show_in_website>1</show_in_website>
|
111 |
+
<show_in_store>1</show_in_store>
|
112 |
+
</sender_email_identity>
|
113 |
+
</fields>
|
114 |
+
</general_settings>
|
115 |
+
</groups>
|
116 |
+
</review_reminder>
|
117 |
+
</sections>
|
118 |
+
</config>
|
app/code/community/CP/Reviewreminder/sql/cp_reviewreminder_setup/install-1.0.0.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* @category Commerce Pundit Technologies
|
16 |
+
* @package CP_Reviewreminder
|
17 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
18 |
+
* @author <<Ravi Soni>>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
$installer = $this;
|
22 |
+
/**
|
23 |
+
* Prepare database for install
|
24 |
+
*/
|
25 |
+
$installer->startSetup();
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Create table 'cp_review_reminder'
|
29 |
+
*/
|
30 |
+
$table = $installer->getConnection()
|
31 |
+
->newTable($installer->getTable('cp_reviewreminder/reviewreminder'))
|
32 |
+
->addColumn('reminder_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
33 |
+
'identity' => true,
|
34 |
+
'unsigned' => true,
|
35 |
+
'nullable' => false,
|
36 |
+
'primary' => true,
|
37 |
+
), 'Reminder Id')
|
38 |
+
->addColumn('order_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
39 |
+
'unsigned' => true,
|
40 |
+
'nullable' => false,
|
41 |
+
'default' => '0',
|
42 |
+
), 'Order id')
|
43 |
+
->addColumn('order_incid', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
44 |
+
'unsigned' => true,
|
45 |
+
'nullable' => false,
|
46 |
+
'default' => '0',
|
47 |
+
), 'Order increment id')
|
48 |
+
->addColumn('customer_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
49 |
+
'unsigned' => true,
|
50 |
+
'nullable' => false,
|
51 |
+
'default' => '0',
|
52 |
+
), 'Customer Id')
|
53 |
+
->addColumn('product_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
54 |
+
'unsigned' => true,
|
55 |
+
'nullable' => false,
|
56 |
+
'default' => '0',
|
57 |
+
), 'Product Id')
|
58 |
+
->addColumn('is_reminder_sent', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
|
59 |
+
'unsigned' => true,
|
60 |
+
'nullable' => false,
|
61 |
+
'default' => '0',
|
62 |
+
), 'Is reminder sent')
|
63 |
+
->addColumn('is_review_added', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
|
64 |
+
'unsigned' => true,
|
65 |
+
'nullable' => false,
|
66 |
+
'default' => '0',
|
67 |
+
), 'Is review added')
|
68 |
+
->addColumn('reminder_count', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
69 |
+
'unsigned' => true,
|
70 |
+
'nullable' => false,
|
71 |
+
'default' => '0',
|
72 |
+
), 'Reminder count')
|
73 |
+
->addColumn('sent_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
|
74 |
+
'default' => NULL,
|
75 |
+
), 'Reminder sent time')
|
76 |
+
->addColumn('created_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
|
77 |
+
'default' => NULL,
|
78 |
+
), 'Creation Time')
|
79 |
+
->addColumn('updated_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
|
80 |
+
'default' => NULL,
|
81 |
+
), 'Update Time')
|
82 |
+
->setComment('CP reviewreminder Table');
|
83 |
+
$installer->getConnection()->createTable($table);
|
84 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/cp_reviewreminder.xml
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" ?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Commerce Pundit Technologies
|
17 |
+
* @package CP_Reviewreminder
|
18 |
+
* @copyright Copyright (c) 2015 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
19 |
+
* @author <<Ravi Soni>>
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
-->
|
23 |
+
<layout version="0.1.0">
|
24 |
+
<adminhtml_managereminders_index>
|
25 |
+
<reference name="content">
|
26 |
+
<block type="cp_reviewreminder/adminhtml_reviewreminder" name="reviewreminder.grid.container" />
|
27 |
+
</reference>
|
28 |
+
</adminhtml_managereminders_index>
|
29 |
+
<adminhtml_closedreminders_index>
|
30 |
+
<reference name="content">
|
31 |
+
<block type="cp_reviewreminder/adminhtml_closedreminder" name="closedreminder.grid.container" />
|
32 |
+
</reference>
|
33 |
+
</adminhtml_closedreminders_index>
|
34 |
+
</layout>
|
app/etc/modules/CP_Reviewreminder.xml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Commerce Pundit Technologies
|
17 |
+
* @package CP_Reviewreminder
|
18 |
+
* @copyright Copyright (c) 2016 Commerce Pundit Technologies. (http://www.commercepundit.com)
|
19 |
+
* @author <<Ravi Soni>>
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
-->
|
23 |
+
<config>
|
24 |
+
<modules>
|
25 |
+
<CP_Reviewreminder>
|
26 |
+
<active>true</active>
|
27 |
+
<codePool>community</codePool>
|
28 |
+
</CP_Reviewreminder>
|
29 |
+
</modules>
|
30 |
+
</config>
|
app/locale/en_US/template/email/cp_reviewreminder.html
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!--@subject Reminder: Product review @-->
|
2 |
+
<!--@vars
|
3 |
+
{"store url=\"\"":"Store Url",
|
4 |
+
"var logo_url":"Email Logo Image Url",
|
5 |
+
"var logo_alt":"Email Logo Image Alt",
|
6 |
+
"htmlescape var=$firstName":"First name",
|
7 |
+
"var productDetail":"Product Detail",
|
8 |
+
"store url=\"review/product/list\" id=$productId category=$categoryId":"Add product review Url",
|
9 |
+
"var store.getFrontendName()":"Store Name"}
|
10 |
+
@-->
|
11 |
+
|
12 |
+
<!--@styles
|
13 |
+
body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
|
14 |
+
@-->
|
15 |
+
|
16 |
+
<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
|
17 |
+
<div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
|
18 |
+
<table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%">
|
19 |
+
<tr>
|
20 |
+
<td align="center" valign="top" style="padding:20px 0 20px 0">
|
21 |
+
<table bgcolor="FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
|
22 |
+
<tr>
|
23 |
+
<td valign="top">
|
24 |
+
<a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a>
|
25 |
+
</td>
|
26 |
+
</tr>
|
27 |
+
<tr>
|
28 |
+
<td valign="top">
|
29 |
+
|
30 |
+
<h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;"">Hello {{htmlescape var=$firstName}},</h1>
|
31 |
+
|
32 |
+
<p>We would like to thank you for purchasing from {{var store.getFrontendName()}}. Your opinions are important to us so we would like to invite you to write a review about your recent purchase.</p>
|
33 |
+
|
34 |
+
<p><strong>Your Recent Purchases</strong></p>
|
35 |
+
{{var productDetail}}
|
36 |
+
<p>We appreciate your feedback and hope to serve you again in the near future.</p>
|
37 |
+
|
38 |
+
<p>Sincerely,</p>
|
39 |
+
|
40 |
+
<p style="margin-bottom: 0px;">{{var store.getFrontendName()}}</p>
|
41 |
+
</td>
|
42 |
+
</tr>
|
43 |
+
<tr>
|
44 |
+
<td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;"><center><p style="font-size:12px; margin:0;">Thank you again, <strong>{{var store.getFrontendName()}}</strong></p></center></td>
|
45 |
+
</tr>
|
46 |
+
</table>
|
47 |
+
</td>
|
48 |
+
</tr>
|
49 |
+
</table>
|
50 |
+
</div>
|
51 |
+
</body>
|
package.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>CP_Reviewreminder</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Review Reminder extension by Commerce Pundit will help you send product review notification to website user after the purchase product. </summary>
|
10 |
+
<description>Review Reminder is used to automated send email notification to customers asking them to review after products purchased.</description>
|
11 |
+
<notes>Product review reminder</notes>
|
12 |
+
<authors><author><name>Commerce Pundit</name><user>CPExtensions</user><email>support@commercepundit.com</email></author></authors>
|
13 |
+
<date>2016-01-21</date>
|
14 |
+
<time>13:21:30</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="CP"><dir name="Reviewreminder"><dir name="Block"><dir name="Adminhtml"><dir name="AddReminder"><file name="Grid.php" hash="fbc83715a62cb9d71c96728594b067c8"/><dir name="Renderer"><file name="CustomerName.php" hash="f803254f46988cc5e49c4a50d5144567"/></dir></dir><file name="Addreminder.php" hash="87022decb4486e989557ec8a958392c6"/><dir name="Closedreminder"><file name="Grid.php" hash="3556fd4283afe6048d75623b808fc819"/></dir><file name="Closedreminder.php" hash="660a973c43b1373438af253de5f291e0"/><dir name="Reviewreminder"><file name="Grid.php" hash="b77d753a6b571aab4e8ee46b4d7ec250"/></dir><file name="Reviewreminder.php" hash="ea5cd25505b4e70ee08bac7d3dab7b4a"/></dir></dir><dir name="Helper"><file name="Data.php" hash="3fec74978d1c54d054942b886411f200"/><file name="Mail.php" hash="83498623ba352fbb3d14082f88cc2369"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><file name="Days.php" hash="47f89a7578ccf50559c54c652386de37"/><file name="Status.php" hash="f2f1b0c5ade45afc6779b009bd72cec8"/><file name="Times.php" hash="f8d9925a701c0fb4460d179fd5b319ed"/></dir></dir></dir></dir><file name="Observer.php" hash="53e9c4ec677077c1ad7215d3bcfa7c7e"/><dir name="Resource"><dir name="Reviewreminder"><file name="Collection.php" hash="c5ea284456d3438d288e2a9c0c388a6f"/></dir><file name="Reviewreminder.php" hash="2e83dfa67182ab84d9cd91790b98a946"/><file name="Setup.php" hash="de08fc56b80dd1004d2e668eb60442b9"/></dir><file name="Reviewreminder.php" hash="cb370485e71236ab6b78c38da3503d38"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ClosedremindersController.php" hash="4e5678d8fea3deecf5cb21b0ec8038c4"/><file name="ManageremindersController.php" hash="5cb90da4e8ca4a1d55441fc134901822"/></dir><file name="IndexController.php" hash="650f7be68a5ba0bc48d23535b9933d0a"/></dir><dir name="etc"><file name="adminhtml.xml" hash="feb763d479df7cb79cb539fd75452ed7"/><file name="config.xml" hash="29e7db4356c528adc47b28e68cf9d1d6"/><file name="system.xml" hash="fc42bb263119aae16fc5e4649716f72f"/></dir><dir name="sql"><dir name="cp_reviewreminder_setup"><file name="install-1.0.0.php" hash="6bf3d34475190247e73c3a6a26ccf048"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="CP_Reviewreminder.xml" hash="e69436488e824c1d093327a28e9653fd"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="cp_reviewreminder.xml" hash="d0687e6c6981d2cba713198763a41646"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><file name="cp_reviewreminder.html" hash="b744e35c4e0cc4af3d22fb30db62ccb4"/></dir></dir></dir></target></contents>
|
16 |
+
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
+
</package>
|