Skip to content

Commit 5547d8c

Browse files
committed
Merge pull request #65 from zendesk/feature/web-widget
Replace Feedback Tab with the Web Widget
2 parents 8e37d5b + 645fc6e commit 5547d8c

File tree

8 files changed

+99
-40
lines changed

8 files changed

+99
-40
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This extension makes Zendesk work seamlessly with Magento to enable stores to de
66
- Create support tickets without leaving Magento
77
- Display relevant support tickets on order & customer dashboards
88
- Create support tickets from Contact Us requests
9-
- Easily add a feedback tab to your site
9+
- Easily add the [Embeddables](https://www.zendesk.com/embeddables) Web Widget to your site
1010

1111
The latest stable version of the extension can be installed via the [Magento Connect](http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15129/) marketplace.
1212

src/app/code/community/Zendesk/Zendesk/Block/Supporttab.php renamed to src/app/code/community/Zendesk/Zendesk/Block/WebWidget.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22
/**
3-
* Copyright 2012 Zendesk.
3+
* Copyright 2015 Zendesk.
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
66
* you may not use this file except in compliance with the License.
@@ -15,14 +15,14 @@
1515
* limitations under the License.
1616
*/
1717

18-
class Zendesk_Zendesk_Block_Supporttab extends Mage_Core_Block_Template
18+
class Zendesk_Zendesk_Block_WebWidget extends Mage_Core_Block_Template
1919
{
2020
protected function _toHtml()
2121
{
22-
if(!Mage::getStoreConfig('zendesk/frontend_features/feedback_tab_code_active')) {
22+
if(!Mage::getStoreConfig('zendesk/frontend_features/web_widget_code_active')) {
2323
return '';
2424
}
2525

26-
return Mage::getStoreConfig('zendesk/frontend_features/feedback_tab_code');
26+
return Mage::getStoreConfig('zendesk/frontend_features/web_widget_code_snippet');
2727
}
2828
}

src/app/code/community/Zendesk/Zendesk/Model/Observer.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,23 @@ public function saveConfig(Varien_Event_Observer $observer)
9797
Mage::getModel('core/config')->saveConfig('contacts/email/recipient_email', $oldEmail, $scope, $scopeId);
9898
}
9999
}
100+
101+
// If the zendesk domain is not found in the web widget snippet (wrapped with quotes), generate it again
102+
$zDomain = Mage::getStoreConfig('zendesk/general/domain', $storeCode);
103+
$widgetSnippet = Mage::getStoreConfig('zendesk/frontend_features/web_widget_code_snippet', $storeCode);
104+
// Case insensitive search with single and double quotes, still better performance than 1 regexp search
105+
if($zDomain && stripos($widgetSnippet, "'{$zDomain}'") === false && stripos($widgetSnippet, '"'.$zDomain.'"') === false) {
106+
$webWidgetSnippet=<<<EOJS
107+
<!-- Start of Zendesk Widget script -->
108+
<script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("//assets.zendesk.com/embeddable_framework/main.js","{$zDomain}");/*]]>*/</script>
109+
<!-- End of Zendesk Widget script -->
110+
EOJS;
111+
112+
Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_active', 1);
113+
Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_snippet', $webWidgetSnippet);
114+
} elseif (empty($zDomain)) {
115+
Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_snippet', '');
116+
}
100117
}
101118

102119
public function addTicketButton(Varien_Event_Observer $event)

src/app/code/community/Zendesk/Zendesk/controllers/ApiController.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,12 @@ public function finaliseAction()
367367
}
368368
}
369369

370-
if(isset($data['feedback_tab'])) {
371-
$configUpdates['zendesk/frontend_features/feedback_tab_code_active'] = ($data['feedback_tab'] === 'true');
370+
if(isset($data['web_widget_code_active'])) {
371+
$configUpdates['zendesk/frontend_features/web_widget_code_active'] = ($data['web_widget_code_active'] === 'true');
372372
}
373373

374-
if(isset($data['feedback_tab_html'])) {
375-
$configUpdates['zendesk/frontend_features/feedback_tab_code'] = $data['feedback_tab_html'];
374+
if(isset($data['web_widget_code_snippet'])) {
375+
$configUpdates['zendesk/frontend_features/web_widget_code_snippet'] = $data['web_widget_code_snippet'];
376376
}
377377

378378

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
/**
3+
* Copyright 2015 Zendesk
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
/**
19+
* In version 2.0 we are replacing the deprecated Feedback Tab with the new
20+
* Embeddables Web Widget.
21+
* More info: https://www.zendesk.com/embeddables
22+
*
23+
* In this data upgrade we are going to drop the Feedback Tab related settings
24+
* from the database, and inserting the required fields for the Web Widget.
25+
*/
26+
27+
$config = new Mage_Core_Model_Config();
28+
29+
// We won't need the Feedback Tab code snippet anymore
30+
$config->deleteConfig('zendesk/frontend_features/feedback_tab_code');
31+
32+
// We won't check in our code whether to show or not the Feedback Tab
33+
$config->deleteConfig('zendesk/frontend_features/feedback_tab_code_active');
34+
35+
// Retrieve the domain from the config settings
36+
$domain = Mage::getStoreConfig('zendesk/general/domain');
37+
38+
if($domain) {
39+
// We are activating the Web Widget by default
40+
$config->saveConfig('zendesk/frontend_features/web_widget_code_active', 1);
41+
42+
// The Web Widget code snippet, using the account zendesk domain from settings
43+
$webWidgetSnippet=<<<EOJS
44+
<!-- Start of Zendesk Widget script -->
45+
<script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("//assets.zendesk.com/embeddable_framework/main.js","{$domain}");/*]]>*/</script>
46+
<!-- End of Zendesk Widget script -->
47+
EOJS;
48+
49+
$config->saveConfig('zendesk/frontend_features/web_widget_code_snippet', $webWidgetSnippet);
50+
} else {
51+
// There is no domain on the settings, we can't activate the Web Widget
52+
// The user should probably re-run the Setup from the Zendesk extension settings page
53+
$config->saveConfig('zendesk/frontend_features/web_widget_code_active', 0);
54+
$config->saveConfig('zendesk/frontend_features/web_widget_code_snippet', '');
55+
}

src/app/code/community/Zendesk/Zendesk/etc/config.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<config>
2020
<modules>
2121
<Zendesk_Zendesk>
22-
<version>1.4.2</version>
22+
<version>2.0.0</version>
2323
</Zendesk_Zendesk>
2424
</modules>
2525
<zendesk>
@@ -253,7 +253,7 @@
253253
<customer_sync>0</customer_sync>
254254
</general>
255255
<frontend_features>
256-
<feedback_tab_code_active>0</feedback_tab_code_active>
256+
<web_widget_code_active>0</web_widget_code_active>
257257
<contact_us>0</contact_us>
258258
</frontend_features>
259259
<backend_features>

src/app/code/community/Zendesk/Zendesk/etc/system.xml

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@
190190
<show_in_default>1</show_in_default>
191191
<show_in_website>1</show_in_website>
192192
<show_in_store>1</show_in_store>
193-
<fields>
193+
<fields>
194194
<contact_us translate="label">
195195
<label>Create tickets from Contact Us form</label>
196196
<frontend_type>select</frontend_type>
@@ -200,38 +200,25 @@
200200
<show_in_website>1</show_in_website>
201201
<show_in_store>1</show_in_store>
202202
</contact_us>
203-
<feedback_tab_code_active translate="label">
204-
<label>Code to display Feedback Tab</label>
203+
<web_widget_code_active translate="label">
204+
<label>Include Web Widget</label>
205205
<frontend_type>select</frontend_type>
206206
<source_model>adminhtml/system_config_source_yesno</source_model>
207207
<sort_order>6</sort_order>
208208
<show_in_default>1</show_in_default>
209209
<show_in_website>1</show_in_website>
210210
<show_in_store>1</show_in_store>
211-
</feedback_tab_code_active>
212-
<feedback_tab_code>
213-
<frontend_type>textarea</frontend_type>
214-
<sort_order>7</sort_order>
215-
<show_in_default>1</show_in_default>
216-
<show_in_website>1</show_in_website>
217-
<show_in_store>1</show_in_store>
218-
<depends>
219-
<feedback_tab_code_active>1</feedback_tab_code_active>
220-
</depends>
221-
</feedback_tab_code>
222-
<feedback_tab_customise translate="label value">
211+
</web_widget_code_active>
212+
<web_widget_customise translate="label value">
223213
<label></label>
224214
<frontend_model>zendesk/adminhtml_config_link</frontend_model>
225-
<destination><![CDATA[account/dropboxes/new]]></destination>
226-
<value>Customize Feedback Tab</value>
227-
<sort_order>8</sort_order>
215+
<destination><![CDATA[agent/admin/widget]]></destination>
216+
<value>Customize Web Widget</value>
217+
<sort_order>7</sort_order>
228218
<show_in_default>1</show_in_default>
229219
<show_in_website>1</show_in_website>
230220
<show_in_store>1</show_in_store>
231-
<depends>
232-
<feedback_tab_code_active>1</feedback_tab_code_active>
233-
</depends>
234-
</feedback_tab_customise>
221+
</web_widget_customise>
235222
<footer_link_enabled translate="label">
236223
<label>Display link to Zendesk in Magento footer</label>
237224
<frontend_type>select</frontend_type>
@@ -280,7 +267,7 @@
280267
<show_in_default>1</show_in_default>
281268
<show_in_website>1</show_in_website>
282269
<show_in_store>0</show_in_store>
283-
</show_on_order>
270+
</show_on_order>
284271
<show_on_dashboard translate="label">
285272
<label>Show support tickets on admin dashboard</label>
286273
<frontend_type>select</frontend_type>
@@ -298,7 +285,7 @@
298285
<show_in_default>1</show_in_default>
299286
<show_in_website>1</show_in_website>
300287
<show_in_store>0</show_in_store>
301-
</show_all>
288+
</show_all>
302289
<default_sort translate="label">
303290
<label>Default Sort Order</label>
304291
<frontend_type>select</frontend_type>
@@ -453,16 +440,16 @@
453440
<show_in_website>1</show_in_website>
454441
<show_in_store>1</show_in_store>
455442
</voice>
456-
<feedback_tab translate="label value">
457-
<label>Feedback Tab</label>
443+
<web_widget translate="label value">
444+
<label>Web Widget</label>
458445
<frontend_model>zendesk/adminhtml_config_link</frontend_model>
459-
<destination><![CDATA[account/dropboxes/new]]></destination>
446+
<destination><![CDATA[agent/admin/widget]]></destination>
460447
<value>Configure</value>
461448
<sort_order>1</sort_order>
462449
<show_in_default>1</show_in_default>
463450
<show_in_website>1</show_in_website>
464451
<show_in_store>1</show_in_store>
465-
</feedback_tab>
452+
</web_widget>
466453
<api translate="label value">
467454
<label>API</label>
468455
<frontend_model>zendesk/adminhtml_config_link</frontend_model>

src/app/design/frontend/base/default/layout/zendesk.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
</action>
2828
</reference>
2929
<reference name="before_body_end">
30-
<block type="zendesk/supporttab" name="zendesk_support_tab"/>
30+
<block type="zendesk/webWidget" name="zendesk_web_widget"/>
3131
</reference>
3232
</default>
3333

0 commit comments

Comments
 (0)