Demac_Preview - Version 0.1.0

Version Notes

If you like Wordpress' "Preview Post" button, then this extension is for you.

Download this release

Release Info

Developer Demac Media
Extension Demac_Preview
Version 0.1.0
Comparing to
See all releases


Version 0.1.0

app/code/local/Demac/Adminhtml/Block/Catalog/Product/Edit.php ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category Mage
22
+ * @package Mage_Adminhtml
23
+ * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ */
26
+
27
+ /**
28
+ * Customer edit block
29
+ *
30
+ * @category Mage
31
+ * @package Mage_Adminhtml
32
+ * @author Magento Core Team <core@magentocommerce.com>
33
+ */
34
+ class Demac_Adminhtml_Block_Catalog_Product_Edit extends Mage_Adminhtml_Block_Widget
35
+ {
36
+ public function __construct()
37
+ {
38
+ parent::__construct();
39
+ $this->setTemplate('demac/catalog/product/edit.phtml');
40
+ $this->setId('product_edit');
41
+ }
42
+
43
+ /**
44
+ * Retrieve currently edited product object
45
+ *
46
+ * @return Mage_Catalog_Model_Product
47
+ */
48
+ public function getProduct()
49
+ {
50
+ return Mage::registry('current_product');
51
+ }
52
+
53
+ protected function _prepareLayout()
54
+ {
55
+ $_product = $this->getProduct();
56
+ if (!$this->getRequest()->getParam('popup')) {
57
+ $this->setChild('back_button',
58
+ $this->getLayout()->createBlock('adminhtml/widget_button')
59
+ ->setData(array(
60
+ 'label' => Mage::helper('catalog')->__('Back'),
61
+ 'onclick' => 'setLocation(\''.$this->getUrl('*/*/', array('store'=>$this->getRequest()->getParam('store', 0))).'\')',
62
+ 'class' => 'back'
63
+ ))
64
+ );
65
+ $this->setChild('preview_button',
66
+ $this->getLayout()->createBlock('adminhtml/widget_button')
67
+ ->setData(array(
68
+ 'label' => Mage::helper('catalog')->__('Preview'),
69
+ 'onclick' => 'window.open(\''. Mage::getModel('core/store')->load(0)->getUrl() . $_product->getUrlPath().'\')'
70
+ ))
71
+ );
72
+ } else {
73
+ $this->setChild('back_button',
74
+ $this->getLayout()->createBlock('adminhtml/widget_button')
75
+ ->setData(array(
76
+ 'label' => Mage::helper('catalog')->__('Close Window'),
77
+ 'onclick' => 'window.close()',
78
+ 'class' => 'cancel'
79
+ ))
80
+ );
81
+ }
82
+
83
+ if (!$this->getProduct()->isReadonly()) {
84
+ $this->setChild('reset_button',
85
+ $this->getLayout()->createBlock('adminhtml/widget_button')
86
+ ->setData(array(
87
+ 'label' => Mage::helper('catalog')->__('Reset'),
88
+ 'onclick' => 'setLocation(\''.$this->getUrl('*/*/*', array('_current'=>true)).'\')'
89
+ ))
90
+ );
91
+
92
+ $this->setChild('save_button',
93
+ $this->getLayout()->createBlock('adminhtml/widget_button')
94
+ ->setData(array(
95
+ 'label' => Mage::helper('catalog')->__('Save'),
96
+ 'onclick' => 'productForm.submit()',
97
+ 'class' => 'save'
98
+ ))
99
+ );
100
+ }
101
+
102
+ if (!$this->getRequest()->getParam('popup')) {
103
+ if (!$this->getProduct()->isReadonly()) {
104
+ $this->setChild('save_and_edit_button',
105
+ $this->getLayout()->createBlock('adminhtml/widget_button')
106
+ ->setData(array(
107
+ 'label' => Mage::helper('catalog')->__('Save and Continue Edit'),
108
+ 'onclick' => 'saveAndContinueEdit(\''.$this->getSaveAndContinueUrl().'\')',
109
+ 'class' => 'save'
110
+ ))
111
+ );
112
+ }
113
+ if ($this->getProduct()->isDeleteable()) {
114
+ $this->setChild('delete_button',
115
+ $this->getLayout()->createBlock('adminhtml/widget_button')
116
+ ->setData(array(
117
+ 'label' => Mage::helper('catalog')->__('Delete'),
118
+ 'onclick' => 'confirmSetLocation(\''.Mage::helper('catalog')->__('Are you sure?').'\', \''.$this->getDeleteUrl().'\')',
119
+ 'class' => 'delete'
120
+ ))
121
+ );
122
+ }
123
+
124
+ if ($this->getProduct()->isDuplicable()) {
125
+ $this->setChild('duplicate_button',
126
+ $this->getLayout()->createBlock('adminhtml/widget_button')
127
+ ->setData(array(
128
+ 'label' => Mage::helper('catalog')->__('Duplicate'),
129
+ 'onclick' => 'setLocation(\'' . $this->getDuplicateUrl() . '\')',
130
+ 'class' => 'add'
131
+ ))
132
+ );
133
+ }
134
+ }
135
+
136
+ return parent::_prepareLayout();
137
+ }
138
+
139
+ public function getBackButtonHtml()
140
+ {
141
+ return $this->getChildHtml('back_button');
142
+ }
143
+
144
+ public function getPreviewButtonHtml()
145
+ {
146
+ return $this->getChildHtml('preview_button');
147
+ }
148
+
149
+ public function getCancelButtonHtml()
150
+ {
151
+ return $this->getChildHtml('reset_button');
152
+ }
153
+
154
+ public function getSaveButtonHtml()
155
+ {
156
+ return $this->getChildHtml('save_button');
157
+ }
158
+
159
+ public function getSaveAndEditButtonHtml()
160
+ {
161
+ return $this->getChildHtml('save_and_edit_button');
162
+ }
163
+
164
+ public function getDeleteButtonHtml()
165
+ {
166
+ return $this->getChildHtml('delete_button');
167
+ }
168
+
169
+ public function getDuplicateButtonHtml()
170
+ {
171
+ return $this->getChildHtml('duplicate_button');
172
+ }
173
+
174
+ public function getValidationUrl()
175
+ {
176
+ return $this->getUrl('*/*/validate', array('_current'=>true));
177
+ }
178
+
179
+ public function getSaveUrl()
180
+ {
181
+ return $this->getUrl('*/*/save', array('_current'=>true, 'back'=>null));
182
+ }
183
+
184
+ public function getSaveAndContinueUrl()
185
+ {
186
+ return $this->getUrl('*/*/save', array(
187
+ '_current' => true,
188
+ 'back' => 'edit',
189
+ 'tab' => '{{tab_id}}',
190
+ 'active_tab' => null
191
+ ));
192
+ }
193
+
194
+ public function getProductId()
195
+ {
196
+ return $this->getProduct()->getId();
197
+ }
198
+
199
+ public function getProductSetId()
200
+ {
201
+ $setId = false;
202
+ if (!($setId = $this->getProduct()->getAttributeSetId()) && $this->getRequest()) {
203
+ $setId = $this->getRequest()->getParam('set', null);
204
+ }
205
+ return $setId;
206
+ }
207
+
208
+ public function getIsGrouped()
209
+ {
210
+ return $this->getProduct()->isGrouped();
211
+ }
212
+
213
+ public function getDeleteUrl()
214
+ {
215
+ return $this->getUrl('*/*/delete', array('_current'=>true));
216
+ }
217
+
218
+ public function getDuplicateUrl()
219
+ {
220
+ return $this->getUrl('*/*/duplicate', array('_current'=>true));
221
+ }
222
+
223
+ public function getHeader()
224
+ {
225
+ $header = '';
226
+ if ($this->getProduct()->getId()) {
227
+ $header = $this->htmlEscape($this->getProduct()->getName());
228
+ }
229
+ else {
230
+ $header = Mage::helper('catalog')->__('New Product');
231
+ }
232
+ if ($setName = $this->getAttributeSetName()) {
233
+ $header.= ' (' . $setName . ')';
234
+ }
235
+ return $header;
236
+ }
237
+
238
+ public function getAttributeSetName()
239
+ {
240
+ if ($setId = $this->getProduct()->getAttributeSetId()) {
241
+ $set = Mage::getModel('eav/entity_attribute_set')
242
+ ->load($setId);
243
+ return $set->getAttributeSetName();
244
+ }
245
+ return '';
246
+ }
247
+
248
+ public function getIsConfigured()
249
+ {
250
+ if ($this->getProduct()->isConfigurable()
251
+ && !($superAttributes = $this->getProduct()->getTypeInstance(true)->getUsedProductAttributeIds($this->getProduct()))) {
252
+ $superAttributes = false;
253
+ }
254
+
255
+ return !$this->getProduct()->isConfigurable() || $superAttributes !== false;
256
+ }
257
+
258
+ public function getSelectedTabId()
259
+ {
260
+ return addslashes(htmlspecialchars($this->getRequest()->getParam('tab')));
261
+ }
262
+ }
app/code/local/Demac/Adminhtml/etc/config.xml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Demac_Adminhtml>
5
+ <version>0.1.0</version>
6
+ </Demac_Adminhtml>
7
+ </modules>
8
+ <global>
9
+ <blocks>
10
+ <adminhtml>
11
+ <rewrite>
12
+ <catalog_product_edit>Demac_Adminhtml_Block_Catalog_Product_Edit</catalog_product_edit>
13
+ </rewrite>
14
+ </adminhtml>
15
+ </blocks>
16
+ </global>
17
+ </config>
app/code/local/Demac/All/Block/Notification/Window.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+ class Demac_All_Block_Notification_Window extends Mage_Adminhtml_Block_Notification_Window{
19
+ protected function _construct(){
20
+ parent::_construct();
21
+
22
+ if(!Mage::getStoreConfig('demacall/install/run')){
23
+ $c = Mage::getModel('core/config_data');
24
+ $c
25
+ ->setScope('default')
26
+ ->setPath('demacall/install/run')
27
+ ->setValue(time())
28
+ ->save();
29
+ $this->setHeaderText($this->__("Demac Media Notifications Setup"));
30
+ $this->setIsFirstRun(1);
31
+ $this->setIsHtml(1);
32
+
33
+ }
34
+ }
35
+
36
+ protected function _toHtml(){
37
+ if($this->getIsHtml()){
38
+ $this->setTemplate('demac_all/notification/window.phtml');
39
+ }
40
+ return parent::_toHtml();
41
+ }
42
+ public function presetFirstSetup(){
43
+
44
+ }
45
+ public function getNoticeMessageText(){
46
+ if($this->getIsFirstRun()){
47
+ $child = $this->getLayout()->createBlock('core/template')->setTemplate('demac_all/notification/window/first-run.phtml')->toHtml();
48
+ return $child;
49
+ }else{
50
+ return $this->getData('notice_message_text');
51
+ }
52
+ }
53
+
54
+
55
+ }
app/code/local/Demac/All/Block/System/Config/Form/Fieldset/Demacall/Extensions.php ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+
19
+ class Demac_All_Block_System_Config_Form_Fieldset_Demacall_Extensions extends Mage_Adminhtml_Block_System_Config_Form_Fieldset{
20
+
21
+ protected $_dummyElement;
22
+ protected $_fieldRenderer;
23
+ protected $_values;
24
+
25
+ public function render(Varien_Data_Form_Element_Abstract $element)
26
+ {
27
+ $html = $this->_getHeaderHtml($element);
28
+ $modules = array_keys((array)Mage::getConfig()->getNode('modules')->children());
29
+ sort($modules);
30
+
31
+ foreach ($modules as $moduleName) {
32
+ if (strstr($moduleName,'Demac_') === false) {
33
+ continue;
34
+ }
35
+
36
+ if($moduleName == 'Demac_Core' || $moduleName == 'Demac_All'){
37
+ continue;
38
+ }
39
+
40
+ $html.= $this->_getFieldHtml($element, $moduleName);
41
+ }
42
+ $html .= $this->_getFooterHtml($element);
43
+
44
+ return $html;
45
+ }
46
+
47
+ protected function _getDummyElement()
48
+ {
49
+ if (empty($this->_dummyElement)) {
50
+ $this->_dummyElement = new Varien_Object(array('show_in_default'=>1, 'show_in_website'=>1));
51
+ }
52
+ return $this->_dummyElement;
53
+ }
54
+
55
+ protected function _getFieldRenderer()
56
+ {
57
+ if (empty($this->_fieldRenderer)) {
58
+ $this->_fieldRenderer = Mage::getBlockSingleton('adminhtml/system_config_form_field');
59
+ }
60
+ return $this->_fieldRenderer;
61
+ }
62
+
63
+ protected function _getFieldHtml($fieldset, $moduleName)
64
+ {
65
+ $configData = $this->getConfigData();
66
+
67
+ try{
68
+ if($platform = Mage::getConfig()->getNode("modules/$moduleName/platform")){
69
+ $platform = strtolower($platform);
70
+ $ignore_platform = false;
71
+ }else{
72
+ throw new Exception();
73
+ }
74
+ }catch(Exception $e){
75
+ $platform="ce";
76
+ $ignore_platform = true;
77
+ }
78
+
79
+
80
+ $path = 'advanced/modules_disable_output/'.$moduleName; //TODO: move as property of form
81
+ $data = isset($configData[$path]) ? $configData[$path] : array();
82
+
83
+ $e = $this->_getDummyElement();
84
+
85
+ $moduleKey = substr($moduleName, strpos($moduleName,'_')+1);
86
+ $ver = (Mage::getConfig()->getModuleConfig($moduleName)->version);
87
+ $id = $moduleName;
88
+
89
+ $warning = "";
90
+ if(!$ignore_platform){
91
+ $magentoVersion = $this->_convertVersion(Mage::getVersion());
92
+
93
+ if($magentoVersion >= $this->_convertVersion(demac_all_Helper_Config::ENTERPRISE_VERSION)){
94
+ // EE
95
+ if($platform == 'ce' || $platform=='pe'){
96
+ $warning = $this->__("This extension can't be run under Magento Enterprise platform. You need Enterprise version of the extension.");
97
+ }
98
+
99
+ }elseif($magentoVersion >= $this->_convertVersion(demac_all_Helper_Config::PROFESSIONAL_EDITION)){
100
+ // PE
101
+ if($platform == 'ce' ){
102
+ $warning = $this->__("This extension can't be run under Magento Professional platform. You need Professional version of the extension.");
103
+ }
104
+ }else{
105
+ // CE
106
+ }
107
+ }
108
+
109
+
110
+
111
+
112
+ $hasUpdate = false;
113
+ if($displayNames = Mage::app()->loadCache('demac_all_extensions_feed')){
114
+ if($displayNames = unserialize($displayNames)){
115
+ if(isset($displayNames[$moduleName])){
116
+ $url = @$displayNames[$moduleName]['url'];
117
+ $name = @$displayNames[$moduleName]['display_name'];
118
+ $version = @$displayNames[$moduleName]['version'];
119
+
120
+ $moduleName = '<a href="'.$url.'" target="_blank" title="'.$name.'">'.$name."</a>";
121
+
122
+ if($warning){
123
+ $update = '<a target="_blank"><img src="'.$this->getSkinUrl('demac_all/images/bad.gif').'" title="'.$this->__("Wrong Extension Platform").'"/></a>';
124
+ $moduleName ="$update $moduleName";
125
+ }else{
126
+
127
+ if($this->_convertVersion($ver) < $this->_convertVersion($version)){
128
+ $update = '<a href="'.$url.'" target="_blank"><img src="'.$this->getSkinUrl('demac_all/images/update.gif').'" title="'.$this->__("Update available").'"/></a>';
129
+ $hasUpdate = 1;
130
+ $moduleName ="$update $moduleName";
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+
137
+ if(!$hasUpdate && !$warning){
138
+ $update = '<a target="_blank"><img src="'.$this->getSkinUrl('demac_all/images/ok.gif').'" title="'.$this->__("Installed").'"/></a>';
139
+ $moduleName ="$update $moduleName";
140
+ }elseif($warning && (!@$displayNames || !@$name)){
141
+ $update = '<a target="_blank"><img src="'.$this->getSkinUrl('demac_all/images/bad.gif').'" title="'.$this->__("Wrong Extension Platform").'"/></a>';
142
+ $moduleName ="$update $moduleName";
143
+ }
144
+
145
+
146
+
147
+ if($ver){
148
+ $field = $fieldset->addField($id, 'label',
149
+ array(
150
+ 'name' => 'ssssss',
151
+ 'label' => $moduleName,
152
+ 'value' => $warning ? $warning : $ver,
153
+
154
+ ))->setRenderer($this->_getFieldRenderer());
155
+ return $field->toHtml();
156
+ }
157
+ return '';
158
+
159
+ }
160
+
161
+
162
+
163
+ protected function _convertVersion($v){
164
+ $digits = @explode(".", $v);
165
+ $version = 0;
166
+ if(is_array($digits)){
167
+ foreach($digits as $k=>$v){
168
+ $version += ($v * pow(10, max(0, (3-$k))));
169
+ }
170
+
171
+ }
172
+ return $version;
173
+ }
174
+ }
app/code/local/Demac/All/Helper/Config.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+
19
+ class Demac_All_Helper_Config extends Mage_Core_Helper_Abstract{
20
+ /** Extensions feed path */
21
+ const EXTENSIONS_FEED_URL = 'http://feeds.feedburner.com/DemacMediaMagentoExtensionsUpdates';
22
+ /** Updates Feed path */
23
+ const UPDATES_FEED_URL = 'http://feeds.feedburner.com/DemacMediaMagentoExtensionsUpdates';
24
+
25
+ const ENTERPRISE_VERSION = '1.7';
26
+
27
+ const PROFESSIONAL_EDITION = '1.6';
28
+ }
app/code/local/Demac/All/Helper/Data.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+ class Demac_All_Helper_Data extends Mage_Core_Helper_Abstract{
19
+
20
+
21
+
22
+ }
23
+
24
+
app/code/local/Demac/All/Model/Feed.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * aheadWorks Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category AW
13
+ * @package AW_All
14
+ * @copyright Copyright (c) 2009-2010 aheadWorks Co. (http://www.aheadworks.com)
15
+ * @license http://ecommerce.aheadworks.com/LICENSE-M1.txt
16
+ */
17
+
18
+ class Demac_All_Model_Feed extends Mage_AdminNotification_Model_Feed
19
+ {
20
+ const XML_USE_HTTPS_PATH = 'demacall/feed/use_https';
21
+ const XML_FEED_URL_PATH = 'demacall/feed/url';
22
+ const XML_FREQUENCY_PATH = 'demacall/feed/check_frequency';
23
+ const XML_FREQUENCY_ENABLE = 'demacall/feed/enabled';
24
+ const XML_LAST_UPDATE_PATH = 'demacall/feed/last_update';
25
+
26
+
27
+ public static function check(){
28
+ if(!Mage::getStoreConfig(self::XML_FREQUENCY_ENABLE)){
29
+ return;
30
+ }
31
+ return Mage::getModel('demacall/feed')->checkUpdate();
32
+ }
33
+
34
+ public function getFrequency(){
35
+ return Mage::getStoreConfig(self::XML_FREQUENCY_PATH) * 30;
36
+ }
37
+
38
+ public function getLastUpdate(){
39
+ //return 100;
40
+ return Mage::app()->loadCache('demacall_notifications_lastcheck');
41
+ }
42
+
43
+ public function setLastUpdate()
44
+ {
45
+ Mage::app()->saveCache(time(), 'demacall_notifications_lastcheck');
46
+ return $this;
47
+ }
48
+ public function getFeedUrl(){
49
+ if (is_null($this->_feedUrl)) {
50
+ $this->_feedUrl = (Mage::getStoreConfigFlag(self::XML_USE_HTTPS_PATH) ? 'https://' : 'http://')
51
+ . Mage::getStoreConfig(self::XML_FEED_URL_PATH);
52
+ }
53
+ return $this->_feedUrl;
54
+ }
55
+
56
+ public function checkUpdate(){
57
+ if (($this->getFrequency() + $this->getLastUpdate()) > time()) {
58
+ return $this;
59
+ }
60
+
61
+ $feedData = array();
62
+
63
+ $feedXml = $this->getFeedData();
64
+ Mage::log('Feed xml');
65
+ Mage::log($feedData);
66
+ if ($feedXml && $feedXml->channel && $feedXml->channel->item) {
67
+ foreach ($feedXml->channel->item as $item) {
68
+ $feedData[] = array(
69
+ 'severity' => (int)$item->severity ? (int)$item->severity : 3,
70
+ 'date_added' => $this->getDate((string)$item->pubDate),
71
+ 'title' => (string)$item->title,
72
+ 'description' => (string)$item->description,
73
+ 'url' => (string)$item->link,
74
+ );
75
+ }
76
+ Mage::log('Feed Data');
77
+ Mage::log($feedData);
78
+ if ($feedData) {
79
+ Mage::getModel('adminnotification/inbox')->parse(array_reverse($feedData));
80
+ }
81
+
82
+ }
83
+ $this->setLastUpdate();
84
+
85
+ return $this;
86
+ }
87
+
88
+ }
app/code/local/Demac/All/Model/Feed/Abstract.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+
19
+ class Demac_All_Model_Feed_Abstract extends Mage_Core_Model_Abstract{
20
+
21
+ /**
22
+ * Retrieve feed data as XML element
23
+ *
24
+ * @return SimpleXMLElement
25
+ */
26
+ public function getFeedData()
27
+ {
28
+ $curl = new Varien_Http_Adapter_Curl();
29
+ $curl->setConfig(array(
30
+ 'timeout' => 1
31
+ ));
32
+ $curl->write(Zend_Http_Client::GET, $this->getFeedUrl(), '1.0');
33
+ $data = $curl->read();
34
+ if ($data === false) {
35
+ return false;
36
+ }
37
+ $data = preg_split('/^\r?$/m', $data, 2);
38
+ $data = trim($data[1]);
39
+ $curl->close();
40
+
41
+ try {
42
+ $xml = new SimpleXMLElement($data);
43
+ }
44
+ catch (Exception $e) {
45
+ Mage::log($e);
46
+ return false;
47
+ }
48
+ //Mage::log($this->getFeedUrl());
49
+ //Mage::log($xml);
50
+ return $xml;
51
+ }
52
+
53
+
54
+ /**
55
+ * Retrieve DB date from RSS date
56
+ *
57
+ * @param string $rssDate
58
+ * @return string YYYY-MM-DD YY:HH:SS
59
+ */
60
+ public function getDate($rssDate)
61
+ {
62
+ return gmdate('Y-m-d H:i:s', strtotime($rssDate));
63
+ }
64
+
65
+
66
+
67
+ }
app/code/local/Demac/All/Model/Feed/Extensions.php ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+
19
+ class Demac_All_Model_Feed_Extensions extends Demac_All_Model_Feed_Abstract{
20
+
21
+ /**
22
+ * Retrieve feed url
23
+ *
24
+ * @return string
25
+ */
26
+ public function getFeedUrl(){
27
+ return Demac_All_Helper_Config::EXTENSIONS_FEED_URL;
28
+ }
29
+
30
+
31
+ /**
32
+ * Checks feed
33
+ * @return
34
+ */
35
+ public function check(){
36
+ if(!(Mage::app()->loadCache('demac_all_extensions_feed')) || (time()-Mage::app()->loadCache('demac_all_extensions_feed_lastcheck')) > Mage::getStoreConfig('demacall/feed/check_frequency')){
37
+ $this->refresh();
38
+ }
39
+ }
40
+
41
+ public function refresh(){
42
+ $exts = array();
43
+ try{
44
+ $Node = $this->getFeedData();
45
+ if(!$Node) return false;
46
+ foreach($Node->children() as $ext){
47
+ $exts[(string)$ext->name] = array(
48
+ 'display_name' => (string)$ext->display_name,
49
+ 'version' => (string)$ext->version,
50
+ 'url' => (string)$ext->url
51
+ );
52
+ }
53
+
54
+ Mage::app()->saveCache(serialize($exts), 'demac_all_extensions_feed');
55
+ Mage::app()->saveCache(time(), 'demac_all_extensions_feed_lastcheck');
56
+ return true;
57
+ }catch(Exception $E){
58
+ return false;
59
+ }
60
+ }
61
+
62
+ public function checkExtensions(){
63
+ $modules = array_keys((array)Mage::getConfig()->getNode('modules')->children());
64
+ sort($modules);
65
+ $magentoVersion = $this->_convertVersion(Mage::getVersion());
66
+
67
+ foreach ($modules as $extensionName) {
68
+ if (strstr($extensionName,'Demac_') === false) {
69
+ continue;
70
+ }
71
+ if($extensionName == 'Demac_Core' || $extensionName == 'Demac_All'){
72
+ continue;
73
+ }
74
+ // echo $extensionName; die();
75
+
76
+ if($platform = $this->getExtensionPlatform($extensionName)){
77
+ if($magentoVersion >= $this->_convertVersion(Demac_All_Helper_Config::ENTERPRISE_VERSION)){
78
+ // EE
79
+ if($platform == 'ce' || $platform=='pe'){
80
+ $this->disableExtensionOutput($extensionName);
81
+ }
82
+
83
+ }elseif($magentoVersion >= $this->_convertVersion(Demac_All_Helper_Config::PROFESSIONAL_EDITION)){
84
+ // PE
85
+ if($platform == 'ce' ){
86
+ $this->disableExtensionOutput($extensionName);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return $this;
92
+ }
93
+
94
+ public function getExtensionPlatform($extensionName){
95
+ try{
96
+ if($platform = Mage::getConfig()->getNode("modules/$extensionName/platform")){
97
+ $platform = strtolower($platform);
98
+ return $platform;
99
+ }else{
100
+ throw new Exception();
101
+ }
102
+ }catch(Exception $e){
103
+ return false;
104
+ }
105
+ }
106
+
107
+
108
+ public function disableExtensionOutput($extensionName){
109
+ $coll = Mage::getModel('core/config_data')->getCollection();
110
+ $coll->getSelect()->where("path='advanced/modules_disable_output/$extensionName'");
111
+ $i=0;
112
+ foreach($coll as $cd){
113
+ $i++;
114
+ $cd->setValue(1)->save();
115
+ }
116
+ if($i==0){
117
+ Mage::getModel('core/config_data')
118
+ ->setPath("advanced/modules_disable_output/$extensionName")
119
+ ->setValue(1)
120
+ ->save();
121
+ }
122
+ return $this;
123
+ }
124
+
125
+ protected function _convertVersion($v){
126
+ $digits = @explode(".", $v);
127
+ $version = 0;
128
+ if(is_array($digits)){
129
+ foreach($digits as $k=>$v){
130
+ $version += ($v * pow(10, max(0, (3-$k))));
131
+ }
132
+
133
+ }
134
+ return $version;
135
+ }
136
+ }
app/code/local/Demac/All/Model/Feed/Updates.php ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+ class Demac_All_Model_Feed_Updates extends Demac_All_Model_Feed_Abstract{
19
+
20
+ /**
21
+ * Retrieve feed url
22
+ *
23
+ * @return string
24
+ */
25
+ public function getFeedUrl(){
26
+ return Demac_All_Helper_Config::UPDATES_FEED_URL;
27
+ }
28
+
29
+ /**
30
+ * Checks feed
31
+ * @return
32
+ */
33
+ public function check(){
34
+ if((time()-Mage::app()->loadCache('demac_all_updates_feed_lastcheck')) > Mage::getStoreConfig('demacall/feed/check_frequency')){
35
+ $this->refresh();
36
+ }
37
+ }
38
+
39
+ public function refresh(){
40
+ $feedData = array();
41
+
42
+ try{
43
+
44
+ //$Node = $this->getFeedData();
45
+ //if(!$Node) return false;
46
+ //foreach($Node->children() as $item){
47
+
48
+ //if($this->isInteresting($item)){
49
+ $feedXml = $this->getFeedData();
50
+ Mage::log('Feed xml');
51
+ Mage::log($feedXml);
52
+ if ($feedXml && $feedXml->channel && $feedXml->channel->item) {
53
+ foreach ($feedXml->channel->item as $item) {
54
+ //$date = strtotime((string)$item->date);
55
+ //if(!Mage::getStoreConfig('demacall/install/run') || (Mage::getStoreConfig('demacall/install/run') < $date)){
56
+ Mage::log('item');
57
+ Mage::log($item);
58
+ $feedData[] = array(
59
+ 'severity' => 3,
60
+ 'date_added' => $this->getDate((string)$item->pubDate),
61
+ 'title' => (string)$item->title,
62
+ 'description' => (string)$item->description,
63
+ 'url' => (string)$item->link,
64
+ );
65
+ //}
66
+ }
67
+ }
68
+ Mage::log('Feed Data');
69
+ Mage::log($feedData);
70
+ if ($feedData) {
71
+ Mage::getModel('adminnotification/inbox')->parse(($feedData));
72
+ }
73
+
74
+ Mage::app()->saveCache(time(), 'demac_all_updates_feed_lastcheck');
75
+ return true;
76
+ }catch(Exception $E){
77
+ return false;
78
+ }
79
+ }
80
+
81
+
82
+ public function isExtensionInstalled($code){
83
+ $modules = array_keys((array)Mage::getConfig()->getNode('modules')->children());
84
+
85
+ foreach ($modules as $moduleName) {
86
+ if($moduleName == $code){
87
+ return true;
88
+ }
89
+ }
90
+ return false;
91
+ }
92
+
93
+ }
app/code/local/Demac/All/Model/Source/Updates/Type.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+
19
+ class Demac_All_Model_Source_Updates_Type extends Mage_Eav_Model_Entity_Attribute_Source_Abstract{
20
+
21
+ const TYPE_PROMO = 'PROMO';
22
+ const TYPE_NEW_RELEASE = 'NEW_RELEASE';
23
+ const TYPE_UPDATE_RELEASE = 'UPDATE_RELEASE';
24
+ const TYPE_INFO = 'INFO';
25
+ const TYPE_INSTALLED_UPDATE = 'INSTALLED_UPDATE';
26
+
27
+
28
+ public function toOptionArray(){
29
+ return array(
30
+ array('value' => self::TYPE_UPDATE_RELEASE, 'label' => Mage::helper('demacall')->__('Extensions updates')),
31
+ array('value' => self::TYPE_NEW_RELEASE, 'label' => Mage::helper('demacall')->__('New Releases')),
32
+ array('value' => self::TYPE_INFO, 'label' => Mage::helper('demacall')->__('Other information'))
33
+ );
34
+ }
35
+
36
+ /**
37
+ * Retrive all attribute options
38
+ *
39
+ * @return array
40
+ */
41
+ public function getAllOptions()
42
+ {
43
+ return $this->toOptionArray();
44
+ }
45
+
46
+
47
+ /**
48
+ * Returns label for value
49
+ * @param string $value
50
+ * @return string
51
+ */
52
+ public function getLabel($value){
53
+ $options = $this->toOptionArray();
54
+ foreach($options as $v){
55
+ if($v['value'] == $value){
56
+ return $v['label'];
57
+ }
58
+ }
59
+ return '';
60
+ }
61
+
62
+ /**
63
+ * Returns array ready for use by grid
64
+ * @return array
65
+ */
66
+ public function getGridOptions(){
67
+ $items = $this->getAllOptions();
68
+ $out = array();
69
+ foreach($items as $item){
70
+ $out[$item['value']] = $item['label'];
71
+ }
72
+ return $out;
73
+ }
74
+ }
app/code/local/Demac/All/etc/adminhtml.xml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <layout>
4
+ <updates>
5
+ <demacall module="Demac_All">
6
+ <file>demac_all.xml</file>
7
+ </demacall>
8
+ </updates>
9
+ </layout>
10
+
11
+ <acl>
12
+ <resources>
13
+ <all>
14
+ <title>Allow Everything</title>
15
+ </all>
16
+ <admin>
17
+ <children>
18
+ <system>
19
+ <children>
20
+ <config>
21
+ <children>
22
+ <demacall>
23
+ <title>Demac - All</title>
24
+ </demacall>
25
+ </children>
26
+ </config>
27
+ </children>
28
+ </system>
29
+ </children>
30
+ </admin>
31
+ </resources>
32
+ </acl>
33
+ <events>
34
+ <controller_action_predispatch>
35
+ <observers>
36
+ <demacall_exts>
37
+ <type>singleton</type>
38
+ <class>demacall/feed_extensions</class>
39
+ <method>check</method>
40
+ </demacall_exts>
41
+ <demacall_upds>
42
+ <type>singleton</type>
43
+ <class>demacall/feed_updates</class>
44
+ <method>check</method>
45
+ </demacall_upds>
46
+ </observers>
47
+ </controller_action_predispatch>
48
+ </events>
49
+ </config>
app/code/local/Demac/All/etc/config.xml ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+
4
+ <config>
5
+ <modules>
6
+ <Demac_All>
7
+ <version>1.0.0</version><platform>ce</platform>
8
+ </Demac_All>
9
+ </modules>
10
+
11
+ <global>
12
+ <blocks>
13
+ <demacall>
14
+ <class>Demac_All_Block</class>
15
+ </demacall>
16
+ <adminhtml>
17
+ <rewrite>
18
+ <notification_window>Demac_All_Block_Notification_Window</notification_window>
19
+ </rewrite>
20
+ </adminhtml>
21
+ </blocks>
22
+ <resources>
23
+ <demacall_setup>
24
+ <setup>
25
+ <module>Demac_All</module>
26
+ </setup>
27
+ <connection>
28
+ <use>core_setup</use>
29
+ </connection>
30
+ </demacall_setup>
31
+ <demacall_write>
32
+ <connection>
33
+ <use>core_write</use>
34
+ </connection>
35
+ </demacall_write>
36
+ <demacall_read>
37
+ <connection>
38
+ <use>core_read</use>
39
+ </connection>
40
+ </demacall_read>
41
+ </resources>
42
+ <models>
43
+ <demacall>
44
+ <class>Demac_All_Model</class>
45
+ </demacall>
46
+ </models>
47
+
48
+ <helpers>
49
+ <demacall>
50
+ <class>Demac_All_Helper</class>
51
+ </demacall>
52
+ </helpers>
53
+ </global>
54
+
55
+ <adminhtml>
56
+ <layout>
57
+ <updates>
58
+ <demacall module="Demac_All">
59
+ <file>Demac_All.xml</file>
60
+ </demacall>
61
+ </updates>
62
+ </layout>
63
+
64
+ <acl>
65
+ <resources>
66
+ <all>
67
+ <title>Allow Everything</title>
68
+ </all>
69
+ <admin>
70
+ <children>
71
+ <system>
72
+ <children>
73
+ <config>
74
+ <children>
75
+ <demacall>
76
+ <title>Demac - All</title>
77
+ </demacall>
78
+ </children>
79
+ </config>
80
+ </children>
81
+ </system>
82
+ </children>
83
+ </admin>
84
+ </resources>
85
+ </acl>
86
+ <events>
87
+ <controller_action_predispatch>
88
+ <observers>
89
+ <demacall_exts>
90
+ <type>singleton</type>
91
+ <class>demacall/feed_extensions</class>
92
+ <method>check</method>
93
+ </demacall_exts>
94
+ <demacall_check>
95
+ <type>singleton</type>
96
+ <class>demacall/feed_extensions</class>
97
+ <method>checkExtensions</method>
98
+ </demacall_check>
99
+ <demacall_upds>
100
+ <type>singleton</type>
101
+ <class>demacall/feed_updates</class>
102
+ <method>check</method>
103
+ </demacall_upds>
104
+ </observers>
105
+ </controller_action_predispatch>
106
+ </events>
107
+ </adminhtml>
108
+ <default>
109
+ <demacall>
110
+ <feed>
111
+ <url>ecommerce.aheadworks.com/blog/feed/?tag=feed&amp;community=1</url>
112
+ <use_https>0</use_https>
113
+ <check_frequency>86400</check_frequency>
114
+ <enabled>1</enabled>
115
+ <interests>INFO,PROMO,UPDATE_RELEASE,NEW_RELEASE,INSTALLED_UPDATE</interests>
116
+ </feed>
117
+ </demacall>
118
+ </default>
119
+ </config>
app/code/local/Demac/All/etc/system.xml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <demacall translate="label" module="demacall">
5
+ <label>Demac Media Extensions</label>
6
+ <sort_order>300</sort_order>
7
+ </demacall>
8
+ </tabs>
9
+ <sections>
10
+ <demacall translate="label" module="demacall">
11
+ <label>Info</label>
12
+ <tab>demacall</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>99999</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <extensions translate="label">
20
+ <label>Installed Demac Media Extensions</label>
21
+ <frontend_type>text</frontend_type>
22
+ <frontend_model>demacall/system_config_form_fieldset_demacall_extensions</frontend_model>
23
+ <sort_order>2</sort_order>
24
+ <show_in_default>1</show_in_default>
25
+ <show_in_website>1</show_in_website>
26
+ <show_in_store>1</show_in_store>
27
+ </extensions>
28
+ <feed>
29
+ <label>Notifications</label>
30
+ <frontend_type>text</frontend_type>
31
+ <sort_order>60</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
+ <fields>
36
+ <interests translate="label">
37
+ <label>I'd like to be informed by Demac Media about:</label>
38
+ <comment></comment>
39
+ <frontend_type>multiselect</frontend_type>
40
+ <sort_order>100</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
+ <can_be_empty>1</can_be_empty>
45
+ <source_model>demacall/source_updates_type</source_model>
46
+ </interests>
47
+
48
+ </fields>
49
+ </feed>
50
+ </groups>
51
+ </demacall>
52
+ </sections>
53
+ </config>
app/design/adminhtml/default/default/template/demac/catalog/product/edit.phtml ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php
28
+ /**
29
+ * Template for Mage_Adminhtml_Block_Catalog_Product_Edit
30
+ */
31
+ ?>
32
+
33
+
34
+
35
+ <div class="content-header">
36
+ <h3 class="icon-head head-products"><?php echo $this->getHeader() ?></h3>
37
+ <p class="content-buttons form-buttons"><?php echo $this->getBackButtonHtml() ?>
38
+ <?php echo $this->getCancelButtonHtml() ?>
39
+ <?php if($this->getProductId()): ?>
40
+ <?php echo $this->getPreviewButtonHtml() ?>
41
+ <?php echo $this->getDeleteButtonHtml() ?>
42
+ <?php if($this->getProductSetId() && $this->getIsConfigured()): ?>
43
+ <?php echo $this->getDuplicateButtonHtml() ?>
44
+ <?php endif; ?>
45
+ <?php endif; ?>
46
+ <?php if($this->getProductSetId() && $this->getIsConfigured()): ?>
47
+ <?php echo $this->getSaveButtonHtml() ?>
48
+ <?php echo $this->getSaveAndEditButtonHtml() ?>
49
+ <?php endif; ?>
50
+ </p>
51
+ </div>
52
+ <form action="<?php echo $this->getSaveUrl() ?>" method="post" id="product_edit_form" enctype="multipart/form-data">
53
+ <?php echo $this->getBlockHtml('formkey')?>
54
+ <div style="display:none"></div>
55
+ </form>
56
+ <script type="text/javascript">
57
+ //<![CDATA[
58
+ var productTemplateSyntax = /(^|.|\r|\n)({{(\w+)}})/;
59
+ var productForm = new varienForm('product_edit_form', '<?php echo $this->getValidationUrl() ?>');
60
+ productForm._processValidationResult = function(transport) {
61
+ var response = transport.responseText.evalJSON();
62
+ if (response.error){
63
+ if (response.attribute && $(response.attribute)) {
64
+ $(response.attribute).setHasError(true, productForm);
65
+ Validation.ajaxError($(response.attribute), response.message);
66
+ if (!Prototype.Browser.IE){
67
+ $(response.attribute).focus();
68
+ }
69
+ }
70
+ else if ($('messages')) {
71
+ $('messages').innerHTML = '<ul class="messages"><li class="error-msg"><ul><li>' + response.message + '</li></ul></li></ul>';
72
+ }
73
+ }
74
+ else{
75
+ productForm._submit();
76
+ }
77
+ };
78
+ function saveAndContinueEdit(urlTemplate) {
79
+ var template = new Template(urlTemplate, productTemplateSyntax);
80
+ var url = template.evaluate({tab_id:product_info_tabsJsTabs.activeTab.id});
81
+ productForm.submit(url);
82
+ }
83
+ function setSettings(urlTemplate, setElement, typeElement) {
84
+ var template = new Template(urlTemplate, productTemplateSyntax);
85
+ setLocation(template.evaluate({attribute_set:$F(setElement),type:$F(typeElement)}));
86
+ }
87
+
88
+ function setSuperSettings(urlTemplate, attributesClass, validateField) {
89
+ var attributesFields = $$('.' + attributesClass);
90
+ var attributes = Form.serializeElements(attributesFields, true).attribute;
91
+ if(typeof attributes == 'string') {
92
+ attributes = [attributes];
93
+ }
94
+
95
+ if(!attributes) {
96
+ $(validateField).value = 'no-attributes';
97
+ } else {
98
+ $(validateField).value = 'has-attributes';
99
+ }
100
+
101
+ if (productForm.validator.validate()) {
102
+ var template = new Template(urlTemplate, productTemplateSyntax);
103
+ var url = template.evaluate({
104
+ attributes: encode_base64(attributes.join(',')).replace(new RegExp('/','g'),'%2F').replace(new RegExp('=','g'),'%3D')
105
+ });
106
+ setLocation(url);
107
+ }
108
+ }
109
+
110
+ function checkMaxLength(Object, MaxLen)
111
+ {
112
+ if (Object.value.length > MaxLen-1) {
113
+ Object.value = Object.value.substr(0, MaxLen);
114
+ }
115
+ return 1;
116
+ }
117
+
118
+ Event.observe(window, 'load', function() {
119
+ var objName = '<?php echo $this->getSelectedTabId() ?>';
120
+ if (objName) {
121
+ obj = $(objName);
122
+ //IE fix (bubbling event model)
123
+ product_info_tabsJsTabs.setSkipDisplayFirstTab();
124
+ product_info_tabsJsTabs.showTabContent(obj);
125
+ }
126
+ Product.AttributesBridge.setTabsObject(product_info_tabsJsTabs);
127
+ });
128
+
129
+ Validation.addAllThese([
130
+ ['validate-super-product-attributes', '<?php echo Mage::helper('catalog')->__('Please select one or more attributes.') ?>', function(v) {
131
+ return (v != "no-attributes");
132
+ }]]);
133
+ //]]>
134
+ </script>
app/design/adminhtml/default/default/template/demac_all/notification/window.phtml ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+ ?>
19
+ <div id="message-popup-window-mask" style="display:none;"></div>
20
+
21
+ <div style="position:relative;margin-left:-390px;">
22
+ <div id="demac_notif" class="notification" style="display:none;">
23
+ <div class="head">
24
+ <h3><?php echo $this->getHeaderText();?></h3>
25
+ <button type="button" class="close" onclick="closeMessagePopupWindow()"><span ><?php echo $this->getCloseText(); ?></span></button>
26
+ </div>
27
+ <div class="content">
28
+ <?php echo $this->getNoticeMessageText(); ?>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ <script>
33
+ function showAwNotificator(){
34
+ openMessagePopupWindow();
35
+ Effect.Appear('demac_notif', { duration: 1.0 });
36
+ }
37
+ Event.observe(window, 'load', showAwNotificator);
38
+
39
+
40
+ function openMessagePopupWindow(){
41
+ var height = $('html-body').getHeight();
42
+ $('message-popup-window-mask').setStyle({'height':height+'px'});
43
+ toggleSelectsUnderBlock($('message-popup-window-mask'), false);
44
+ Element.show('message-popup-window-mask');
45
+ }
46
+
47
+ function closeMessagePopupWindow()
48
+ {
49
+ toggleSelectsUnderBlock($('message-popup-window-mask'), true);
50
+ Effect.Fade('demac_notif', { duration: 0.5 });
51
+ Element.hide('message-popup-window-mask');
52
+ }
53
+
54
+
55
+ function saveCloseMessagePopupWindow()
56
+ {
57
+ $('aw-save-button-content').innerHTML = '<?php echo $this->__("Saving, please wait...")?>';
58
+ $('aw-save-button').addClassName('disabled');
59
+ $('aw_firstrun').request({
60
+ onComplete: function(){
61
+ toggleSelectsUnderBlock($('message-popup-window-mask'), true);
62
+ Effect.Fade('demac_notif', { duration: 0.5 });
63
+ Element.hide('message-popup-window-mask');
64
+ }
65
+ })
66
+
67
+ }
68
+
69
+ </script>
70
+
71
+
72
+ <?php /*
73
+
74
+
75
+ */?>
app/design/adminhtml/default/default/template/demac_all/notification/window/first-run.phtml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Demac Media Inc.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the EULA
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://ecommerce.aheadworks.com/LICENSE-M1.txt
11
+ *
12
+ * @category Demac
13
+ * @package Demac_All
14
+ * @copyright Copyright (c) 20010-2011 aheadWorks Co. (http://www.demacmedia.com)
15
+ * @license http://www.demacmedia.com/LICENSE.txt
16
+ */
17
+
18
+ ?>
19
+ <form method="post" action="<?php echo $this->getUrl('adminhtml/system_config/save', array('section'=>'demacall'))?>" id="demac_firstrun">
20
+ <table class="form-list" cellspacing="0">
21
+ <colgroup class="label"/>
22
+ <colgroup class="value"/>
23
+ <tbody>
24
+
25
+ <tr>
26
+ <td class="label">
27
+ <label for="general_locale_timezone"><?php echo $this->__('I wish to be informed about')?>:</label>
28
+ </td>
29
+ <td class="value">
30
+
31
+
32
+ <select name="groups[feed][fields][interests][value][]" style="width:214px" size="6" multiple="multiple" id="interests">
33
+ <?php foreach(Mage::getModel('demacall/source_updates_type')->getGridOptions() as $k=>$v):?>
34
+ <option selected="selected" value="<?php echo $k?>"><?php echo $this->__($v)?></option>
35
+ <?php endforeach;?>
36
+ </select><br/>
37
+ <a href="#" onclick="$$($('interests').options).each(function(el){el.selected=1});return false;"><?php echo $this->__("Select all")?></a>
38
+ /
39
+ <a href="#" onclick="$('interests').selectedIndex = -1;return false;"><?php echo $this->__("Deselect all")?></a>
40
+ </td>
41
+ </tr>
42
+ <tr>
43
+ <td class="label"></td>
44
+ <td class="value">
45
+ <button id="demac-save-button" class="scalable save" style="" onclick="saveCloseMessagePopupWindow()" type="button">
46
+ <span id="demac-save-button-content"> <?php echo $this->__('Save &amp; Close')?></span>
47
+ </button>
48
+ </td>
49
+ </tr>
50
+ <tr>
51
+ <td colspan="2" align="right">
52
+ <div style="width:365px"><small><?php echo $this->__("This message appears only once. At any time you can change these preferences
53
+ from System > Configuration > Demac Media extensions > Info. <br/><a href=\"%s\">Visit it now</a>", $this->getUrl('adminhtml/system_config/edit', array('section'=>'demacall')))?></small>
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ </tbody>
58
+ </table>
59
+ </form>
app/etc/modules/Demac_Adminhtml.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Demac_Adminhtml>
5
+ <active>true</active>
6
+ <codePool>local</codePool>
7
+ </Demac_Adminhtml>
8
+ </modules>
9
+ </config>
app/etc/modules/Demac_all.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Demac_All>
5
+ <active>true</active>
6
+ <codePool>local</codePool>
7
+ </Demac_All>
8
+ </modules>
9
+ </config>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Demac_Preview</name>
4
+ <version>0.1.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/gpl-license.php">GPL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>If you like Wordpress' "Preview Post" button, then this extension is for you.</summary>
10
+ <description>This is an extension of convenience. It adds a button to the product edit interface in the backend of Magento so that you can quickly open a product on the front end of your store. Really nice if you are tired of searching for products on the front end while you are editing them.</description>
11
+ <notes>If you like Wordpress' "Preview Post" button, then this extension is for you.</notes>
12
+ <authors><author><name>Demac Media</name><user>demacmedia</user><email>support@demacmedia.com</email></author></authors>
13
+ <date>2011-04-26</date>
14
+ <time>18:35:28</time>
15
+ <contents><target name="mageetc"><dir name="modules"><file name="Demac_Adminhtml.xml" hash="b3eda708c1ba49ccc0550e8018463b32"/><file name="Demac_all.xml" hash="c2edd8bcc7339d392e443201d93924a2"/></dir></target><target name="magelocal"><dir name="Demac"><dir name="Adminhtml"><dir name="Block"><dir name="Catalog"><dir name="Product"><file name="Edit.php" hash="3a899410c7ae28887a4788d553be8a35"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="9fc93194d36959f2cf83ff0cab0555bc"/></dir></dir><dir name="All"><dir name="Block"><dir name="Notification"><file name="Window.php" hash="91cf969480289e345c097f2f2a6fbcaa"/></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Fieldset"><dir name="Demacall"><file name="Extensions.php" hash="2efe8c461785763c5b6122414e67bd31"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Config.php" hash="94d522c40d67a2929e790ded5673053e"/><file name="Data.php" hash="efd712db99f7f32e8604db84403ce6c9"/></dir><dir name="Model"><dir name="Feed"><file name="Abstract.php" hash="2dbd2497cb307e315146c83e872888ce"/><file name="Extensions.php" hash="a9354e637dec1a6242be13215953d7cc"/><file name="Updates.php" hash="65129954bd8573a135b9638f1f97c7af"/></dir><file name="Feed.php" hash="bdc8872860b91042fe749574f0808f31"/><dir name="Source"><dir name="Updates"><file name="Type.php" hash="8f205a098d78c3a31058f898b685c115"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="210d1c12d354e92141f90779202df5f8"/><file name="config.xml" hash="a75bfd89a84233358d7f969b05dd4a34"/><file name="system.xml" hash="acffd64488ba9e8e74c143a6d7e31767"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="demac_all"><dir name="notification"><dir name="window"><file name="first-run.phtml" hash="361711c60c4598df1057af9c6370d38f"/></dir><file name="window.phtml" hash="366c85ce977892fbeb0ef48174997dff"/></dir></dir><dir name="demac"><dir name="catalog"><dir name="product"><file name="edit.phtml" hash="ba5336b11c6367f5b7edf2cb0fb15526"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.2.0</min><max>5.3.0</max></php></required></dependencies>
18
+ </package>