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
- app/code/community/Neklo/Core/Block/System/Abstract.php +60 -58
- app/code/community/Neklo/Core/Block/System/Contact.php +164 -115
- app/code/community/Neklo/Core/Block/System/Extensions.php +65 -70
- app/code/community/Neklo/Core/Block/System/Newsletter.php +9 -0
- app/code/community/Neklo/Core/Block/System/Newsletter/Subscribe.php +20 -0
- app/code/community/Neklo/Core/Block/System/Newsletter/Subscribe/Button.php +35 -0
- app/code/community/Neklo/Core/Helper/Data.php +18 -25
- app/code/community/Neklo/Core/Model/Feed.php +34 -0
- app/code/community/Neklo/Core/Model/Observer.php +14 -14
- app/code/community/Neklo/Core/controllers/Adminhtml/ContactController.php +0 -88
- app/code/community/Neklo/Core/controllers/Adminhtml/Neklo/Core/ContactController.php +54 -0
- app/code/community/Neklo/Core/controllers/Adminhtml/Neklo/Core/NewsletterController.php +47 -0
- app/code/community/Neklo/Core/etc/adminhtml.xml +24 -33
- app/code/community/Neklo/Core/etc/config.xml +73 -78
- app/code/community/Neklo/Core/etc/system.xml +75 -48
- app/code/community/Neklo/Instagram/Block/Widget/Feed.php +16 -11
- app/code/community/Neklo/Instagram/Helper/Data.php +8 -19
- app/code/community/Neklo/Instagram/Model/Instagram.php +16 -19
- app/code/community/Neklo/Instagram/Model/Instagram/Api.php +1 -11
- app/code/community/Neklo/Instagram/etc/adminhtml.xml +1 -10
- app/code/community/Neklo/Instagram/etc/config.xml +2 -12
- app/code/community/Neklo/Instagram/etc/system.xml +1 -19
- app/code/community/Neklo/Instagram/etc/widget.xml +1 -10
- app/code/community/Neklo/Instagram/sql/neklo_instagram_setup/mysql4-install-1.0.0.php +1 -11
- app/design/adminhtml/default/default/template/neklo/core/system/subscribe/button.phtml +161 -0
- app/design/frontend/base/default/layout/neklo_instagram.xml +0 -9
- app/etc/modules/Neklo_Core.xml +8 -17
- app/etc/modules/Neklo_Instagram.xml +2 -11
- app/locale/en_US/Neklo_Core.csv +18 -18
- app/locale/en_US/Neklo_Instagram.csv +0 -1
- app/locale/en_US/template/email/neklo_contact.html +0 -7
- app/locale/en_US/template/email/neklo_contact_copy.html +0 -6
- package.xml +11 -26
app/code/community/Neklo/Core/Block/System/Abstract.php
CHANGED
@@ -1,60 +1,62 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
$
|
36 |
-
|
37 |
-
$
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
$
|
49 |
-
$
|
50 |
-
$
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
$
|
55 |
-
$
|
56 |
-
$
|
57 |
-
|
58 |
-
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
class
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
array(
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
'
|
43 |
-
'
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
$html
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
$html
|
18 |
-
$
|
19 |
-
$
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
$
|
25 |
-
|
26 |
-
$count
|
27 |
-
|
28 |
-
$
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
$
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
$
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
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 & 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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
<
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
<
|
72 |
-
|
73 |
-
|
74 |
-
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<
|
12 |
-
|
13 |
-
|
14 |
-
<
|
15 |
-
<
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
<
|
31 |
-
<
|
32 |
-
<
|
33 |
-
<
|
34 |
-
<
|
35 |
-
<
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
<
|
40 |
-
<
|
41 |
-
<
|
42 |
-
<
|
43 |
-
<
|
44 |
-
<
|
45 |
-
<
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 & 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 |
-
|
4 |
-
|
5 |
-
This source file is subject to the NekloEULA that is bundled with this package in the file ICENSE.txt.
|
6 |
|
7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
-
|
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
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
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 |
-
|
|
|
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 |
-
|
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 |
-
|
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.
|
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 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
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
|
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 & Contact,Extensions & 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 & Contact,Neklo Extensions & 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 & Contact,Extensions & 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 & Contact,Neklo Extensions & 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>
|
4 |
-
<version>1.0.
|
5 |
<stability>stable</stability>
|
6 |
-
<license
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
-
<summary>
|
10 |
-
<description>
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
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’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.
|
17 |
-

|
18 |
-
Try our free NEKLO Instagram Widget and brighten up your store.
|
19 |
-

|
20 |
-
Features:
|
21 |
-

|
22 |
-
* Can be placed anywhere on a store
|
23 |
-
* Any number of image blocks can be shown
|
24 |
-
3 posts display modes
|
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>
|