Version Notes
Magento Easy Tabs Community Module
Download this release
Release Info
Developer | TemplatesMaster |
Extension | free_testimonials_extension |
Version | 1.1.0 |
Comparing to | |
See all releases |
Version 1.1.0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page.php +28 -0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit.php +117 -0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit/Form.php +17 -0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit/Tab/Main.php +211 -0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit/Tabs.php +12 -0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page/Grid.php +130 -0
- app/code/local/TM/Testimonials/Block/Adminhtml/Page/Helper/Image.php +15 -0
- app/code/local/TM/Testimonials/Block/Form/Container.php +5 -0
- app/code/local/TM/Testimonials/Block/Form/Form.php +76 -0
- app/code/local/TM/Testimonials/Block/List/Bottom.php +33 -0
- app/code/local/TM/Testimonials/Block/List/Content.php +76 -0
- app/code/local/TM/Testimonials/Block/List/Title.php +6 -0
- app/code/local/TM/Testimonials/Block/Widget/Form.php +29 -0
- app/code/local/TM/Testimonials/Block/Widget/List.php +68 -0
- app/code/local/TM/Testimonials/Block/Widget/ListFull.php +65 -0
- app/code/local/TM/Testimonials/Block/Widget/Review.php +70 -0
- app/code/local/TM/Testimonials/Helper/Data.php +321 -0
- app/code/local/TM/Testimonials/Helper/Image.php +63 -0
- app/code/local/TM/Testimonials/Model/Data.php +36 -0
- app/code/local/TM/Testimonials/Model/Observer.php +98 -0
- app/code/local/TM/Testimonials/Model/Resource/Data.php +121 -0
- app/code/local/TM/Testimonials/Model/Resource/Data/Collection.php +74 -0
- app/code/local/TM/Testimonials/Model/Resource/Setup.php +4 -0
- app/code/local/TM/Testimonials/Model/System/Config/Backend/Image.php +21 -0
- app/code/local/TM/Testimonials/controllers/Adminhtml/Testimonials/IndexController.php +253 -0
- app/code/local/TM/Testimonials/controllers/IndexController.php +125 -0
- app/code/local/TM/Testimonials/etc/adminhtml.xml +71 -0
- app/code/local/TM/Testimonials/etc/config.xml +188 -0
- app/code/local/TM/Testimonials/etc/system.xml +245 -0
- app/code/local/TM/Testimonials/etc/widget.xml +72 -0
- app/code/local/TM/Testimonials/sql/tm_testimonials_setup/mysql4-install-1.0.0.php +87 -0
- app/design/adminhtml/default/default/layout/tm/testimonials.xml +28 -0
- app/design/frontend/base/default/layout/tm/testimonials.xml +66 -0
- app/design/frontend/base/default/template/tm/testimonials/form/container.phtml +5 -0
- app/design/frontend/base/default/template/tm/testimonials/form/form.phtml +99 -0
- app/design/frontend/base/default/template/tm/testimonials/list/bottom.phtml +21 -0
- app/design/frontend/base/default/template/tm/testimonials/list/content.phtml +85 -0
- app/design/frontend/base/default/template/tm/testimonials/list/title.phtml +12 -0
- app/design/frontend/base/default/template/tm/testimonials/widget/list.phtml +105 -0
- app/design/frontend/base/default/template/tm/testimonials/widget/review.phtml +18 -0
- app/etc/modules/TM_Testimonials.xml +10 -0
- app/locale/en_US/TM_Testimonials.csv +35 -0
- app/locale/en_US/template/email/testimonials_admin_notification.html +49 -0
- package.xml +30 -0
- skin/frontend/base/default/css/tm/testimonials.css +258 -0
- skin/frontend/base/default/js/tm/testimonials.js +22 -0
app/code/local/TM/Testimonials/Block/Adminhtml/Page.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Adminhtml_Page extends Mage_Adminhtml_Block_Widget_Grid_Container
|
4 |
+
{
|
5 |
+
public function __construct()
|
6 |
+
{
|
7 |
+
$this->_blockGroup = 'testimonials';
|
8 |
+
$this->_controller = 'adminhtml_page';
|
9 |
+
$this->_headerText = Mage::helper('testimonials')->__('Manage Testimonials');
|
10 |
+
|
11 |
+
parent::__construct();
|
12 |
+
|
13 |
+
if (!$this->_isAllowedAction('save')) {
|
14 |
+
$this->_removeButton('add');
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Check permission for passed action
|
20 |
+
*
|
21 |
+
* @param string $action
|
22 |
+
* @return bool
|
23 |
+
*/
|
24 |
+
protected function _isAllowedAction($action)
|
25 |
+
{
|
26 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/' . $action);
|
27 |
+
}
|
28 |
+
}
|
app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit.php
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Block_Adminhtml_Page_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
|
3 |
+
{
|
4 |
+
public function __construct()
|
5 |
+
{
|
6 |
+
|
7 |
+
$this->_blockGroup = 'testimonials';
|
8 |
+
$this->_objectId = 'testimonial_id';
|
9 |
+
$this->_controller = 'adminhtml_page';
|
10 |
+
|
11 |
+
parent::__construct();
|
12 |
+
|
13 |
+
if ($this->_isAllowedAction('save')) {
|
14 |
+
$this->_addButton('saveandcontinue', array(
|
15 |
+
'label' => Mage::helper('adminhtml')->__('Save and Continue Edit'),
|
16 |
+
'onclick' => 'saveAndContinueEdit(\''.$this->_getSaveAndContinueUrl().'\')',
|
17 |
+
'class' => 'save',
|
18 |
+
), -100);
|
19 |
+
} else {
|
20 |
+
$this->_removeButton('save');
|
21 |
+
}
|
22 |
+
if (!$this->_isAllowedAction('delete')) {
|
23 |
+
$this->_removeButton('delete');
|
24 |
+
}
|
25 |
+
|
26 |
+
if ($this->_isAllowedAction('approve')) {
|
27 |
+
if (Mage::registry('testimonials_data')->getStatus() == TM_Testimonials_Model_Data::STATUS_AWAITING_APPROVAL) {
|
28 |
+
$this->addButton('approve', array(
|
29 |
+
'label' => Mage::helper('testimonials')->__('Approve'),
|
30 |
+
'onclick' => "setLocation('" . $this->_getApproveUrl() . "')",
|
31 |
+
'class' => 'save'
|
32 |
+
));
|
33 |
+
}
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Retrieve text for header element depending on loaded page
|
39 |
+
*
|
40 |
+
* @return string
|
41 |
+
*/
|
42 |
+
public function getHeaderText()
|
43 |
+
{
|
44 |
+
if (Mage::registry('testimonials_data')->getId()) {
|
45 |
+
return Mage::helper('testimonials')->__("Edit Testimonial");
|
46 |
+
}
|
47 |
+
else {
|
48 |
+
return Mage::helper('testimonials')->__('New Testimonial');
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Check permission for passed action
|
54 |
+
*
|
55 |
+
* @param string $action
|
56 |
+
* @return bool
|
57 |
+
*/
|
58 |
+
protected function _isAllowedAction($action)
|
59 |
+
{
|
60 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/' . $action);
|
61 |
+
}
|
62 |
+
|
63 |
+
public function getSaveUrl()
|
64 |
+
{
|
65 |
+
return $this->getUrl('*/*/save', array(
|
66 |
+
'_current' => true
|
67 |
+
));
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Getter of url for "Save and Continue" button
|
72 |
+
* tab_id will be replaced by desired by JS later
|
73 |
+
*
|
74 |
+
* @return string
|
75 |
+
*/
|
76 |
+
protected function _getSaveAndContinueUrl()
|
77 |
+
{
|
78 |
+
return $this->getUrl('*/*/save', array(
|
79 |
+
'_current' => true,
|
80 |
+
'back' => 'edit',
|
81 |
+
'active_tab' => '{{tab_id}}'
|
82 |
+
));
|
83 |
+
}
|
84 |
+
|
85 |
+
protected function _getApproveUrl()
|
86 |
+
{
|
87 |
+
return $this->getUrl('*/*/approve', array(
|
88 |
+
'_current' => true
|
89 |
+
));
|
90 |
+
}
|
91 |
+
|
92 |
+
protected function _prepareLayout()
|
93 |
+
{
|
94 |
+
$tabsBlock = $this->getLayout()->getBlock('testimonials_page_edit_tabs');
|
95 |
+
if ($tabsBlock) {
|
96 |
+
$tabsBlockJsObject = $tabsBlock->getJsObjectName();
|
97 |
+
$tabsBlockPrefix = $tabsBlock->getId() . '_';
|
98 |
+
} else {
|
99 |
+
$tabsBlockJsObject = 'page_tabsJsTabs';
|
100 |
+
$tabsBlockPrefix = 'page_tabs_';
|
101 |
+
}
|
102 |
+
|
103 |
+
$this->_formScripts[] = "
|
104 |
+
function saveAndContinueEdit(urlTemplate) {
|
105 |
+
var tabsIdValue = " . $tabsBlockJsObject . ".activeTab.id;
|
106 |
+
var tabsBlockPrefix = '" . $tabsBlockPrefix . "';
|
107 |
+
if (tabsIdValue.startsWith(tabsBlockPrefix)) {
|
108 |
+
tabsIdValue = tabsIdValue.substr(tabsBlockPrefix.length)
|
109 |
+
}
|
110 |
+
var template = new Template(urlTemplate, /(^|.|\\r|\\n)({{(\w+)}})/);
|
111 |
+
var url = template.evaluate({tab_id:tabsIdValue});
|
112 |
+
editForm.submit(url);
|
113 |
+
}
|
114 |
+
";
|
115 |
+
return parent::_prepareLayout();
|
116 |
+
}
|
117 |
+
}
|
app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit/Form.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Adminhtml_Page_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
|
4 |
+
{
|
5 |
+
protected function _prepareForm()
|
6 |
+
{
|
7 |
+
$form = new Varien_Data_Form(array(
|
8 |
+
'id' => 'edit_form',
|
9 |
+
'action' => $this->getData('action'),
|
10 |
+
'method' => 'post',
|
11 |
+
'enctype' => 'multipart/form-data'
|
12 |
+
));
|
13 |
+
$form->setUseContainer(true);
|
14 |
+
$this->setForm($form);
|
15 |
+
return parent::_prepareForm();
|
16 |
+
}
|
17 |
+
}
|
app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit/Tab/Main.php
ADDED
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Adminhtml_Page_Edit_Tab_Main
|
4 |
+
extends Mage_Adminhtml_Block_Widget_Form
|
5 |
+
implements Mage_Adminhtml_Block_Widget_Tab_Interface
|
6 |
+
{
|
7 |
+
protected function _prepareForm()
|
8 |
+
{
|
9 |
+
$model = Mage::registry('testimonials_data');
|
10 |
+
$form = new Varien_Data_Form();
|
11 |
+
$form->setHtmlIdPrefix('page_');
|
12 |
+
|
13 |
+
$fieldset = $form->addFieldset('base_fieldset', array(
|
14 |
+
'legend' => Mage::helper('testimonials')->__('Testimonial Information'),
|
15 |
+
'class' => 'fieldset-wide'
|
16 |
+
));
|
17 |
+
|
18 |
+
if ($model->getTestimonialId()) {
|
19 |
+
$fieldset->addField('testimonial_id', 'hidden', array(
|
20 |
+
'name' => 'testimonial_id'
|
21 |
+
));
|
22 |
+
}
|
23 |
+
|
24 |
+
if ($this->_isAllowedAction('save')) {
|
25 |
+
$isElementDisabled = false;
|
26 |
+
} else {
|
27 |
+
$isElementDisabled = true;
|
28 |
+
}
|
29 |
+
|
30 |
+
$fieldset->addField('name', 'text', array(
|
31 |
+
'name' => 'name',
|
32 |
+
'label' => Mage::helper('catalog')->__('Name'),
|
33 |
+
'title' => Mage::helper('catalog')->__('Name'),
|
34 |
+
'required' => true,
|
35 |
+
'disabled' => $isElementDisabled
|
36 |
+
));
|
37 |
+
|
38 |
+
$fieldset->addField('email', 'text', array(
|
39 |
+
'name' => 'email',
|
40 |
+
'label' => Mage::helper('contacts')->__('Email'),
|
41 |
+
'title' => Mage::helper('contacts')->__('Email'),
|
42 |
+
'required' => true,
|
43 |
+
'class' => 'validate-email',
|
44 |
+
'disabled' => $isElementDisabled
|
45 |
+
));
|
46 |
+
|
47 |
+
if (!Mage::app()->isSingleStoreMode()) {
|
48 |
+
$field = $fieldset->addField('store_id', 'multiselect', array(
|
49 |
+
'name' => 'stores[]',
|
50 |
+
'label' => Mage::helper('cms')->__('Store View'),
|
51 |
+
'title' => Mage::helper('cms')->__('Store View'),
|
52 |
+
'required' => true,
|
53 |
+
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
|
54 |
+
'disabled' => $isElementDisabled
|
55 |
+
));
|
56 |
+
} else {
|
57 |
+
$fieldset->addField('store_id', 'hidden', array(
|
58 |
+
'name' => 'stores[]',
|
59 |
+
'value' => Mage::app()->getStore(true)->getId()
|
60 |
+
));
|
61 |
+
$model->setStoreId(Mage::app()->getStore(true)->getId());
|
62 |
+
}
|
63 |
+
|
64 |
+
$fieldset->addField('message', 'textarea', array(
|
65 |
+
'name' => 'message',
|
66 |
+
'label' => Mage::helper('testimonials')->__('Message'),
|
67 |
+
'title' => Mage::helper('testimonials')->__('Message'),
|
68 |
+
'required' => true,
|
69 |
+
'disabled' => $isElementDisabled
|
70 |
+
));
|
71 |
+
|
72 |
+
$fieldset->addField('company', 'text', array(
|
73 |
+
'name' => 'company',
|
74 |
+
'label' => Mage::helper('testimonials')->__('Company'),
|
75 |
+
'title' => Mage::helper('testimonials')->__('Company'),
|
76 |
+
'disabled' => $isElementDisabled
|
77 |
+
));
|
78 |
+
|
79 |
+
$fieldset->addField('website', 'text', array(
|
80 |
+
'name' => 'website',
|
81 |
+
'label' => Mage::helper('testimonials')->__('Website'),
|
82 |
+
'title' => Mage::helper('testimonials')->__('Website'),
|
83 |
+
'disabled' => $isElementDisabled
|
84 |
+
));
|
85 |
+
|
86 |
+
$fieldset->addField('facebook', 'text', array(
|
87 |
+
'name' => 'facebook',
|
88 |
+
'label' => Mage::helper('testimonials')->__('Facebook'),
|
89 |
+
'title' => Mage::helper('testimonials')->__('Facebook'),
|
90 |
+
'disabled' => $isElementDisabled
|
91 |
+
));
|
92 |
+
|
93 |
+
$fieldset->addField('twitter', 'text', array(
|
94 |
+
'name' => 'twitter',
|
95 |
+
'label' => Mage::helper('testimonials')->__('Twitter'),
|
96 |
+
'title' => Mage::helper('testimonials')->__('Twitter'),
|
97 |
+
'disabled' => $isElementDisabled
|
98 |
+
));
|
99 |
+
|
100 |
+
$fieldset->addField('rating', 'select', array(
|
101 |
+
'name' => 'rating',
|
102 |
+
'label' => Mage::helper('testimonials')->__('Rating'),
|
103 |
+
'title' => Mage::helper('testimonials')->__('Rating'),
|
104 |
+
'options' => array('-1' => Mage::helper('testimonials')->__('No rating'),
|
105 |
+
'1' => '1 ' . Mage::helper('testimonials')->__('star'),
|
106 |
+
'2' => '2 ' . Mage::helper('testimonials')->__('stars'),
|
107 |
+
'3' => '3 ' . Mage::helper('testimonials')->__('stars'),
|
108 |
+
'4' => '4 ' . Mage::helper('testimonials')->__('stars'),
|
109 |
+
'5' => '5 ' . Mage::helper('testimonials')->__('stars')),
|
110 |
+
'disabled' => $isElementDisabled
|
111 |
+
));
|
112 |
+
|
113 |
+
$this->_addElementTypes($fieldset); //register own image element
|
114 |
+
$fieldset->addField('image', 'image', array(
|
115 |
+
'name' => 'image',
|
116 |
+
'label' => Mage::helper('catalog')->__('Profile image'),
|
117 |
+
'title' => Mage::helper('catalog')->__('Profile image'),
|
118 |
+
'disabled' => $isElementDisabled
|
119 |
+
));
|
120 |
+
|
121 |
+
$fieldset->addField('status', 'select', array(
|
122 |
+
'name' => 'status',
|
123 |
+
'label' => Mage::helper('cms')->__('Status'),
|
124 |
+
'title' => Mage::helper('cms')->__('Status'),
|
125 |
+
'options' => $model->getAvailableStatuses(),
|
126 |
+
'disabled' => $isElementDisabled,
|
127 |
+
'required' => true
|
128 |
+
));
|
129 |
+
|
130 |
+
$fieldset->addField('widget', 'select', array(
|
131 |
+
'name' => 'widget',
|
132 |
+
'label' => Mage::helper('testimonials')->__('Display in widget'),
|
133 |
+
'title' => Mage::helper('testimonials')->__('Display in widget'),
|
134 |
+
'options' => Mage::getModel('adminhtml/system_config_source_yesno')->toArray(),
|
135 |
+
'disabled' => $isElementDisabled,
|
136 |
+
'value' => 1
|
137 |
+
));
|
138 |
+
|
139 |
+
$fieldset->addField('date', 'date', array(
|
140 |
+
'name' => 'date',
|
141 |
+
'label' => Mage::helper('testimonials')->__('Created date'),
|
142 |
+
'title' => Mage::helper('testimonials')->__('Created date'),
|
143 |
+
'image' => $this->getSkinUrl('images/grid-cal.gif'),
|
144 |
+
'format' => Mage::app()->getLocale()->getDateFormatWithLongYear(),
|
145 |
+
'disabled' => $isElementDisabled
|
146 |
+
));
|
147 |
+
|
148 |
+
$form->addValues($model->getData());
|
149 |
+
$form->setFieldNameSuffix('testimonials');
|
150 |
+
$this->setForm($form);
|
151 |
+
return parent::_prepareForm();
|
152 |
+
}
|
153 |
+
|
154 |
+
protected function _getAdditionalElementTypes()
|
155 |
+
{
|
156 |
+
return array(
|
157 |
+
'image' => Mage::getConfig()->getBlockClassName('testimonials/adminhtml_page_helper_image')
|
158 |
+
);
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Prepare label for tab
|
163 |
+
*
|
164 |
+
* @return string
|
165 |
+
*/
|
166 |
+
public function getTabLabel()
|
167 |
+
{
|
168 |
+
return Mage::helper('testimonials')->__('Testimonial Information');
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Prepare title for tab
|
173 |
+
*
|
174 |
+
* @return string
|
175 |
+
*/
|
176 |
+
public function getTabTitle()
|
177 |
+
{
|
178 |
+
return Mage::helper('testimonials')->__('Testimonial Information');
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Returns status flag about this tab can be shown or not
|
183 |
+
*
|
184 |
+
* @return true
|
185 |
+
*/
|
186 |
+
public function canShowTab()
|
187 |
+
{
|
188 |
+
return true;
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Returns status flag about this tab hidden or not
|
193 |
+
*
|
194 |
+
* @return true
|
195 |
+
*/
|
196 |
+
public function isHidden()
|
197 |
+
{
|
198 |
+
return false;
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Check permission for passed action
|
203 |
+
*
|
204 |
+
* @param string $action
|
205 |
+
* @return bool
|
206 |
+
*/
|
207 |
+
protected function _isAllowedAction($action)
|
208 |
+
{
|
209 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/' . $action);
|
210 |
+
}
|
211 |
+
}
|
app/code/local/TM/Testimonials/Block/Adminhtml/Page/Edit/Tabs.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Adminhtml_Page_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
|
4 |
+
{
|
5 |
+
public function __construct()
|
6 |
+
{
|
7 |
+
parent::__construct();
|
8 |
+
$this->setId('page_tabs');
|
9 |
+
$this->setDestElementId('edit_form');
|
10 |
+
$this->setTitle(Mage::helper('testimonials')->__('Testimonial Information'));
|
11 |
+
}
|
12 |
+
}
|
app/code/local/TM/Testimonials/Block/Adminhtml/Page/Grid.php
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Block_Adminhtml_Page_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
3 |
+
{
|
4 |
+
public function __construct()
|
5 |
+
{
|
6 |
+
parent::__construct();
|
7 |
+
$this->setId('testimonialsGrid');
|
8 |
+
$this->setDefaultSort('testimonial_id');
|
9 |
+
$this->setDefaultDir('ASC');
|
10 |
+
}
|
11 |
+
|
12 |
+
protected function _prepareCollection()
|
13 |
+
{
|
14 |
+
$collection = Mage::getModel('tm_testimonials/data')->getCollection();
|
15 |
+
$this->setCollection($collection);
|
16 |
+
return parent::_prepareCollection();
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function _prepareColumns()
|
20 |
+
{
|
21 |
+
$this->addColumn('testimonial_id', array(
|
22 |
+
'header' => Mage::helper('testimonials')->__('Id'),
|
23 |
+
'index' => 'testimonial_id',
|
24 |
+
'width' => 50
|
25 |
+
));
|
26 |
+
|
27 |
+
$this->addColumn('name', array(
|
28 |
+
'header' => Mage::helper('testimonials')->__('Name'),
|
29 |
+
'index' => 'name'
|
30 |
+
));
|
31 |
+
|
32 |
+
$this->addColumn('email', array(
|
33 |
+
'header' => Mage::helper('testimonials')->__('Email'),
|
34 |
+
'index' => 'email'
|
35 |
+
));
|
36 |
+
|
37 |
+
if (!Mage::app()->isSingleStoreMode()) {
|
38 |
+
$this->addColumn('store_id', array(
|
39 |
+
'header' => Mage::helper('cms')->__('Store View'),
|
40 |
+
'index' => 'store_id',
|
41 |
+
'type' => 'store',
|
42 |
+
'store_all' => true,
|
43 |
+
'store_view' => true,
|
44 |
+
'sortable' => false,
|
45 |
+
'filter_condition_callback'
|
46 |
+
=> array($this, '_filterStoreCondition')
|
47 |
+
));
|
48 |
+
}
|
49 |
+
|
50 |
+
$this->addColumn('date', array(
|
51 |
+
'header' => Mage::helper('testimonials')->__('Created Date'),
|
52 |
+
'index' => 'date',
|
53 |
+
'width' => 150,
|
54 |
+
'type' => 'datetime'
|
55 |
+
));
|
56 |
+
|
57 |
+
$this->addColumn('status', array(
|
58 |
+
'header' => Mage::helper('testimonials')->__('Status'),
|
59 |
+
'index' => 'status',
|
60 |
+
'type' => 'options',
|
61 |
+
'width' => 150,
|
62 |
+
'options' => Mage::getSingleton('tm_testimonials/data')->getAvailableStatuses()
|
63 |
+
));
|
64 |
+
return parent::_prepareColumns();
|
65 |
+
}
|
66 |
+
|
67 |
+
protected function _prepareMassaction()
|
68 |
+
{
|
69 |
+
$this->setMassactionIdField('testimonial_id');
|
70 |
+
$this->getMassactionBlock()->setFormFieldName('testimonials');
|
71 |
+
|
72 |
+
if ($this->_isAllowedAction('delete')) {
|
73 |
+
$this->getMassactionBlock()->addItem('delete', array(
|
74 |
+
'label'=> Mage::helper('catalog')->__('Delete'),
|
75 |
+
'url' => $this->getUrl('*/*/massDelete'),
|
76 |
+
'confirm' => Mage::helper('catalog')->__('Are you sure?')
|
77 |
+
));
|
78 |
+
}
|
79 |
+
|
80 |
+
if ($this->_isAllowedAction('approve')) {
|
81 |
+
$statuses = Mage::getSingleton('tm_testimonials/data')->getAvailableStatuses();
|
82 |
+
|
83 |
+
array_unshift($statuses, array('label'=>'', 'value'=>''));
|
84 |
+
$this->getMassactionBlock()->addItem('status', array(
|
85 |
+
'label'=> Mage::helper('catalog')->__('Change status'),
|
86 |
+
'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)),
|
87 |
+
'additional' => array(
|
88 |
+
'visibility' => array(
|
89 |
+
'name' => 'status',
|
90 |
+
'type' => 'select',
|
91 |
+
'class' => 'required-entry',
|
92 |
+
'label' => Mage::helper('catalog')->__('Status'),
|
93 |
+
'values' => $statuses
|
94 |
+
)
|
95 |
+
)
|
96 |
+
));
|
97 |
+
}
|
98 |
+
|
99 |
+
return $this;
|
100 |
+
}
|
101 |
+
|
102 |
+
protected function _afterLoadCollection()
|
103 |
+
{
|
104 |
+
$this->getCollection()->walk('afterLoad');
|
105 |
+
parent::_afterLoadCollection();
|
106 |
+
}
|
107 |
+
|
108 |
+
protected function _filterStoreCondition($collection, $column)
|
109 |
+
{
|
110 |
+
if (!$value = $column->getFilter()->getValue()) {
|
111 |
+
return;
|
112 |
+
}
|
113 |
+
$this->getCollection()->addStoreFilter($value);
|
114 |
+
}
|
115 |
+
|
116 |
+
public function getRowUrl($row)
|
117 |
+
{
|
118 |
+
return $this->getUrl('*/*/edit', array('testimonial_id' => $row->getTestimonialId()));
|
119 |
+
}
|
120 |
+
/**
|
121 |
+
* Check permission for passed action
|
122 |
+
*
|
123 |
+
* @param string $action
|
124 |
+
* @return bool
|
125 |
+
*/
|
126 |
+
protected function _isAllowedAction($action)
|
127 |
+
{
|
128 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/' . $action);
|
129 |
+
}
|
130 |
+
}
|
app/code/local/TM/Testimonials/Block/Adminhtml/Page/Helper/Image.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Adminhtml_Page_Helper_Image extends Varien_Data_Form_Element_Image
|
4 |
+
{
|
5 |
+
protected function _getUrl()
|
6 |
+
{
|
7 |
+
$url = false;
|
8 |
+
if ($this->getValue()) {
|
9 |
+
$url = Mage::getBaseUrl('media')
|
10 |
+
. TM_Testimonials_Model_Data::IMAGE_PATH
|
11 |
+
. $this->getValue();
|
12 |
+
}
|
13 |
+
return $url;
|
14 |
+
}
|
15 |
+
}
|
app/code/local/TM/Testimonials/Block/Form/Container.php
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Block_Form_Container extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
|
5 |
+
}
|
app/code/local/TM/Testimonials/Block/Form/Form.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Block_Form_Form extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
public function getUserName()
|
5 |
+
{
|
6 |
+
if ($data = $this->_getSessionData('name')) {
|
7 |
+
return $data;
|
8 |
+
}
|
9 |
+
return $this->helper('contacts')->getUserName();
|
10 |
+
}
|
11 |
+
|
12 |
+
public function getUserEmail()
|
13 |
+
{
|
14 |
+
if ($data = $this->_getSessionData('email')) {
|
15 |
+
return $data;
|
16 |
+
}
|
17 |
+
return $this->helper('contacts')->getUserEmail();
|
18 |
+
}
|
19 |
+
|
20 |
+
public function getUserMessage()
|
21 |
+
{
|
22 |
+
if ($data = $this->_getSessionData('message')) {
|
23 |
+
return $data;
|
24 |
+
}
|
25 |
+
return '';
|
26 |
+
}
|
27 |
+
|
28 |
+
public function getCompany()
|
29 |
+
{
|
30 |
+
if ($data = $this->_getSessionData('company')) {
|
31 |
+
return $data;
|
32 |
+
}
|
33 |
+
return '';
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getWebSite()
|
37 |
+
{
|
38 |
+
if ($data = $this->_getSessionData('website')) {
|
39 |
+
return $data;
|
40 |
+
}
|
41 |
+
return '';
|
42 |
+
}
|
43 |
+
|
44 |
+
public function getTwitter()
|
45 |
+
{
|
46 |
+
if ($data = $this->_getSessionData('twitter')) {
|
47 |
+
return $data;
|
48 |
+
}
|
49 |
+
return '';
|
50 |
+
}
|
51 |
+
|
52 |
+
public function getFacebook()
|
53 |
+
{
|
54 |
+
if ($data = $this->_getSessionData('facebook')) {
|
55 |
+
return $data;
|
56 |
+
}
|
57 |
+
return '';
|
58 |
+
}
|
59 |
+
|
60 |
+
public function checkRating($rating)
|
61 |
+
{
|
62 |
+
if ($data = $this->_getSessionData('rating')) {
|
63 |
+
return ($data == $rating);
|
64 |
+
}
|
65 |
+
return false;
|
66 |
+
}
|
67 |
+
|
68 |
+
protected function _getSessionData($key)
|
69 |
+
{
|
70 |
+
$data = Mage::getSingleton('customer/session')->getTestimonialsFormData();
|
71 |
+
if ($data && isset($data[$key])) {
|
72 |
+
return $data[$key];
|
73 |
+
}
|
74 |
+
return false;
|
75 |
+
}
|
76 |
+
}
|
app/code/local/TM/Testimonials/Block/List/Bottom.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_List_Bottom extends Mage_Core_Block_Template
|
4 |
+
{
|
5 |
+
protected function _beforeToHtml()
|
6 |
+
{
|
7 |
+
if ($this->getLayout()->getBlock('testimonials.list.content')) {
|
8 |
+
$testimonials = $this->getLayout()
|
9 |
+
->getBlock('testimonials.list.content')
|
10 |
+
->getTestimonials();
|
11 |
+
} else {
|
12 |
+
$testimonials = Mage::getModel('tm_testimonials/data')->getCollection()
|
13 |
+
->addFieldToSelect('*')
|
14 |
+
->addStoreFilter(Mage::app()->getStore())
|
15 |
+
->addFieldToFilter('status', TM_Testimonials_Model_Data::STATUS_ENABLED)
|
16 |
+
->setOrder('date', 'desc')
|
17 |
+
->setPageSize($this->getPerPage())
|
18 |
+
->setCurPage($this->getCurrentPage());
|
19 |
+
}
|
20 |
+
|
21 |
+
$this->setTestimonials($testimonials);
|
22 |
+
return parent::_beforeToHtml();
|
23 |
+
}
|
24 |
+
|
25 |
+
public function getPerPage()
|
26 |
+
{
|
27 |
+
$perPage = $this->getData('per_page');
|
28 |
+
if (!$perPage) {
|
29 |
+
$perPage = Mage::helper('testimonials')->getTestimonialsPerPage();
|
30 |
+
}
|
31 |
+
return $perPage;
|
32 |
+
}
|
33 |
+
}
|
app/code/local/TM/Testimonials/Block/List/Content.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_List_Content extends Mage_Core_Block_Template
|
4 |
+
{
|
5 |
+
protected $_placeholderImage;
|
6 |
+
/**
|
7 |
+
* Initialize block's cache
|
8 |
+
*/
|
9 |
+
protected function _construct()
|
10 |
+
{
|
11 |
+
parent::_construct();
|
12 |
+
|
13 |
+
$this->addData(array(
|
14 |
+
'cache_lifetime' => false,
|
15 |
+
'cache_tags' => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG)
|
16 |
+
));
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Get Key pieces for caching block content
|
21 |
+
*
|
22 |
+
* @return array
|
23 |
+
*/
|
24 |
+
public function getCacheKeyInfo()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
'TM_TESTIMONIALS_LIST',
|
28 |
+
Mage::app()->getStore()->getId(),
|
29 |
+
(int)Mage::app()->getStore()->isCurrentlySecure(),
|
30 |
+
Mage::getDesign()->getPackageName(),
|
31 |
+
Mage::getDesign()->getTheme('template'),
|
32 |
+
$this->getTemplate(),
|
33 |
+
$this->getPerPage(),
|
34 |
+
$this->getCurrentPage()
|
35 |
+
);
|
36 |
+
}
|
37 |
+
|
38 |
+
protected function _beforeToHtml()
|
39 |
+
{
|
40 |
+
$testimonials = Mage::getModel('tm_testimonials/data')->getCollection()
|
41 |
+
->addFieldToSelect('*')
|
42 |
+
->addStoreFilter(Mage::app()->getStore())
|
43 |
+
->addFieldToFilter('status', TM_Testimonials_Model_Data::STATUS_ENABLED)
|
44 |
+
->setOrder('date', 'desc')
|
45 |
+
->setPageSize($this->getPerPage())
|
46 |
+
->setCurPage($this->getCurrentPage());
|
47 |
+
|
48 |
+
$this->setTestimonials($testimonials);
|
49 |
+
$this->_placeholderImage = Mage::helper('testimonials')->getPlaceholderImage();
|
50 |
+
return parent::_beforeToHtml();
|
51 |
+
}
|
52 |
+
|
53 |
+
public function getPerPage()
|
54 |
+
{
|
55 |
+
$perPage = $this->getData('per_page');
|
56 |
+
if (!$perPage) {
|
57 |
+
$perPage = Mage::helper('testimonials')->getTestimonialsPerPage();
|
58 |
+
}
|
59 |
+
return $perPage;
|
60 |
+
}
|
61 |
+
|
62 |
+
public function canShowSocial($testimonial)
|
63 |
+
{
|
64 |
+
return (($testimonial->getFacebook() && Mage::helper('testimonials')->isFacebookEnabled())||
|
65 |
+
($testimonial->getTwitter() && Mage::helper('testimonials')->isTwitterEnabled()));
|
66 |
+
}
|
67 |
+
|
68 |
+
public function getImagePath($testimonial)
|
69 |
+
{
|
70 |
+
$image = $testimonial->getImage();
|
71 |
+
if (!$image && $this->_placeholderImage) {
|
72 |
+
$image = $this->_placeholderImage;
|
73 |
+
}
|
74 |
+
return $image;
|
75 |
+
}
|
76 |
+
}
|
app/code/local/TM/Testimonials/Block/List/Title.php
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_List_Title extends Mage_Core_Block_Template
|
4 |
+
{
|
5 |
+
|
6 |
+
}
|
app/code/local/TM/Testimonials/Block/Widget/Form.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Widget_Form extends TM_Testimonials_Block_Form_Form
|
4 |
+
implements Mage_Widget_Block_Interface
|
5 |
+
{
|
6 |
+
public function getTemplate()
|
7 |
+
{
|
8 |
+
$template = parent::getTemplate();
|
9 |
+
if (!$template) {
|
10 |
+
$template = 'tm/testimonials/form/form.phtml';
|
11 |
+
}
|
12 |
+
return $template;
|
13 |
+
}
|
14 |
+
|
15 |
+
protected function _prepareLayout()
|
16 |
+
{
|
17 |
+
$head = $this->getLayout()->getBlock('head');
|
18 |
+
if ($head) {
|
19 |
+
$head->addJs('mage/captcha.js');
|
20 |
+
}
|
21 |
+
$this->append(
|
22 |
+
$this->getLayout()->createBlock('captcha/captcha', 'captcha')
|
23 |
+
->setFormId('testimonials_form')
|
24 |
+
->setImgWidth(230)
|
25 |
+
->setImgHeight(50)
|
26 |
+
);
|
27 |
+
return parent::_prepareLayout();
|
28 |
+
}
|
29 |
+
}
|
app/code/local/TM/Testimonials/Block/Widget/List.php
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Widget_List extends Mage_Core_Block_Template
|
4 |
+
implements Mage_Widget_Block_Interface
|
5 |
+
{
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Initialize block's cache
|
9 |
+
*/
|
10 |
+
protected function _construct()
|
11 |
+
{
|
12 |
+
parent::_construct();
|
13 |
+
|
14 |
+
$this->addData(array(
|
15 |
+
'cache_lifetime' => false,
|
16 |
+
'cache_tags' => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG)
|
17 |
+
));
|
18 |
+
}
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Get Key pieces for caching block content
|
22 |
+
*
|
23 |
+
* @return array
|
24 |
+
*/
|
25 |
+
public function getCacheKeyInfo()
|
26 |
+
{
|
27 |
+
return array(
|
28 |
+
'TM_TESTIMONIALS_WIDGET_LIST',
|
29 |
+
Mage::app()->getStore()->getId(),
|
30 |
+
(int)Mage::app()->getStore()->isCurrentlySecure(),
|
31 |
+
Mage::getDesign()->getPackageName(),
|
32 |
+
Mage::getDesign()->getTheme('template'),
|
33 |
+
$this->getTemplate()
|
34 |
+
);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function getTemplate()
|
38 |
+
{
|
39 |
+
$template = parent::getTemplate();
|
40 |
+
if (!$template) {
|
41 |
+
$template = 'tm/testimonials/widget/list.phtml';
|
42 |
+
}
|
43 |
+
return $template;
|
44 |
+
}
|
45 |
+
|
46 |
+
protected function _beforeToHtml()
|
47 |
+
{
|
48 |
+
$testimonials = Mage::getModel('tm_testimonials/data')->getCollection()
|
49 |
+
->addFieldToFilter('status', TM_Testimonials_Model_Data::STATUS_ENABLED)
|
50 |
+
->addStoreFilter(Mage::app()->getStore())
|
51 |
+
->addFieldToFilter('widget', 1);
|
52 |
+
|
53 |
+
$testimonials->getSelect()
|
54 |
+
->order(new Zend_Db_Expr('RAND()'))
|
55 |
+
->limit($this->getItemsNumber());
|
56 |
+
|
57 |
+
$this->setTestimonials($testimonials);
|
58 |
+
return parent::_beforeToHtml();
|
59 |
+
}
|
60 |
+
|
61 |
+
protected function _toHtml()
|
62 |
+
{
|
63 |
+
if ($this->getTestimonials()) {
|
64 |
+
return parent::_toHtml();
|
65 |
+
}
|
66 |
+
return '';
|
67 |
+
}
|
68 |
+
}
|
app/code/local/TM/Testimonials/Block/Widget/ListFull.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Widget_ListFull extends TM_Testimonials_Block_List_Content
|
4 |
+
implements Mage_Widget_Block_Interface
|
5 |
+
{
|
6 |
+
/**
|
7 |
+
* Initialize block's cache
|
8 |
+
*/
|
9 |
+
protected function _construct()
|
10 |
+
{
|
11 |
+
parent::_construct();
|
12 |
+
|
13 |
+
$this->addData(array(
|
14 |
+
'cache_lifetime' => false,
|
15 |
+
'cache_tags' => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG)
|
16 |
+
));
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Get Key pieces for caching block content
|
21 |
+
*
|
22 |
+
* @return array
|
23 |
+
*/
|
24 |
+
public function getCacheKeyInfo()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
'TM_TESTIMONIALS_WIDGET_LISTFULL',
|
28 |
+
Mage::app()->getStore()->getId(),
|
29 |
+
(int)Mage::app()->getStore()->isCurrentlySecure(),
|
30 |
+
Mage::getDesign()->getPackageName(),
|
31 |
+
Mage::getDesign()->getTheme('template'),
|
32 |
+
$this->getTemplate()
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getTemplate()
|
37 |
+
{
|
38 |
+
$template = parent::getTemplate();
|
39 |
+
if (!$template) {
|
40 |
+
$template = 'tm/testimonials/list/content.phtml';
|
41 |
+
}
|
42 |
+
return $template;
|
43 |
+
}
|
44 |
+
|
45 |
+
protected function _afterToHtml($html)
|
46 |
+
{
|
47 |
+
$titleBlock = $this->getLayout()
|
48 |
+
->createBlock('testimonials/list_title')
|
49 |
+
->setTemplate('tm/testimonials/list/title.phtml')
|
50 |
+
->setShowTitle($this->getShowTitle())
|
51 |
+
->toHtml();
|
52 |
+
|
53 |
+
$bottomBlock = $this->getLayout()
|
54 |
+
->createBlock('testimonials/list_bottom')
|
55 |
+
->setTemplate('tm/testimonials/list/bottom.phtml')
|
56 |
+
->toHtml();
|
57 |
+
|
58 |
+
return $titleBlock . $html . $bottomBlock;
|
59 |
+
}
|
60 |
+
|
61 |
+
public function getShowTitle()
|
62 |
+
{
|
63 |
+
return (bool) $this->_getData('show_title');
|
64 |
+
}
|
65 |
+
}
|
app/code/local/TM/Testimonials/Block/Widget/Review.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Block_Widget_Review extends Mage_Core_Block_Template
|
4 |
+
implements Mage_Widget_Block_Interface
|
5 |
+
{
|
6 |
+
/**
|
7 |
+
* Initialize block's cache
|
8 |
+
*/
|
9 |
+
protected function _construct()
|
10 |
+
{
|
11 |
+
parent::_construct();
|
12 |
+
|
13 |
+
$this->addData(array(
|
14 |
+
'cache_lifetime' => false,
|
15 |
+
'cache_tags' => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG)
|
16 |
+
));
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Get Key pieces for caching block content
|
21 |
+
*
|
22 |
+
* @return array
|
23 |
+
*/
|
24 |
+
public function getCacheKeyInfo()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
'TM_TESTIMONIALS_WIDGET_REVIEW',
|
28 |
+
Mage::app()->getStore()->getId(),
|
29 |
+
(int)Mage::app()->getStore()->isCurrentlySecure(),
|
30 |
+
Mage::getDesign()->getPackageName(),
|
31 |
+
Mage::getDesign()->getTheme('template'),
|
32 |
+
$this->getTemplate()
|
33 |
+
);
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getTemplate()
|
37 |
+
{
|
38 |
+
$template = parent::getTemplate();
|
39 |
+
if (!$template) {
|
40 |
+
$template = 'tm/testimonials/widget/review.phtml';
|
41 |
+
}
|
42 |
+
return $template;
|
43 |
+
}
|
44 |
+
|
45 |
+
protected function _beforeToHtml()
|
46 |
+
{
|
47 |
+
$testimonials = Mage::getModel('tm_testimonials/data')->getCollection()
|
48 |
+
->addFieldToFilter('rating', array("gt" => 0));
|
49 |
+
|
50 |
+
if ($testimonials) {
|
51 |
+
$total = 0;
|
52 |
+
foreach ($testimonials as $testimonial) {
|
53 |
+
$total += (int)$testimonial->getRating();
|
54 |
+
}
|
55 |
+
$avgRating = $total / $testimonials->getSize();
|
56 |
+
}
|
57 |
+
$this->setTestimonials($testimonials);
|
58 |
+
$this->setAvgRating(number_format($avgRating, 2));
|
59 |
+
|
60 |
+
return parent::_beforeToHtml();
|
61 |
+
}
|
62 |
+
|
63 |
+
protected function _toHtml()
|
64 |
+
{
|
65 |
+
if ($this->getTestimonials()) {
|
66 |
+
return parent::_toHtml();
|
67 |
+
}
|
68 |
+
return '';
|
69 |
+
}
|
70 |
+
}
|
app/code/local/TM/Testimonials/Helper/Data.php
ADDED
@@ -0,0 +1,321 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Helper_Data extends Mage_Core_Helper_Abstract
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Path to store config if frontend output is enabled
|
6 |
+
*
|
7 |
+
* @var string
|
8 |
+
*/
|
9 |
+
const XML_PATH_ENABLED = 'testimonials/general/enabled';
|
10 |
+
/**
|
11 |
+
* Path to store config of testimonial auto approve
|
12 |
+
*
|
13 |
+
* @var string
|
14 |
+
*/
|
15 |
+
const XML_PATH_APPROVE = 'testimonials/general/approve';
|
16 |
+
/**
|
17 |
+
* Path to store config for testimonials list layout
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
const XML_LIST_LAYOUT = 'testimonials/list/layout';
|
22 |
+
/**
|
23 |
+
* Path to store config where count of news posts per page is stored
|
24 |
+
*
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
const XML_PATH_ITEMS_PER_PAGE = 'testimonials/list/items_per_page';
|
28 |
+
/**
|
29 |
+
* Path to store config testimonial image width
|
30 |
+
*
|
31 |
+
* @var string
|
32 |
+
*/
|
33 |
+
const XML_PATH_IMAGE_W = 'testimonials/list/image_width';
|
34 |
+
/**
|
35 |
+
* Path to store config testimonial image height
|
36 |
+
*
|
37 |
+
* @var string
|
38 |
+
*/
|
39 |
+
const XML_PATH_IMAGE_H = 'testimonials/list/image_height';
|
40 |
+
/**
|
41 |
+
* Path to store config for placeholder image
|
42 |
+
*
|
43 |
+
* @var string
|
44 |
+
*/
|
45 |
+
const XML_PLACEHOLDER_IMAGE = 'testimonials/list/placeholder_image';
|
46 |
+
/**
|
47 |
+
* Path to store config for show user email in list
|
48 |
+
*
|
49 |
+
* @var string
|
50 |
+
*/
|
51 |
+
const XML_LIST_EMAIL = 'testimonials/list/show_email';
|
52 |
+
/**
|
53 |
+
* Path to store config for testimonials form layout
|
54 |
+
*
|
55 |
+
* @var string
|
56 |
+
*/
|
57 |
+
const XML_FORM_LAYOUT = 'testimonials/form/layout';
|
58 |
+
/**
|
59 |
+
* Path to store config company field enabled
|
60 |
+
*
|
61 |
+
* @var string
|
62 |
+
*/
|
63 |
+
const XML_COMPANY_ENABLED = 'testimonials/form/enable_company';
|
64 |
+
/**
|
65 |
+
* Path to store config website field enabled
|
66 |
+
*
|
67 |
+
* @var string
|
68 |
+
*/
|
69 |
+
const XML_WEBSITE_ENABLED = 'testimonials/form/enable_website';
|
70 |
+
/**
|
71 |
+
* Path to store config twitter field enabled
|
72 |
+
*
|
73 |
+
* @var string
|
74 |
+
*/
|
75 |
+
const XML_TWITTER_ENABLED = 'testimonials/form/enable_twitter';
|
76 |
+
/**
|
77 |
+
* Path to store config facebook field enabled
|
78 |
+
*
|
79 |
+
* @var string
|
80 |
+
*/
|
81 |
+
const XML_FACEBOOK_ENABLED = 'testimonials/form/enable_facebook';
|
82 |
+
/**
|
83 |
+
* Path to store config sent message
|
84 |
+
*
|
85 |
+
* @var string
|
86 |
+
*/
|
87 |
+
const XML_SENT_MESSAGE = 'testimonials/form/sent_message';
|
88 |
+
/**
|
89 |
+
* Path to store config admin email notification enable
|
90 |
+
*
|
91 |
+
* @var string
|
92 |
+
*/
|
93 |
+
const XML_ADMIN_EMAIL_ENABLED = 'testimonials/email_admin/send_enable';
|
94 |
+
/**
|
95 |
+
* Path to store config send email for admin from
|
96 |
+
*
|
97 |
+
* @var string
|
98 |
+
*/
|
99 |
+
const XML_ADMIN_EMAIL_SEND_FROM = 'testimonials/email_admin/send_from';
|
100 |
+
/**
|
101 |
+
* Path to store config admin email
|
102 |
+
*
|
103 |
+
* @var string
|
104 |
+
*/
|
105 |
+
const XML_ADMIN_EMAIL = 'testimonials/email_admin/admin_email';
|
106 |
+
/**
|
107 |
+
* Path to store config admin email subject
|
108 |
+
*
|
109 |
+
* @var string
|
110 |
+
*/
|
111 |
+
const XML_ADMIN_EMAIL_SUBJECT = 'testimonials/email_admin/email_subject';
|
112 |
+
/**
|
113 |
+
* Path to store config admin email template
|
114 |
+
*
|
115 |
+
* @var string
|
116 |
+
*/
|
117 |
+
const XML_ADMIN_EMAIL_TEMPLATE = 'testimonials/email_admin/email_template';
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Checks whether testimonials can be displayed in the frontend
|
121 |
+
*
|
122 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
123 |
+
* @return boolean
|
124 |
+
*/
|
125 |
+
public function isEnabled($store = null)
|
126 |
+
{
|
127 |
+
return Mage::getStoreConfigFlag(self::XML_PATH_ENABLED, $store);
|
128 |
+
}
|
129 |
+
/**
|
130 |
+
* Return the number of items per page
|
131 |
+
*
|
132 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
133 |
+
* @return int
|
134 |
+
*/
|
135 |
+
public function getTestimonialsPerPage($store = null)
|
136 |
+
{
|
137 |
+
return abs((int)Mage::getStoreConfig(self::XML_PATH_ITEMS_PER_PAGE, $store));
|
138 |
+
}
|
139 |
+
/**
|
140 |
+
* Return testimonial image width
|
141 |
+
*
|
142 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
143 |
+
* @return int
|
144 |
+
*/
|
145 |
+
public function getImageWidth($store = null)
|
146 |
+
{
|
147 |
+
return abs((int)Mage::getStoreConfig(self::XML_PATH_IMAGE_W, $store));
|
148 |
+
}
|
149 |
+
/**
|
150 |
+
* Return testimonial image height
|
151 |
+
*
|
152 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
153 |
+
* @return int
|
154 |
+
*/
|
155 |
+
public function getImageHeight($store = null)
|
156 |
+
{
|
157 |
+
return abs((int)Mage::getStoreConfig(self::XML_PATH_IMAGE_H, $store));
|
158 |
+
}
|
159 |
+
/**
|
160 |
+
* Checks whether company field enabled
|
161 |
+
*
|
162 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
163 |
+
* @return boolean
|
164 |
+
*/
|
165 |
+
public function isCompanyEnabled($store = null)
|
166 |
+
{
|
167 |
+
return Mage::getStoreConfigFlag(self::XML_COMPANY_ENABLED, $store);
|
168 |
+
}
|
169 |
+
/**
|
170 |
+
* Checks whether website field enabled
|
171 |
+
*
|
172 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
173 |
+
* @return boolean
|
174 |
+
*/
|
175 |
+
public function isWebsiteEnabled($store = null)
|
176 |
+
{
|
177 |
+
return Mage::getStoreConfigFlag(self::XML_WEBSITE_ENABLED, $store);
|
178 |
+
}
|
179 |
+
/**
|
180 |
+
* Checks whether twitter field enabled
|
181 |
+
*
|
182 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
183 |
+
* @return boolean
|
184 |
+
*/
|
185 |
+
public function isTwitterEnabled($store = null)
|
186 |
+
{
|
187 |
+
return Mage::getStoreConfigFlag(self::XML_TWITTER_ENABLED, $store);
|
188 |
+
}
|
189 |
+
/**
|
190 |
+
* Checks whether facebook field enabled
|
191 |
+
*
|
192 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
193 |
+
* @return boolean
|
194 |
+
*/
|
195 |
+
public function isFacebookEnabled($store = null)
|
196 |
+
{
|
197 |
+
return Mage::getStoreConfigFlag(self::XML_FACEBOOK_ENABLED, $store);
|
198 |
+
}
|
199 |
+
/**
|
200 |
+
* Return testimonial sent message
|
201 |
+
*
|
202 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
203 |
+
* @return String
|
204 |
+
*/
|
205 |
+
public function getSentMessage($store = null)
|
206 |
+
{
|
207 |
+
return Mage::getStoreConfig(self::XML_SENT_MESSAGE, $store);
|
208 |
+
}
|
209 |
+
/**
|
210 |
+
* Return testimonial placeholder image
|
211 |
+
*
|
212 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
213 |
+
* @return String
|
214 |
+
*/
|
215 |
+
public function getPlaceholderImage($store = null)
|
216 |
+
{
|
217 |
+
return Mage::getStoreConfig(self::XML_PLACEHOLDER_IMAGE, $store);
|
218 |
+
}
|
219 |
+
/**
|
220 |
+
* Checks whether user mail should be displayed in testimonials list
|
221 |
+
*
|
222 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
223 |
+
* @return boolean
|
224 |
+
*/
|
225 |
+
public function showUserEmail($store = null)
|
226 |
+
{
|
227 |
+
return Mage::getStoreConfigFlag(self::XML_LIST_EMAIL, $store);
|
228 |
+
}
|
229 |
+
/**
|
230 |
+
* Return facebook icon path
|
231 |
+
* @return String
|
232 |
+
*/
|
233 |
+
public function getFacebookIcon()
|
234 |
+
{
|
235 |
+
return Mage::getBaseUrl('media') . 'testimonials/pictures/facebook.png';
|
236 |
+
}
|
237 |
+
/**
|
238 |
+
* Return twitter icon path
|
239 |
+
* @return String
|
240 |
+
*/
|
241 |
+
public function getTwitterIcon()
|
242 |
+
{
|
243 |
+
return Mage::getBaseUrl('media') . 'testimonials/pictures/twitter.png';
|
244 |
+
}
|
245 |
+
/**
|
246 |
+
* Return testimonials list layout
|
247 |
+
* @return String
|
248 |
+
*/
|
249 |
+
public function getListLayout($store = null)
|
250 |
+
{
|
251 |
+
return Mage::getStoreConfig(self::XML_LIST_LAYOUT, $store);
|
252 |
+
}
|
253 |
+
/**
|
254 |
+
* Return testimonials form layout
|
255 |
+
* @return String
|
256 |
+
*/
|
257 |
+
public function getFormLayout($store = null)
|
258 |
+
{
|
259 |
+
return Mage::getStoreConfig(self::XML_FORM_LAYOUT, $store);
|
260 |
+
}
|
261 |
+
/**
|
262 |
+
* Checks whether testimonials should be approved automatically
|
263 |
+
*
|
264 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
265 |
+
* @return boolean
|
266 |
+
*/
|
267 |
+
public function isAutoApprove($store = null)
|
268 |
+
{
|
269 |
+
return Mage::getStoreConfigFlag(self::XML_PATH_APPROVE, $store);
|
270 |
+
}
|
271 |
+
/**
|
272 |
+
* Checks if send email for admin enabled
|
273 |
+
*
|
274 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
275 |
+
* @return boolean
|
276 |
+
*/
|
277 |
+
public function isAdminNotificationEnabled($store = null)
|
278 |
+
{
|
279 |
+
return Mage::getStoreConfigFlag(self::XML_ADMIN_EMAIL_ENABLED, $store);
|
280 |
+
}
|
281 |
+
/**
|
282 |
+
* Return admin email send from contact
|
283 |
+
*
|
284 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
285 |
+
* @return String
|
286 |
+
*/
|
287 |
+
public function getAdminNotificationSendFrom($store = null)
|
288 |
+
{
|
289 |
+
return Mage::getStoreConfig(self::XML_ADMIN_EMAIL_SEND_FROM, $store);
|
290 |
+
}
|
291 |
+
/**
|
292 |
+
* Return admin email
|
293 |
+
*
|
294 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
295 |
+
* @return String
|
296 |
+
*/
|
297 |
+
public function getAdminEmail($store = null)
|
298 |
+
{
|
299 |
+
return Mage::getStoreConfig(self::XML_ADMIN_EMAIL, $store);
|
300 |
+
}
|
301 |
+
/**
|
302 |
+
* Return admin email subject
|
303 |
+
*
|
304 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
305 |
+
* @return String
|
306 |
+
*/
|
307 |
+
public function getAdminEmailSubject($store = null)
|
308 |
+
{
|
309 |
+
return Mage::getStoreConfig(self::XML_ADMIN_EMAIL_SUBJECT, $store);
|
310 |
+
}
|
311 |
+
/**
|
312 |
+
* Return admin email template
|
313 |
+
*
|
314 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
315 |
+
* @return String
|
316 |
+
*/
|
317 |
+
public function getAdminEmailTemplate($store = null)
|
318 |
+
{
|
319 |
+
return Mage::getStoreConfig(self::XML_ADMIN_EMAIL_TEMPLATE, $store);
|
320 |
+
}
|
321 |
+
}
|
app/code/local/TM/Testimonials/Helper/Image.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Helper_Image extends Mage_Core_Helper_Abstract
|
4 |
+
{
|
5 |
+
|
6 |
+
protected $_image;
|
7 |
+
|
8 |
+
public function init($image, $mode = 'image')
|
9 |
+
{
|
10 |
+
$this->_image = $image;
|
11 |
+
return $this;
|
12 |
+
}
|
13 |
+
|
14 |
+
public function resize($width, $height)
|
15 |
+
{
|
16 |
+
if (!$imageUrl = $this->getImageUrl()) {
|
17 |
+
return '';
|
18 |
+
}
|
19 |
+
|
20 |
+
$dir = Mage::getBaseDir('media')
|
21 |
+
. DS . "testimonials"
|
22 |
+
. DS . "pictures"
|
23 |
+
. DS . "resized";
|
24 |
+
|
25 |
+
if (!file_exists($dir)) {
|
26 |
+
mkdir($dir, 0777);
|
27 |
+
};
|
28 |
+
|
29 |
+
$imageName = substr(strrchr($imageUrl, "/"), 1);
|
30 |
+
$imageName = $width . '_' . $height . '_' . $imageName;
|
31 |
+
|
32 |
+
$imageResized = $dir . DS . $imageName;
|
33 |
+
|
34 |
+
$imagePath = str_replace(Mage::getBaseUrl('media'), 'media/', $imageUrl);
|
35 |
+
$imagePath = Mage::getBaseDir() . DS . str_replace("/", DS, $imagePath);
|
36 |
+
|
37 |
+
if (!file_exists($imageResized) && file_exists($imagePath)) {
|
38 |
+
$imageObj = new Varien_Image($imagePath);
|
39 |
+
$imageObj->constrainOnly(true);
|
40 |
+
$imageObj->keepAspectRatio(true);
|
41 |
+
$imageObj->keepFrame(false);
|
42 |
+
$imageObj->keepTransparency(true);
|
43 |
+
$imageObj->resize($width, $height);
|
44 |
+
$imageObj->save($imageResized);
|
45 |
+
}
|
46 |
+
$imageUrl = Mage::getBaseUrl('media')
|
47 |
+
. "testimonials/pictures/resized/"
|
48 |
+
. $imageName;
|
49 |
+
|
50 |
+
return $imageUrl;
|
51 |
+
}
|
52 |
+
|
53 |
+
public function getImageUrl()
|
54 |
+
{
|
55 |
+
$image = $this->_image;
|
56 |
+
if (empty($image)) {
|
57 |
+
return false;
|
58 |
+
}
|
59 |
+
return Mage::getBaseUrl('media')
|
60 |
+
. 'testimonials/pictures/'
|
61 |
+
. trim($image, '/');
|
62 |
+
}
|
63 |
+
}
|
app/code/local/TM/Testimonials/Model/Data.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Model_Data extends Mage_Core_Model_Abstract
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Testimonial's Statuses
|
6 |
+
*/
|
7 |
+
const STATUS_AWAITING_APPROVAL = 1;
|
8 |
+
const STATUS_ENABLED = 2;
|
9 |
+
const STATUS_DISABLED = 3;
|
10 |
+
|
11 |
+
const IMAGE_PATH = '/testimonials/pictures/';
|
12 |
+
|
13 |
+
public function __construct()
|
14 |
+
{
|
15 |
+
$this->_init('tm_testimonials/data');
|
16 |
+
parent::_construct();
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Prepare testimonial's statuses.
|
21 |
+
*
|
22 |
+
* @return array
|
23 |
+
*/
|
24 |
+
public function getAvailableStatuses()
|
25 |
+
{
|
26 |
+
$statuses = new Varien_Object(array(
|
27 |
+
self::STATUS_AWAITING_APPROVAL => Mage::helper('testimonials')->__('Awaiting approval'),
|
28 |
+
self::STATUS_ENABLED => Mage::helper('cms')->__('Enabled'),
|
29 |
+
self::STATUS_DISABLED => Mage::helper('cms')->__('Disabled')
|
30 |
+
));
|
31 |
+
|
32 |
+
Mage::dispatchEvent('testimonials_data_get_available_statuses', array('statuses' => $statuses));
|
33 |
+
|
34 |
+
return $statuses->getData();
|
35 |
+
}
|
36 |
+
}
|
app/code/local/TM/Testimonials/Model/Observer.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Model_Observer
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Get Captcha String
|
6 |
+
*
|
7 |
+
* @param Varien_Object $request
|
8 |
+
* @param string $formId
|
9 |
+
* @return string
|
10 |
+
*/
|
11 |
+
protected function _getCaptchaString($request, $formId)
|
12 |
+
{
|
13 |
+
$captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
|
14 |
+
return $captchaParams[$formId];
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Break the execution in case of incorrect CAPTCHA
|
19 |
+
*
|
20 |
+
* @param Varien_Event_Observer $observer
|
21 |
+
* @return TM_Testimonials_Model_Observer
|
22 |
+
*/
|
23 |
+
public function checkCaptcha($observer)
|
24 |
+
{
|
25 |
+
$formId = 'testimonials_form';
|
26 |
+
$captchaModel = Mage::helper('captcha')->getCaptcha($formId);
|
27 |
+
if ($captchaModel->isRequired()) {
|
28 |
+
$controller = $observer->getControllerAction();
|
29 |
+
if (!$captchaModel->isCorrect($this->_getCaptchaString($controller->getRequest(), $formId))) {
|
30 |
+
Mage::getSingleton('customer/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
|
31 |
+
$controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
|
32 |
+
Mage::getSingleton('customer/session')->setTestimonialsFormData($controller->getRequest()->getPost());
|
33 |
+
$url = Mage::helper('core/http')->getHttpReferer() ?
|
34 |
+
Mage::helper('core/http')->getHttpReferer() :
|
35 |
+
Mage::getUrl();
|
36 |
+
$controller->getResponse()->setRedirect($url);
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
return $this;
|
41 |
+
}
|
42 |
+
/**
|
43 |
+
* Send notification for admin about new testimonial added
|
44 |
+
*
|
45 |
+
* @param Varien_Event_Observer $observer
|
46 |
+
* @return TM_Testimonials_Model_Observer
|
47 |
+
*/
|
48 |
+
public function sendNotificationToAdmin(Varien_Event_Observer $observer)
|
49 |
+
{
|
50 |
+
if (!Mage::helper('testimonials')->isAdminNotificationEnabled()) {
|
51 |
+
return $this;
|
52 |
+
}
|
53 |
+
|
54 |
+
$emailData = $observer->getEvent()->getTestimonial();
|
55 |
+
$adminEmail = Mage::helper('testimonials')->getAdminEmail();
|
56 |
+
$subject = Mage::helper('testimonials')->getAdminEmailSubject();
|
57 |
+
$templateId = Mage::helper('testimonials')->getAdminEmailTemplate();
|
58 |
+
$senderId = Mage::helper('testimonials')->getAdminNotificationSendFrom();
|
59 |
+
|
60 |
+
$storeId = Mage::app()->getStore()->getId();
|
61 |
+
$image = $emailData['image'] ? Mage::helper('testimonials')->__("Yes") :
|
62 |
+
Mage::helper('testimonials')->__("No");
|
63 |
+
$statuses = Mage::getModel('tm_testimonials/data')->getAvailableStatuses();
|
64 |
+
$status = $statuses[isset($emailData['status']) ? $emailData['status'] : TM_Testimonials_Model_Data::STATUS_AWAITING_APPROVAL];
|
65 |
+
$vars = array(
|
66 |
+
'admin_subject' => $subject,
|
67 |
+
'user_name' => $emailData['name'],
|
68 |
+
'user_email' => $emailData['email'],
|
69 |
+
'message' => $emailData['message'],
|
70 |
+
'company' => isset($emailData['company']) ? $emailData['company'] : '',
|
71 |
+
'website' => isset($emailData['website']) ? $emailData['website'] : '',
|
72 |
+
'facebook' => isset($emailData['facebook']) ? $emailData['facebook'] : '',
|
73 |
+
'twitter' => isset($emailData['twitter']) ? $emailData['twitter'] : '',
|
74 |
+
'rating' => isset($emailData['rating']) ? $emailData['rating'] : -1,
|
75 |
+
'image' => $image,
|
76 |
+
'status' => $status,
|
77 |
+
'store_view' => Mage::app()->getStore()->getFrontendName()
|
78 |
+
);
|
79 |
+
|
80 |
+
$translate = Mage::getSingleton('core/translate');
|
81 |
+
$translate->setTranslateInline(false);
|
82 |
+
|
83 |
+
$mailTemplate = Mage::getModel('core/email_template');
|
84 |
+
$mailTemplate->setTemplateSubject($subject)
|
85 |
+
->setDesignConfig(array('area' => 'frontend', 'store' => $storeId))
|
86 |
+
->sendTransactional(
|
87 |
+
$templateId,
|
88 |
+
$senderId,
|
89 |
+
$adminEmail,
|
90 |
+
Mage::helper('testimonials')->__('Store Administrator'),
|
91 |
+
$vars
|
92 |
+
);
|
93 |
+
|
94 |
+
$translate->setTranslateInline(true);
|
95 |
+
|
96 |
+
return $this;
|
97 |
+
}
|
98 |
+
}
|
app/code/local/TM/Testimonials/Model/Resource/Data.php
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Model_Resource_Data extends Mage_Core_Model_Mysql4_Abstract
|
4 |
+
{
|
5 |
+
protected function _construct()
|
6 |
+
{
|
7 |
+
$this->_init('tm_testimonials/data','testimonial_id');
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Perform operations before object save
|
12 |
+
*
|
13 |
+
* @param Mage_Cms_Model_Block $object
|
14 |
+
* @return TM_Testimonials_Model_Resource_Data
|
15 |
+
*/
|
16 |
+
protected function _beforeSave(Mage_Core_Model_Abstract $object)
|
17 |
+
{
|
18 |
+
if (!$object->getId() && !$object->getDate()) {
|
19 |
+
$object->setDate(Mage::getSingleton('core/date')->gmtDate());
|
20 |
+
}
|
21 |
+
return $this;
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Assign page to store views
|
26 |
+
*
|
27 |
+
* @param Mage_Core_Model_Abstract $object
|
28 |
+
* @return TM_Testimonials_Model_Resource
|
29 |
+
*/
|
30 |
+
protected function _afterSave(Mage_Core_Model_Abstract $object)
|
31 |
+
{
|
32 |
+
$oldStores = $this->lookupStoreIds($object->getId());
|
33 |
+
$newStores = (array)$object->getStores();
|
34 |
+
if (empty($newStores)) {
|
35 |
+
$newStores = (array)$object->getStoreId();
|
36 |
+
}
|
37 |
+
$table = $this->getTable('tm_testimonials/store');
|
38 |
+
$insert = array_diff($newStores, $oldStores);
|
39 |
+
$delete = array_diff($oldStores, $newStores);
|
40 |
+
|
41 |
+
if ($delete) {
|
42 |
+
$where = array(
|
43 |
+
'testimonial_id = ?' => (int) $object->getId(),
|
44 |
+
'store_id IN (?)' => $delete
|
45 |
+
);
|
46 |
+
$this->_getWriteAdapter()->delete($table, $where);
|
47 |
+
}
|
48 |
+
|
49 |
+
if ($insert) {
|
50 |
+
$data = array();
|
51 |
+
foreach ($insert as $storeId) {
|
52 |
+
$data[] = array(
|
53 |
+
'testimonial_id' => (int) $object->getId(),
|
54 |
+
'store_id' => (int) $storeId
|
55 |
+
);
|
56 |
+
}
|
57 |
+
$this->_getWriteAdapter()->insertMultiple($table, $data);
|
58 |
+
}
|
59 |
+
|
60 |
+
return parent::_afterSave($object);
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Perform operations after object load
|
65 |
+
*
|
66 |
+
* @param Mage_Core_Model_Abstract $object
|
67 |
+
* @return TM_Testimonials_Model_Resource_Data
|
68 |
+
*/
|
69 |
+
protected function _afterLoad(Mage_Core_Model_Abstract $object)
|
70 |
+
{
|
71 |
+
if ($object->getId()) {
|
72 |
+
$stores = $this->lookupStoreIds($object->getId());
|
73 |
+
$object->setData('store_id', $stores);
|
74 |
+
}
|
75 |
+
return parent::_afterLoad($object);
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Retrieve select object for load object data
|
80 |
+
*
|
81 |
+
* @param string $field
|
82 |
+
* @param mixed $value
|
83 |
+
* @param TM_Testimonials_Model_Data $object
|
84 |
+
* @return Zend_Db_Select
|
85 |
+
*/
|
86 |
+
protected function _getLoadSelect($field, $value, $object)
|
87 |
+
{
|
88 |
+
$select = parent::_getLoadSelect($field, $value, $object);
|
89 |
+
|
90 |
+
if ($object->getStoreId()) {
|
91 |
+
$storeIds = array(Mage_Core_Model_App::ADMIN_STORE_ID, (int)$object->getStoreId());
|
92 |
+
$select->join(
|
93 |
+
array('store' => $this->getTable('tm_testimonials/store')),
|
94 |
+
$this->getMainTable() . '.testimonial_id = store.testimonial_id',
|
95 |
+
array())
|
96 |
+
->where('status = ?', 1)
|
97 |
+
->where('store.store_id IN (?)', $storeIds)
|
98 |
+
->order('store.store_id DESC')
|
99 |
+
->limit(1);
|
100 |
+
}
|
101 |
+
|
102 |
+
return $select;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Get store ids to which specified item is assigned
|
107 |
+
*
|
108 |
+
* @param int $id
|
109 |
+
* @return array
|
110 |
+
*/
|
111 |
+
public function lookupStoreIds($testimonialId)
|
112 |
+
{
|
113 |
+
$adapter = $this->_getReadAdapter();
|
114 |
+
|
115 |
+
$select = $adapter->select()
|
116 |
+
->from($this->getTable('tm_testimonials/store'), 'store_id')
|
117 |
+
->where('testimonial_id = ?',(int)$testimonialId);
|
118 |
+
|
119 |
+
return $adapter->fetchCol($select);
|
120 |
+
}
|
121 |
+
}
|
app/code/local/TM/Testimonials/Model/Resource/Data/Collection.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Model_Resource_Data_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
4 |
+
{
|
5 |
+
protected function _construct()
|
6 |
+
{
|
7 |
+
$this->_init('tm_testimonials/data');
|
8 |
+
$this->_map['fields']['testimonial_id'] = 'main_table.testimonial_id';
|
9 |
+
$this->_map['fields']['store'] = 'store_table.store_id';
|
10 |
+
}
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Add filter by store
|
14 |
+
*
|
15 |
+
* @param int|Mage_Core_Model_Store $store
|
16 |
+
* @param bool $withAdmin
|
17 |
+
* @return TM_Testimonials_Model_Resource_Data_Collection
|
18 |
+
*/
|
19 |
+
public function addStoreFilter($store, $withAdmin = true)
|
20 |
+
{
|
21 |
+
if (!$this->getFlag('store_filter_added')) {
|
22 |
+
if ($store instanceof Mage_Core_Model_Store) {
|
23 |
+
$store = array($store->getId());
|
24 |
+
}
|
25 |
+
|
26 |
+
if (!is_array($store)) {
|
27 |
+
$store = array($store);
|
28 |
+
}
|
29 |
+
|
30 |
+
if ($withAdmin) {
|
31 |
+
$store[] = Mage_Core_Model_App::ADMIN_STORE_ID;
|
32 |
+
}
|
33 |
+
|
34 |
+
|
35 |
+
$this->addFilter('store', array('in' => $store), 'public');
|
36 |
+
}
|
37 |
+
return $this;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Join store relation table if there is store filter
|
42 |
+
*/
|
43 |
+
protected function _renderFiltersBefore()
|
44 |
+
{
|
45 |
+
if ($this->getFilter('store')) {
|
46 |
+
$this->getSelect()->join(
|
47 |
+
array('store_table' => $this->getTable('tm_testimonials/store')),
|
48 |
+
'main_table.testimonial_id = store_table.testimonial_id',
|
49 |
+
array()
|
50 |
+
)->group('main_table.testimonial_id');
|
51 |
+
|
52 |
+
/*
|
53 |
+
* Allow analytic functions usage because of one field grouping
|
54 |
+
*/
|
55 |
+
$this->_useAnalyticFunction = true;
|
56 |
+
}
|
57 |
+
return parent::_renderFiltersBefore();
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Get SQL for get record count.
|
62 |
+
* Extra GROUP BY strip added.
|
63 |
+
*
|
64 |
+
* @return Varien_Db_Select
|
65 |
+
*/
|
66 |
+
public function getSelectCountSql()
|
67 |
+
{
|
68 |
+
$countSelect = parent::getSelectCountSql();
|
69 |
+
|
70 |
+
$countSelect->reset(Zend_Db_Select::GROUP);
|
71 |
+
|
72 |
+
return $countSelect;
|
73 |
+
}
|
74 |
+
}
|
app/code/local/TM/Testimonials/Model/Resource/Setup.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup {
|
3 |
+
|
4 |
+
}
|
app/code/local/TM/Testimonials/Model/System/Config/Backend/Image.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class TM_Testimonials_Model_System_Config_Backend_Image extends Mage_Adminhtml_Model_System_Config_Backend_Image
|
4 |
+
{
|
5 |
+
protected function _beforeSave()
|
6 |
+
{
|
7 |
+
if ($_FILES['groups']['tmp_name'][$this->getGroupId()]['fields'][$this->getField()]['value']) {
|
8 |
+
return parent::_beforeSave();
|
9 |
+
}
|
10 |
+
|
11 |
+
$value = $this->getValue();
|
12 |
+
if (is_array($value) && !empty($value['delete'])) {
|
13 |
+
$this->setValue('');
|
14 |
+
}
|
15 |
+
// fix to save default config value on the first save
|
16 |
+
/* else {
|
17 |
+
$this->unsValue();
|
18 |
+
}*/
|
19 |
+
return $this;
|
20 |
+
}
|
21 |
+
}
|
app/code/local/TM/Testimonials/controllers/Adminhtml/Testimonials/IndexController.php
ADDED
@@ -0,0 +1,253 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_Adminhtml_Testimonials_IndexController extends Mage_Adminhtml_Controller_Action
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Init actions
|
6 |
+
*
|
7 |
+
*/
|
8 |
+
protected function _initAction()
|
9 |
+
{
|
10 |
+
$this->loadLayout()
|
11 |
+
->_setActiveMenu('templates_master/testimonials_index/index')
|
12 |
+
->_addBreadcrumb(
|
13 |
+
Mage::helper('testimonials')->__('Testimonials'),
|
14 |
+
Mage::helper('testimonials')->__('Manage Testimonials')
|
15 |
+
);
|
16 |
+
return $this;
|
17 |
+
}
|
18 |
+
|
19 |
+
public function indexAction()
|
20 |
+
{
|
21 |
+
$this->_title($this->__('Templates Master'))
|
22 |
+
->_title($this->__('Testimonials'))
|
23 |
+
->_title($this->__('Manage Testimonials'));
|
24 |
+
|
25 |
+
$this->_initAction();
|
26 |
+
$this->renderLayout();
|
27 |
+
}
|
28 |
+
|
29 |
+
public function newAction()
|
30 |
+
{
|
31 |
+
// the same form is used to create and edit
|
32 |
+
$this->_forward('edit');
|
33 |
+
}
|
34 |
+
|
35 |
+
public function editAction()
|
36 |
+
{
|
37 |
+
$this->_title($this->__('Templates Master'))
|
38 |
+
->_title($this->__('Testimonials'))
|
39 |
+
->_title($this->__('Manage Testimonials'));
|
40 |
+
|
41 |
+
$id = $this->getRequest()->getParam('testimonial_id');
|
42 |
+
$model = Mage::getModel('tm_testimonials/data');
|
43 |
+
|
44 |
+
if ($id) {
|
45 |
+
$model->load($id);
|
46 |
+
if (! $model->getId()) {
|
47 |
+
Mage::getSingleton('adminhtml/session')->addError(
|
48 |
+
Mage::helper('cms')->__('This page no longer exists.'));
|
49 |
+
$this->_redirect('*/*/');
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
$this->_title($model->getId() ? $model->getName() : $this->__('New Testimonial'));
|
55 |
+
|
56 |
+
$data = Mage::getSingleton('adminhtml/session')->getFormData(true);
|
57 |
+
if (! empty($data)) {
|
58 |
+
$model->setData($data);
|
59 |
+
}
|
60 |
+
|
61 |
+
Mage::register('testimonials_data', $model);
|
62 |
+
|
63 |
+
$this->_initAction()
|
64 |
+
->_addBreadcrumb(
|
65 |
+
$id ? Mage::helper('testimonials')->__('Edit Testimonial')
|
66 |
+
: Mage::helper('testimonials')->__('New Testimonial'),
|
67 |
+
$id ? Mage::helper('testimonials')->__('Edit Testimonial')
|
68 |
+
: Mage::helper('testimonials')->__('New Testimonial'));
|
69 |
+
|
70 |
+
$this->renderLayout();
|
71 |
+
}
|
72 |
+
/**
|
73 |
+
* Save action
|
74 |
+
*/
|
75 |
+
public function saveAction()
|
76 |
+
{
|
77 |
+
if (!$data = $this->getRequest()->getPost('testimonials')) {
|
78 |
+
$this->_redirect('*/*/');
|
79 |
+
return;
|
80 |
+
}
|
81 |
+
|
82 |
+
$model = Mage::getModel('tm_testimonials/data');
|
83 |
+
if ($id = $this->getRequest()->getParam('testimonial_id')) {
|
84 |
+
$model->load($id);
|
85 |
+
}
|
86 |
+
|
87 |
+
try {
|
88 |
+
$mediaPath = Mage::getBaseDir('media') . DS . TM_Testimonials_Model_Data::IMAGE_PATH;
|
89 |
+
if (isset($_FILES['image']) && $_FILES['image']['error'] == 0) {
|
90 |
+
try {
|
91 |
+
$uploader = new Varien_File_Uploader('image');
|
92 |
+
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png', 'bmp'));
|
93 |
+
$uploader->setAllowRenameFiles(true);
|
94 |
+
$uploader->setFilesDispersion(true);
|
95 |
+
$res = $uploader->save($mediaPath);
|
96 |
+
$data['image'] = $uploader->getUploadedFileName();
|
97 |
+
} catch (Exception $e) {
|
98 |
+
$this->_getSession()->addError($e->getMessage());
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
if (isset($data['image']) && is_array($data['image'])) {
|
103 |
+
if (!empty($data['image']['delete'])) {
|
104 |
+
@unlink($mediaPath . $data['image']['value']);
|
105 |
+
$data['image'] = null;
|
106 |
+
} else {
|
107 |
+
$data['image'] = $data['image']['value'];
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
$model->addData($data);
|
112 |
+
|
113 |
+
$date = Mage::app()->getLocale()->date($data['date'], Zend_Date::DATE_SHORT, null, false);
|
114 |
+
$model->setDate($date->toString('YYYY-MM-dd HH:mm:ss'));
|
115 |
+
|
116 |
+
$model->save();
|
117 |
+
|
118 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
119 |
+
Mage::helper('testimonials')->__('Testimonial has been saved.')
|
120 |
+
);
|
121 |
+
Mage::getSingleton('adminhtml/session')->setFormData(false);
|
122 |
+
if ($this->getRequest()->getParam('back')) {
|
123 |
+
$this->_redirect('*/*/edit', array('testimonial_id' => $model->getId(), '_current' => true));
|
124 |
+
return;
|
125 |
+
}
|
126 |
+
$this->_redirect('*/*/');
|
127 |
+
return;
|
128 |
+
} catch (Exception $e) {
|
129 |
+
$this->_getSession()->addError($e->getMessage());
|
130 |
+
}
|
131 |
+
$this->_getSession()->setFormData($data);
|
132 |
+
$this->_redirect('*/*/edit', array('testimonial_id' => $this->getRequest()->getParam('testimonial_id'), '_current'=>true));
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Delete action
|
137 |
+
*/
|
138 |
+
public function deleteAction()
|
139 |
+
{
|
140 |
+
if ($id = $this->getRequest()->getParam('testimonial_id')) {
|
141 |
+
try {
|
142 |
+
$model = Mage::getModel('tm_testimonials/data');
|
143 |
+
$model->load($id);
|
144 |
+
$model->delete();
|
145 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
146 |
+
Mage::helper('testimonials')->__('The testimonial has been deleted.'));
|
147 |
+
$this->_redirect('*/*/');
|
148 |
+
return;
|
149 |
+
} catch (Exception $e) {
|
150 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
151 |
+
$this->_redirect('*/*/edit', array('testimonial_id' => $id));
|
152 |
+
return;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('testimonials')->__('Unable to find a testimonial to delete.'));
|
156 |
+
$this->_redirect('*/*/');
|
157 |
+
}
|
158 |
+
|
159 |
+
public function massDeleteAction()
|
160 |
+
{
|
161 |
+
$testimonialsIds = $this->getRequest()->getParam('testimonials');
|
162 |
+
if (!is_array($testimonialsIds)) {
|
163 |
+
$this->_getSession()->addError($this->__('Please select testimonial(s).'));
|
164 |
+
} else {
|
165 |
+
if (!empty($testimonialsIds)) {
|
166 |
+
try {
|
167 |
+
foreach ($testimonialsIds as $testimonialId) {
|
168 |
+
$testimonial = Mage::getModel('tm_testimonials/data')->load($testimonialId);
|
169 |
+
$testimonial->delete();
|
170 |
+
}
|
171 |
+
$this->_getSession()->addSuccess(
|
172 |
+
$this->__('Total of %d record(s) have been deleted.', count($testimonialsIds))
|
173 |
+
);
|
174 |
+
} catch (Exception $e) {
|
175 |
+
$this->_getSession()->addError($e->getMessage());
|
176 |
+
}
|
177 |
+
}
|
178 |
+
}
|
179 |
+
$this->_redirect('*/*/index');
|
180 |
+
}
|
181 |
+
|
182 |
+
public function massStatusAction()
|
183 |
+
{
|
184 |
+
$testimonialsIds = (array)$this->getRequest()->getParam('testimonials');
|
185 |
+
$status = (int)$this->getRequest()->getParam('status');
|
186 |
+
try {
|
187 |
+
foreach ($testimonialsIds as $testimonialId) {
|
188 |
+
$testimonial = Mage::getModel('tm_testimonials/data')->load($testimonialId);
|
189 |
+
$testimonial->setStatus($status)->save();
|
190 |
+
}
|
191 |
+
|
192 |
+
$this->_getSession()->addSuccess(
|
193 |
+
$this->__('Total of %d record(s) have been updated.', count($testimonialsIds))
|
194 |
+
);
|
195 |
+
}
|
196 |
+
catch (Mage_Core_Model_Exception $e) {
|
197 |
+
$this->_getSession()->addError($e->getMessage());
|
198 |
+
} catch (Mage_Core_Exception $e) {
|
199 |
+
$this->_getSession()->addError($e->getMessage());
|
200 |
+
} catch (Exception $e) {
|
201 |
+
$this->_getSession()
|
202 |
+
->addException($e, $this->__('An error occurred while updating the product(s) status.'));
|
203 |
+
}
|
204 |
+
|
205 |
+
$this->_redirect('*/*/');
|
206 |
+
}
|
207 |
+
|
208 |
+
public function approveAction()
|
209 |
+
{
|
210 |
+
$model = Mage::getModel('tm_testimonials/data');
|
211 |
+
if ($id = $this->getRequest()->getParam('testimonial_id')) {
|
212 |
+
$model->load($id);
|
213 |
+
}
|
214 |
+
|
215 |
+
try {
|
216 |
+
$model->setStatus(TM_Testimonials_Model_Data::STATUS_ENABLED);
|
217 |
+
$model->save();
|
218 |
+
|
219 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(
|
220 |
+
Mage::helper('testimonials')->__('Testimonial approved.')
|
221 |
+
);
|
222 |
+
$this->_redirect('*/*/');
|
223 |
+
return;
|
224 |
+
} catch (Exception $e) {
|
225 |
+
$this->_getSession()->addError($e->getMessage());
|
226 |
+
}
|
227 |
+
$this->_redirect('*/*/edit', array('testimonial_id' => $this->getRequest()->getParam('testimonial_id'), '_current'=>true));
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Check the permission to run it
|
232 |
+
*
|
233 |
+
* @return boolean
|
234 |
+
*/
|
235 |
+
protected function _isAllowed()
|
236 |
+
{
|
237 |
+
switch ($this->getRequest()->getActionName()) {
|
238 |
+
case 'new':
|
239 |
+
case 'save':
|
240 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/save');
|
241 |
+
break;
|
242 |
+
case 'delete':
|
243 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/delete');
|
244 |
+
break;
|
245 |
+
case 'approve':
|
246 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials/approve');
|
247 |
+
break;
|
248 |
+
default:
|
249 |
+
return Mage::getSingleton('admin/session')->isAllowed('templates_master/testimonials/testimonials');
|
250 |
+
break;
|
251 |
+
}
|
252 |
+
}
|
253 |
+
}
|
app/code/local/TM/Testimonials/controllers/IndexController.php
ADDED
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class TM_Testimonials_IndexController extends Mage_Core_Controller_Front_Action
|
3 |
+
{
|
4 |
+
/**
|
5 |
+
* Pre dispatch action that allows to redirect to no route page in case
|
6 |
+
* of disabled extension through Admin panel
|
7 |
+
*/
|
8 |
+
public function preDispatch()
|
9 |
+
{
|
10 |
+
parent::preDispatch();
|
11 |
+
|
12 |
+
if (!Mage::helper('testimonials')->isEnabled()) {
|
13 |
+
$this->setFlag('', 'no-dispatch', true);
|
14 |
+
$this->_redirect('noRoute');
|
15 |
+
}
|
16 |
+
}
|
17 |
+
|
18 |
+
public function indexAction()
|
19 |
+
{
|
20 |
+
$layout = $this->loadLayout()->getLayout();
|
21 |
+
$isAjax = Mage::app()->getRequest()->isAjax();
|
22 |
+
if ($isAjax) {
|
23 |
+
$currentPage = (int)$this->getRequest()->getParam('page', 1);
|
24 |
+
$output = $layout->getBlock('testimonials.list.content')
|
25 |
+
->setCurrentPage($currentPage)
|
26 |
+
->setIsAjax(true)
|
27 |
+
->toHtml();
|
28 |
+
$this->getResponse()->setBody(
|
29 |
+
Mage::helper('core')->jsonEncode(array('outputHtml' => $output))
|
30 |
+
);
|
31 |
+
} else {
|
32 |
+
$this->getLayout()->getBlock('head')->setTitle(
|
33 |
+
Mage::helper('testimonials')->__('Testimonials')
|
34 |
+
);
|
35 |
+
//apply custom layout from config
|
36 |
+
$this->getLayout()->getBlock('root')
|
37 |
+
->helper('page/layout')
|
38 |
+
->applyTemplate(Mage::helper('testimonials')->getListLayout());
|
39 |
+
$this->renderLayout();
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
public function newAction()
|
44 |
+
{
|
45 |
+
$this->loadLayout();
|
46 |
+
$this->_initLayoutMessages('customer/session');
|
47 |
+
$this->_initLayoutMessages('catalog/session');
|
48 |
+
$this->getLayout()->getBlock('head')->setTitle(
|
49 |
+
Mage::helper('testimonials')->__('New Testimonial')
|
50 |
+
);
|
51 |
+
//apply custom layout from config
|
52 |
+
$this->getLayout()->getBlock('root')
|
53 |
+
->helper('page/layout')
|
54 |
+
->applyTemplate(Mage::helper('testimonials')->getFormLayout());
|
55 |
+
$this->renderLayout();
|
56 |
+
}
|
57 |
+
|
58 |
+
public function postAction()
|
59 |
+
{
|
60 |
+
$this->_initLayoutMessages('customer/session');
|
61 |
+
// check if data sent
|
62 |
+
if ($data = $this->getRequest()->getPost()) {
|
63 |
+
$model = Mage::getModel('tm_testimonials/data');
|
64 |
+
|
65 |
+
$model->setStoreId(Mage::app()->getStore()->getStoreId());
|
66 |
+
$model->setName($data['name']);
|
67 |
+
$model->setEmail($data['email']);
|
68 |
+
$model->setMessage($data['message']);
|
69 |
+
$model->setCompany(isset($data['company']) ? $data['company'] : '');
|
70 |
+
$model->setWebsite(isset($data['website']) ? $data['website'] : '');
|
71 |
+
$model->setTwitter(isset($data['twitter']) ? $data['twitter'] : '');
|
72 |
+
$model->setFacebook(isset($data['facebook']) ? $data['facebook'] : '');
|
73 |
+
if (isset($data['rating'])) $model->setRating($data['rating']);
|
74 |
+
if (Mage::helper('testimonials')->isAutoApprove())
|
75 |
+
$model->setStatus(TM_Testimonials_Model_Data::STATUS_ENABLED);
|
76 |
+
|
77 |
+
// upload image
|
78 |
+
if (isset($_FILES['image']['name']) && ($_FILES['image']['tmp_name'] != NULL)) {
|
79 |
+
$path = Mage::getBaseDir('media') . TM_Testimonials_Model_Data::IMAGE_PATH;
|
80 |
+
try {
|
81 |
+
$uploader = new Varien_File_Uploader('image');
|
82 |
+
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
|
83 |
+
$uploader->setAllowRenameFiles(true);
|
84 |
+
$uploader->setFilesDispersion(true);
|
85 |
+
$uploader->save($path, $_FILES['image']['name']);
|
86 |
+
$uploadedImg = $uploader->getUploadedFileName();
|
87 |
+
$model->setImage($uploadedImg);
|
88 |
+
} catch (Exception $e) {
|
89 |
+
Mage::getSingleton('customer/session')->addError($e->getMessage());
|
90 |
+
Mage::getSingleton('customer/session')->setTestimonialsFormData($data);
|
91 |
+
$this->_redirectReferer();
|
92 |
+
return;
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
// try to save form data
|
97 |
+
try {
|
98 |
+
$model->save();
|
99 |
+
Mage::getSingleton('customer/session')->
|
100 |
+
addSuccess(Mage::helper('testimonials')->
|
101 |
+
getSentMessage());
|
102 |
+
Mage::getSingleton('customer/session')->unsTestimonialsFormData();
|
103 |
+
|
104 |
+
// send email notification to admin
|
105 |
+
try {
|
106 |
+
$data['status'] = $model->getStatus();
|
107 |
+
$data['image'] = $model->getImage();
|
108 |
+
Mage::dispatchEvent('testimonials_notify_admin_testimonial_submit',
|
109 |
+
array( 'testimonial' => $data )
|
110 |
+
);
|
111 |
+
} catch (Mage_Core_Exception $e) {
|
112 |
+
Mage::getSingleton('customer/session')->addError(
|
113 |
+
$e->getMessage()
|
114 |
+
);
|
115 |
+
}
|
116 |
+
} catch (Exception $e) {
|
117 |
+
Mage::getSingleton('customer/session')->addError($e->getMessage());
|
118 |
+
Mage::getSingleton('customer/session')->setTestimonialsFormData($data);
|
119 |
+
$this->_redirectReferer();
|
120 |
+
return;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
$this->_redirectReferer();
|
124 |
+
}
|
125 |
+
}
|
app/code/local/TM/Testimonials/etc/adminhtml.xml
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<menu>
|
4 |
+
<templates_master>
|
5 |
+
<title>Templates Master</title>
|
6 |
+
<sort_order>71</sort_order>
|
7 |
+
<children>
|
8 |
+
<testimonials translate="title" module="testimonials">
|
9 |
+
<title>Testimonials</title>
|
10 |
+
<sort_order>2021</sort_order>
|
11 |
+
<children>
|
12 |
+
<testimonials>
|
13 |
+
<title>Manage Testimonials</title>
|
14 |
+
<sort_order>10</sort_order>
|
15 |
+
<action>adminhtml/testimonials_index/index</action>
|
16 |
+
</testimonials>
|
17 |
+
</children>
|
18 |
+
</testimonials>
|
19 |
+
</children>
|
20 |
+
</templates_master>
|
21 |
+
</menu>
|
22 |
+
<acl>
|
23 |
+
<resources>
|
24 |
+
<admin>
|
25 |
+
<children>
|
26 |
+
<system>
|
27 |
+
<children>
|
28 |
+
<config>
|
29 |
+
<children>
|
30 |
+
<testimonials translate="title" module="testimonials">
|
31 |
+
<title>Testimonials Settings</title>
|
32 |
+
</testimonials>
|
33 |
+
</children>
|
34 |
+
</config>
|
35 |
+
</children>
|
36 |
+
</system>
|
37 |
+
<templates_master>
|
38 |
+
<title>Templates Master</title>
|
39 |
+
<sort_order>71</sort_order>
|
40 |
+
<children>
|
41 |
+
<testimonials translate="title" module="testimonials">
|
42 |
+
<title>Testimonials</title>
|
43 |
+
<sort_order>20</sort_order>
|
44 |
+
<children>
|
45 |
+
<testimonials>
|
46 |
+
<title>Manage Testimonials</title>
|
47 |
+
<sort_order>10</sort_order>
|
48 |
+
<children>
|
49 |
+
<save translate="title">
|
50 |
+
<title>Save</title>
|
51 |
+
<sort_order>0</sort_order>
|
52 |
+
</save>
|
53 |
+
<delete translate="title">
|
54 |
+
<title>Delete</title>
|
55 |
+
<sort_order>10</sort_order>
|
56 |
+
</delete>
|
57 |
+
<approve translate="title">
|
58 |
+
<title>Approve</title>
|
59 |
+
<sort_order>10</sort_order>
|
60 |
+
</approve>
|
61 |
+
</children>
|
62 |
+
</testimonials>
|
63 |
+
</children>
|
64 |
+
</testimonials>
|
65 |
+
</children>
|
66 |
+
</templates_master>
|
67 |
+
</children>
|
68 |
+
</admin>
|
69 |
+
</resources>
|
70 |
+
</acl>
|
71 |
+
</config>
|
app/code/local/TM/Testimonials/etc/config.xml
ADDED
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<TM_Testimonials>
|
5 |
+
<version>1.0.1</version>
|
6 |
+
</TM_Testimonials>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<models>
|
10 |
+
<tm_testimonials>
|
11 |
+
<class>TM_Testimonials_Model</class>
|
12 |
+
<resourceModel>tm_testimonials_resource</resourceModel>
|
13 |
+
</tm_testimonials>
|
14 |
+
<tm_testimonials_resource>
|
15 |
+
<class>TM_Testimonials_Model_Resource</class>
|
16 |
+
<entities>
|
17 |
+
<data>
|
18 |
+
<table>tm_testimonials_data</table>
|
19 |
+
</data>
|
20 |
+
<store>
|
21 |
+
<table>tm_testimonials_store</table>
|
22 |
+
</store>
|
23 |
+
</entities>
|
24 |
+
</tm_testimonials_resource>
|
25 |
+
</models>
|
26 |
+
<resources>
|
27 |
+
<tm_testimonials_setup>
|
28 |
+
<setup>
|
29 |
+
<module>TM_Testimonials</module>
|
30 |
+
<class>TM_Testimonials_Model_Resource_Setup</class>
|
31 |
+
</setup>
|
32 |
+
</tm_testimonials_setup>
|
33 |
+
<testimonials_write>
|
34 |
+
<connection>
|
35 |
+
<use>core_write</use>
|
36 |
+
</connection>
|
37 |
+
</testimonials_write>
|
38 |
+
<testimonials_read>
|
39 |
+
<connection>
|
40 |
+
<use>core_read</use>
|
41 |
+
</connection>
|
42 |
+
</testimonials_read>
|
43 |
+
</resources>
|
44 |
+
<blocks>
|
45 |
+
<testimonials>
|
46 |
+
<class>TM_Testimonials_Block</class>
|
47 |
+
</testimonials>
|
48 |
+
</blocks>
|
49 |
+
<helpers>
|
50 |
+
<testimonials>
|
51 |
+
<class>TM_Testimonials_Helper</class>
|
52 |
+
</testimonials>
|
53 |
+
</helpers>
|
54 |
+
<template>
|
55 |
+
<email>
|
56 |
+
<testimonials_email_admin_email_template translate="label"
|
57 |
+
module="testimonials">
|
58 |
+
<label>Testimonials Administrator Notification</label>
|
59 |
+
<file>testimonials_admin_notification.html</file>
|
60 |
+
<type>html</type>
|
61 |
+
</testimonials_email_admin_email_template>
|
62 |
+
</email>
|
63 |
+
</template>
|
64 |
+
</global>
|
65 |
+
<frontend>
|
66 |
+
<routers>
|
67 |
+
<tm_testimonials>
|
68 |
+
<use>standard</use>
|
69 |
+
<args>
|
70 |
+
<module>TM_Testimonials</module>
|
71 |
+
<frontName>testimonials</frontName>
|
72 |
+
</args>
|
73 |
+
</tm_testimonials>
|
74 |
+
</routers>
|
75 |
+
<layout>
|
76 |
+
<updates>
|
77 |
+
<tm_testimonials>
|
78 |
+
<file>tm/testimonials.xml</file>
|
79 |
+
</tm_testimonials>
|
80 |
+
</updates>
|
81 |
+
</layout>
|
82 |
+
<translate>
|
83 |
+
<modules>
|
84 |
+
<TM_Testimonials>
|
85 |
+
<files>
|
86 |
+
<default>TM_Testimonials.csv</default>
|
87 |
+
</files>
|
88 |
+
</TM_Testimonials>
|
89 |
+
</modules>
|
90 |
+
</translate>
|
91 |
+
<events>
|
92 |
+
<controller_action_predispatch_tm_testimonials_index_post>
|
93 |
+
<observers>
|
94 |
+
<testimonials>
|
95 |
+
<class>tm_testimonials/observer</class>
|
96 |
+
<method>checkCaptcha</method>
|
97 |
+
</testimonials>
|
98 |
+
</observers>
|
99 |
+
</controller_action_predispatch_tm_testimonials_index_post>
|
100 |
+
<testimonials_notify_admin_testimonial_submit>
|
101 |
+
<observers>
|
102 |
+
<testimonials>
|
103 |
+
<class>tm_testimonials/observer</class>
|
104 |
+
<method>sendNotificationToAdmin</method>
|
105 |
+
</testimonials>
|
106 |
+
</observers>
|
107 |
+
</testimonials_notify_admin_testimonial_submit>
|
108 |
+
</events>
|
109 |
+
</frontend>
|
110 |
+
<default>
|
111 |
+
<captcha>
|
112 |
+
<frontend>
|
113 |
+
<areas>
|
114 |
+
<testimonials_form>
|
115 |
+
<label>Testimonials Form</label>
|
116 |
+
</testimonials_form>
|
117 |
+
</areas>
|
118 |
+
</frontend>
|
119 |
+
</captcha>
|
120 |
+
<customer>
|
121 |
+
<captcha>
|
122 |
+
<always_for>
|
123 |
+
<testimonials_form>1</testimonials_form>
|
124 |
+
</always_for>
|
125 |
+
</captcha>
|
126 |
+
</customer>
|
127 |
+
<testimonials>
|
128 |
+
<general>
|
129 |
+
<enabled>0</enabled>
|
130 |
+
<approve>0</approve>
|
131 |
+
<top_links>0</top_links>
|
132 |
+
<footer_links>0</footer_links>
|
133 |
+
</general>
|
134 |
+
<list>
|
135 |
+
<layout>one_column</layout>
|
136 |
+
<items_per_page>10</items_per_page>
|
137 |
+
<image_width>100</image_width>
|
138 |
+
<image_height>100</image_height>
|
139 |
+
<placeholder_image>empty.gif</placeholder_image>
|
140 |
+
<show_email>0</show_email>
|
141 |
+
</list>
|
142 |
+
<form>
|
143 |
+
<layout>two_columns_left</layout>
|
144 |
+
<enable_company>0</enable_company>
|
145 |
+
<enable_website>0</enable_website>
|
146 |
+
<enable_twitter>0</enable_twitter>
|
147 |
+
<enable_facebook>0</enable_facebook>
|
148 |
+
<sent_message>Thank you for your testimonial</sent_message>
|
149 |
+
</form>
|
150 |
+
<email_admin>
|
151 |
+
<send_enable>0</send_enable>
|
152 |
+
<send_from>0</send_from>
|
153 |
+
<admin_email></admin_email>
|
154 |
+
<email_subject>New testimonial was submitted</email_subject>
|
155 |
+
<email_template>testimonials_email_admin_email_template</email_template>
|
156 |
+
</email_admin>
|
157 |
+
</testimonials>
|
158 |
+
</default>
|
159 |
+
<admin>
|
160 |
+
<routers>
|
161 |
+
<adminhtml>
|
162 |
+
<args>
|
163 |
+
<modules>
|
164 |
+
<tm_testimonials before="Mage_Adminhtml">TM_Testimonials_Adminhtml</tm_testimonials>
|
165 |
+
</modules>
|
166 |
+
</args>
|
167 |
+
</adminhtml>
|
168 |
+
</routers>
|
169 |
+
</admin>
|
170 |
+
<adminhtml>
|
171 |
+
<translate>
|
172 |
+
<modules>
|
173 |
+
<TM_Testimonials>
|
174 |
+
<files>
|
175 |
+
<default>TM_Testimonials.csv</default>
|
176 |
+
</files>
|
177 |
+
</TM_Testimonials>
|
178 |
+
</modules>
|
179 |
+
</translate>
|
180 |
+
<layout>
|
181 |
+
<updates>
|
182 |
+
<tm_testimonials module="tm_testimonials">
|
183 |
+
<file>tm/testimonials.xml</file>
|
184 |
+
</tm_testimonials>
|
185 |
+
</updates>
|
186 |
+
</layout>
|
187 |
+
</adminhtml>
|
188 |
+
</config>
|
app/code/local/TM/Testimonials/etc/system.xml
ADDED
@@ -0,0 +1,245 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<!-- Testimonials -->
|
4 |
+
<tabs>
|
5 |
+
<templates_master translate="label" module="testimonials">
|
6 |
+
<label>Templates-master</label>
|
7 |
+
<sort_order>195</sort_order>
|
8 |
+
</templates_master>
|
9 |
+
</tabs>
|
10 |
+
<sections>
|
11 |
+
<testimonials translate="label" module="testimonials">
|
12 |
+
<label>Testimonials</label>
|
13 |
+
<tab>templates_master</tab>
|
14 |
+
<frontend_type>text</frontend_type>
|
15 |
+
<sort_order>2021</sort_order>
|
16 |
+
<show_in_default>1</show_in_default>
|
17 |
+
<show_in_website>1</show_in_website>
|
18 |
+
<show_in_store>1</show_in_store>
|
19 |
+
<groups>
|
20 |
+
<general translate="label" module="testimonials">
|
21 |
+
<label>General</label>
|
22 |
+
<sort_order>600</sort_order>
|
23 |
+
<show_in_default>1</show_in_default>
|
24 |
+
<show_in_website>1</show_in_website>
|
25 |
+
<show_in_store>1</show_in_store>
|
26 |
+
<fields>
|
27 |
+
<enabled translate="label">
|
28 |
+
<label>Enable Testimonials</label>
|
29 |
+
<frontend_type>select</frontend_type>
|
30 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
31 |
+
<sort_order>10</sort_order>
|
32 |
+
<show_in_default>1</show_in_default>
|
33 |
+
<show_in_website>1</show_in_website>
|
34 |
+
<show_in_store>1</show_in_store>
|
35 |
+
</enabled>
|
36 |
+
<approve translate="label">
|
37 |
+
<label>Automatically approve testimonials</label>
|
38 |
+
<frontend_type>select</frontend_type>
|
39 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
40 |
+
<sort_order>20</sort_order>
|
41 |
+
<show_in_default>1</show_in_default>
|
42 |
+
<show_in_website>1</show_in_website>
|
43 |
+
<show_in_store>1</show_in_store>
|
44 |
+
</approve>
|
45 |
+
<top_links translate="label">
|
46 |
+
<label>Add link to top links</label>
|
47 |
+
<frontend_type>select</frontend_type>
|
48 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
49 |
+
<sort_order>30</sort_order>
|
50 |
+
<show_in_default>1</show_in_default>
|
51 |
+
<show_in_website>1</show_in_website>
|
52 |
+
<show_in_store>1</show_in_store>
|
53 |
+
</top_links>
|
54 |
+
<footer_links translate="label">
|
55 |
+
<label>Add link to footer links</label>
|
56 |
+
<frontend_type>select</frontend_type>
|
57 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
58 |
+
<sort_order>40</sort_order>
|
59 |
+
<show_in_default>1</show_in_default>
|
60 |
+
<show_in_website>1</show_in_website>
|
61 |
+
<show_in_store>1</show_in_store>
|
62 |
+
</footer_links>
|
63 |
+
</fields>
|
64 |
+
</general>
|
65 |
+
<list translate="label" module="testimonials">
|
66 |
+
<label>Testimonials List</label>
|
67 |
+
<sort_order>610</sort_order>
|
68 |
+
<show_in_default>1</show_in_default>
|
69 |
+
<show_in_website>1</show_in_website>
|
70 |
+
<show_in_store>1</show_in_store>
|
71 |
+
<fields>
|
72 |
+
<layout translate="label">
|
73 |
+
<label>Testimonials list layout</label>
|
74 |
+
<frontend_type>select</frontend_type>
|
75 |
+
<source_model>page/source_layout</source_model>
|
76 |
+
<sort_order>10</sort_order>
|
77 |
+
<show_in_default>1</show_in_default>
|
78 |
+
<show_in_website>1</show_in_website>
|
79 |
+
<show_in_store>1</show_in_store>
|
80 |
+
</layout>
|
81 |
+
<items_per_page translate="label">
|
82 |
+
<label>Testimonials per page</label>
|
83 |
+
<frontend_type>text</frontend_type>
|
84 |
+
<sort_order>20</sort_order>
|
85 |
+
<show_in_default>1</show_in_default>
|
86 |
+
<show_in_website>1</show_in_website>
|
87 |
+
<show_in_store>1</show_in_store>
|
88 |
+
</items_per_page>
|
89 |
+
<image_width translate="label">
|
90 |
+
<label>Image width</label>
|
91 |
+
<frontend_type>text</frontend_type>
|
92 |
+
<sort_order>30</sort_order>
|
93 |
+
<show_in_default>1</show_in_default>
|
94 |
+
<show_in_website>1</show_in_website>
|
95 |
+
<show_in_store>1</show_in_store>
|
96 |
+
</image_width>
|
97 |
+
<image_height translate="label">
|
98 |
+
<label>Image height</label>
|
99 |
+
<frontend_type>text</frontend_type>
|
100 |
+
<sort_order>40</sort_order>
|
101 |
+
<show_in_default>1</show_in_default>
|
102 |
+
<show_in_website>1</show_in_website>
|
103 |
+
<show_in_store>1</show_in_store>
|
104 |
+
</image_height>
|
105 |
+
<placeholder_image translate="label comment">
|
106 |
+
<label>Image placeholder</label>
|
107 |
+
<comment>Allowed file types: jpeg, gif, png.</comment>
|
108 |
+
<frontend_type>image</frontend_type>
|
109 |
+
<backend_model>tm_testimonials/system_config_backend_image</backend_model>
|
110 |
+
<upload_dir config="system/filesystem/media" scope_info="1">testimonials/pictures</upload_dir>
|
111 |
+
<base_url type="media" scope_info="1">testimonials/pictures</base_url>
|
112 |
+
<sort_order>50</sort_order>
|
113 |
+
<show_in_default>1</show_in_default>
|
114 |
+
<show_in_website>1</show_in_website>
|
115 |
+
<show_in_store>1</show_in_store>
|
116 |
+
</placeholder_image>
|
117 |
+
<show_email translate="label">
|
118 |
+
<label>Show user email in testimonials list</label>
|
119 |
+
<frontend_type>select</frontend_type>
|
120 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
121 |
+
<sort_order>60</sort_order>
|
122 |
+
<show_in_default>1</show_in_default>
|
123 |
+
<show_in_website>1</show_in_website>
|
124 |
+
<show_in_store>1</show_in_store>
|
125 |
+
</show_email>
|
126 |
+
</fields>
|
127 |
+
</list>
|
128 |
+
<form translate="label" module="testimonials">
|
129 |
+
<label>Testimonials Submit Form</label>
|
130 |
+
<sort_order>620</sort_order>
|
131 |
+
<show_in_default>1</show_in_default>
|
132 |
+
<show_in_website>1</show_in_website>
|
133 |
+
<show_in_store>1</show_in_store>
|
134 |
+
<fields>
|
135 |
+
<layout translate="label">
|
136 |
+
<label>Testimonials form layout</label>
|
137 |
+
<frontend_type>select</frontend_type>
|
138 |
+
<source_model>page/source_layout</source_model>
|
139 |
+
<sort_order>10</sort_order>
|
140 |
+
<show_in_default>1</show_in_default>
|
141 |
+
<show_in_website>1</show_in_website>
|
142 |
+
<show_in_store>1</show_in_store>
|
143 |
+
</layout>
|
144 |
+
<enable_company translate="label">
|
145 |
+
<label>Enable company field</label>
|
146 |
+
<frontend_type>select</frontend_type>
|
147 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
148 |
+
<sort_order>20</sort_order>
|
149 |
+
<show_in_default>1</show_in_default>
|
150 |
+
<show_in_website>1</show_in_website>
|
151 |
+
<show_in_store>1</show_in_store>
|
152 |
+
</enable_company>
|
153 |
+
<enable_website translate="label">
|
154 |
+
<label>Enable website field</label>
|
155 |
+
<frontend_type>select</frontend_type>
|
156 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
157 |
+
<sort_order>30</sort_order>
|
158 |
+
<show_in_default>1</show_in_default>
|
159 |
+
<show_in_website>1</show_in_website>
|
160 |
+
<show_in_store>1</show_in_store>
|
161 |
+
</enable_website>
|
162 |
+
<enable_twitter translate="label">
|
163 |
+
<label>Enable twitter field</label>
|
164 |
+
<frontend_type>select</frontend_type>
|
165 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
166 |
+
<sort_order>40</sort_order>
|
167 |
+
<show_in_default>1</show_in_default>
|
168 |
+
<show_in_website>1</show_in_website>
|
169 |
+
<show_in_store>1</show_in_store>
|
170 |
+
</enable_twitter>
|
171 |
+
<enable_facebook translate="label">
|
172 |
+
<label>Enable facebook field</label>
|
173 |
+
<frontend_type>select</frontend_type>
|
174 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
175 |
+
<sort_order>50</sort_order>
|
176 |
+
<show_in_default>1</show_in_default>
|
177 |
+
<show_in_website>1</show_in_website>
|
178 |
+
<show_in_store>1</show_in_store>
|
179 |
+
</enable_facebook>
|
180 |
+
<sent_message translate="label">
|
181 |
+
<label>Message shown after testimonial sent</label>
|
182 |
+
<frontend_type>textarea</frontend_type>
|
183 |
+
<sort_order>60</sort_order>
|
184 |
+
<show_in_default>1</show_in_default>
|
185 |
+
<show_in_website>1</show_in_website>
|
186 |
+
<show_in_store>1</show_in_store>
|
187 |
+
</sent_message>
|
188 |
+
</fields>
|
189 |
+
</form>
|
190 |
+
<email_admin translate="label" module="testimonials">
|
191 |
+
<label>Administrator Email Notifications</label>
|
192 |
+
<sort_order>640</sort_order>
|
193 |
+
<show_in_default>1</show_in_default>
|
194 |
+
<show_in_website>1</show_in_website>
|
195 |
+
<show_in_store>1</show_in_store>
|
196 |
+
<fields>
|
197 |
+
<send_enable translate="label">
|
198 |
+
<label>Email notification for admin on new testimonial</label>
|
199 |
+
<frontend_type>select</frontend_type>
|
200 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
201 |
+
<sort_order>10</sort_order>
|
202 |
+
<show_in_default>1</show_in_default>
|
203 |
+
<show_in_website>1</show_in_website>
|
204 |
+
<show_in_store>1</show_in_store>
|
205 |
+
</send_enable>
|
206 |
+
<send_from translate="label">
|
207 |
+
<label>Send email from</label>
|
208 |
+
<frontend_type>select</frontend_type>
|
209 |
+
<source_model>adminhtml/system_config_source_email_identity</source_model>
|
210 |
+
<sort_order>20</sort_order>
|
211 |
+
<show_in_default>1</show_in_default>
|
212 |
+
<show_in_website>1</show_in_website>
|
213 |
+
<show_in_store>1</show_in_store>
|
214 |
+
</send_from>
|
215 |
+
<admin_email translate="label">
|
216 |
+
<label>Administrator email</label>
|
217 |
+
<frontend_type>text</frontend_type>
|
218 |
+
<sort_order>30</sort_order>
|
219 |
+
<show_in_default>1</show_in_default>
|
220 |
+
<show_in_website>1</show_in_website>
|
221 |
+
<show_in_store>1</show_in_store>
|
222 |
+
</admin_email>
|
223 |
+
<email_subject translate="label">
|
224 |
+
<label>Administrator email subject</label>
|
225 |
+
<frontend_type>text</frontend_type>
|
226 |
+
<sort_order>40</sort_order>
|
227 |
+
<show_in_default>1</show_in_default>
|
228 |
+
<show_in_website>1</show_in_website>
|
229 |
+
<show_in_store>1</show_in_store>
|
230 |
+
</email_subject>
|
231 |
+
<email_template translate="label">
|
232 |
+
<label>Administrator email template</label>
|
233 |
+
<frontend_type>select</frontend_type>
|
234 |
+
<source_model>adminhtml/system_config_source_email_template</source_model>
|
235 |
+
<sort_order>50</sort_order>
|
236 |
+
<show_in_default>1</show_in_default>
|
237 |
+
<show_in_website>1</show_in_website>
|
238 |
+
<show_in_store>1</show_in_store>
|
239 |
+
</email_template>
|
240 |
+
</fields>
|
241 |
+
</email_admin>
|
242 |
+
</groups>
|
243 |
+
</testimonials>
|
244 |
+
</sections>
|
245 |
+
</config>
|
app/code/local/TM/Testimonials/etc/widget.xml
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<widgets>
|
3 |
+
<testimonials_list type="testimonials/widget_list" translate="name" module="testimonials">
|
4 |
+
<name>Testimonials: List of testimonials (for side panel)</name>
|
5 |
+
<description type="desc">Shows changing testimonials list in side panel</description>
|
6 |
+
<parameters>
|
7 |
+
<show_block_design translate="label">
|
8 |
+
<required>0</required>
|
9 |
+
<visible>1</visible>
|
10 |
+
<label>Display block title and link</label>
|
11 |
+
<description>Disable if you want to use your own title design or link</description>
|
12 |
+
<type>select</type>
|
13 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
14 |
+
<value>1</value>
|
15 |
+
</show_block_design>
|
16 |
+
<items_number translate="label">
|
17 |
+
<required>1</required>
|
18 |
+
<visible>1</visible>
|
19 |
+
<label>Number of testimonials</label>
|
20 |
+
<type>text</type>
|
21 |
+
<value>5</value>
|
22 |
+
</items_number>
|
23 |
+
<view_time translate="label">
|
24 |
+
<required>1</required>
|
25 |
+
<visible>1</visible>
|
26 |
+
<label>Show next testimonial after, ms</label>
|
27 |
+
<type>text</type>
|
28 |
+
<value>10000</value>
|
29 |
+
</view_time>
|
30 |
+
<anim_duration translate="label">
|
31 |
+
<required>1</required>
|
32 |
+
<visible>1</visible>
|
33 |
+
<label>Change animation duration, ms</label>
|
34 |
+
<type>text</type>
|
35 |
+
<value>1000</value>
|
36 |
+
</anim_duration>
|
37 |
+
</parameters>
|
38 |
+
</testimonials_list>
|
39 |
+
<testimonials_review type="testimonials/widget_review" translate="name" module="testimonials">
|
40 |
+
<name>Testimonials: Review block (for side panel)</name>
|
41 |
+
<description type="desc">Shows number of testimonials and average testimonial rating in side panel</description>
|
42 |
+
<parameters>
|
43 |
+
<show_block_design translate="label">
|
44 |
+
<required>0</required>
|
45 |
+
<visible>1</visible>
|
46 |
+
<label>Display block title and link</label>
|
47 |
+
<description>Disable if you want to use your own title design or link</description>
|
48 |
+
<type>select</type>
|
49 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
50 |
+
<value>1</value>
|
51 |
+
</show_block_design>
|
52 |
+
</parameters>
|
53 |
+
</testimonials_review>
|
54 |
+
<testimonials_form type="testimonials/widget_form" translate="name" module="testimonials">
|
55 |
+
<name>Testimonials: Submit Form</name>
|
56 |
+
<description type="desc">Shows testimonials submit form</description>
|
57 |
+
</testimonials_form>
|
58 |
+
<testimonials_listFull type="testimonials/widget_listFull" translate="name" module="testimonials">
|
59 |
+
<name>Testimonials: Full testimonials list</name>
|
60 |
+
<description type="desc">Shows full testimonials list</description>
|
61 |
+
<parameters>
|
62 |
+
<show_title translate="label">
|
63 |
+
<required>0</required>
|
64 |
+
<visible>1</visible>
|
65 |
+
<label>Show list title</label>
|
66 |
+
<type>select</type>
|
67 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
68 |
+
<value>1</value>
|
69 |
+
</show_title>
|
70 |
+
</parameters>
|
71 |
+
</testimonials_listFull>
|
72 |
+
</widgets>
|
app/code/local/TM/Testimonials/sql/tm_testimonials_setup/mysql4-install-1.0.0.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$installer = $this;
|
4 |
+
$installer->startSetup();
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Create table 'tm_testimonials/data'
|
8 |
+
*/
|
9 |
+
if ($installer->getConnection()->isTableExists($installer->getTable('tm_testimonials/data')) != true) {
|
10 |
+
$table = $installer->getConnection()
|
11 |
+
->newTable($installer->getTable('tm_testimonials/data'))
|
12 |
+
->addColumn('testimonial_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
13 |
+
'identity' => true,
|
14 |
+
'unsigned' => true,
|
15 |
+
'nullable' => false,
|
16 |
+
'primary' => true,
|
17 |
+
), 'Testimonial id')
|
18 |
+
->addColumn('status', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
|
19 |
+
'default' => 1
|
20 |
+
), 'Testimonial status')
|
21 |
+
->addColumn('date', Varien_Db_Ddl_Table::TYPE_DATETIME, null, array(
|
22 |
+
'nullable' => false
|
23 |
+
), 'Testimonial creation time')
|
24 |
+
->addColumn('name', Varien_Db_Ddl_Table::TYPE_VARCHAR, 100, array(
|
25 |
+
'nullable' => false
|
26 |
+
), 'User name')
|
27 |
+
->addColumn('email', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
|
28 |
+
'nullable' => false
|
29 |
+
), 'User email')
|
30 |
+
->addColumn('message', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
|
31 |
+
'nullable' => false
|
32 |
+
), 'User message')
|
33 |
+
->addColumn('company', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(),
|
34 |
+
'User company')
|
35 |
+
->addColumn('website', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(),
|
36 |
+
'User website')
|
37 |
+
->addColumn('twitter', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(),
|
38 |
+
'User twitter')
|
39 |
+
->addColumn('facebook', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(),
|
40 |
+
'User facebook')
|
41 |
+
->addColumn('image', Varien_Db_Ddl_Table::TYPE_VARCHAR, 100, array(),
|
42 |
+
'User image path')
|
43 |
+
->addColumn('rating', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(),
|
44 |
+
'User rating')
|
45 |
+
->addColumn('widget', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
|
46 |
+
'default' => 1
|
47 |
+
), 'Show testimonial in widget')
|
48 |
+
->setComment('Templates Master Testimonials Data Table');
|
49 |
+
$installer->getConnection()->createTable($table);
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Create table 'tm_testimonials/store'
|
54 |
+
*/
|
55 |
+
if ($installer->getConnection()->isTableExists($installer->getTable('tm_testimonials/store')) != true) {
|
56 |
+
$table = $installer->getConnection()
|
57 |
+
->newTable($installer->getTable('tm_testimonials/store'))
|
58 |
+
->addColumn('testimonial_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
|
59 |
+
'nullable' => false,
|
60 |
+
'primary' => true
|
61 |
+
), 'Testimonial ID')
|
62 |
+
->addColumn('store_id', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
|
63 |
+
'unsigned' => true,
|
64 |
+
'nullable' => false,
|
65 |
+
'primary' => true
|
66 |
+
), 'Store ID')
|
67 |
+
->addIndex($installer->getIdxName('tm_testimonials/store', array('store_id')),
|
68 |
+
array('store_id'))
|
69 |
+
->addForeignKey(
|
70 |
+
$installer->getFkName('tm_testimonials/store', 'testimonial_id', 'tm_testimonials/data', 'testimonial_id'),
|
71 |
+
'testimonial_id',
|
72 |
+
$installer->getTable('tm_testimonials/data'),
|
73 |
+
'testimonial_id',
|
74 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE,
|
75 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE)
|
76 |
+
->addForeignKey(
|
77 |
+
$installer->getFkName('tm_testimonials/store', 'store_id', 'core/store', 'store_id'),
|
78 |
+
'store_id',
|
79 |
+
$installer->getTable('core/store'),
|
80 |
+
'store_id',
|
81 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE,
|
82 |
+
Varien_Db_Ddl_Table::ACTION_CASCADE)
|
83 |
+
->setComment('Testimonial To Store Linkage Table');
|
84 |
+
$installer->getConnection()->createTable($table);
|
85 |
+
}
|
86 |
+
|
87 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/tm/testimonials.xml
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout version="0.1.0">
|
3 |
+
<adminhtml_testimonials_index_index>
|
4 |
+
<reference name="content">
|
5 |
+
<block type="testimonials/adminhtml_page" name="testimonials_list"/>
|
6 |
+
</reference>
|
7 |
+
</adminhtml_testimonials_index_index>
|
8 |
+
|
9 |
+
<adminhtml_testimonials_index_new>
|
10 |
+
<update handle="adminhtml_testimonials_index_edit" />
|
11 |
+
</adminhtml_testimonials_index_new>
|
12 |
+
|
13 |
+
<adminhtml_testimonials_index_edit>
|
14 |
+
<update handle="editor"/>
|
15 |
+
<reference name="content">
|
16 |
+
<block type="testimonials/adminhtml_page_edit" name="testimonials_page_edit"></block>
|
17 |
+
</reference>
|
18 |
+
<reference name="left">
|
19 |
+
<block type="testimonials/adminhtml_page_edit_tabs" name="testimonials_page_edit_tabs">
|
20 |
+
<block type="testimonials/adminhtml_page_edit_tab_main" name="testimonials_page_edit_tab_main" />
|
21 |
+
<action method="addTab">
|
22 |
+
<name>main_section</name>
|
23 |
+
<block>testimonials_page_edit_tab_main</block>
|
24 |
+
</action>
|
25 |
+
</block>
|
26 |
+
</reference>
|
27 |
+
</adminhtml_testimonials_index_edit>
|
28 |
+
</layout>
|
app/design/frontend/base/default/layout/tm/testimonials.xml
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout version="0.1.0">
|
3 |
+
<default>
|
4 |
+
<reference name="head">
|
5 |
+
<action method="addItem"><type>skin_css</type><name>css/tm/testimonials.css</name></action>
|
6 |
+
<action method="addItem"><type>skin_js</type><name>js/tm/testimonials.js</name></action>
|
7 |
+
</reference>
|
8 |
+
<reference name="top.links">
|
9 |
+
<action method="addLink" translate="label title" module="testimonials" ifconfig="testimonials/general/top_links">
|
10 |
+
<label>Testimonials</label>
|
11 |
+
<url>testimonials</url>
|
12 |
+
<title>Testimonials</title>
|
13 |
+
<prepare/>
|
14 |
+
<urlParams/>
|
15 |
+
<position>200</position>
|
16 |
+
</action>
|
17 |
+
</reference>
|
18 |
+
<reference name="footer_links">
|
19 |
+
<action method="addLink" translate="label title" module="testimonials" ifconfig="testimonials/general/footer_links">
|
20 |
+
<label>Testimonials</label>
|
21 |
+
<url>testimonials</url>
|
22 |
+
<title>Testimonials</title>
|
23 |
+
<prepare/>
|
24 |
+
<urlParams/>
|
25 |
+
<position>200</position>
|
26 |
+
</action>
|
27 |
+
</reference>
|
28 |
+
</default>
|
29 |
+
<tm_testimonials_index_new>
|
30 |
+
<reference name="content">
|
31 |
+
<block type="testimonials/form_container" name="testimonials.form.container"
|
32 |
+
template="tm/testimonials/form/container.phtml">
|
33 |
+
<block type="testimonials/form_form" name="testimonials.form"
|
34 |
+
template="tm/testimonials/form/form.phtml" as="testimonials_form">
|
35 |
+
<block type="captcha/captcha" name="captcha">
|
36 |
+
<reference name="head">
|
37 |
+
<action method="addJs"><file>mage/captcha.js</file></action>
|
38 |
+
</reference>
|
39 |
+
<action method="setFormId">
|
40 |
+
<formId>testimonials_form</formId>
|
41 |
+
</action>
|
42 |
+
<action method="setImgWidth">
|
43 |
+
<width>230</width>
|
44 |
+
</action>
|
45 |
+
<action method="setImgHeight">
|
46 |
+
<width>50</width>
|
47 |
+
</action>
|
48 |
+
</block>
|
49 |
+
</block>
|
50 |
+
</block>
|
51 |
+
</reference>
|
52 |
+
</tm_testimonials_index_new>
|
53 |
+
<tm_testimonials_index_index>
|
54 |
+
<reference name="content">
|
55 |
+
<block type="testimonials/list_content" name="testimonials.list.content"
|
56 |
+
template="tm/testimonials/list/content.phtml">
|
57 |
+
<block type="testimonials/list_title" name="testimonials.list.title"
|
58 |
+
template="tm/testimonials/list/title.phtml">
|
59 |
+
</block>
|
60 |
+
<block type="testimonials/list_bottom" name="testimonials.list.bottom"
|
61 |
+
template="tm/testimonials/list/bottom.phtml">
|
62 |
+
</block>
|
63 |
+
</block>
|
64 |
+
</reference>
|
65 |
+
</tm_testimonials_index_index>
|
66 |
+
</layout>
|
app/design/frontend/base/default/template/tm/testimonials/form/container.phtml
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="messages_product_view"><?php echo $this->getMessagesBlock()->getGroupedHtml() ?></div>
|
2 |
+
<div class="page-title">
|
3 |
+
<h1><?php echo $this->__('Submit your testimonial') ?></h1>
|
4 |
+
</div>
|
5 |
+
<?php echo $this->getChildHtml('testimonials_form'); ?>
|
app/design/frontend/base/default/template/tm/testimonials/form/form.phtml
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<form action="<?php echo $this->getUrl('testimonials/index/post'); ?>"
|
2 |
+
id="testimonialForm"
|
3 |
+
class="testimonialForm"
|
4 |
+
method="post"
|
5 |
+
enctype="multipart/form-data">
|
6 |
+
<div class="fieldset">
|
7 |
+
<h2 class="legend"><?php echo $this->__('Testimonial') ?></h2>
|
8 |
+
<ul class="form-list">
|
9 |
+
<li class="fields">
|
10 |
+
<div class="field">
|
11 |
+
<label for="name" class="required"><em>*</em><?php echo $this->__('Name') ?></label>
|
12 |
+
<div class="input-box">
|
13 |
+
<input name="name" id="name"
|
14 |
+
title="<?php echo $this->__('Name') ?>"
|
15 |
+
value="<?php echo $this->escapeHtml($this->getUserName()) ?>" class="input-text required-entry" type="text" />
|
16 |
+
</div>
|
17 |
+
</div>
|
18 |
+
<div class="field">
|
19 |
+
<label for="email" class="required"><em>*</em><?php echo $this->__('Email') ?></label>
|
20 |
+
<div class="input-box">
|
21 |
+
<input name="email" id="email" title="<?php echo $this->__('Email') ?>" value="<?php echo $this->escapeHtml($this->getUserEmail()) ?>" class="input-text required-entry validate-email" type="text" />
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
<?php if (Mage::helper('testimonials')->isCompanyEnabled()): ?>
|
25 |
+
<div class="field">
|
26 |
+
<label for="company"><?php echo $this->__('Company') ?></label>
|
27 |
+
<div class="input-box">
|
28 |
+
<input name="company" id="company" title="<?php echo $this->__('Company') ?>" value="<?php echo $this->escapeHtml($this->getCompany()) ?>" class="input-text" type="text" />
|
29 |
+
</div>
|
30 |
+
</div>
|
31 |
+
<?php endif ?>
|
32 |
+
<?php if (Mage::helper('testimonials')->isWebsiteEnabled()): ?>
|
33 |
+
<div class="field">
|
34 |
+
<label for="website"><?php echo $this->__('Website') ?></label>
|
35 |
+
<div class="input-box">
|
36 |
+
<input name="website" id="website" title="<?php echo $this->__('Website') ?>" value="<?php echo $this->escapeHtml($this->getWebSite()) ?>" class="input-text" type="text" />
|
37 |
+
</div>
|
38 |
+
</div>
|
39 |
+
<?php endif ?>
|
40 |
+
<?php if (Mage::helper('testimonials')->isTwitterEnabled()): ?>
|
41 |
+
<div class="field">
|
42 |
+
<label for="twitter"><?php echo $this->__('Twitter') ?></label>
|
43 |
+
<div class="input-box">
|
44 |
+
<input name="twitter" id="twitter" title="<?php echo $this->__('Twitter') ?>" value="<?php echo $this->escapeHtml($this->getTwitter()) ?>" class="input-text" type="text" />
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
<?php endif ?>
|
48 |
+
<?php if (Mage::helper('testimonials')->isFacebookEnabled()): ?>
|
49 |
+
<div class="field">
|
50 |
+
<label for="facebook"><?php echo $this->__('Facebook') ?></label>
|
51 |
+
<div class="input-box">
|
52 |
+
<input name="facebook" id="facebook" title="<?php echo $this->__('Facebook') ?>" value="<?php echo $this->escapeHtml($this->getFacebook()) ?>" class="input-text" type="text" />
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<?php endif ?>
|
56 |
+
<div class="field">
|
57 |
+
<label for="image"><?php echo $this->__('Profile image') ?></label>
|
58 |
+
<div class="input-box">
|
59 |
+
<input name="image" id="image" title="<?php echo $this->__('Image') ?>"
|
60 |
+
type="file" />
|
61 |
+
</div>
|
62 |
+
</div>
|
63 |
+
<div class="field">
|
64 |
+
<label><?php echo $this->__('Rating') ?></label>
|
65 |
+
<div class="input-box">
|
66 |
+
<?php for ($i = 1; $i <= 5; ++$i) { ?>
|
67 |
+
<label for="rating_<?php echo $i; ?>"><?php echo $i; ?>
|
68 |
+
<input type="radio" name="rating" id="rating_<?php echo $i; ?>" value="<?php echo $i; ?>" class="radio" <?php if ($this->checkRating($i)): ?>checked="checked"<?php endif; ?> />
|
69 |
+
</label>
|
70 |
+
<?php } ?>
|
71 |
+
</div>
|
72 |
+
</div>
|
73 |
+
</li>
|
74 |
+
<li <?php if ($this->getLayout()->getBlock('root')
|
75 |
+
->getTemplate() != "page/3columns.phtml"): ?>class="wide"<?php endif ?>>
|
76 |
+
<label for="message" class="required"><em>*</em><?php echo $this->__('Message') ?></label>
|
77 |
+
<div class="input-box">
|
78 |
+
<textarea name="message" id="message"
|
79 |
+
title="<?php echo $this->__('Message') ?>"
|
80 |
+
class="required-entry input-text" cols="5" rows="3"><?php echo $this->getUserMessage(); ?></textarea>
|
81 |
+
</div>
|
82 |
+
</li>
|
83 |
+
<?php echo $this->getChildHtml('captcha'); ?>
|
84 |
+
</ul>
|
85 |
+
</div>
|
86 |
+
<div class="buttons-set">
|
87 |
+
<p class="required"><?php echo $this->__('* Required Fields') ?></p>
|
88 |
+
<input type="text" name="hideit" id="hideit" value="" style="display:none !important;" />
|
89 |
+
<button type="submit" title="<?php echo $this->__('Submit') ?>" class="button"><span><span><?php echo $this->__('Submit') ?></span></span></button>
|
90 |
+
<button class="button" onclick="setLocation('<?php echo $this->getUrl('testimonials'); ?>'); return false;">
|
91 |
+
<span><span><?php echo $this->__('Back') ?></span></span>
|
92 |
+
</button>
|
93 |
+
</div>
|
94 |
+
</form>
|
95 |
+
<script type="text/javascript">
|
96 |
+
//<![CDATA[
|
97 |
+
var testimonialForm = new VarienForm('testimonialForm', true);
|
98 |
+
//]]>
|
99 |
+
</script>
|
app/design/frontend/base/default/template/tm/testimonials/list/bottom.phtml
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
</div>
|
2 |
+
<div class="more-button">
|
3 |
+
<a id="viewMore" target="blank" href=""><?php echo $this->__('Show more testimonials') ?></a>
|
4 |
+
</div>
|
5 |
+
<div class="copyright">
|
6 |
+
<!-- This extension is available under Creative Commons License http://creativecommons.org/licenses/by/3.0/. Removing links to is similarly prohibited. -->
|
7 |
+
Magento testimonial extension by <a href="http://templates-master.com/magento-extensions.html" title="Magento extensions by Templates-master.com" rel="nofollow" target="_blank">templates-master.com</a>
|
8 |
+
<!-- Removing links to is similarly prohibited. -->
|
9 |
+
</div>
|
10 |
+
</div>
|
11 |
+
<script type="text/javascript">
|
12 |
+
//<![CDATA[
|
13 |
+
var testimonials = new Testimonials("<?php echo $this->getUrl('testimonials/index/index') ?>",
|
14 |
+
'.testimonials');
|
15 |
+
$('viewMore').observe('click', testimonials.makeAjaxCall.bind(testimonials));
|
16 |
+
<?php $_testimonials = $this->getTestimonials(); ?>
|
17 |
+
<?php if ($this->getPerPage() >= $_testimonials->getSize()): ?>
|
18 |
+
$('viewMore').hide();
|
19 |
+
<?php endif ?>
|
20 |
+
//]]>
|
21 |
+
</script>
|
app/design/frontend/base/default/template/tm/testimonials/list/content.phtml
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if (!$this->getIsAjax()) {
|
3 |
+
echo $this->getChildHtml('testimonials.list.title');
|
4 |
+
}
|
5 |
+
$_testimonials = $this->getTestimonials();
|
6 |
+
$_width = Mage::helper('testimonials')->getImageWidth();
|
7 |
+
$_height = Mage::helper('testimonials')->getImageHeight();
|
8 |
+
?>
|
9 |
+
<?php if($_testimonials->getSize()): ?>
|
10 |
+
<?php foreach ($_testimonials as $_testimonial): ?>
|
11 |
+
<div class="testimonial">
|
12 |
+
<?php if ($image = $this->getImagePath($_testimonial)): ?>
|
13 |
+
<div class="testimonial-image" style="width: <?php echo ($_width + 10) ?>px">
|
14 |
+
<img src="<?php echo $this->helper('testimonials/image')->
|
15 |
+
init($image)->resize($_width, $_height); ?>"
|
16 |
+
alt="Profile image" />
|
17 |
+
</div>
|
18 |
+
<?php endif ?>
|
19 |
+
<div style="width: auto; margin-left: <?php echo $image ? ($_width + 10) : 0 ?>px">
|
20 |
+
<div class="content-wrapper">
|
21 |
+
<div class="message-wrapper">
|
22 |
+
<div class="message"><?php echo $_testimonial->getMessage() ?>
|
23 |
+
<span class="author-info">
|
24 |
+
<?php echo $_testimonial->getName();
|
25 |
+
if ($_testimonial->getCompany() &&
|
26 |
+
Mage::helper('testimonials')->isCompanyEnabled()): ?>,
|
27 |
+
<?php if ($_testimonial->getWebsite() &&
|
28 |
+
Mage::helper('testimonials')->isWebsiteEnabled()): ?>
|
29 |
+
<a href="<?php echo $_testimonial->getWebsite() ?>">
|
30 |
+
<?php echo $_testimonial->getCompany(); ?></a><?php
|
31 |
+
else:
|
32 |
+
echo $_testimonial->getCompany();
|
33 |
+
endif;
|
34 |
+
endif; ?>
|
35 |
+
<?php if (Mage::helper('testimonials')->showUserEmail()):
|
36 |
+
echo ', ' . $_testimonial->getEmail();
|
37 |
+
endif ?>
|
38 |
+
</span>
|
39 |
+
<?php if ($this->canShowSocial($_testimonial)): ?>
|
40 |
+
<div class="socialInfo">
|
41 |
+
<?php echo Mage::helper('testimonials')->__('Find us on'); ?>
|
42 |
+
<?php if ($_testimonial->getFacebook() &&
|
43 |
+
Mage::helper('testimonials')->isFacebookEnabled()): ?>
|
44 |
+
<a href="<?php echo $_testimonial->getFacebook() ?>">
|
45 |
+
<img src="<?php echo Mage::helper('testimonials')->getFacebookIcon() ?>" /><?php echo Mage::helper('testimonials')->__('Facebook') ?></a>
|
46 |
+
<?php endif ?>
|
47 |
+
<?php if ($_testimonial->getTwitter() &&
|
48 |
+
Mage::helper('testimonials')->isTwitterEnabled()): ?>
|
49 |
+
, <a href="<?php echo $_testimonial->getTwitter() ?>">
|
50 |
+
<img src="<?php echo Mage::helper('testimonials')->getTwitterIcon() ?>" /><?php echo Mage::helper('testimonials')->__('Twitter') ?></a><?php endif ?>
|
51 |
+
</div>
|
52 |
+
<?php endif ?>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<div style="margin: 10px 0 0 <?php echo $image ? 40 : 80 ?>px">
|
56 |
+
<div class="rating-wrapper ratings-table">
|
57 |
+
<?php if ($_testimonial->getRating()): ?>
|
58 |
+
<div class="rating-title"><?php echo $this->__('Rating') ?></div>
|
59 |
+
<div class="rating-box"><div class="rating" style="width: <?php echo $_testimonial->getRating() / 5 * 100 ?>%;"></div></div>
|
60 |
+
<?php endif ?>
|
61 |
+
</div>
|
62 |
+
<div class="testimonial-date">
|
63 |
+
<span><?php echo $this->__('Placed on') ?></span>
|
64 |
+
<span class="nobr"><?php echo $this->formatDate($_testimonial->getDate(), 'long') ?></span>
|
65 |
+
</div>
|
66 |
+
</div>
|
67 |
+
</div>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
<?php endforeach; ?>
|
71 |
+
<?php else: ?>
|
72 |
+
<p><?php echo $this->__('No testimonials found.'); ?></p>
|
73 |
+
<?php endif ?>
|
74 |
+
<?php if ($_testimonials->getCurPage() * $_testimonials->getPageSize() >= $_testimonials->getSize()): ?>
|
75 |
+
<script type="text/javascript">
|
76 |
+
//<![CDATA[
|
77 |
+
if ($('viewMore')) $('viewMore').hide();
|
78 |
+
//]]>
|
79 |
+
</script>
|
80 |
+
<?php endif ?>
|
81 |
+
<?php
|
82 |
+
if (!$this->getIsAjax()):
|
83 |
+
echo $this->getChildHtml('testimonials.list.bottom');
|
84 |
+
endif
|
85 |
+
?>
|
app/design/frontend/base/default/template/tm/testimonials/list/title.phtml
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="testimonials-list">
|
2 |
+
<?php if (is_null($this->getShowTitle()) || $this->getShowTitle()): ?>
|
3 |
+
<div class="page-title">
|
4 |
+
<h1><?php echo $this->__('Testimonials') ?></h1>
|
5 |
+
<div class="submit-testimonial">
|
6 |
+
<button class="button" onclick="setLocation('<?php echo $this->getUrl('testimonials/index/new'); ?>')">
|
7 |
+
<span><span><?php echo $this->__('Submit Your Testimonial') ?></span></span>
|
8 |
+
</button>
|
9 |
+
</div>
|
10 |
+
</div>
|
11 |
+
<?php endif ?>
|
12 |
+
<div class="testimonials">
|
app/design/frontend/base/default/template/tm/testimonials/widget/list.phtml
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$testimonials = $this->getTestimonials();
|
3 |
+
if (!count($testimonials)) {
|
4 |
+
return;
|
5 |
+
}
|
6 |
+
?>
|
7 |
+
|
8 |
+
<div id="testimonialsList" class="block block-testimonials <?php if (!$this->getShowBlockDesign()): ?>empty-design<?php endif ?>">
|
9 |
+
<div class="block-title">
|
10 |
+
<strong><span><?php echo $this->__('Testimonials') ?></span></strong>
|
11 |
+
</div>
|
12 |
+
<div class="block-content">
|
13 |
+
<div class="testimonial-container">
|
14 |
+
<?php $itemId = 0; ?>
|
15 |
+
<?php foreach ($testimonials as $testimonial): ?>
|
16 |
+
<div id="testimonial_<?php echo $itemId ?>" class="content"
|
17 |
+
<?php if ($itemId > 0): ?> style="display: none;"<?php endif ?>>
|
18 |
+
<div class="content-wrapper ratings-table">
|
19 |
+
<?php if ($testimonial->getRating()): ?>
|
20 |
+
<div class="rating-title"><?php echo $this->__('Rating: ') ?></div>
|
21 |
+
<div class="rating-box"><div class="rating" style="width: <?php echo $testimonial->getRating() / 5 * 100 ?>%;"></div></div>
|
22 |
+
<?php endif ?>
|
23 |
+
<div class="message"><?php echo $testimonial->getMessage(); ?></div>
|
24 |
+
</div>
|
25 |
+
<div class="name"><?php echo $testimonial->getName(); ?></div>
|
26 |
+
<a class="read-more" href="#"><?php echo $this->__('Read more') ?></a>
|
27 |
+
<a class="read-less" href="#" style="display: none;"><?php echo $this->__('Read less') ?></a>
|
28 |
+
</div>
|
29 |
+
<?php ++$itemId; ?>
|
30 |
+
<?php endforeach; ?>
|
31 |
+
</div>
|
32 |
+
<div class="actions">
|
33 |
+
<a href="<?php echo $this->getUrl('testimonials') ?>"><?php echo $this->__('View all testimonials') ?></a>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
</div>
|
37 |
+
<script type="text/javascript">
|
38 |
+
//<![CDATA[
|
39 |
+
var curTestimonial = 0,
|
40 |
+
showMoreActive = false,
|
41 |
+
changeInterval,
|
42 |
+
contentHeight = $$('.block-testimonials .block-content .content .content-wrapper')[0].getStyle('height'),
|
43 |
+
numTestimonials = <?php echo count($testimonials); ?>,
|
44 |
+
viewTime = <?php echo $this->getViewTime(); ?>,
|
45 |
+
changeAnimDuration = <?php echo $this->getAnimDuration(); ?>;
|
46 |
+
|
47 |
+
startChangeTimer();
|
48 |
+
|
49 |
+
Event.observe('testimonialsList', 'mouseenter', function() {
|
50 |
+
if (!showMoreActive) clearInterval(changeInterval);
|
51 |
+
});
|
52 |
+
|
53 |
+
Event.observe('testimonialsList', 'mouseleave', startChangeTimer);
|
54 |
+
|
55 |
+
Event.observe($('testimonial_0').down('.read-more'), 'click', showMore);
|
56 |
+
Event.observe($('testimonial_0').down('.read-less'), 'click', showLess);
|
57 |
+
|
58 |
+
function showMore(e) {
|
59 |
+
e.stop();
|
60 |
+
showMoreActive = true;
|
61 |
+
this.hide();
|
62 |
+
this.up().down('.read-less').show();
|
63 |
+
this.up().down('.content-wrapper').setStyle( { height: 'auto' } );
|
64 |
+
}
|
65 |
+
|
66 |
+
function showLess(e) {
|
67 |
+
e.stop();
|
68 |
+
showMoreActive = false;
|
69 |
+
this.hide();
|
70 |
+
this.up().down('.read-more').show();
|
71 |
+
this.up().down('.content-wrapper').setStyle( { height: contentHeight } );
|
72 |
+
}
|
73 |
+
|
74 |
+
function startChangeTimer() {
|
75 |
+
if (!showMoreActive) {
|
76 |
+
changeInterval = setInterval(nextTestimonial, viewTime);
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
function nextTestimonial() {
|
81 |
+
if (numTestimonials < 2) {
|
82 |
+
return;
|
83 |
+
}
|
84 |
+
|
85 |
+
$('testimonial_' + curTestimonial).down('.read-more').stopObserving();
|
86 |
+
$('testimonial_' + curTestimonial).down('.read-less').stopObserving();
|
87 |
+
Effect.Fade('testimonial_' + curTestimonial, {
|
88 |
+
duration: changeAnimDuration / 1000
|
89 |
+
});
|
90 |
+
|
91 |
+
++curTestimonial;
|
92 |
+
if (curTestimonial >= numTestimonials) curTestimonial = 0;
|
93 |
+
|
94 |
+
setTimeout(function() {
|
95 |
+
Effect.Appear('testimonial_' + curTestimonial, {
|
96 |
+
duration: changeAnimDuration / 1000
|
97 |
+
});
|
98 |
+
Event.observe($('testimonial_' + curTestimonial).down('.read-more'),
|
99 |
+
'click', showMore);
|
100 |
+
Event.observe($('testimonial_' + curTestimonial).down('.read-less'),
|
101 |
+
'click', showLess);
|
102 |
+
}, changeAnimDuration);
|
103 |
+
}
|
104 |
+
//]]>
|
105 |
+
</script>
|
app/design/frontend/base/default/template/tm/testimonials/widget/review.phtml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="block block-testimonials <?php if (!$this->getShowBlockDesign()): ?>empty-design<?php endif ?>">
|
2 |
+
<div class="block-title">
|
3 |
+
<strong><span><?php echo $this->__('Store Review') ?></span></strong>
|
4 |
+
</div>
|
5 |
+
<div class="block-content">
|
6 |
+
<span itemscope itemtype="http://schema.org/Store">
|
7 |
+
<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating" class="review">
|
8 |
+
<div itemprop="ratingValue" class="score"><?php echo $this->getAvgRating() ?></div>
|
9 |
+
<div class="score-info"><?php echo ' ' . $this->__('out of') . ' 5 (' ?><span itemprop="ratingCount"><?php echo $this->getTestimonials()->getSize() ?></span><?php echo ' ' . $this->__('votes') . ')' ?>
|
10 |
+
</div>
|
11 |
+
</div>
|
12 |
+
<meta itemprop="name" content="<?php echo Mage::app()->getStore()->getFrontendName() ?>">
|
13 |
+
</span>
|
14 |
+
<div class="actions">
|
15 |
+
<a href="<?php echo $this->getUrl('testimonials') ?>"><?php echo $this->__('View all testimonials') ?></a>
|
16 |
+
</div>
|
17 |
+
</div>
|
18 |
+
</div>
|
app/etc/modules/TM_Testimonials.xml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<!-- Testimonials -->
|
4 |
+
<modules>
|
5 |
+
<TM_Testimonials>
|
6 |
+
<active>true</active>
|
7 |
+
<codePool>local</codePool>
|
8 |
+
</TM_Testimonials>
|
9 |
+
</modules>
|
10 |
+
</config>
|
app/locale/en_US/TM_Testimonials.csv
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Submit your testimonial","Submit your testimonial"
|
2 |
+
"Testimonial","Testimonial"
|
3 |
+
"Message","Message"
|
4 |
+
"Unable to find items to save","Unable to find items to save"
|
5 |
+
"New Testimonial","New Testimonial"
|
6 |
+
"Edit Testimonial","Edit Testimonial"
|
7 |
+
"Testimonial Information","Testimonial Information"
|
8 |
+
"Company","Company"
|
9 |
+
"Website","Website"
|
10 |
+
"Facebook","Facebook"
|
11 |
+
"Twitter","Twitter"
|
12 |
+
"Rating","Rating"
|
13 |
+
"Rating:","Rating:"
|
14 |
+
"star","star"
|
15 |
+
"stars","stars"
|
16 |
+
"No rating","No rating"
|
17 |
+
"Unable to find a testimonial to delete.","Unable to find a testimonial to delete."
|
18 |
+
"The testimonial has been deleted.","The testimonial has been deleted."
|
19 |
+
"Testimonial has been saved.","Testimonial has been saved."
|
20 |
+
"No testimonials found.","No testimonials found."
|
21 |
+
"Please select testimonial(s).","Please select testimonial(s)."
|
22 |
+
"Show more testimonials","Show more testimonials"
|
23 |
+
"View all testimonials","View all testimonials"
|
24 |
+
"Display in widget","Display in widget"
|
25 |
+
"out of","out of"
|
26 |
+
"votes","votes"
|
27 |
+
"Store Review","Store Review"
|
28 |
+
"Added:","Added:"
|
29 |
+
"Placed on","Placed on"
|
30 |
+
"Profile image","Profile image"
|
31 |
+
"Approve","Approve"
|
32 |
+
"Testimonial approved.","Testimonial approved."
|
33 |
+
"Find us on","Find us on"
|
34 |
+
"Read more","Read more"
|
35 |
+
"Read less","Read less"
|
app/locale/en_US/template/email/testimonials_admin_notification.html
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
|
2 |
+
<div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
|
3 |
+
<table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%">
|
4 |
+
<tr>
|
5 |
+
<td align="center" valign="top" style="padding:20px 0 20px 0">
|
6 |
+
<!-- [ header starts here] -->
|
7 |
+
<table bgcolor="FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
|
8 |
+
<tr>
|
9 |
+
<td valign="top">
|
10 |
+
<a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
|
11 |
+
</tr>
|
12 |
+
<!-- [ middle starts here] -->
|
13 |
+
<tr>
|
14 |
+
<td valign="top">
|
15 |
+
<h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;">{{var admin_subject}}</h1>
|
16 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Testimonial data:</strong></p>
|
17 |
+
|
18 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>User Name : </strong> {{var user_name}}</p>
|
19 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>User Email : </strong> {{var user_email}}</p>
|
20 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Store View : </strong> {{var store_view}}</p>
|
21 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Message : </strong> {{var message}}</p>
|
22 |
+
{{depend company}}
|
23 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Company : </strong> {{var company}}</p>
|
24 |
+
{{/depend}}
|
25 |
+
{{depend website}}
|
26 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Website : </strong> {{var website}}</p>
|
27 |
+
{{/depend}}
|
28 |
+
{{depend facebook}}
|
29 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Facebook : </strong> {{var facebook}}</p>
|
30 |
+
{{/depend}}
|
31 |
+
{{depend twitter}}
|
32 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Twitter : </strong> {{var twitter}}</p>
|
33 |
+
{{/depend}}
|
34 |
+
{{depend rating}}
|
35 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Rating : </strong> {{var rating}}</p>
|
36 |
+
{{/depend}}
|
37 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Has image : </strong> {{var image}}</p>
|
38 |
+
<p style="font-size:12px; line-height:16px; margin:0 0 8px 0;"><strong>Status : </strong> {{var status}}</p>
|
39 |
+
</td>
|
40 |
+
</tr>
|
41 |
+
<tr>
|
42 |
+
<td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;"><center><p style="font-size:12px; margin:0;"><strong>{{var store.getFrontendName()}}</strong></p></center></td>
|
43 |
+
</tr>
|
44 |
+
</table>
|
45 |
+
</td>
|
46 |
+
</tr>
|
47 |
+
</table>
|
48 |
+
</div>
|
49 |
+
</body>
|
package.xml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>free_testimonials_extension</name>
|
4 |
+
<version>1.1.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://creativecommons.org/licenses/by/3.0/">Creative Commons License </license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Free Magento Testimonials extension</summary>
|
10 |
+
<description>Fixes
|
11 |
+
* Added check for testimonials qty before animation
|
12 |
+
* Fixed date issue in different locales in admin
|
13 |
+
* Added missing translations
|
14 |
+
* Removed notices on form submit
|
15 |
+
* Widget are hidden now if no testimonials are found
|
16 |
+
* rwd template fixes
|
17 |
+

|
18 |
+
Improvements
|
19 |
+
* Added config to show testimonials link in top and footer links
|
20 |
+
* Widget specific configuration moved to widget creation window
|
21 |
+
* Tested with magento 1.9.1
|
22 |
+
</description>
|
23 |
+
<notes>Magento Easy Tabs Community Module</notes>
|
24 |
+
<authors><author><name>TemplatesMaster</name><user>TemplatesMaster</user><email>support@templates-master.com</email></author></authors>
|
25 |
+
<date>2015-01-23</date>
|
26 |
+
<time>11:11:46</time>
|
27 |
+
<contents><target name="magelocal"><dir name="TM"><dir name="Testimonials"><dir name="Block"><dir name="Adminhtml"><dir name="Page"><dir name="Edit"><file name="Form.php" hash="31812badeb61963ebd41d000c565b994"/><dir name="Tab"><file name="Main.php" hash="0923031c06b94ac3e6abf979df66a5fd"/></dir><file name="Tabs.php" hash="ee96415e07758fca2ae7a2e2010d69e8"/></dir><file name="Edit.php" hash="d322da030cd3fb0955149db4334f9097"/><file name="Grid.php" hash="6b902e78ea5c871d1ccbedcf4cbfced6"/><dir name="Helper"><file name="Image.php" hash="c1bec4553f23aee1e069d631d233ef17"/></dir></dir><file name="Page.php" hash="554b7e2338bc5e4b20021411df9fedc5"/></dir><dir name="Form"><file name="Container.php" hash="800b09dfab07cb6d98404c72b0cfc4d3"/><file name="Form.php" hash="c3c0b4a086aef7215e0f2178ba314af2"/></dir><dir name="List"><file name="Bottom.php" hash="0b4d5338aeed17b6da84d19b57452b97"/><file name="Content.php" hash="d379ac1567cc4e42f0b5b47f1372cca1"/><file name="Title.php" hash="22e4679f6c70a2cfc2e9ad9719afcb3c"/></dir><dir name="Widget"><file name="Form.php" hash="d1eabb9a51887d6fab49820e0374a87d"/><file name="List.php" hash="de4461d8e13af86e02e45713aeb9f76b"/><file name="ListFull.php" hash="c03078edce1d8f0d49cd5c4149bbc5cb"/><file name="Review.php" hash="eda3c3ce564015865f3e1cbd2bab06be"/></dir></dir><dir name="Helper"><file name="Data.php" hash="dabf52846e52154aff7e5cda5587098e"/><file name="Image.php" hash="64cb9db1afa06cb1e59c42cf695b4c7f"/></dir><dir name="Model"><file name="Data.php" hash="dac0f5409efa811f5eab67bedbe4925b"/><file name="Observer.php" hash="da0e5e6a406ae4369653b475a59d352c"/><dir name="Resource"><dir name="Data"><file name="Collection.php" hash="bb4002420093933c9bb7cb2f044f175b"/></dir><file name="Data.php" hash="02cbba52ad8e861b0fc6990eaed9cf5a"/><file name="Setup.php" hash="cca012d39e55c3fb12b749110211bceb"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Image.php" hash="be450b5a17a44fae105b1ebe0d662b92"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Testimonials"><file name="IndexController.php" hash="52f08a97a85bfc43c6864c9ff012f97d"/></dir></dir><file name="IndexController.php" hash="7dbe08ff9bcc420889fc39cee2ed5fd2"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ac4ac021fd129b7262932d509d27da4b"/><file name="config.xml" hash="8444671c445acfa02edea6e3db57d18b"/><file name="system.xml" hash="85ac5e0c8c1cee04223131cf306d5c24"/><file name="widget.xml" hash="753d8ead5869b53768807dd65fc76bf5"/></dir><dir name="sql"><dir name="tm_testimonials_setup"><file name="mysql4-install-1.0.0.php" hash="3bdb83a71fd3db4717bfaf12fc463a4d"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="tm"><file name="testimonials.xml" hash="094af48d59de30d0706e43e51052a719"/></dir></dir><dir name="template"><dir name="tm"><dir name="testimonials"><dir><dir name="form"><file name="container.phtml" hash="1ce57290286480d4a041f9929f843754"/><file name="form.phtml" hash="84f6f1176284092b55c78fa670af9b57"/></dir><dir name="list"><file name="bottom.phtml" hash="c5ed73a92062bf8e24928694739c2abd"/><file name="content.phtml" hash="d6f84e73fffb0bd6362c2dc114b5b3b4"/><file name="title.phtml" hash="f3e2d101f532abdb950ddd5004c690aa"/></dir><dir name="widget"><file name="list.phtml" hash="2196612ad162ae820c3596bf73534aa7"/><file name="review.phtml" hash="6f63ab0b8b802b531e9acfe9a1fab332"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="tm"><file name="testimonials.xml" hash="3db48f3732a87c393719a999a74fb7c6"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="tm"><file name="testimonials.css" hash="fbdb82889b535eb1d118a41a2b3eaf40"/></dir></dir><dir name="js"><dir name="tm"><file name="testimonials.js" hash="ea1aacc945c48a382a716556ed527376"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="TM_Testimonials.xml" hash="9c88a7c606829ce69a14da4d27d2c206"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><file name="testimonials_admin_notification.html" hash="ec53090da82c969ef0b00f5462ae0909"/></dir></dir><file name="TM_Testimonials.csv" hash="a8bcd63dc424fb6080c3f3cc18bb77bc"/></dir></target></contents>
|
28 |
+
<compatible/>
|
29 |
+
<dependencies><required><php><min>5.2.0</min><max>5.9.0</max></php></required></dependencies>
|
30 |
+
</package>
|
skin/frontend/base/default/css/tm/testimonials.css
ADDED
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.testimonials-list .testimonial {
|
2 |
+
font-family: Helvetica, Arial, sans-serif;
|
3 |
+
font-size: 14px;
|
4 |
+
margin-top: 40px;
|
5 |
+
position: relative;
|
6 |
+
}
|
7 |
+
|
8 |
+
.testimonials-list .testimonials {
|
9 |
+
margin: 0 10px 0 10px;
|
10 |
+
}
|
11 |
+
|
12 |
+
.testimonials-list .testimonial:first-child {
|
13 |
+
margin-top: 0px;
|
14 |
+
}
|
15 |
+
|
16 |
+
.testimonials-list .more-button {
|
17 |
+
width: 100%;
|
18 |
+
text-align: center;
|
19 |
+
float: left;
|
20 |
+
margin-top: 20px;
|
21 |
+
margin-bottom: 20px;
|
22 |
+
display: inline-block;
|
23 |
+
border-radius: 1px;
|
24 |
+
font-size: 18px;
|
25 |
+
text-align: center;
|
26 |
+
}
|
27 |
+
|
28 |
+
.testimonials-list .more-button a {
|
29 |
+
color: #fff;
|
30 |
+
background: #479ccf;
|
31 |
+
border: 1px solid #3793cb;
|
32 |
+
text-shadow: 0 1px 0 #3188bc;
|
33 |
+
text-decoration: none;
|
34 |
+
padding: 11px 30px;
|
35 |
+
transition: background 0.2s linear 0;
|
36 |
+
}
|
37 |
+
|
38 |
+
.testimonials-list .more-button a:focus,
|
39 |
+
.testimonials-list .more-button a:hover {
|
40 |
+
background: #5ba7d4;
|
41 |
+
color: #fff;
|
42 |
+
}
|
43 |
+
|
44 |
+
.testimonials-list .more-button a:focus {
|
45 |
+
background: #5ba7d4;
|
46 |
+
color: #fff;
|
47 |
+
box-shadow: inset 0 0 8px #3188bc;
|
48 |
+
}
|
49 |
+
|
50 |
+
.testimonials-list .more-button .disabled {
|
51 |
+
opacity: 0.5;
|
52 |
+
cursor: wait;
|
53 |
+
}
|
54 |
+
|
55 |
+
.testimonials-list .page-title button {
|
56 |
+
float: right;
|
57 |
+
}
|
58 |
+
|
59 |
+
.testimonials-list .page-title h1 {
|
60 |
+
float: left;
|
61 |
+
border-bottom: none;
|
62 |
+
}
|
63 |
+
|
64 |
+
.testimonials-list .page-title:after {
|
65 |
+
display: block;
|
66 |
+
content: ".";
|
67 |
+
clear: both;
|
68 |
+
font-size: 0;
|
69 |
+
line-height: 0;
|
70 |
+
height: 0;
|
71 |
+
overflow: hidden;
|
72 |
+
}
|
73 |
+
|
74 |
+
.testimonials-list .testimonial-image {
|
75 |
+
float: left;
|
76 |
+
}
|
77 |
+
|
78 |
+
.testimonials-list .testimonial .message-wrapper {
|
79 |
+
clear: both;
|
80 |
+
}
|
81 |
+
|
82 |
+
.testimonials-list .testimonial .content-wrapper {
|
83 |
+
float: left;
|
84 |
+
width: 100%;
|
85 |
+
}
|
86 |
+
|
87 |
+
.testimonials-list .testimonial .message {
|
88 |
+
font-style: italic;
|
89 |
+
position: relative;
|
90 |
+
padding: 15px;
|
91 |
+
margin: 0 0 0 30px;
|
92 |
+
border: 1px solid #CFCFCF;
|
93 |
+
border-bottom: 2px solid #CFCFCF;
|
94 |
+
color: #333;
|
95 |
+
background: #fff;
|
96 |
+
}
|
97 |
+
|
98 |
+
.testimonials-list .testimonial .message:before {
|
99 |
+
content: "";
|
100 |
+
position: absolute;
|
101 |
+
top: 15px;
|
102 |
+
bottom: auto;
|
103 |
+
left: -23px;
|
104 |
+
border-width: 10px 23px 10px 0;
|
105 |
+
border-style: solid;
|
106 |
+
border-color: transparent #CFCFCF;
|
107 |
+
display: block;
|
108 |
+
width: 0;
|
109 |
+
}
|
110 |
+
|
111 |
+
.testimonials-list .testimonial .message:after {
|
112 |
+
content: "";
|
113 |
+
position: absolute;
|
114 |
+
top: 16px;
|
115 |
+
bottom: auto;
|
116 |
+
left: -21px;
|
117 |
+
border-width: 9px 21px 9px 0;
|
118 |
+
border-style: solid;
|
119 |
+
border-color: transparent #fff;
|
120 |
+
display: block;
|
121 |
+
width: 0;
|
122 |
+
}
|
123 |
+
|
124 |
+
.testimonials-list .testimonial .testimonial-date {
|
125 |
+
float: right;
|
126 |
+
font-size: 12px;
|
127 |
+
}
|
128 |
+
|
129 |
+
.testimonials-list .testimonial .rating-wrapper {
|
130 |
+
float: left;
|
131 |
+
font-size: 12px;
|
132 |
+
}
|
133 |
+
|
134 |
+
.testimonials-list .testimonial .socialInfo {
|
135 |
+
font-size: 12px;
|
136 |
+
padding-top: 5px;
|
137 |
+
}
|
138 |
+
|
139 |
+
.testimonials-list .testimonial .author-info {
|
140 |
+
font-weight: bold;
|
141 |
+
font-style: italic;
|
142 |
+
}
|
143 |
+
|
144 |
+
.testimonials-list .testimonial .socialInfo a {
|
145 |
+
white-space: nowrap;
|
146 |
+
}
|
147 |
+
|
148 |
+
.testimonials-list .testimonial .socialInfo img {
|
149 |
+
margin-right: 5px;
|
150 |
+
margin-left: 5px;
|
151 |
+
display: inline;
|
152 |
+
}
|
153 |
+
|
154 |
+
.testimonials-list .testimonial .rating-title {
|
155 |
+
float: left;
|
156 |
+
margin-right: 10px;
|
157 |
+
line-height: 1.25;
|
158 |
+
}
|
159 |
+
|
160 |
+
.testimonials-list .testimonial .rating-box {
|
161 |
+
float: left;
|
162 |
+
}
|
163 |
+
|
164 |
+
.testimonials-list .copyright {
|
165 |
+
text-align: center;
|
166 |
+
color: #000;
|
167 |
+
font-size: .9em;
|
168 |
+
}
|
169 |
+
|
170 |
+
/** widgets styles */
|
171 |
+
.block-testimonials .actions a {
|
172 |
+
float: none;
|
173 |
+
}
|
174 |
+
|
175 |
+
.block-testimonials .block-content a {
|
176 |
+
color: #1b2d3b;
|
177 |
+
}
|
178 |
+
|
179 |
+
.block-testimonials {
|
180 |
+
font-size: 11px;
|
181 |
+
line-height: 1.25;
|
182 |
+
}
|
183 |
+
|
184 |
+
.block-testimonials .block-content .content {
|
185 |
+
padding: 10px 10px 20px 10px;
|
186 |
+
}
|
187 |
+
|
188 |
+
.block-testimonials .block-content .testimonial-container {
|
189 |
+
min-height: 130px;
|
190 |
+
}
|
191 |
+
|
192 |
+
.block-testimonials .block-content .content .content-wrapper {
|
193 |
+
height: 75px;
|
194 |
+
min-height: 75px;
|
195 |
+
display: block;
|
196 |
+
overflow: hidden;
|
197 |
+
}
|
198 |
+
|
199 |
+
.block-testimonials .block-content .read-more,
|
200 |
+
.block-testimonials .block-content .read-less {
|
201 |
+
padding-top: 10px;
|
202 |
+
display: inline-block;
|
203 |
+
}
|
204 |
+
|
205 |
+
.block-testimonials .block-content .review {
|
206 |
+
text-align: center;
|
207 |
+
}
|
208 |
+
|
209 |
+
.block-testimonials .block-content .review .score {
|
210 |
+
font-weight: bold;
|
211 |
+
font-size: 40px;
|
212 |
+
color: #e26703;
|
213 |
+
}
|
214 |
+
|
215 |
+
.block-testimonials .block-content .content .rating-title {
|
216 |
+
float: left;
|
217 |
+
margin-right: 10px;
|
218 |
+
}
|
219 |
+
|
220 |
+
.block-testimonials .block-content .content .message {
|
221 |
+
margin-top: 10px;
|
222 |
+
}
|
223 |
+
|
224 |
+
.block-testimonials .block-content .content .name {
|
225 |
+
float: right;
|
226 |
+
margin-top: 10px;
|
227 |
+
font-style: italic;
|
228 |
+
}
|
229 |
+
|
230 |
+
.block-testimonials.empty-design .actions,
|
231 |
+
.block-testimonials.empty-design .block-title {
|
232 |
+
display: none;
|
233 |
+
}
|
234 |
+
|
235 |
+
.block-testimonials.empty-design,
|
236 |
+
.block-testimonials.empty-design .block-content {
|
237 |
+
background: none;
|
238 |
+
border: none;
|
239 |
+
}
|
240 |
+
|
241 |
+
.block-testimonials.empty-design .block-content .content {
|
242 |
+
padding: 0;
|
243 |
+
}
|
244 |
+
|
245 |
+
.std .testimonialForm li {
|
246 |
+
list-style: none;
|
247 |
+
}
|
248 |
+
|
249 |
+
.testimonials-list .testimonial { zoom: 1; }
|
250 |
+
.testimonials-list .testimonial:after { content: '.'; clear: both; height: 0; font-size: 0; display: block; visibility: hidden; }
|
251 |
+
|
252 |
+
@media (max-width: 480px) {
|
253 |
+
.testimonials-list .testimonial .testimonial-date {
|
254 |
+
float: left;
|
255 |
+
margin-bottom: 10px;
|
256 |
+
clear: both;
|
257 |
+
}
|
258 |
+
}
|
skin/frontend/base/default/js/tm/testimonials.js
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var Testimonials = Class.create();
|
2 |
+
Testimonials.prototype = {
|
3 |
+
initialize: function(ajaxCallUrl, divToUpdate) {
|
4 |
+
this.url = ajaxCallUrl;
|
5 |
+
this.div = $$(divToUpdate)[0];
|
6 |
+
this.currentPage = 1;
|
7 |
+
},
|
8 |
+
|
9 |
+
makeAjaxCall: function(event) {
|
10 |
+
event.stop();
|
11 |
+
if ($$('.more-button a')[0].hasClassName('disabled')) return;
|
12 |
+
$$('.more-button a')[0].addClassName('disabled');
|
13 |
+
++this.currentPage;
|
14 |
+
new Ajax.Request(this.url + 'page/' + this.currentPage, {
|
15 |
+
onSuccess: function(transport) {
|
16 |
+
var response = transport.responseText.evalJSON();
|
17 |
+
this.div.insert(response.outputHtml);
|
18 |
+
$$('.more-button a')[0].removeClassName('disabled');
|
19 |
+
}.bind(this)
|
20 |
+
});
|
21 |
+
}
|
22 |
+
};
|