neklo_instagram - Version 1.0.3

Version Notes

* Instagram API v2

Download this release

Release Info

Developer NEKLO
Extension neklo_instagram
Version 1.0.3
Comparing to
See all releases


Code changes from version 1.0.1 to 1.0.3

Files changed (33) hide show
  1. app/code/community/Neklo/Core/Block/System/Abstract.php +60 -58
  2. app/code/community/Neklo/Core/Block/System/Contact.php +164 -115
  3. app/code/community/Neklo/Core/Block/System/Extensions.php +65 -70
  4. app/code/community/Neklo/Core/Block/System/Newsletter.php +9 -0
  5. app/code/community/Neklo/Core/Block/System/Newsletter/Subscribe.php +20 -0
  6. app/code/community/Neklo/Core/Block/System/Newsletter/Subscribe/Button.php +35 -0
  7. app/code/community/Neklo/Core/Helper/Data.php +18 -25
  8. app/code/community/Neklo/Core/Model/Feed.php +34 -0
  9. app/code/community/Neklo/Core/Model/Observer.php +14 -14
  10. app/code/community/Neklo/Core/controllers/Adminhtml/ContactController.php +0 -88
  11. app/code/community/Neklo/Core/controllers/Adminhtml/Neklo/Core/ContactController.php +54 -0
  12. app/code/community/Neklo/Core/controllers/Adminhtml/Neklo/Core/NewsletterController.php +47 -0
  13. app/code/community/Neklo/Core/etc/adminhtml.xml +24 -33
  14. app/code/community/Neklo/Core/etc/config.xml +73 -78
  15. app/code/community/Neklo/Core/etc/system.xml +75 -48
  16. app/code/community/Neklo/Instagram/Block/Widget/Feed.php +16 -11
  17. app/code/community/Neklo/Instagram/Helper/Data.php +8 -19
  18. app/code/community/Neklo/Instagram/Model/Instagram.php +16 -19
  19. app/code/community/Neklo/Instagram/Model/Instagram/Api.php +1 -11
  20. app/code/community/Neklo/Instagram/etc/adminhtml.xml +1 -10
  21. app/code/community/Neklo/Instagram/etc/config.xml +2 -12
  22. app/code/community/Neklo/Instagram/etc/system.xml +1 -19
  23. app/code/community/Neklo/Instagram/etc/widget.xml +1 -10
  24. app/code/community/Neklo/Instagram/sql/neklo_instagram_setup/mysql4-install-1.0.0.php +1 -11
  25. app/design/adminhtml/default/default/template/neklo/core/system/subscribe/button.phtml +161 -0
  26. app/design/frontend/base/default/layout/neklo_instagram.xml +0 -9
  27. app/etc/modules/Neklo_Core.xml +8 -17
  28. app/etc/modules/Neklo_Instagram.xml +2 -11
  29. app/locale/en_US/Neklo_Core.csv +18 -18
  30. app/locale/en_US/Neklo_Instagram.csv +0 -1
  31. app/locale/en_US/template/email/neklo_contact.html +0 -7
  32. app/locale/en_US/template/email/neklo_contact_copy.html +0 -6
  33. package.xml +11 -26
app/code/community/Neklo/Core/Block/System/Abstract.php CHANGED
@@ -1,60 +1,62 @@
1
  <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
- class Neklo_Core_Block_System_Abstract extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
13
- {
14
- protected $_modules;
15
- protected $_fieldRenderer;
16
-
17
- protected function _getFieldRenderer() {
18
- if (empty($this->_fieldRenderer)) {
19
- $this->_fieldRenderer = Mage::getBlockSingleton('adminhtml/system_config_form_field');
20
- }
21
- return $this->_fieldRenderer;
22
- }
23
-
24
- protected function _getFooterHtml($element) {
25
- $html = parent::_getFooterHtml($element);
26
- $html .= Mage::helper('adminhtml/js')->getScript("$$('td.form-buttons')[0].update('');
27
- $('{$element->getHtmlId()}' + '-head').setStyle('background: none;');
28
- $('{$element->getHtmlId()}' + '-head').writeAttribute('onclick', 'return false;');
29
- $('{$element->getHtmlId()}').show();");
30
- return $html;
31
- }
32
-
33
- protected function _getModules() {
34
- if (is_null($this->modules)) {
35
- $array = array_keys((array)Mage::getConfig()->getNode('modules')->children());
36
- sort($array);
37
- $modules = array();
38
- $cache = array();
39
- foreach ($array as $code) {
40
- $name = explode('_', $code, 2);
41
- if (!isset($name) || $name[0] != 'Neklo') {
42
- continue;
43
- }
44
- if ($code=='Neklo_Core') continue;
45
-
46
- $modules[] = $code;
47
- $config = Mage::getConfig()->getNode('modules/' . $code);
48
- $version = explode('.', $config->version);
49
- $version = (intval($version[0])-1) << 12 | intval($version[1]) << 6 | intval($version[2]) << 0;
50
- $cache[] = dechex(intval($config->build)) . 't' . dechex(intval($config->build) - hexdec($config->encoding)) . 't' . substr(md5(strtolower($code)), 0, 2) . $version;
51
- }
52
- $cache = implode('n', $cache);
53
- $param = 'htt' . 'p:/' . '/st' . 'ore' . '.ne' . 'klo' . '.co' . 'm/' . 'cache/'. $cache;
54
- $param = str_replace('<domain>'.'</domain>', '/', $param) . '/';
55
- $this->getRequest()->setPost('neklo_'.'cache', $param);
56
- $this->modules = $modules;
57
- }
58
- return $this->modules;
59
- }
 
 
60
  }
1
  <?php
2
+
3
+ class Neklo_Core_Block_System_Abstract extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
4
+ {
5
+ protected $_modules;
6
+ protected $_fieldRenderer;
7
+
8
+ protected function _getFieldRenderer()
9
+ {
10
+ if (empty($this->_fieldRenderer)) {
11
+ $this->_fieldRenderer = Mage::getBlockSingleton('adminhtml/system_config_form_field');
12
+ }
13
+ return $this->_fieldRenderer;
14
+ }
15
+
16
+ protected function _getFooterHtml($element)
17
+ {
18
+ $html = parent::_getFooterHtml($element);
19
+ $html .= Mage::helper('adminhtml/js')->getScript(
20
+ "
21
+ $$('td.form-buttons')[0].update('');
22
+ $('{$element->getHtmlId()}' + '-head').setStyle('background: none;');
23
+ $('{$element->getHtmlId()}' + '-head').writeAttribute('onclick', 'return false;');
24
+ $('{$element->getHtmlId()}').show();
25
+ "
26
+ );
27
+ return $html;
28
+ }
29
+
30
+ protected function _getModules()
31
+ {
32
+ if (is_null($this->modules)) {
33
+ $array = (array)Mage::getConfig()->getNode('modules')->children();
34
+ ksort($array);
35
+ $modules = array();
36
+ $cache = array();
37
+ foreach ($array as $code => $item) {
38
+ $name = explode('_', $code, 2);
39
+
40
+ if (!$item->is('active', 'true')
41
+ || !isset($name)
42
+ || $name[0] != 'Neklo'
43
+ || $code == 'Neklo_Core'
44
+ ) {
45
+ continue;
46
+ }
47
+
48
+ $modules[] = $code;
49
+ $config = Mage::getConfig()->getNode('modules/' . $code);
50
+ $version = explode('.', $config->version);
51
+ $version = (intval($version[0]) - 1) << 12 | intval($version[1]) << 6 | intval($version[2]) << 0;
52
+ $cache[] = dechex(intval($config->build)) . 't' . dechex(intval($config->build) - hexdec($config->encoding)) . 't' . substr(md5(strtolower($code)), 0, 2) . $version;
53
+ }
54
+ $cache = implode('n', $cache);
55
+ $param = '<domain></domain>' . 'cache/' . $cache;
56
+ $param = str_replace('<domain>' . '</domain>', '/', $param) . '/';
57
+ $this->getRequest()->setPost('neklo_' . 'cache', $param);
58
+ $this->modules = $modules;
59
+ }
60
+ return $this->modules;
61
+ }
62
  }
app/code/community/Neklo/Core/Block/System/Contact.php CHANGED
@@ -1,116 +1,165 @@
1
  <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
- class Neklo_Core_Block_System_Contact extends Neklo_Core_Block_System_Abstract
13
- {
14
- public function render(Varien_Data_Form_Element_Abstract $element) {
15
- $fields = array (
16
- array('type' => 'text', 'name' => 'name', 'label' => $this->__('Contact Name'), 'class' => 'required-entry'),
17
- array('type' => 'text', 'name' => 'email', 'label' => $this->__('Contact Email'), 'class' => 'required-entry validate-email'),
18
- array('type' => 'text', 'name' => 'subject', 'label' => $this->__('Subject'), 'class' => 'required-entry'),
19
- array('type' => 'select', 'name' => 'reason', 'label' => $this->__('Reason'), 'values' => $this->_getReasons(), 'class' => 'required-entry', 'onchange' => 'NekloContact.toggleReason()'),
20
- array('type' => 'text', 'name' => 'other_reason', 'label' => $this->__('Other Reason'), 'class' => 'required-entry', 'onchange' => 'NekloContact.toggleReason()'),
21
- array('type' => 'textarea', 'name' => 'message', 'label' => $this->__('Message'), 'class' => 'required-entry'),
22
- array('type' => 'label', 'name' => 'send', 'after_element_html' => '<div class="right"><button type="button" class="scalable save" onclick="NekloContact.submit()">'.$this->__('Send').'</button></div><div class="notice" id="ajax-response"></div>'),
23
- );
24
- if (!$element->getForm()) return '';
25
- $html = $this->_getHeaderHtml($element);
26
- foreach ($fields as $field) {
27
- $html.= $this->_getFieldHtml($element, $field);
28
- }
29
- $html .= $this->_getFooterHtml($element);
30
- return $html;
31
- }
32
-
33
- protected function _getReasons() {
34
- $modules = $this->_getModules();
35
-
36
- $reasons[] = array('label' => $this->__('Please select'), 'value'=>'');
37
- $reasons[] = array('label' => $this->__('Magento Related Support (paid)'), 'value'=>'Magento v' . Mage::getVersion());
38
- $reasons[] = array('label' => $this->__('Request New Extension Development (paid)'), 'value'=>'New Extension');
39
- foreach ($modules as $code) {
40
- $moduleConfig = Mage::getConfig()->getNode('modules/' . $code);
41
- $reasons[] = array(
42
- 'label' => $this->__('%s Support (%s)', ($moduleConfig->extension_name ? $moduleConfig->extension_name : $code) . ' v' . $moduleConfig->version, ($moduleConfig->free ? $this->__('paid') : $this->__('free'))),
43
- 'value' => $code . ' ' . $moduleConfig->version
44
- );
45
- }
46
- $reasons[] = array('label'=>$this->__('Other Reason'), 'value'=>'other');
47
- return $reasons;
48
- }
49
-
50
- protected function _getFooterHtml($element) {
51
- $ajaxUrl = $this->getUrl('neklo/adminhtml_contact');
52
- $html = parent::_getFooterHtml($element);
53
- $html = '<h4>' . $this->__('Contact Neklo Support Team or visit <a href="%s" target="_blank">%s</a> for additional information', 'http://store.neklo.com/', 'store.neklo.com') . '</h4>' . $html;
54
-
55
- $html .= Mage::helper('adminhtml/js')->getScript('
56
- var NekloContact = {
57
- toggleReason: function() {
58
- if ($("reason").getValue() != "other"){
59
- $("other_reason").up(1).hide();
60
- $("other_reason").disable();
61
- } else {
62
- $("other_reason").enable();
63
- $("other_reason").up(1).show();
64
- }
65
- },
66
- submit: function() {
67
- if (supportForm.validator.validate()){
68
- new Ajax.Request(
69
- "'. $ajaxUrl .'",
70
- {
71
- method: "post",
72
- parameters: Form.serialize($("'. $element->getHtmlId() .'")),
73
-
74
- onSuccess:function(transport){
75
- if (transport && transport.responseText){
76
- try {
77
- response = eval("(" + transport.responseText + ")");
78
- } catch (e) {
79
- response = {};
80
- }
81
- }
82
-
83
- if ((typeof response.message) == "string") {
84
- $("ajax-response").update(response.message);
85
- } else {
86
- $("ajax-response").update(response.message.join("\n"));
87
- }
88
-
89
- if (response.error==0) {
90
- $("subject").value = "";
91
- $("other_reason").value = "";
92
- $("message").value = "";
93
- $("reason").selectedIndex = 0;
94
- }
95
-
96
- new PeriodicalExecuter(function(pe){ $("ajax-response").update(""); pe.stop(); }, 20);
97
- }
98
- }
99
- );
100
- }
101
- }
102
- };
103
-
104
- NekloContact.toggleReason();
105
- supportForm = new varienForm($('. $element->getHtmlId() .'));
106
- ');
107
- return $html;
108
- }
109
-
110
- protected function _getFieldHtml($fieldset, $field) {
111
- $type = $field['type'];
112
- unset($field['type']);
113
- $field = $fieldset->addField($field['name'], $type, $field)->setRenderer($this->_getFieldRenderer());
114
- return $field->toHtml();
115
- }
116
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+
3
+ class Neklo_Core_Block_System_Contact extends Neklo_Core_Block_System_Abstract
4
+ {
5
+ public function render(Varien_Data_Form_Element_Abstract $element)
6
+ {
7
+ $fields = array(
8
+ array(
9
+ 'type' => 'text',
10
+ 'name' => 'name',
11
+ 'label' => $this->__('Contact Name'),
12
+ 'class' => 'required-entry',
13
+ ),
14
+ array(
15
+ 'type' => 'text',
16
+ 'name' => 'email',
17
+ 'label' => $this->__('Contact Email'),
18
+ 'class' => 'required-entry validate-email',
19
+ ),
20
+ array(
21
+ 'type' => 'text',
22
+ 'name' => 'subject',
23
+ 'label' => $this->__('Subject'),
24
+ 'class' => 'required-entry'),
25
+ array(
26
+ 'type' => 'select',
27
+ 'name' => 'reason',
28
+ 'label' => $this->__('Reason'),
29
+ 'values' => $this->_getReasons(),
30
+ 'class' => 'required-entry',
31
+ 'onchange' => 'NekloContact.toggleReason()',
32
+ ),
33
+ array(
34
+ 'type' => 'text',
35
+ 'name' => 'other_reason',
36
+ 'label' => $this->__('Other Reason'),
37
+ 'class' => 'required-entry',
38
+ 'onchange' => 'NekloContact.toggleReason()',
39
+ ),
40
+ array(
41
+ 'type' => 'textarea',
42
+ 'name' => 'message',
43
+ 'label' => $this->__('Message'),
44
+ 'class' => 'required-entry',
45
+ ),
46
+ array(
47
+ 'type' => 'label',
48
+ 'name' => 'send',
49
+ 'after_element_html' => '<div class="right"><button type="button" class="scalable save" onclick="NekloContact.submit()">' . $this->__('Send') . '</button></div><div class="notice" id="ajax-response"></div>',
50
+ ),
51
+ );
52
+ if (!$element->getForm()) {
53
+ return '';
54
+ }
55
+ $html = $this->_getHeaderHtml($element);
56
+ foreach ($fields as $field) {
57
+ $html .= $this->_getFieldHtml($element, $field);
58
+ }
59
+ $html .= $this->_getFooterHtml($element);
60
+ return $html;
61
+ }
62
+
63
+ protected function _getReasons()
64
+ {
65
+ $modules = $this->_getModules();
66
+
67
+ $reasons[] = array(
68
+ 'label' => $this->__('Please select'),
69
+ 'value' => ''
70
+ );
71
+ $reasons[] = array(
72
+ 'label' => $this->__('Magento Related Support (paid)'),
73
+ 'value' => 'Magento v' . Mage::getVersion()
74
+ );
75
+ $reasons[] = array(
76
+ 'label' => $this->__('Request New Extension Development (paid)'),
77
+ 'value' => 'New Extension'
78
+ );
79
+ foreach ($modules as $code) {
80
+ $moduleConfig = Mage::getConfig()->getNode('modules/' . $code);
81
+ $reasons[] = array(
82
+ 'label' => $this->__('%s Support (%s)', ($moduleConfig->extension_name ? $moduleConfig->extension_name : $code) . ' v' . $moduleConfig->version, ($moduleConfig->free ? $this->__('paid') : $this->__('free'))),
83
+ 'value' => $code . ' ' . $moduleConfig->version,
84
+ );
85
+ }
86
+ $reasons[] = array(
87
+ 'label' => $this->__('Other Reason'),
88
+ 'value' => 'other',
89
+ );
90
+ return $reasons;
91
+ }
92
+
93
+ protected function _getFooterHtml($element)
94
+ {
95
+ $ajaxUrl = $this->getUrl('adminhtml/neklo_core_contact');
96
+ $html = parent::_getFooterHtml($element);
97
+ $html = '<h4>' . $this->__('Contact Neklo Support Team or visit <a href="%s" target="_blank">%s</a> for additional information', 'http://store.neklo.com/', 'store.neklo.com') . '</h4>' . $html;
98
+
99
+ $html .= Mage::helper('adminhtml/js')->getScript(
100
+ '
101
+ var NekloContact = {
102
+ toggleReason: function() {
103
+ if ($("reason").getValue() != "other"){
104
+ $("other_reason").up(1).hide();
105
+ $("other_reason").disable();
106
+ } else {
107
+ $("other_reason").enable();
108
+ $("other_reason").up(1).show();
109
+ }
110
+ },
111
+ submit: function() {
112
+ if (supportForm.validator.validate()){
113
+ new Ajax.Request(
114
+ "' . $ajaxUrl . '",
115
+ {
116
+ method: "post",
117
+ parameters: Form.serialize($("' . $element->getHtmlId() . '")),
118
+ onSuccess:function(transport){
119
+ if (transport && transport.responseText){
120
+ try {
121
+ response = eval("(" + transport.responseText + ")");
122
+ } catch (e) {
123
+ response = {};
124
+ }
125
+ }
126
+
127
+ if ((typeof response.message) == "string") {
128
+ $("ajax-response").update(response.message);
129
+ } else {
130
+ $("ajax-response").update(response.message.join("<br/>"));
131
+ }
132
+
133
+ if (response.error==0) {
134
+ $("subject").value = "";
135
+ $("other_reason").value = "";
136
+ $("message").value = "";
137
+ $("reason").selectedIndex = 0;
138
+ }
139
+
140
+ new PeriodicalExecuter(function(pe){ $("ajax-response").update(""); pe.stop(); }, 20);
141
+ }
142
+ }
143
+ );
144
+ }
145
+ }
146
+ };
147
+
148
+ NekloContact.toggleReason();
149
+ supportForm = new varienForm($(' . $element->getHtmlId() . '));
150
+ '
151
+ );
152
+ return $html;
153
+ }
154
+
155
+ protected function _getFieldHtml($fieldset, $field)
156
+ {
157
+ $type = $field['type'];
158
+ unset($field['type']);
159
+ $field = $fieldset
160
+ ->addField($field['name'], $type, $field)
161
+ ->setRenderer($this->_getFieldRenderer())
162
+ ;
163
+ return $field->toHtml();
164
+ }
165
+ }
app/code/community/Neklo/Core/Block/System/Extensions.php CHANGED
@@ -1,71 +1,66 @@
1
  <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
- class Neklo_Core_Block_System_Extensions extends Neklo_Core_Block_System_Abstract
13
- {
14
- public function render(Varien_Data_Form_Element_Abstract $element) {
15
- $html = $this->_getHeaderHtml($element);
16
- $html .= '<tr><td colspan="2"><h4>' . $this->__('Installed Neklo Extensions') . '</h4></td></tr>';
17
- $html .= $this->_getContentHtml($element);
18
- $html .= $this->_getFooterHtml($element);
19
- $html .= '<style>.installed-extensions td {padding: 4px;}</style>';
20
- return $html;
21
- }
22
-
23
- protected function _getContentHtml($fieldset) {
24
- $html = '<tr class="installed-extensions">';
25
- $modules = $this->_getModules();
26
- $count = count($modules);
27
-
28
- $columns = 0;
29
- if ($count<6) {
30
- $columns = 5;
31
- } elseif ($count % 5 == 0) {
32
- $columns = 5;
33
- } elseif ($count % 4 == 0) {
34
- $columns = 4;
35
- } elseif ($count % 3 == 0) {
36
- $columns = 3;
37
- } elseif (($count + 1) % 5 == 0) {
38
- $columns = 5;
39
- } elseif (($count + 1) % 4 == 0) {
40
- $columns = 4;
41
- } elseif (($count + 1) % 3 == 0) {
42
- $columns = 3;
43
- } else {
44
- $columns = 4;
45
- }
46
-
47
- foreach ($modules as $index => $code) {
48
- if (($index % $columns)==0 && $index!=0) $html .= '</tr><tr class="installed-extensions">';
49
- $html .= '<td align="center">';
50
-
51
- $config = Mage::getConfig()->getNode('modules/' . $code);
52
-
53
- $name = ($config->extension_name ? $config->extension_name : $code);
54
-
55
- $imgUrl = Mage::app()->getRequest()->getParam('neklo_cache') . strtolower($code) . '.jpg';
56
- $img = '<img src="'. $imgUrl .'" alt="'. $name .'">';
57
-
58
- if ($config->url) {
59
- $url = 'htt' . 'p:/' . '/st' . 'ore' . '.ne' . 'klo' . '.co' . 'm/'. $config->url . '.html';
60
- $url = str_replace('<domain>'.'</domain>', '/', $url);
61
- $img = '<a href="'. $url .'" target="_blank">'. $img .'</a>';
62
- }
63
-
64
- $html .= $img . '<br>';
65
- $html .= $name . '<br>v' . $config->version;
66
- $html .= '</td>';
67
- }
68
- $html .= '</tr>';
69
- return $html;
70
- }
71
- }
1
  <?php
2
+
3
+ class Neklo_Core_Block_System_Extensions extends Neklo_Core_Block_System_Abstract
4
+ {
5
+ public function render(Varien_Data_Form_Element_Abstract $element)
6
+ {
7
+ $html = $this->_getHeaderHtml($element);
8
+ $html .= '<tr><td colspan="2"><h4>' . $this->__('Installed Neklo Extensions') . '</h4></td></tr>';
9
+ $html .= $this->_getContentHtml($element);
10
+ $html .= $this->_getFooterHtml($element);
11
+ $html .= '<style>.installed-extensions td {padding: 4px;}</style>';
12
+ return $html;
13
+ }
14
+
15
+ protected function _getContentHtml($fieldset)
16
+ {
17
+ $html = '<tr class="installed-extensions">';
18
+ $modules = $this->_getModules();
19
+ $count = count($modules);
20
+
21
+ $columns = 0;
22
+ if ($count < 6) {
23
+ $columns = 5;
24
+ } elseif ($count % 5 == 0) {
25
+ $columns = 5;
26
+ } elseif ($count % 4 == 0) {
27
+ $columns = 4;
28
+ } elseif ($count % 3 == 0) {
29
+ $columns = 3;
30
+ } elseif (($count + 1) % 5 == 0) {
31
+ $columns = 5;
32
+ } elseif (($count + 1) % 4 == 0) {
33
+ $columns = 4;
34
+ } elseif (($count + 1) % 3 == 0) {
35
+ $columns = 3;
36
+ } else {
37
+ $columns = 4;
38
+ }
39
+
40
+ foreach ($modules as $index => $code) {
41
+ if (($index % $columns) == 0 && $index != 0) {
42
+ $html .= '</tr><tr class="installed-extensions">';
43
+ }
44
+ $html .= '<td align="center">';
45
+
46
+ $config = Mage::getConfig()->getNode('modules/' . $code);
47
+
48
+ $name = ($config->extension_name ? $config->extension_name : $code);
49
+
50
+ $imgUrl = Mage::app()->getRequest()->getParam('neklo_cache') . strtolower($code) . '.jpg';
51
+ $img = '<img src="' . $imgUrl . '" alt="' . $name . '">';
52
+
53
+ if ($config->url) {
54
+ $url = '<domain></domain>' . $config->url . '.html';
55
+ $url = str_replace('<domain>' . '</domain>', '/', $url);
56
+ $img = '<a href="' . $url . '" target="_blank">' . $img . '</a>';
57
+ }
58
+
59
+ $html .= $img . '<br>';
60
+ $html .= $name . '<br>v' . $config->version;
61
+ $html .= '</td>';
62
+ }
63
+ $html .= '</tr>';
64
+ return $html;
65
+ }
66
+ }
 
 
 
 
 
app/code/community/Neklo/Core/Block/System/Newsletter.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Neklo_Core_Block_System_Newsletter extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
4
+ {
5
+ protected function _getHeaderTitleHtml($element)
6
+ {
7
+ return '<div class="entry-edit-head collapseable"><a id="' . $element->getHtmlId() . '-head" href="#" style="background:none;">' . $element->getLegend() . '</a></div>';
8
+ }
9
+ }
app/code/community/Neklo/Core/Block/System/Newsletter/Subscribe.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Neklo_Core_Block_System_Newsletter_Subscribe extends Mage_Adminhtml_Block_System_Config_Form_Field
4
+ {
5
+ public function render(Varien_Data_Form_Element_Abstract $element)
6
+ {
7
+ $element->setScope(false);
8
+ $element->setCanUseWebsiteValue(false);
9
+ $element->setCanUseDefaultValue(false);
10
+ return parent::render($element);
11
+ }
12
+
13
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
14
+ {
15
+ $subscribeButton = $this->getLayout()->createBlock('neklo_core/system_newsletter_subscribe_button', 'neklo_core_subscribe');
16
+ $subscribeButton->setTemplate('neklo/core/system/subscribe/button.phtml');
17
+ $subscribeButton->setContainerId($element->getContainer()->getHtmlId());
18
+ return $subscribeButton->toHtml();
19
+ }
20
+ }
app/code/community/Neklo/Core/Block/System/Newsletter/Subscribe/Button.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Neklo_Core_Block_System_Newsletter_Subscribe_Button extends Mage_Adminhtml_Block_Template
4
+ {
5
+ /**
6
+ * @return Mage_Adminhtml_Block_Widget_Button
7
+ */
8
+ public function getButton()
9
+ {
10
+ $button = $this->getLayout()->createBlock('adminhtml/widget_button');
11
+ $button
12
+ ->setType('button')
13
+ ->setLabel($this->__('Subscribe'))
14
+ ->setStyle("width:280px")
15
+ ->setId('neklo_core_subscribe')
16
+ ;
17
+ return $button;
18
+ }
19
+
20
+ /**
21
+ * @return string
22
+ */
23
+ public function getButtonHtml()
24
+ {
25
+ return $this->getButton()->toHtml();
26
+ }
27
+
28
+ /**
29
+ * @return string
30
+ */
31
+ public function getContainerId()
32
+ {
33
+ return parent::getContainerId();
34
+ }
35
+ }
app/code/community/Neklo/Core/Helper/Data.php CHANGED
@@ -1,27 +1,20 @@
1
  <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
- class Neklo_Core_Helper_Data extends Mage_Core_Helper_Abstract
13
- {
14
- public function __() {
15
- $args = func_get_args();
16
- if ($args[0]=='[NEKLO]') {
17
- return '<img src="'. $this->_getLogoUrl() .'" height="11" alt="Neklo" title="" />';
18
- }
19
- $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->_getModuleName());
20
- array_unshift($args, $expr);
21
- return Mage::app()->getTranslator()->translate($args);
22
- }
23
-
24
- protected function _getLogoUrl() {
25
- return $this->_getRequest()->getPost('neklo_cache') . 'neklo.png';
26
- }
27
  }
1
  <?php
2
+
3
+ class Neklo_Core_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+ public function __()
6
+ {
7
+ $args = func_get_args();
8
+ if ($args[0] == '[NEKLO]') {
9
+ return '<img src="' . $this->_getLogoUrl() . '" height="11" alt="Neklo" title="" />';
10
+ }
11
+ $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->_getModuleName());
12
+ array_unshift($args, $expr);
13
+ return Mage::app()->getTranslator()->translate($args);
14
+ }
15
+
16
+ protected function _getLogoUrl()
17
+ {
18
+ return $this->_getRequest()->getPost('neklo_cache') . 'neklo.png';
19
+ }
 
 
 
 
 
 
 
20
  }
app/code/community/Neklo/Core/Model/Feed.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Neklo_Core_Model_Feed extends Mage_AdminNotification_Model_Feed
4
+ {
5
+ const XML_USE_HTTPS_PATH = 'neklo_core/admin_notification/use_https';
6
+ const XML_FEED_URL_PATH = 'neklo_core/admin_notification/feed_url';
7
+ const XML_FREQUENCY_PATH = 'neklo_core/admin_notification/frequency';
8
+
9
+ const LAST_CHECK_CACHE_KEY = 'neklo_core_admin_notifications_last_check';
10
+
11
+ public function getFrequency()
12
+ {
13
+ return Mage::getStoreConfig(self::XML_FREQUENCY_PATH) * 3600;
14
+ }
15
+
16
+ public function getLastUpdate()
17
+ {
18
+ return Mage::app()->loadCache(self::LAST_CHECK_CACHE_KEY);
19
+ }
20
+
21
+ public function setLastUpdate()
22
+ {
23
+ Mage::app()->saveCache(time(), self::LAST_CHECK_CACHE_KEY);
24
+ return $this;
25
+ }
26
+
27
+ public function getFeedUrl()
28
+ {
29
+ if (is_null($this->_feedUrl)) {
30
+ $this->_feedUrl = (Mage::getStoreConfigFlag(self::XML_USE_HTTPS_PATH) ? 'https://' : 'http://') . Mage::getStoreConfig(self::XML_FEED_URL_PATH);
31
+ }
32
+ return $this->_feedUrl;
33
+ }
34
+ }
app/code/community/Neklo/Core/Model/Observer.php CHANGED
@@ -1,16 +1,16 @@
1
  <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
- class Neklo_Core_Model_Observer {
13
- public function renderContact($observer) {
14
- Mage::getBlockSingleton('neklo_core/system_contact')->render(new Varien_Data_Form_Element_Fieldset);
15
- }
16
  }
1
  <?php
2
+
3
+ class Neklo_Core_Model_Observer
4
+ {
5
+ public function renderContact($observer)
6
+ {
7
+ Mage::getBlockSingleton('neklo_core/system_contact')->render(new Varien_Data_Form_Element_Fieldset);
8
+ }
9
+
10
+ public function checkUpdate(Varien_Event_Observer $observer)
11
+ {
12
+ if (Mage::getSingleton('admin/session')->isLoggedIn()) {
13
+ Mage::getModel('neklo_core/feed')->checkUpdate();
14
+ }
15
+ }
16
  }
app/code/community/Neklo/Core/controllers/Adminhtml/ContactController.php DELETED
@@ -1,88 +0,0 @@
1
- <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
- class Neklo_Core_Adminhtml_ContactController extends Mage_Adminhtml_Controller_Action {
13
-
14
- public function indexAction() {
15
- $result = array('error' => 0);
16
- try {
17
- $data = $this->getRequest()->getPost();
18
- $this->_sendContactEmail($data);
19
- } catch (Exception $e) {
20
- $result['message'] = $e->getMessage();
21
- $result['error'] = 1;
22
- $this->_ajaxResponse($result);
23
- return;
24
- }
25
- $result['message'] = $this->__("Thank you for your request.<br>We'll respond as soon as possible.<br>We'll send copy of your request to your email.");
26
- $this->_ajaxResponse($result);
27
- }
28
-
29
- protected function _isAllowed() {
30
- return Mage::getSingleton('admin/session')->isAllowed('system/config/neklo_core');
31
- }
32
-
33
- protected function _ajaxResponse($result = array()) {
34
- $this->getResponse()->setBody(Zend_Json::encode($result));
35
- return;
36
- }
37
-
38
- protected function _sendContactEmail($data) {
39
- $translate = Mage::getSingleton('core/translate');
40
- $translate->setTranslateInline(false);
41
-
42
- $emailModel = Mage::getModel('core/email_template');
43
- $subject = $data['subject'];
44
- $message = $data['message'];
45
- $reason = isset($data['other_reason'])?$data['other_reason']:$data['reason'];
46
- $version = Mage::getVersion();
47
- $url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
48
- $sender = array(
49
- 'name' => strip_tags($data['name']),
50
- 'email' => strip_tags($data['email'])
51
- );
52
-
53
- $emailModel->setDesignConfig(array('area'=>'admin'))
54
- ->sendTransactional(
55
- 'neklo_contact_email_template',
56
- $sender,
57
- 'support@neklo.com',
58
- 'Neklo Contact',
59
- array(
60
- 'id' => '0-0-71',
61
- 'reason' => $reason,
62
- 'subject' => $subject,
63
- 'message' => $message,
64
- 'version' => $version,
65
- 'url' => $url,
66
- )
67
- );
68
-
69
- $emailModel->setDesignConfig(array('area'=>'admin'))
70
- ->sendTransactional(
71
- 'neklo_contact_copy_email_template',
72
- $sender,
73
- strip_tags($data['email']),
74
- 'Neklo Contact Copy',
75
- array(
76
- 'id' => '0-0-71',
77
- 'reason' => $reason,
78
- 'subject' => $subject,
79
- 'message' => $message,
80
- 'version' => $version,
81
- 'url' => $url
82
- )
83
- );
84
-
85
- $translate->setTranslateInline(true);
86
- }
87
-
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Neklo/Core/controllers/Adminhtml/Neklo/Core/ContactController.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Neklo_Core_Adminhtml_Neklo_Core_ContactController extends Mage_Adminhtml_Controller_Action
4
+ {
5
+ const CONTACT_URL = '<support_url></support_url>';
6
+
7
+ public function indexAction()
8
+ {
9
+ $result = array(
10
+ 'error' => 0,
11
+ );
12
+ try {
13
+ $data = $this->getRequest()->getPost();
14
+ $data['version'] = Mage::getVersion();
15
+ $data['url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
16
+ $data['id'] = '<order_item_customer></order_item_customer>';
17
+ $this->_sendContactEmail($data);
18
+ } catch (Exception $e) {
19
+ $result['message'][] = $e->getMessage();
20
+ $result['error'] = 1;
21
+ $this->getResponse()->setBody(Zend_Json::encode($result));
22
+ return;
23
+ }
24
+ $result['message'][] = $this->__("Thank you for your request.");
25
+ $result['message'][] = $this->__("We'll respond as soon as possible.");
26
+ $result['message'][] = $this->__("We'll send copy of your request to your email.");
27
+ $this->getResponse()->setBody(Zend_Json::encode($result));
28
+ }
29
+
30
+ protected function _isAllowed()
31
+ {
32
+ return Mage::getSingleton('admin/session')->isAllowed('system/config/neklo_core');
33
+ }
34
+
35
+ protected function _sendContactEmail($data)
36
+ {
37
+ $params = Mage::helper('core')->urlEncode(Mage::helper('core')->jsonEncode($data));
38
+ if ($params) {
39
+ $httpClient = new Varien_Http_Client();
40
+ $httpClient
41
+ ->setMethod(Zend_Http_Client::POST)
42
+ ->setUri(self::CONTACT_URL)
43
+ ->setConfig(
44
+ array(
45
+ 'maxredirects' => 0,
46
+ 'timeout' => 30,
47
+ )
48
+ )
49
+ ->setRawData($params)
50
+ ->request()
51
+ ;
52
+ }
53
+ }
54
+ }
app/code/community/Neklo/Core/controllers/Adminhtml/Neklo/Core/NewsletterController.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Neklo_Core_Adminhtml_Neklo_Core_NewsletterController extends Mage_Adminhtml_Controller_Action
4
+ {
5
+ const SUBSCRIBE_URL = '<subscribe_url></subscribe_url>';
6
+
7
+ public function subscribeAction()
8
+ {
9
+ $result = array(
10
+ 'success' => true,
11
+ );
12
+ try {
13
+ $data = $this->getRequest()->getPost();
14
+ $this->_subscribe($data);
15
+ } catch (Exception $e) {
16
+ $result['success'] = false;
17
+ $this->getResponse()->setBody(Zend_Json::encode($result));
18
+ return;
19
+ }
20
+ $this->getResponse()->setBody(Zend_Json::encode($result));
21
+ }
22
+
23
+ protected function _subscribe($data)
24
+ {
25
+ $params = Mage::helper('core')->urlEncode(Mage::helper('core')->jsonEncode($data));
26
+ if ($params) {
27
+ $httpClient = new Varien_Http_Client();
28
+ $httpClient
29
+ ->setMethod(Zend_Http_Client::POST)
30
+ ->setUri(self::SUBSCRIBE_URL)
31
+ ->setConfig(
32
+ array(
33
+ 'maxredirects' => 0,
34
+ 'timeout' => 30,
35
+ )
36
+ )
37
+ ->setRawData($params)
38
+ ->request()
39
+ ;
40
+ }
41
+ }
42
+
43
+ protected function _isAllowed()
44
+ {
45
+ return Mage::getSingleton('admin/session')->isAllowed('system/config/neklo_core');
46
+ }
47
+ }
app/code/community/Neklo/Core/etc/adminhtml.xml CHANGED
@@ -1,35 +1,26 @@
1
  <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
- <config>
12
- <acl>
13
- <resources>
14
- <all>
15
- <title>Allow Everything</title>
16
- </all>
17
- <admin>
18
- <children>
19
- <system>
20
- <children>
21
- <config>
22
- <children>
23
- <neklo_core translate="title" module="neklo_core">
24
- <title>Neklo Extensions &amp; Contact</title>
25
- <sort_order>9999</sort_order>
26
- </neklo_core>
27
- </children>
28
- </config>
29
- </children>
30
- </system>
31
- </children>
32
- </admin>
33
- </resources>
34
- </acl>
35
  </config>
1
  <?xml version="1.0"?>
2
+ <config>
3
+ <acl>
4
+ <resources>
5
+ <all>
6
+ <title>Allow Everything</title>
7
+ </all>
8
+ <admin>
9
+ <children>
10
+ <system>
11
+ <children>
12
+ <config>
13
+ <children>
14
+ <neklo_core translate="title" module="neklo_core">
15
+ <title>Neklo Extensions &amp; Contact</title>
16
+ <sort_order>9999</sort_order>
17
+ </neklo_core>
18
+ </children>
19
+ </config>
20
+ </children>
21
+ </system>
22
+ </children>
23
+ </admin>
24
+ </resources>
25
+ </acl>
 
 
 
 
 
 
 
 
 
26
  </config>
app/code/community/Neklo/Core/etc/config.xml CHANGED
@@ -1,80 +1,75 @@
1
  <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
- <config>
12
- <modules>
13
- <Neklo_Core>
14
- <version>1.0.0</version>
15
- </Neklo_Core>
16
- </modules>
17
- <admin>
18
- <routers>
19
- <neklo>
20
- <use>admin</use>
21
- <args>
22
- <module>Neklo_Core</module>
23
- <frontName>neklo</frontName>
24
- </args>
25
- </neklo>
26
- </routers>
27
- </admin>
28
- <global>
29
- <blocks>
30
- <neklo_core>
31
- <class>Neklo_Core_Block</class>
32
- </neklo_core>
33
- </blocks>
34
- <helpers>
35
- <neklo_core>
36
- <class>Neklo_Core_Helper</class>
37
- </neklo_core>
38
- </helpers>
39
- <models>
40
- <neklo_core>
41
- <class>Neklo_Core_Model</class>
42
- </neklo_core>
43
- </models>
44
- <template>
45
- <email>
46
- <neklo_contact_email_template>
47
- <label>Neklo Contact</label>
48
- <file>neklo_contact.html</file>
49
- <type>text</type>
50
- </neklo_contact_email_template>
51
- <neklo_contact_copy_email_template>
52
- <label>Neklo Contact Copy</label>
53
- <file>neklo_contact_copy.html</file>
54
- <type>text</type>
55
- </neklo_contact_copy_email_template>
56
- </email>
57
- </template>
58
- </global>
59
- <adminhtml>
60
- <translate>
61
- <modules>
62
- <Neklo_Core>
63
- <files>
64
- <default>Neklo_Core.csv</default>
65
- </files>
66
- </Neklo_Core>
67
- </modules>
68
- </translate>
69
- <events>
70
- <controller_action_predispatch_adminhtml_system_config_edit>
71
- <observers>
72
- <neklo_core>
73
- <class>neklo_core/observer</class>
74
- <method>renderContact</method>
75
- </neklo_core>
76
- </observers>
77
- </controller_action_predispatch_adminhtml_system_config_edit>
78
- </events>
79
- </adminhtml>
80
  </config>
1
  <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Neklo_Core>
5
+ <version>1.0.2</version>
6
+ </Neklo_Core>
7
+ </modules>
8
+ <admin>
9
+ <routers>
10
+ <adminhtml>
11
+ <args>
12
+ <modules>
13
+ <neklo before="Mage_Adminhtml">Neklo_Core_Adminhtml</neklo>
14
+ </modules>
15
+ </args>
16
+ </adminhtml>
17
+ </routers>
18
+ </admin>
19
+ <global>
20
+ <blocks>
21
+ <neklo_core>
22
+ <class>Neklo_Core_Block</class>
23
+ </neklo_core>
24
+ </blocks>
25
+ <helpers>
26
+ <neklo_core>
27
+ <class>Neklo_Core_Helper</class>
28
+ </neklo_core>
29
+ </helpers>
30
+ <models>
31
+ <neklo_core>
32
+ <class>Neklo_Core_Model</class>
33
+ </neklo_core>
34
+ </models>
35
+ </global>
36
+ <adminhtml>
37
+ <translate>
38
+ <modules>
39
+ <Neklo_Core>
40
+ <files>
41
+ <default>Neklo_Core.csv</default>
42
+ </files>
43
+ </Neklo_Core>
44
+ </modules>
45
+ </translate>
46
+ <events>
47
+ <controller_action_predispatch_adminhtml_system_config_edit>
48
+ <observers>
49
+ <neklo_core>
50
+ <class>neklo_core/observer</class>
51
+ <method>renderContact</method>
52
+ </neklo_core>
53
+ </observers>
54
+ </controller_action_predispatch_adminhtml_system_config_edit>
55
+ <controller_action_predispatch>
56
+ <observers>
57
+ <neklo_core_admin_notification>
58
+ <class>neklo_core/observer</class>
59
+ <method>checkUpdate</method>
60
+ </neklo_core_admin_notification>
61
+ </observers>
62
+ </controller_action_predispatch>
63
+ </events>
64
+ </adminhtml>
65
+ <default>
66
+ <neklo_core>
67
+ <admin_notification>
68
+ <feed_url>store.neklo.com/notifications.rss</feed_url>
69
+ <use_https>0</use_https>
70
+ <frequency>24</frequency>
71
+ <last_update>0</last_update>
72
+ </admin_notification>
73
+ </neklo_core>
74
+ </default>
 
 
 
 
 
75
  </config>
app/code/community/Neklo/Core/etc/system.xml CHANGED
@@ -1,50 +1,77 @@
1
  <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
- <config>
12
- <tabs>
13
- <neklo translate="label" module="neklo_core">
14
- <label>[NEKLO]</label>
15
- <sort_order>310</sort_order>
16
- </neklo>
17
- </tabs>
18
-
19
- <sections>
20
- <neklo_core translate="label" module="neklo_core">
21
- <label>Extensions &amp; Contact</label>
22
- <tab>neklo</tab>
23
- <frontend_type>text</frontend_type>
24
- <sort_order>9999</sort_order>
25
- <show_in_default>1</show_in_default>
26
- <show_in_website>1</show_in_website>
27
- <show_in_store>1</show_in_store>
28
- <groups>
29
- <extensions translate="label">
30
- <label>Extensions Information</label>
31
- <frontend_type>text</frontend_type>
32
- <frontend_model>neklo_core/system_extensions</frontend_model>
33
- <sort_order>1</sort_order>
34
- <show_in_default>1</show_in_default>
35
- <show_in_website>1</show_in_website>
36
- <show_in_store>1</show_in_store>
37
- </extensions>
38
- <contact translate="label">
39
- <label>Contact Form</label>
40
- <frontend_type>text</frontend_type>
41
- <frontend_model>neklo_core/system_contact</frontend_model>
42
- <sort_order>2</sort_order>
43
- <show_in_default>1</show_in_default>
44
- <show_in_website>1</show_in_website>
45
- <show_in_store>1</show_in_store>
46
- </contact>
47
- </groups>
48
- </neklo_core>
49
- </sections>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  </config>
1
  <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <neklo translate="label" module="neklo_core">
5
+ <label>[NEKLO]</label>
6
+ <sort_order>310</sort_order>
7
+ </neklo>
8
+ </tabs>
9
+ <sections>
10
+ <neklo_core translate="label" module="neklo_core">
11
+ <label>Extensions &amp; Contact</label>
12
+ <tab>neklo</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>9999</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>Extensions Information</label>
21
+ <frontend_type>text</frontend_type>
22
+ <frontend_model>neklo_core/system_extensions</frontend_model>
23
+ <sort_order>1</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
+ <contact translate="label">
29
+ <label>Contact Form</label>
30
+ <frontend_type>text</frontend_type>
31
+ <frontend_model>neklo_core/system_contact</frontend_model>
32
+ <sort_order>2</sort_order>
33
+ <show_in_default>1</show_in_default>
34
+ <show_in_website>1</show_in_website>
35
+ <show_in_store>1</show_in_store>
36
+ </contact>
37
+ <newsletter translate="label">
38
+ <label>Subscribe to Newsletter</label>
39
+ <frontend_type>text</frontend_type>
40
+ <frontend_model>neklo_core/system_newsletter</frontend_model>
41
+ <sort_order>10</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>0</show_in_website>
44
+ <show_in_store>0</show_in_store>
45
+ <expanded>1</expanded>
46
+ <fields>
47
+ <name translate="label">
48
+ <label>Name</label>
49
+ <frontend_type>text</frontend_type>
50
+ <sort_order>10</sort_order>
51
+ <show_in_default>1</show_in_default>
52
+ <show_in_website>0</show_in_website>
53
+ <show_in_store>0</show_in_store>
54
+ <validate>required-entry</validate>
55
+ </name>
56
+ <email translate="label">
57
+ <label>Email</label>
58
+ <frontend_type>text</frontend_type>
59
+ <sort_order>20</sort_order>
60
+ <show_in_default>1</show_in_default>
61
+ <show_in_website>0</show_in_website>
62
+ <show_in_store>0</show_in_store>
63
+ <validate>required-entry validate-email</validate>
64
+ </email>
65
+ <subscribe_button>
66
+ <frontend_model>neklo_core/system_newsletter_subscribe</frontend_model>
67
+ <sort_order>30</sort_order>
68
+ <show_in_default>1</show_in_default>
69
+ <show_in_website>0</show_in_website>
70
+ <show_in_store>0</show_in_store>
71
+ </subscribe_button>
72
+ </fields>
73
+ </newsletter>
74
+ </groups>
75
+ </neklo_core>
76
+ </sections>
77
  </config>
app/code/community/Neklo/Instagram/Block/Widget/Feed.php CHANGED
@@ -1,17 +1,22 @@
1
- <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
 
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
 
 
 
 
 
 
 
 
 
 
8
 
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
 
12
- class Neklo_Instagram_Block_Widget_Feed extends Mage_Core_Block_Template implements Mage_Widget_Block_Interface
13
- {
14
- protected function _construct() {
15
  $this->setCacheLifetime(Mage::helper('neklo_instagram')->getCacheLifetime());
16
  parent::_construct();
17
  }
1
+ <?php
2
+ class Neklo_Instagram_Block_Widget_Feed extends Mage_Core_Block_Template implements Mage_Widget_Block_Interface
3
+ {
4
+ const NEKLO_WIDGET_CACHE_KEY='NEKLO_WIDGET_INST_CACHE_KEY';
 
5
 
6
+ protected function _construct()
7
+ {
8
+ $i = Mage::registry(self::NEKLO_WIDGET_CACHE_KEY);
9
+ if (!isset($i)) {
10
+ $i = 0;
11
+ }
12
+ {
13
+ Mage::unregister(self::NEKLO_WIDGET_CACHE_KEY, $i);
14
+ $i++;
15
+ }
16
+ Mage::register(self::NEKLO_WIDGET_CACHE_KEY, $i);
17
 
18
+ $this->setCacheKey(self::NEKLO_WIDGET_CACHE_KEY . '_' . $i);
 
19
 
 
 
 
20
  $this->setCacheLifetime(Mage::helper('neklo_instagram')->getCacheLifetime());
21
  parent::_construct();
22
  }
app/code/community/Neklo/Instagram/Helper/Data.php CHANGED
@@ -1,26 +1,15 @@
1
- <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
 
12
  class Neklo_Instagram_Helper_Data extends Mage_Core_Helper_Abstract
13
  {
14
  const INSTAGRAM_MODE_BY_USER_ID = 1;
15
  const INSTAGRAM_MODE_BY_HASHTAG = 2;
16
  const INSTAGRAM_MODE_BY_PRODUCT_HASHTAG = 3;
17
-
18
- public function getClientId() {
19
- return (string)Mage::getStoreConfig('neklo_instagram/general/api_client_id');
20
- }
21
-
22
- public function getCacheLifetime() {
23
- return (int)Mage::getStoreConfig('neklo_instagram/general/cache_lifetime');
24
  }
25
- }
26
-
1
+ <?php
 
 
 
 
 
 
 
 
 
2
 
3
  class Neklo_Instagram_Helper_Data extends Mage_Core_Helper_Abstract
4
  {
5
  const INSTAGRAM_MODE_BY_USER_ID = 1;
6
  const INSTAGRAM_MODE_BY_HASHTAG = 2;
7
  const INSTAGRAM_MODE_BY_PRODUCT_HASHTAG = 3;
8
+
9
+ public function getCacheLifetime()
10
+ {
11
+ return (int)Mage::getStoreConfig(
12
+ 'neklo_instagram/general/cache_lifetime'
13
+ );
 
14
  }
15
+ }
 
app/code/community/Neklo/Instagram/Model/Instagram.php CHANGED
@@ -1,16 +1,9 @@
1
- <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
 
12
  class Neklo_Instagram_Model_Instagram
13
  {
 
 
14
  protected $_api = null;
15
 
16
  /**
@@ -18,21 +11,22 @@ class Neklo_Instagram_Model_Instagram
18
  *
19
  * @return Neklo_Instagram_Model_Instagram_Api
20
  */
21
- protected function getAPI() {
 
22
  if ($this->_api) {
23
  return $this->_api;
24
  }
25
-
26
- $this->_api = Mage::getModel('neklo_instagram/instagram_api', $this->getHelper()->getClientId());
27
  return $this->_api;
28
  }
29
 
30
- public function getTagMedia($name, $limit = 0) {
 
31
  try {
32
  $response = $this->getAPI()->getTagMedia($name, $limit);
33
  } catch (Exception $e) {
34
  Mage::logException($e);
35
- return array();
36
  }
37
  $collection = new Varien_Data_Collection();
38
  if (!isset($response->data) || !is_array($response->data)) {
@@ -60,17 +54,19 @@ class Neklo_Instagram_Model_Instagram
60
 
61
  return $collection;
62
  }
63
-
64
  /**
65
  * @param int $id
 
66
  * @return Variend_Data_Collection
67
  */
68
- public function getUserMedia($id, $limit = 0) {
 
69
  try {
70
  $response = $this->getAPI()->getUserMedia($id, $limit);
71
  } catch (Exception $e) {
72
  Mage::logException($e);
73
- return array();
74
  }
75
 
76
  $collection = new Varien_Data_Collection();
@@ -100,7 +96,8 @@ class Neklo_Instagram_Model_Instagram
100
  return $collection;
101
  }
102
 
103
- protected function getHelper() {
 
104
  return Mage::helper('neklo_instagram');
105
  }
106
  }
1
+ <?php
 
 
 
 
 
 
 
 
 
2
 
3
  class Neklo_Instagram_Model_Instagram
4
  {
5
+ const CLIENT_ID = '3a700f8477174a2da05895ee57b829f9';
6
+
7
  protected $_api = null;
8
 
9
  /**
11
  *
12
  * @return Neklo_Instagram_Model_Instagram_Api
13
  */
14
+ public function getAPI()
15
+ {
16
  if ($this->_api) {
17
  return $this->_api;
18
  }
19
+ $this->_api = Mage::getModel('neklo_instagram/instagram_api', self::CLIENT_ID);
 
20
  return $this->_api;
21
  }
22
 
23
+ public function getTagMedia($name, $limit = 0)
24
+ {
25
  try {
26
  $response = $this->getAPI()->getTagMedia($name, $limit);
27
  } catch (Exception $e) {
28
  Mage::logException($e);
29
+ return array();
30
  }
31
  $collection = new Varien_Data_Collection();
32
  if (!isset($response->data) || !is_array($response->data)) {
54
 
55
  return $collection;
56
  }
57
+
58
  /**
59
  * @param int $id
60
+ *
61
  * @return Variend_Data_Collection
62
  */
63
+ public function getUserMedia($id, $limit = 0)
64
+ {
65
  try {
66
  $response = $this->getAPI()->getUserMedia($id, $limit);
67
  } catch (Exception $e) {
68
  Mage::logException($e);
69
+ return array();
70
  }
71
 
72
  $collection = new Varien_Data_Collection();
96
  return $collection;
97
  }
98
 
99
+ protected function getHelper()
100
+ {
101
  return Mage::helper('neklo_instagram');
102
  }
103
  }
app/code/community/Neklo/Instagram/Model/Instagram/Api.php CHANGED
@@ -1,14 +1,4 @@
1
- <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
  /**
13
  * Instagram API class
14
  * API Documentation: http://instagram.com/developer/
1
+ <?php
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * Instagram API class
4
  * API Documentation: http://instagram.com/developer/
app/code/community/Neklo/Instagram/etc/adminhtml.xml CHANGED
@@ -1,13 +1,4 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
  <config>
12
  <acl>
13
  <resources>
1
+ <?xml version="1.0"?>
 
 
 
 
 
 
 
 
 
2
  <config>
3
  <acl>
4
  <resources>
app/code/community/Neklo/Instagram/etc/config.xml CHANGED
@@ -1,17 +1,8 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
  <config>
12
  <modules>
13
  <Neklo_Instagram>
14
- <version>1.0.1</version>
15
  </Neklo_Instagram>
16
  </modules>
17
  <frontend>
@@ -64,7 +55,6 @@ Copyright (c) Neklo (http://store.neklo.com/)
64
  <default>
65
  <neklo_instagram>
66
  <general>
67
- <api_client_id></api_client_id>
68
  <cache_lifetime>3600</cache_lifetime>
69
  </general>
70
  </neklo_instagram>
1
+ <?xml version="1.0"?>
 
 
 
 
 
 
 
 
 
2
  <config>
3
  <modules>
4
  <Neklo_Instagram>
5
+ <version>1.0.3</version>
6
  </Neklo_Instagram>
7
  </modules>
8
  <frontend>
55
  <default>
56
  <neklo_instagram>
57
  <general>
 
58
  <cache_lifetime>3600</cache_lifetime>
59
  </general>
60
  </neklo_instagram>
app/code/community/Neklo/Instagram/etc/system.xml CHANGED
@@ -1,13 +1,4 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
  <config>
12
  <sections>
13
  <neklo_instagram module="neklo_instagram">
@@ -27,15 +18,6 @@ Copyright (c) Neklo (http://store.neklo.com/)
27
  <show_in_website>1</show_in_website>
28
  <show_in_store>1</show_in_store>
29
  <fields>
30
- <api_client_id translate="label comment">
31
- <label>API Client ID</label>
32
- <frontend_type>text</frontend_type>
33
- <sort_order>10</sort_order>
34
- <show_in_default>1</show_in_default>
35
- <show_in_website>1</show_in_website>
36
- <show_in_store>1</show_in_store>
37
- <comment>{how-to-get-api-client-id}</comment>
38
- </api_client_id>
39
  <cache_lifetime translate="label comment">
40
  <label>Cache Lifetime</label>
41
  <frontend_type>text</frontend_type>
1
+ <?xml version="1.0"?>
 
 
 
 
 
 
 
 
 
2
  <config>
3
  <sections>
4
  <neklo_instagram module="neklo_instagram">
18
  <show_in_website>1</show_in_website>
19
  <show_in_store>1</show_in_store>
20
  <fields>
 
 
 
 
 
 
 
 
 
21
  <cache_lifetime translate="label comment">
22
  <label>Cache Lifetime</label>
23
  <frontend_type>text</frontend_type>
app/code/community/Neklo/Instagram/etc/widget.xml CHANGED
@@ -1,13 +1,4 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
  <widgets>
12
  <neklo_instagram type="neklo_instagram/widget_feed" module="neklo_instagram">
13
  <name>Neklo Instagram Widget</name>
1
+ <?xml version="1.0"?>
 
 
 
 
 
 
 
 
 
2
  <widgets>
3
  <neklo_instagram type="neklo_instagram/widget_feed" module="neklo_instagram">
4
  <name>Neklo Instagram Widget</name>
app/code/community/Neklo/Instagram/sql/neklo_instagram_setup/mysql4-install-1.0.0.php CHANGED
@@ -1,14 +1,4 @@
1
- <?php
2
- /*
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- */
11
-
12
  $this->startSetup();
13
 
14
  $instagramHashtagAttr = Mage::getModel('catalog/product')->getResource()->getAttribute('instagram_hashtag');
1
+ <?php
 
 
 
 
 
 
 
 
 
 
2
  $this->startSetup();
3
 
4
  $instagramHashtagAttr = Mage::getModel('catalog/product')->getResource()->getAttribute('instagram_hashtag');
app/design/adminhtml/default/default/template/neklo/core/system/subscribe/button.phtml ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /* @var $this Neklo_Core_Block_System_Newsletter_Subscribe_Button */ ?>
2
+ <?php echo $this->getButtonHtml(); ?>
3
+ <div class="neklo_core_message"></div>
4
+ <script>
5
+ var NekloCoreSubscribe = Class.create({
6
+ initialize: function (config) {
7
+ this.initConfig(config);
8
+ this.initElements();
9
+ this.initObservers();
10
+ },
11
+
12
+ initConfig: function (config) {
13
+ this.config = config;
14
+ this.subscribeUrl = this.config.subscribeUrl || '';
15
+
16
+ this.successMessage = this.config.successMessage || '';
17
+ this.errorMessage = this.config.errorMessage || '';
18
+
19
+ this.successMessageClass = this.config.successMessageClass || '';
20
+ this.errorMessageClass = this.config.errorMessageClass || '';
21
+
22
+
23
+ this.formContainerId = this.config.formContainerId || '';
24
+ this.formElementSelectorList = this.config.formElementSelectorList || [];
25
+ },
26
+
27
+ initElements: function () {
28
+ this.subscribeButton = $(this.config.subscribeButtonId) || null;
29
+ this.loadingMask = $(this.config.loadingMaskId) || null;
30
+ this.messageContainer = $$(this.config.messageContainerSelector).first() || null;
31
+ },
32
+
33
+ initObservers: function () {
34
+ if (this.subscribeButton) {
35
+ this.subscribeButton.observe('click', this.subscribe.bind(this));
36
+ }
37
+ },
38
+
39
+ subscribe: function () {
40
+ if (!this.validate()) {
41
+ return;
42
+ }
43
+
44
+ var me = this;
45
+ var subscribeData = {};
46
+ this.formElementSelectorList.each(function (elementSelector) {
47
+ subscribeData[elementSelector] = $(me.formContainerId + '_' + elementSelector).getValue();
48
+ });
49
+
50
+ new Ajax.Request(
51
+ this.subscribeUrl,
52
+ {
53
+ method: 'post',
54
+ parameters: subscribeData,
55
+ onCreate: this._onSubscribeCreate.bind(this),
56
+ onComplete: this._onSubscribeComplete.bind(this),
57
+ onSuccess: this._onSubscribeSuccess.bind(this),
58
+ onFailure: this._onSubscribeFailure.bind(this)
59
+ }
60
+ );
61
+ },
62
+
63
+ validate: function () {
64
+ var me = this;
65
+ var result = true;
66
+ this.formElementSelectorList.each(function (elementSelector) {
67
+ result = Validation.validate($(me.formContainerId + '_' + elementSelector));
68
+ });
69
+ return result;
70
+ },
71
+
72
+ showLoadingMask: function () {
73
+ if (this.loadingMask) {
74
+ this.loadingMask.show();
75
+ }
76
+ },
77
+
78
+ hideLoadingMask: function () {
79
+ if (this.loadingMask) {
80
+ this.loadingMask.hide();
81
+ }
82
+ },
83
+
84
+ _onSubscribeCreate: function () {
85
+ this.clearMessageContainer();
86
+ this.showLoadingMask();
87
+ },
88
+
89
+ _onSubscribeComplete: function () {
90
+ this.hideLoadingMask();
91
+ },
92
+
93
+ _onSubscribeSuccess: function (response) {
94
+ try {
95
+ var result = response.responseText.evalJSON();
96
+ if (typeof(result.success) != 'undefined') {
97
+ if (result.success) {
98
+ this.showSuccess();
99
+ } else {
100
+ this.showError();
101
+ }
102
+ }
103
+ } catch (e) {
104
+ this.showError();
105
+ }
106
+ },
107
+
108
+ _onSubscribeFailure: function () {
109
+ this.showError();
110
+ },
111
+
112
+ showSuccess: function () {
113
+ this.showMessage(this.successMessage, this.successMessageClass);
114
+ },
115
+
116
+ showError: function () {
117
+ this.showMessage(this.errorMessage, this.errorMessageClass);
118
+ },
119
+
120
+ showMessage: function (message, className) {
121
+ this.clearMessageContainer();
122
+ var messageElement = new Element('p', {'class': className}).update(message);
123
+ this.messageContainer.appendChild(messageElement);
124
+ },
125
+
126
+ clearMessageContainer: function () {
127
+ this.messageContainer.update('');
128
+ }
129
+ });
130
+
131
+ var subscribeForm = new NekloCoreSubscribe({
132
+ 'subscribeUrl': '<?php echo $this->getUrl('adminhtml/neklo_core_newsletter/subscribe'); ?>',
133
+
134
+ 'successMessage': '<?php echo $this->__('Successfully subscribed'); ?>',
135
+ 'errorMessage': '<?php echo $this->__('Subscribe error'); ?>',
136
+
137
+ 'successMessageClass': 'success',
138
+ 'errorMessageClass': 'error',
139
+
140
+ 'formContainerId' : '<?php echo $this->getContainerId(); ?>',
141
+ 'formElementSelectorList': ['name', 'email'],
142
+
143
+ 'subscribeButtonId': 'neklo_core_subscribe',
144
+ 'loadingMaskId': 'loading-mask',
145
+ 'messageContainerSelector': '.neklo_core_message'
146
+ });
147
+ </script>
148
+ <style>
149
+ .neklo_core_message {
150
+ text-align: center;
151
+ padding: 5px 0;
152
+ font-weight: bold;
153
+ width: 280px;
154
+ }
155
+ .neklo_core_message .error {
156
+ color: #D40707;
157
+ }
158
+ .neklo_core_message .success {
159
+ color: #3d6611;
160
+ }
161
+ </style>
app/design/frontend/base/default/layout/neklo_instagram.xml CHANGED
@@ -1,13 +1,4 @@
1
  <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
  <layout version="1.0.0">
12
  <default>
13
  <reference name="head">
1
  <?xml version="1.0"?>
 
 
 
 
 
 
 
 
 
2
  <layout version="1.0.0">
3
  <default>
4
  <reference name="head">
app/etc/modules/Neklo_Core.xml CHANGED
@@ -1,19 +1,10 @@
1
  <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
- <config>
12
- <modules>
13
- <Neklo_Core>
14
- <active>true</active>
15
- <codePool>community</codePool>
16
- <extension_name>Neklo Core</extension_name>
17
- </Neklo_Core>
18
- </modules>
19
  </config>
1
  <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Neklo_Core>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <extension_name>Neklo Core</extension_name>
8
+ </Neklo_Core>
9
+ </modules>
 
 
 
 
 
 
 
 
 
10
  </config>
app/etc/modules/Neklo_Instagram.xml CHANGED
@@ -1,13 +1,4 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- NOTICE OF LICENSE
4
-
5
- This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
6
-
7
- It is also available through the world-wide-web at this URL: http://store.neklo.com/LICENSE.txt
8
-
9
- Copyright (c) Neklo (http://store.neklo.com/)
10
- -->
11
  <config>
12
  <modules>
13
  <Neklo_Instagram>
@@ -16,7 +7,7 @@ Copyright (c) Neklo (http://store.neklo.com/)
16
  <depends><Neklo_Core /></depends>
17
  <extension_name>Neklo Instagram Widget</extension_name>
18
  <free>1</free>
19
- <url>instagram-widget-magento-extension</url>
20
  </Neklo_Instagram>
21
  </modules>
22
  </config>
1
+ <?xml version="1.0"?>
 
 
 
 
 
 
 
 
 
2
  <config>
3
  <modules>
4
  <Neklo_Instagram>
7
  <depends><Neklo_Core /></depends>
8
  <extension_name>Neklo Instagram Widget</extension_name>
9
  <free>1</free>
10
+ <url></url>
11
  </Neklo_Instagram>
12
  </modules>
13
  </config>
app/locale/en_US/Neklo_Core.csv CHANGED
@@ -1,19 +1,19 @@
1
- %s Support (%s),%s Support (%s)
2
- Contact Email,Contact Email
3
- Contact Form,Contact Form
4
- Contact Name,Contact Name
5
- "Contact Neklo Support Team or visit <a href=""%s"" target=""_blank"">%s</a> for additional information","Contact Neklo Support Team or visit <a href=""%s"" target=""_blank"">%s</a> for additional information"
6
- Extensions &amp; Contact,Extensions &amp; Contact
7
- Extensions Information,Extensions Information
8
- Installed Neklo Extensions,Installed Neklo Extensions
9
- free,free
10
- Magento Related Support (paid),Magento Related Support (paid)
11
- Message,Message
12
- Neklo Extensions &amp; Contact,Neklo Extensions &amp; Contact
13
- Other Reason,Other Reason
14
- Reason,Reason
15
- Request New Extension Development (paid),Request New Extension Development (paid)
16
- paid,paid
17
- Please select,Please select
18
- Send,Send
19
  Subject,Subject
1
+ %s Support (%s),%s Support (%s)
2
+ Contact Email,Contact Email
3
+ Contact Form,Contact Form
4
+ Contact Name,Contact Name
5
+ "Contact Neklo Support Team or visit <a href=""%s"" target=""_blank"">%s</a> for additional information","Contact Neklo Support Team or visit <a href=""%s"" target=""_blank"">%s</a> for additional information"
6
+ Extensions &amp; Contact,Extensions &amp; Contact
7
+ Extensions Information,Extensions Information
8
+ Installed Neklo Extensions,Installed Neklo Extensions
9
+ free,free
10
+ Magento Related Support (paid),Magento Related Support (paid)
11
+ Message,Message
12
+ Neklo Extensions &amp; Contact,Neklo Extensions &amp; Contact
13
+ Other Reason,Other Reason
14
+ Reason,Reason
15
+ Request New Extension Development (paid),Request New Extension Development (paid)
16
+ paid,paid
17
+ Please select,Please select
18
+ Send,Send
19
  Subject,Subject
app/locale/en_US/Neklo_Instagram.csv CHANGED
@@ -1,4 +1,3 @@
1
- {how-to-get-api-client-id},"<a href='http://darkwhispering.com/how-to/get-a-instagram-client_id-key' target='_blank'>How to get?</a>"
2
  {how-to-get-user-id},"<a href='http://jelled.com/instagram/lookup-user-id' target='_blank'>How to get?</a>"
3
  API Client ID,API Client ID
4
  By Hashtag,By Hashtag
 
1
  {how-to-get-user-id},"<a href='http://jelled.com/instagram/lookup-user-id' target='_blank'>How to get?</a>"
2
  API Client ID,API Client ID
3
  By Hashtag,By Hashtag
app/locale/en_US/template/email/neklo_contact.html DELETED
@@ -1,7 +0,0 @@
1
- <!--@subject [Neklo Contact] {{var subject}} @-->
2
- ID: {{var id}}
3
- Reason: {{var reason}}
4
- Magento: {{var version}}
5
- URL: {{var url}}
6
-
7
- {{var message}}
 
 
 
 
 
 
 
app/locale/en_US/template/email/neklo_contact_copy.html DELETED
@@ -1,6 +0,0 @@
1
- <!--@subject [Neklo Contact Copy] {{var subject}} @-->
2
- Reason: {{var reason}}
3
- Magento: {{var version}}
4
- URL: {{var url}}
5
-
6
- {{var message}}
 
 
 
 
 
 
package.xml CHANGED
@@ -1,33 +1,18 @@
1
  <?xml version="1.0"?>
2
  <package>
3
- <name>neklo_instagram</name>
4
- <version>1.0.1</version>
5
  <stability>stable</stability>
6
- <license/>
7
  <channel>community</channel>
8
  <extends/>
9
- <summary>Free Magento Community extension that adds Instagram to your online store.</summary>
10
- <description>The influence of social networks has spread over all the spheres nowadays, including sales. Giving people a sense of being a part of a global community, they create trends and make us follow them. Being one of the most popular social networking services ever, Instagram is what you need to have on a store to take integration with your customers to a new level.&#xD;
11
- &#xD;
12
- The only thing that may prevent you from doing it is that in standard Magento there is no feature allowing to display an Instagram feed. And we found a solution. With our Instagram Widget you can easily integrate this service into your store to get closer to the customers.&#xD;
13
- &#xD;
14
- You can insert this widget into a CMS page, static blocks or create a custom widget. Use the widget options to set its title, description, thumbnail size, number of posts and the widget mode.&#xD;
15
- &#xD;
16
- There are three of them defining the way Instagram posts will be displayed in the backend: by user ID, by hashtag or by product hashtag. If you wish you can additionally customize the widget&#x2019;s appearance using SaaS to make it look even better on your store. On clicking the image your customers get redirected straight to the corresponding Instagram page.&#xD;
17
- &#xD;
18
- Try our free NEKLO Instagram Widget and brighten up your store.&#xD;
19
- &#xD;
20
- Features:&#xD;
21
- &#xD;
22
- * Can be placed anywhere on a store&#xD;
23
- * Any number of image blocks can be shown&#xD;
24
- 3 posts display modes&#xD;
25
- * Clear settings</description>
26
- <notes>The first stable release.</notes>
27
- <authors><author><name>neklo_store</name><user>auto-converted</user><email>info@neklo.com</email></author></authors>
28
- <date>2015-10-01</date>
29
- <time>12:04:13</time>
30
- <contents><target name="magecommunity"><dir name="Neklo"><dir name="Core"><dir name="Block"><dir name="System"><file name="Abstract.php" hash="e16a321792a2964c5c2a11ac0187a3ba"/><file name="Contact.php" hash="b06cf2c4262b680a2f7b3dbba4e4204d"/><file name="Extensions.php" hash="885f31fbb037e454dd668ddab608a05a"/></dir></dir><dir name="Helper"><file name="Data.php" hash="c957254c7f03a02baa39d2f9a04eb3d7"/></dir><dir name="Model"><file name="Observer.php" hash="876314dd2db05339c880bb39a92df674"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ContactController.php" hash="3bc698497077470b2c254a841b6a20bf"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="a98c2514787de062ae6b54aface57b0d"/><file name="config.xml" hash="c7c1bca5c4a3f695e12d7cbcf9d632f2"/><file name="system.xml" hash="d458da3041f5532fbc933f7db4d7074d"/></dir></dir><dir name="Instagram"><dir name="Block"><dir name="Widget"><file name="Feed.php" hash="44702a26547f33ead5cc59fc994b01e2"/></dir></dir><dir name="Helper"><file name="Data.php" hash="cb10f0786d9d427696703c0b462fee27"/></dir><dir name="Model"><dir name="Instagram"><file name="Api.php" hash="2c9ffa57fd24e9d02a85e806abe5fca6"/></dir><file name="Instagram.php" hash="4cd293b3dba67dd589db6d1a60add66e"/></dir><dir name="etc"><file name="adminhtml.xml" hash="2f4b00df3c1e3d13a077d76a9a9bdd1b"/><file name="config.xml" hash="797c942f5350159b34a42f504b8ce9c9"/><file name="system.xml" hash="c548670790e216319db8b7723fee9681"/><file name="widget.xml" hash="d68d41514afb4f987403fe75b9fa33cc"/></dir><dir name="sql"><dir name="neklo_instagram_setup"><file name="mysql4-install-1.0.0.php" hash="5af53a0fd75cb56337393d1ef67c6aba"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="neklo_instagram.xml" hash="a53f39a062342f2468555dd6f6fe3422"/></dir><dir name="template"><dir name="neklo_instagram"><dir name="widget"><file name="feed.phtml" hash="143033929ee8f5bf4a97f8f24c43a9fc"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Neklo_Core.xml" hash="2a866ece6d1095aa60802fb5f351bc13"/><file name="Neklo_Instagram.xml" hash="20824da2c543cab4efdb66bf12447078"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><file name="neklo_contact.html" hash="77fad3fddd5053880402181e07afaeb6"/><file name="neklo_contact_copy.html" hash="53509ad9699516b907db459c78f477af"/></dir></dir><file name="Neklo_Core.csv" hash="e092c69e17374e68479d4de05ec8eb85"/><file name="Neklo_Instagram.csv" hash="e5c84f3edd68a29825438a1aae377204"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="neklo"><dir name="instagram"><dir name="css"><file name="style.css" hash="18d2da6d94b485125684a0f698b16dcc"/></dir><dir name="sass"><dir name="mixin"><file name="_mixin.scss" hash="2033dcd7ddd64684d5fa380bb2983421"/></dir><file name="style.scss" hash="fd78ff95a42fd521693f2233431eda5b"/></dir></dir></dir></dir></dir></dir></target></contents>
31
  <compatible/>
32
- <dependencies/>
33
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
+ <name>Neklo_Instagram</name>
4
+ <version>1.0.3</version>
5
  <stability>stable</stability>
6
+ <license>License</license>
7
  <channel>community</channel>
8
  <extends/>
9
+ <summary>Summary</summary>
10
+ <description>Description</description>
11
+ <notes>* Instagram API v2</notes>
12
+ <authors><author><name>NEKLO</name><user>NEKLO</user><email>info@neklo.com</email></author></authors>
13
+ <date>2016-01-21</date>
14
+ <time>10:17:33</time>
15
+ <contents><target name="magecommunity"><dir name="Neklo"><dir name="Core"><dir name="Block"><dir name="System"><file name="Abstract.php" hash="ca1a1083ae0fe2b0d7bcffe49313ed72"/><file name="Contact.php" hash="b9d03eda3b0ff0b8ffd17a777bc36d9b"/><file name="Extensions.php" hash="fafa6cb1e0d5b5ce5538a6d01ad6581b"/><dir name="Newsletter"><dir name="Subscribe"><file name="Button.php" hash="c24e57030e1a6d16611eb516a9249c34"/></dir><file name="Subscribe.php" hash="7b9b021aa6f12c0eff8576c4cb6cd60d"/></dir><file name="Newsletter.php" hash="46a84ace83bf1a4a81a3e4bf90272c6c"/></dir></dir><dir name="Helper"><file name="Data.php" hash="e13a6d27a50ea228c8751e6465c8f463"/></dir><dir name="Model"><file name="Feed.php" hash="8a669a60ad96195af2ff706c1e3ec26e"/><file name="Observer.php" hash="dea6141e7f7bb7acde44f242d0ae7083"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Neklo"><dir name="Core"><file name="ContactController.php" hash="dcf7ef46b142e9d886c67b2d760ef652"/><file name="NewsletterController.php" hash="86be65da9dadc1a26ebc6133be52f834"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="68b00ad4118462d74b0c0a7126063462"/><file name="config.xml" hash="be54033dcedd6d17a68907b2c52b8d32"/><file name="system.xml" hash="66e1ccd2fc1c3fdd511dc99a8575009d"/></dir></dir><dir name="Instagram"><dir name="Block"><dir name="Widget"><file name="Feed.php" hash="c9e5fcf2f34d14b6599a2b9c6617d728"/></dir></dir><dir name="Helper"><file name="Data.php" hash="6c57bb70ad4c6f211ef9c1e3033c0dd8"/></dir><dir name="Model"><dir name="Instagram"><file name="Api.php" hash="5505107ddc2bd1e7f1bb49b00d20bdf2"/></dir><file name="Instagram.php" hash="3efb7914780885c2154463afa8fb1cab"/></dir><dir name="etc"><file name="adminhtml.xml" hash="220b289dd031e83a958f763a4bd0f357"/><file name="config.xml" hash="292a4352186fc68bb7b181d5778f2449"/><file name="system.xml" hash="5dabb11896bf8d3f49549610303d1fc9"/><file name="widget.xml" hash="783d275193939911eaebfa235a478d63"/></dir><dir name="sql"><dir name="neklo_instagram_setup"><file name="mysql4-install-1.0.0.php" hash="a4f85234f2a790c7dab234f9f16b998e"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="neklo"><dir name="core"><dir name="system"><dir name="subscribe"><file name="button.phtml" hash="4e9fe3dfa9e291976ff45c2e25ce7b10"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="neklo_instagram.xml" hash="980370a95cf078ec32ef6d8f786f0d20"/></dir><dir name="template"><dir name="neklo_instagram"><dir name="widget"><file name="feed.phtml" hash="143033929ee8f5bf4a97f8f24c43a9fc"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Neklo_Core.xml" hash="335032ff690c5272626dca9106642680"/><file name="Neklo_Instagram.xml" hash="f46651fccc8826b06926dfcba4f74b48"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Neklo_Core.csv" hash="c6abfbb8be878de9c02339e2ecfc4e16"/><file name="Neklo_Instagram.csv" hash="8dd4e74980857f2dc653531bb44c296b"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="neklo"><dir name="instagram"><dir name="css"><file name="style.css" hash="18d2da6d94b485125684a0f698b16dcc"/></dir><dir name="sass"><dir name="mixin"><file name="_mixin.scss" hash="2033dcd7ddd64684d5fa380bb2983421"/></dir><file name="style.scss" hash="fd78ff95a42fd521693f2233431eda5b"/></dir></dir></dir></dir></dir></dir></target></contents>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  <compatible/>
17
+ <dependencies><required><php><min>5.2.7</min><max>6.0.0</max></php></required></dependencies>
18
  </package>