zendesk - Version 1.4.0

Version Notes

Replace Feedback Tab with Web Widget
Set raw body also for PUT requests
Add headers param to API calls, auto-detect JSON for encoding to raw data, prevent exceptions caused by logging non UTF-8 data
Redirect to login page if trying to access tickets list in customer account while logged out
Various bug fixes (SSO, better debugging & validation)

Download this release

Release Info

Developer Jason Smale
Extension zendesk
Version 1.4.0
Comparing to
See all releases


Code changes from version 1.3.0 to 1.4.0

Files changed (116) hide show
  1. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/Generate.php +0 -0
  2. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/MagentoTest.php +0 -0
  3. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/Signup.php +0 -0
  4. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/Sync.php +56 -0
  5. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/ZendeskTest.php +0 -0
  6. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Link.php +0 -0
  7. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Customer.php +47 -0
  8. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Customer/Grid.php +103 -0
  9. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Customer/Grid/Renderer/Action.php +27 -0
  10. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Edit.php +1 -2
  11. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Edit/Form.php +6 -3
  12. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order.php +47 -0
  13. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order/Grid.php +141 -0
  14. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order/Grid/Renderer/Action.php +27 -0
  15. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard.php +18 -13
  16. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Grids.php +64 -41
  17. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Abstract.php +240 -0
  18. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/All.php +106 -0
  19. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Massaction.php +32 -0
  20. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Action.php +25 -0
  21. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Email.php +38 -0
  22. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Group.php +38 -0
  23. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Type.php +25 -0
  24. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/User.php +38 -0
  25. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/View.php +65 -0
  26. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Log.php +0 -0
  27. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Menu.php +0 -0
  28. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Order/View.php +0 -39
  29. app/code/community/Zendesk/Zendesk/Block/Adminhtml/Order/View/Tickets.php +0 -0
  30. app/code/community/Zendesk/Zendesk/Block/{Adminhtml/Dashboard/Tab/View.php → Customer/Tickets.php} +7 -17
  31. app/code/community/Zendesk/Zendesk/Block/Customer/Tickets/List.php +70 -0
  32. app/code/community/Zendesk/Zendesk/Block/Supporttab.php +3 -3
  33. app/code/community/Zendesk/Zendesk/Helper/Data.php +197 -2
  34. app/code/community/Zendesk/Zendesk/Helper/JWT.php +0 -0
  35. app/code/community/Zendesk/Zendesk/Helper/Log.php +0 -0
  36. app/code/community/Zendesk/Zendesk/LICENSE.txt +0 -0
  37. app/code/community/Zendesk/Zendesk/Model/Api/Abstract.php +31 -10
  38. app/code/community/Zendesk/Zendesk/Model/Api/Groups.php +33 -0
  39. app/code/community/Zendesk/Zendesk/Model/Api/Requesters.php +0 -0
  40. app/code/community/Zendesk/Zendesk/Model/Api/Tickets.php +52 -15
  41. app/code/community/Zendesk/Zendesk/Model/Api/Users.php +64 -2
  42. app/code/community/Zendesk/Zendesk/Model/Api/Views.php +15 -3
  43. app/code/community/Zendesk/Zendesk/Model/Observer.php +111 -1
  44. app/code/community/Zendesk/Zendesk/Model/Resource/Tickets.php +25 -0
  45. app/code/community/Zendesk/Zendesk/Model/Resource/Tickets/Collection.php +186 -0
  46. app/code/community/Zendesk/Zendesk/Model/Search.php +50 -0
  47. app/code/community/Zendesk/Zendesk/Model/Search/Field.php +50 -0
  48. app/code/community/Zendesk/Zendesk/Model/Source/Sortdir.php +37 -0
  49. app/code/community/Zendesk/Zendesk/Model/Source/Sortorder.php +37 -0
  50. app/code/community/Zendesk/Zendesk/Model/Source/Views.php +0 -0
  51. app/code/community/Zendesk/Zendesk/Model/Tickets.php +26 -0
  52. app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php +389 -23
  53. app/code/community/Zendesk/Zendesk/controllers/ApiController.php +33 -11
  54. app/code/community/Zendesk/Zendesk/controllers/Customer/TicketsController.php +39 -0
  55. app/code/community/Zendesk/Zendesk/controllers/IndexController.php +7 -2
  56. app/code/community/Zendesk/Zendesk/controllers/SsoController.php +13 -6
  57. app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-1.3.0-1.4.0.php +36 -0
  58. app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-1.3.1-1.4.0.php +36 -0
  59. app/code/community/Zendesk/Zendesk/etc/config.xml +56 -14
  60. app/code/community/Zendesk/Zendesk/etc/jstranslator.xml +26 -0
  61. app/code/community/Zendesk/Zendesk/etc/system.xml +126 -45
  62. app/design/adminhtml/default/default/layout/zendesk.xml +85 -24
  63. app/design/adminhtml/default/default/template/zendesk/autocomplete.phtml +0 -0
  64. app/design/adminhtml/default/default/template/zendesk/config/button-generate.phtml +0 -0
  65. app/design/adminhtml/default/default/template/zendesk/config/button-signup.phtml +0 -0
  66. app/design/adminhtml/default/default/template/zendesk/config/button-sync.phtml +43 -0
  67. app/design/adminhtml/default/default/template/zendesk/config/button-test-magento.phtml +1 -1
  68. app/design/adminhtml/default/default/template/zendesk/config/button-test-zendesk.phtml +24 -2
  69. app/design/adminhtml/default/default/template/zendesk/config/link.phtml +0 -0
  70. app/design/adminhtml/default/default/template/zendesk/create/customer.phtml +46 -0
  71. app/design/adminhtml/default/default/template/zendesk/create/order.phtml +45 -0
  72. app/design/adminhtml/default/default/template/zendesk/customer/tickets.phtml +12 -12
  73. app/design/adminhtml/default/default/template/zendesk/dashboard/empty.phtml +0 -0
  74. app/design/adminhtml/default/default/template/zendesk/dashboard/index.phtml +26 -25
  75. app/design/adminhtml/default/default/template/zendesk/dashboard/tabs/view.phtml +0 -140
  76. app/design/adminhtml/default/default/template/zendesk/left-menu.phtml +3 -2
  77. app/design/adminhtml/default/default/template/zendesk/log/index.phtml +0 -0
  78. app/design/adminhtml/default/default/template/zendesk/order/tickets.phtml +1 -1
  79. app/design/adminhtml/default/default/template/zendesk/tickets/tickets.phtml +73 -0
  80. app/design/adminhtml/default/default/template/zendesk/translations.phtml +20 -0
  81. app/design/adminhtml/default/default/template/zendesk/widget/grid.phtml +214 -0
  82. app/design/frontend/base/default/layout/zendesk.xml +28 -2
  83. app/design/frontend/base/default/template/zendesk/customer/tickets.phtml +35 -0
  84. app/design/frontend/base/default/template/zendesk/customer/tickets/list.phtml +54 -0
  85. app/etc/modules/Zendesk_Zendesk.xml +0 -0
  86. app/locale/da_DA/Zendesk_Zendesk.csv +98 -0
  87. app/locale/de_DE/Zendesk_Zendesk.csv +1 -1
  88. app/locale/en_CA/Zendesk_Zendesk.csv +98 -0
  89. app/locale/en_GB/Zendesk_Zendesk.csv +98 -0
  90. app/locale/en_US/Zendesk_Zendesk.csv +15 -1
  91. app/locale/en_US/Zendesk_Zendesk.yml +412 -0
  92. app/locale/es_419/Zendesk_Zendesk.csv +98 -0
  93. app/locale/es_ES/Zendesk_Zendesk.csv +1 -1
  94. app/locale/fr_CA/Zendesk_Zendesk.csv +98 -0
  95. app/locale/fr_FR/Zendesk_Zendesk.csv +1 -1
  96. app/locale/it_IT/Zendesk_Zendesk.csv +1 -1
  97. app/locale/ja_JA/Zendesk_Zendesk.csv +98 -0
  98. app/locale/ja_JP/Zendesk_Zendesk.csv +1 -1
  99. app/locale/ko_KO/Zendesk_Zendesk.csv +98 -0
  100. app/locale/ko_KR/Zendesk_Zendesk.csv +1 -1
  101. app/locale/nl_NL/Zendesk_Zendesk.csv +1 -1
  102. app/locale/no_NO/Zendesk_Zendesk.csv +98 -0
  103. app/locale/pt_BR/Zendesk_Zendesk.csv +1 -1
  104. app/locale/pt_PT/Zendesk_Zendesk.csv +98 -0
  105. app/locale/ru_RU/Zendesk_Zendesk.csv +1 -1
  106. app/locale/sv_SV/Zendesk_Zendesk.csv +98 -0
  107. app/locale/tr_TR/Zendesk_Zendesk.csv +98 -0
  108. app/locale/uk_UK/Zendesk_Zendesk.csv +98 -0
  109. app/locale/zh_CN/Zendesk_Zendesk.csv +0 -0
  110. app/locale/zh_TW/Zendesk_Zendesk.csv +1 -1
  111. js/zendesk/validation.js +16 -0
  112. package.xml +11 -24
  113. skin/adminhtml/default/default/zendesk/button.png +0 -0
  114. skin/adminhtml/default/default/zendesk/icon.png +0 -0
  115. skin/adminhtml/default/default/zendesk/zendesk-tab.png +0 -0
  116. skin/adminhtml/default/default/zendesk/zendesk.css +40 -1
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/Generate.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/MagentoTest.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/Signup.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/Sync.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2013 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
+ class Zendesk_Zendesk_Block_Adminhtml_Config_Buttons_Sync extends Mage_Adminhtml_Block_System_Config_Form_Field
19
+ {
20
+ protected function _prepareLayout()
21
+ {
22
+ parent::_prepareLayout();
23
+ if (!$this->getTemplate()) {
24
+ $this->setTemplate('zendesk/config/button-sync.phtml');
25
+ }
26
+ return $this;
27
+ }
28
+
29
+ public function render(Varien_Data_Form_Element_Abstract $element)
30
+ {
31
+ $element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
32
+ return parent::render($element);
33
+ }
34
+
35
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
36
+ {
37
+ $originalData = $element->getOriginalData();
38
+ $this->addData(array(
39
+ 'button_label' => Mage::helper('zendesk')->__($originalData['button_label']),
40
+ 'html_id' => $element->getHtmlId(),
41
+ 'url' => Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/zendesk/sync')
42
+ ));
43
+
44
+ return $this->_toHtml();
45
+ }
46
+
47
+ public function getTestUrl()
48
+ {
49
+ return Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/zendesk/sync');
50
+ }
51
+
52
+ public function getAuthHeader()
53
+ {
54
+ return 'Token token="' . Mage::helper('zendesk')->getApiToken(false) . '"';
55
+ }
56
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Buttons/ZendeskTest.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Config/Link.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Customer.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Block_Adminhtml_Create_Customer extends Mage_Adminhtml_Block_Widget_Form_Container
19
+ {
20
+
21
+ public function __construct()
22
+ {
23
+ parent::__construct();
24
+ $this->setId('zendesk_create_customer_search');
25
+ }
26
+
27
+ public function getHeaderText()
28
+ {
29
+ return Mage::helper('zendesk')->__('Please Select User to Add');
30
+ }
31
+
32
+ public function getButtonsHtml()
33
+ {
34
+ $addButtonData = array(
35
+ 'label' => Mage::helper('zendesk')->__('Select User'),
36
+ 'onclick' => 'showUsers()',
37
+ 'id' => 'show-users'
38
+ );
39
+ return $this->getLayout()->createBlock('adminhtml/widget_button')->setData($addButtonData)->toHtml();
40
+ }
41
+
42
+ public function getHeaderCssClass()
43
+ {
44
+ return 'head-catalog-customer';
45
+ }
46
+
47
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Customer/Grid.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Block_Adminhtml_Create_Customer_Grid extends Mage_Adminhtml_Block_Widget_Grid
19
+ {
20
+
21
+ public function __construct()
22
+ {
23
+ parent::__construct();
24
+ $this->setId('zendesk_create_customer_search_grid');
25
+ $this->setDefaultSort('entity_id');
26
+ $this->setUseAjax(true);
27
+ if ($this->getRequest()->getParam('collapse')) {
28
+ $this->setIsCollapsed(true);
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Retrieve quote store object
34
+ * @return Mage_Core_Model_Store
35
+ */
36
+ public function getStore()
37
+ {
38
+ return Mage::getSingleton('adminhtml/session_quote')->getStore();
39
+ }
40
+
41
+ /**
42
+ * Prepare collection to be displayed in the grid
43
+ *
44
+ * @return Mage_Adminhtml_Block_Sales_Order_Create_Search_Grid
45
+ */
46
+ protected function _prepareCollection()
47
+ {
48
+ $collection = Mage::getModel('customer/customer')->getCollection()
49
+ ->addAttributeToSelect('firstname')
50
+ ->addAttributeToSelect('lastname')
51
+ ->addAttributeToSelect('email');
52
+
53
+
54
+ $this->setCollection($collection);
55
+ return parent::_prepareCollection();
56
+ }
57
+
58
+ /**
59
+ * Prepare columns
60
+ *
61
+ * @return Mage_Adminhtml_Block_Sales_Order_Create_Search_Grid
62
+ */
63
+ protected function _prepareColumns()
64
+ {
65
+ $this->addColumn('entity_id', array(
66
+ 'header' => Mage::helper('zendesk')->__('ID'),
67
+ 'sortable' => true,
68
+ 'width' => '60',
69
+ 'index' => 'entity_id'
70
+ ));
71
+ $this->addColumn('firstname', array(
72
+ 'header' => Mage::helper('zendesk')->__('Firstname'),
73
+ 'index' => 'firstname'
74
+ ));
75
+ $this->addColumn('lastname', array(
76
+ 'header' => Mage::helper('zendesk')->__('Lastname'),
77
+ 'index' => 'lastname'
78
+ ));
79
+ $this->addColumn('email', array(
80
+ 'header' => Mage::helper('zendesk')->__('Email'),
81
+ 'index' => 'email'
82
+ ));
83
+ $this->addColumn('action', array(
84
+ 'header' => Mage::helper('zendesk')->__('Action'),
85
+ 'renderer' => 'zendesk/adminhtml_create_customer_grid_renderer_action',
86
+ 'filter' => false,
87
+ 'sortable' => false
88
+ ));
89
+
90
+ return parent::_prepareColumns();
91
+ }
92
+
93
+ public function getGridUrl()
94
+ {
95
+ return $this->getUrl('adminhtml/zendesk/loadBlock', array('block'=>'customer_grid', '_current' => true, 'collapse' => null));
96
+ }
97
+
98
+ public function getRowUrl($row)
99
+ {
100
+ return "";
101
+ }
102
+
103
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Customer/Grid/Renderer/Action.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Block_Adminhtml_Create_Customer_Grid_Renderer_Action extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
+ {
20
+ public function render(Varien_Object $row)
21
+ {
22
+ if ($row->getId()) {
23
+ return "<button title='".Mage::helper('zendesk')->__('Add')."' type='button' class='scalable' onclick='javascript:insertUser(".$row->getId()."); return false;'><span><span><span>".Mage::helper('zendesk')->__('Add')."</span></span></span></button>";
24
+ }
25
+ }
26
+
27
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Edit.php CHANGED
@@ -19,8 +19,7 @@ class Zendesk_Zendesk_Block_Adminhtml_Create_Edit extends Mage_Adminhtml_Block_W
19
  {
20
  protected function _construct()
21
  {
22
- parent::_construct();
23
- $this->_controller = FALSE;
24
  }
25
 
26
  protected function _preparelayout()
19
  {
20
  protected function _construct()
21
  {
22
+ parent::_construct();
 
23
  }
24
 
25
  protected function _preparelayout()
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Edit/Form.php CHANGED
@@ -105,8 +105,8 @@ class Zendesk_Zendesk_Block_Adminhtml_Create_Edit_form extends Mage_Adminhtml_Bl
105
 
106
  $fieldset->addField('order', 'text', array(
107
  'name' => 'order',
108
- 'label' => Mage::helper('zendesk')->__('Order number'),
109
- 'title' => Mage::helper('zendesk')->__('Order number'),
110
  'required' => false
111
  ));
112
 
@@ -116,8 +116,11 @@ class Zendesk_Zendesk_Block_Adminhtml_Create_Edit_form extends Mage_Adminhtml_Bl
116
  'title' => Mage::helper('zendesk')->__('Description'),
117
  'required' => true
118
  ));
 
 
 
 
119
 
120
- $form->setValues(Mage::registry('zendesk_create_data'));
121
  $form->setUseContainer(true);
122
  $form->setMethod('post');
123
  $this->setForm($form);
105
 
106
  $fieldset->addField('order', 'text', array(
107
  'name' => 'order',
108
+ 'label' => Mage::helper('zendesk')->__('Order Number'),
109
+ 'title' => Mage::helper('zendesk')->__('Order Number'),
110
  'required' => false
111
  ));
112
 
116
  'title' => Mage::helper('zendesk')->__('Description'),
117
  'required' => true
118
  ));
119
+
120
+ if (Mage::registry('zendesk_create_data')) {
121
+ $form->setValues(Mage::registry('zendesk_create_data'));
122
+ }
123
 
 
124
  $form->setUseContainer(true);
125
  $form->setMethod('post');
126
  $this->setForm($form);
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Block_Adminhtml_Create_Order extends Mage_Adminhtml_Block_Widget_Form_Container
19
+ {
20
+
21
+ public function __construct()
22
+ {
23
+ parent::__construct();
24
+ $this->setId('zendesk_create_order_search');
25
+ }
26
+
27
+ public function getHeaderText()
28
+ {
29
+ return Mage::helper('zendesk')->__('Please Select Order to Add');
30
+ }
31
+
32
+ public function getButtonsHtml()
33
+ {
34
+ $addButtonData = array(
35
+ 'label' => Mage::helper('zendesk')->__('Select Order'),
36
+ 'onclick' => 'showOrders()',
37
+ 'id' => 'show-orders'
38
+ );
39
+ return $this->getLayout()->createBlock('adminhtml/widget_button')->setData($addButtonData)->toHtml();
40
+ }
41
+
42
+ public function getHeaderCssClass()
43
+ {
44
+ return 'head-catalog-order';
45
+ }
46
+
47
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order/Grid.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Block_Adminhtml_Create_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
19
+ {
20
+
21
+ public function __construct()
22
+ {
23
+ parent::__construct();
24
+ $this->setId('zendesk_create_order_search_grid');
25
+ $this->setDefaultSort('entity_id');
26
+ $this->setUseAjax(true);
27
+ if ($this->getRequest()->getParam('collapse')) {
28
+ $this->setIsCollapsed(true);
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Retrieve quote store object
34
+ * @return Mage_Core_Model_Store
35
+ */
36
+ public function getStore()
37
+ {
38
+ return Mage::getSingleton('adminhtml/session_quote')->getStore();
39
+ }
40
+
41
+ /**
42
+ * Retrieve collection class
43
+ *
44
+ * @return string
45
+ */
46
+ protected function _getCollectionClass()
47
+ {
48
+ return 'sales/order_grid_collection';
49
+ }
50
+
51
+ protected function _prepareCollection()
52
+ {
53
+ $collection = Mage::getResourceModel($this->_getCollectionClass());
54
+ $this->setCollection($collection);
55
+ return parent::_prepareCollection();
56
+ }
57
+
58
+ /**
59
+ * Prepare columns
60
+ *
61
+ * @return Mage_Adminhtml_Block_Sales_Order_Create_Search_Grid
62
+ */
63
+ protected function _prepareColumns()
64
+ {
65
+ $this->addColumn('real_order_id', array(
66
+ 'header'=> Mage::helper('sales')->__('Order #'),
67
+ 'width' => '80px',
68
+ 'type' => 'text',
69
+ 'index' => 'increment_id',
70
+ ));
71
+
72
+ if (!Mage::app()->isSingleStoreMode()) {
73
+ $this->addColumn('store_id', array(
74
+ 'header' => Mage::helper('sales')->__('Purchased From (Store)'),
75
+ 'index' => 'store_id',
76
+ 'type' => 'store',
77
+ 'store_view'=> true,
78
+ 'display_deleted' => true,
79
+ ));
80
+ }
81
+
82
+ $this->addColumn('created_at', array(
83
+ 'header' => Mage::helper('sales')->__('Purchased On'),
84
+ 'index' => 'created_at',
85
+ 'type' => 'datetime',
86
+ 'width' => '100px',
87
+ ));
88
+
89
+ $this->addColumn('billing_name', array(
90
+ 'header' => Mage::helper('sales')->__('Bill to Name'),
91
+ 'index' => 'billing_name',
92
+ ));
93
+
94
+ $this->addColumn('shipping_name', array(
95
+ 'header' => Mage::helper('sales')->__('Ship to Name'),
96
+ 'index' => 'shipping_name',
97
+ ));
98
+
99
+ $this->addColumn('base_grand_total', array(
100
+ 'header' => Mage::helper('sales')->__('G.T. (Base)'),
101
+ 'index' => 'base_grand_total',
102
+ 'type' => 'currency',
103
+ 'currency' => 'base_currency_code',
104
+ ));
105
+
106
+ $this->addColumn('grand_total', array(
107
+ 'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
108
+ 'index' => 'grand_total',
109
+ 'type' => 'currency',
110
+ 'currency' => 'order_currency_code',
111
+ ));
112
+
113
+ $this->addColumn('status', array(
114
+ 'header' => Mage::helper('sales')->__('Status'),
115
+ 'index' => 'status',
116
+ 'type' => 'options',
117
+ 'width' => '70px',
118
+ 'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
119
+ ));
120
+
121
+ $this->addColumn('action', array(
122
+ 'header' => Mage::helper('zendesk')->__('Action'),
123
+ 'renderer' => 'zendesk/adminhtml_create_order_grid_renderer_action',
124
+ 'filter' => false,
125
+ 'sortable' => false
126
+ ));
127
+
128
+ return parent::_prepareColumns();
129
+ }
130
+
131
+ public function getGridUrl()
132
+ {
133
+ return $this->getUrl('adminhtml/zendesk/loadBlock', array('block'=>'order_grid', '_current' => true, 'collapse' => null));
134
+ }
135
+
136
+ public function getRowUrl($row)
137
+ {
138
+ return "";
139
+ }
140
+
141
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order/Grid/Renderer/Action.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Block_Adminhtml_Create_Order_Grid_Renderer_Action extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
19
+ {
20
+ public function render(Varien_Object $row)
21
+ {
22
+ if ($row->getId()) {
23
+ return "<button title='".Mage::helper('zendesk')->__('Add')."' type='button' class='scalable' onclick='javascript:insertOrder(".$row->getId()."); return false;'><span><span><span>".Mage::helper('zendesk')->__('Add')."</span></span></span></button>";
24
+ }
25
+ }
26
+
27
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Copyright 2012 Zendesk.
4
  *
@@ -14,24 +15,28 @@
14
  * See the License for the specific language governing permissions and
15
  * limitations under the License.
16
  */
 
17
 
18
- class Zendesk_Zendesk_Block_Adminhtml_Dashboard extends Mage_Adminhtml_Block_Template
19
- {
20
-
21
- public function __construct()
22
- {
23
  parent::__construct();
 
24
  $this->setTemplate('zendesk/dashboard/index.phtml');
25
  }
26
 
27
- public function getIsZendeskDashboard()
28
- {
29
- $controller = Mage::app()->getFrontController()->getRequest()->getControllerName();
 
 
 
 
 
 
 
 
 
30
 
31
- if($controller == 'zendesk') {
32
- return true;
33
- } else {
34
- return false;
35
- }
36
  }
37
  }
1
  <?php
2
+
3
  /**
4
  * Copyright 2012 Zendesk.
5
  *
15
  * See the License for the specific language governing permissions and
16
  * limitations under the License.
17
  */
18
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard extends Mage_Adminhtml_Block_Template {
19
 
20
+ public function __construct() {
 
 
 
 
21
  parent::__construct();
22
+
23
  $this->setTemplate('zendesk/dashboard/index.phtml');
24
  }
25
 
26
+ public function getIsZendeskDashboard() {
27
+ return Mage::app()->getFrontController()->getRequest()->getControllerName() === 'zendesk';
28
+ }
29
+
30
+ public function getAuthHeader() {
31
+ return 'Token token="' . Mage::helper('zendesk')->getApiToken(false) . '"';
32
+ }
33
+
34
+ public function isConnected() {
35
+ $connection = Mage::helper('zendesk')->getConnectionStatus();
36
+ return $connection['success'];
37
+ }
38
 
39
+ public function getTotals() {
40
+ return Mage::helper("zendesk")->getTicketTotals();
 
 
 
41
  }
42
  }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Grids.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Copyright 2012 Zendesk.
4
  *
@@ -15,55 +16,84 @@
15
  * limitations under the License.
16
  */
17
 
18
- class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Grids extends Mage_Adminhtml_Block_Widget_Tabs
19
- {
20
- public function __construct()
21
- {
22
  parent::__construct();
 
23
  $this->setId('tickets_grid_tab');
24
  $this->setDestElementId('tickets_grid_tab_content');
25
  $this->setTemplate('widget/tabshoriz.phtml');
26
  }
27
-
28
- protected function _prepareLayout()
29
- {
30
  // Check if we are on the main admin dashboard and, if so, whether we should be showing the grid
31
  // Note: an additional check in the template is needed, but this will prevent unnecessary API calls to Zendesk
32
- if(!$this->getIsZendeskDashboard() && !Mage::getStoreConfig('zendesk/features/show_on_dashboard')) {
 
33
  return parent::_prepareLayout();
34
  }
35
 
36
- $views = null;
37
- $first = true;
 
38
 
39
- if(Mage::getStoreConfig('zendesk/features/show_views')) {
40
- $list = trim(trim(Mage::getStoreConfig('zendesk/features/show_views')), ',');
41
- $views = explode(',', $list);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  }
43
 
44
- if($views && count($views)) {
45
- foreach($views as $viewId) {
46
- try {
47
- $view = Mage::getModel('zendesk/api_views')->get($viewId);
48
-
49
- $tab = array(
50
- 'label' => $this->__($view['title']),
51
- 'content' => $this->getLayout()->createBlock('zendesk/adminhtml_dashboard_tab_view')->setView($view)->toHtml(),
52
- );
53
 
54
- if($first) {
55
- $tab['active'] = true;
56
- $first = false;
57
- }
58
-
59
- $this->addTab($viewId, $tab);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
- } catch(Exception $e) {
62
- // Just don't add the tab
 
 
63
  }
64
  }
65
  } else {
66
- if($this->getIsZendeskDashboard()) {
67
  $block = $this->getLayout()->createBlock('core/template', 'zendesk_dashboard_empty')->setTemplate('zendesk/dashboard/empty.phtml');
68
  $this->getLayout()->getBlock('zendesk_dashboard')->append($block);
69
  }
@@ -71,15 +101,8 @@ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Grids extends Mage_Adminhtml_Blo
71
 
72
  return parent::_prepareLayout();
73
  }
74
-
75
- public function getIsZendeskDashboard()
76
- {
77
- $controller = Mage::app()->getFrontController()->getRequest()->getControllerName();
78
-
79
- if($controller == 'zendesk') {
80
- return true;
81
- } else {
82
- return false;
83
- }
84
  }
85
  }
1
  <?php
2
+
3
  /**
4
  * Copyright 2012 Zendesk.
5
  *
16
  * limitations under the License.
17
  */
18
 
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Grids extends Mage_Adminhtml_Block_Widget_Tabs {
20
+
21
+ public function __construct() {
 
22
  parent::__construct();
23
+
24
  $this->setId('tickets_grid_tab');
25
  $this->setDestElementId('tickets_grid_tab_content');
26
  $this->setTemplate('widget/tabshoriz.phtml');
27
  }
28
+
29
+ protected function _prepareLayout() {
 
30
  // Check if we are on the main admin dashboard and, if so, whether we should be showing the grid
31
  // Note: an additional check in the template is needed, but this will prevent unnecessary API calls to Zendesk
32
+ if ( !$this->getIsZendeskDashboard() && !Mage::getStoreConfig('zendesk/backend_features/show_on_dashboard') )
33
+ {
34
  return parent::_prepareLayout();
35
  }
36
 
37
+ //check if module is setted up
38
+ $configured = (bool) Mage::getStoreConfig('zendesk/general/domain');
39
+ $viewsIds = Mage::getStoreConfig('zendesk/backend_features/show_views') ? Mage::helper('zendesk')->getChosenViews() : array();
40
 
41
+ if( Mage::getStoreConfig('zendesk/backend_features/show_all') AND $configured) {
42
+ $all = array(
43
+ 'class' => 'ajax',
44
+ 'url' => $this->getUrl('zendesk/adminhtml_zendesk/ticketsAll'),
45
+ );
46
+ $label = $this->__("All tickets");
47
+
48
+ $all_count = Mage::registry('zendesk_tickets_all');
49
+ if (!$all_count) {
50
+ $this->getLayout()->createBlock('zendesk/adminhtml_dashboard_tab_tickets_grid_all')->toHtml();
51
+ $all_count = Mage::registry('zendesk_tickets_all');
52
+ }
53
+
54
+ $label .= " (" . $all_count . ")";
55
+
56
+ $all['label'] = $label;
57
+ $this->addTab('all-tickets', $all);
58
  }
59
 
60
+ if(count($viewsIds) AND $configured) {
61
+ try {
62
+ $allTicketView = Mage::getModel('zendesk/api_views')->active();
63
+ $ticketsCounts = Mage::getModel('zendesk/api_views')->countByIds($viewsIds);
 
 
 
 
 
64
 
65
+ } catch (Exception $ex) {
66
+ $allTicketView = array();
67
+ }
68
+
69
+ foreach($viewsIds as $viewId) {
70
+ $view = array_shift(array_filter($allTicketView, function($view) use($viewId) {
71
+ return $view['id'] === (int) $viewId;
72
+ }));
73
+
74
+ $count = array_shift(array_filter($ticketsCounts['view_counts'], function($view) use($viewId) {
75
+ return $view['view_id'] === (int) $viewId;
76
+ }));
77
+
78
+ if($count['value']) {
79
+ $label = $view['title'] . ' (' . $count['value'] . ')';
80
+ $this->addTab($viewId, array(
81
+ 'label' => $label,
82
+ 'class' => 'ajax',
83
+ 'url' => $this->getUrl('zendesk/adminhtml_zendesk/ticketsView', array('viewid' => $viewId)),
84
+ ));
85
+ } else {
86
+ Mage::unregister('zendesk_tickets_view');
87
+ Mage::register('zendesk_tickets_view', $viewId);
88
 
89
+ $this->addTab($viewId, array(
90
+ 'content' => $this->getLayout()->createBlock('zendesk/adminhtml_dashboard_tab_tickets_grid_view')->toHtml(),
91
+ 'label' => $view['title'] . ' (' . Mage::registry('zendesk_tickets_view_'.$viewId) . ')'
92
+ ));
93
  }
94
  }
95
  } else {
96
+ if ($this->getIsZendeskDashboard() AND !Mage::getStoreConfig('zendesk/backend_features/show_all')) {
97
  $block = $this->getLayout()->createBlock('core/template', 'zendesk_dashboard_empty')->setTemplate('zendesk/dashboard/empty.phtml');
98
  $this->getLayout()->getBlock('zendesk_dashboard')->append($block);
99
  }
101
 
102
  return parent::_prepareLayout();
103
  }
104
+
105
+ public function getIsZendeskDashboard() {
106
+ return Mage::app()->getFrontController()->getRequest()->getControllerName() === 'zendesk';
 
 
 
 
 
 
 
107
  }
108
  }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Abstract.php ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ abstract class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Abstract extends Mage_Adminhtml_Block_Widget_Grid {
20
+ protected $_page;
21
+ protected $_limit;
22
+ protected $_viewId;
23
+
24
+ protected $_defaultLimit = 20;
25
+ protected $_defaultPage = 1;
26
+ protected $_defaultSort = 'created_at';
27
+ protected $_defaultDir = 'desc';
28
+
29
+ protected abstract function _getCollection($collection);
30
+
31
+ protected function _getCollectionModel() {
32
+ return Mage::getModel('zendesk/resource_tickets_collection');
33
+ }
34
+
35
+ public function setViewId($id = null) {
36
+ $this->_viewId = (is_null($id) ? uniqid() : $id);
37
+ }
38
+
39
+ public function __construct($attributes = array()) {
40
+ parent::__construct($attributes);
41
+
42
+ $this->_defaultSort = Mage::getStoreConfig('zendesk/backend_features/default_sort');
43
+ $this->_defaultDir = Mage::getStoreConfig('zendesk/backend_features/default_sort_dir');
44
+
45
+ $this->setTemplate('zendesk/widget/grid.phtml');
46
+
47
+ $this->_emptyText = Mage::helper('zendesk')->__('No tickets found');
48
+ }
49
+
50
+ protected function _construct() {
51
+ parent::_construct();
52
+
53
+ $this->setMassactionBlockName('zendesk/adminhtml_dashboard_tab_tickets_grid_massaction');
54
+ $this->setId('zendesk_tab_tickets_grid_' . $this->_viewId);
55
+ $this->setSaveParametersInSession(true);
56
+ $this->setUseAjax(true);
57
+
58
+ if ($this->getRequest()->getParam('collapse')) {
59
+ $this->setIsCollapsed(true);
60
+ }
61
+
62
+ $this->_page = (int) $this->getParam( $this->getVarNamePage(), $this->_defaultPage);
63
+ $this->_limit = (int) $this->getParam( $this->getVarNameLimit(), $this->_defaultLimit);
64
+ }
65
+
66
+ protected function _preparePage() {
67
+ parent::_preparePage();
68
+
69
+ $this->_page = (int) $this->getParam($this->getVarNamePage(), $this->_defaultPage);
70
+ $this->_limit = (int) $this->getParam($this->getVarNameLimit(), $this->_defaultLimit);
71
+ }
72
+
73
+ protected function _prepareCollection() {
74
+ if( ! $this->getCollection() ) {
75
+ $collection = $this->_getCollectionModel();
76
+ $filter = $this->getParam('filter');
77
+ $filterData = Mage::helper('adminhtml')->prepareFilterString($filter);
78
+
79
+ foreach($filterData as $fieldName => $value) {
80
+ $collection->addFieldToFilter($fieldName, $value);
81
+ }
82
+
83
+ $this->setDefaultLimit( $this->getParam('limit', $this->_defaultLimit) );
84
+ $this->setCollection( $this->_getCollection($collection) );
85
+ }
86
+
87
+ return parent::_prepareCollection();
88
+ }
89
+
90
+ protected function _prepareMassaction() {
91
+ parent::_prepareMassaction();
92
+
93
+ $this->setMassactionIdField('id');
94
+ $this->getMassactionBlock()->setFormFieldName('id');
95
+
96
+ $formKey = Mage::getSingleton('core/session')->getFormKey();
97
+
98
+ $this->getMassactionBlock()->addItem('delete', array(
99
+ 'label' => Mage::helper('zendesk')->__('Delete'),
100
+ 'url' => $this->getUrl('*/adminhtml_zendesk/bulkDelete', array('form_key' => $formKey, '_current' => true)),
101
+ 'confirm' => Mage::helper('zendesk')->__('Are you sure you want to delete selected tickets?')
102
+ ));
103
+
104
+ $this->getMassactionBlock()->addItem('change_status', array(
105
+ 'label' => Mage::helper('zendesk')->__('Change Status'),
106
+ 'url' => $this->getUrl('*/adminhtml_zendesk/bulkChangeStatus', array('form_key' => $formKey, '_current' => true)),
107
+ 'confirm' => Mage::helper('zendesk')->__('Are you sure you want to change status of selected tickets?'),
108
+ 'additional' => array(
109
+ 'visibility' => array(
110
+ 'name' => 'status',
111
+ 'type' => 'select',
112
+ 'class' => 'required-entry',
113
+ 'label' => Mage::helper('zendesk')->__('Status'),
114
+ 'values' => Mage::helper('zendesk')->getStatusMap()
115
+ )
116
+ )
117
+ ));
118
+
119
+ $this->getMassactionBlock()->addItem('change_priority', array(
120
+ 'label' => Mage::helper('zendesk')->__('Change Priority'),
121
+ 'url' => $this->getUrl('*/adminhtml_zendesk/bulkChangePriority', array('form_key' => $formKey, '_current' => true)),
122
+ 'confirm' => Mage::helper('zendesk')->__('Are you sure you want to change priority of selected tickets?'),
123
+ 'additional' => array(
124
+ 'visibility' => array(
125
+ 'name' => 'priority',
126
+ 'type' => 'select',
127
+ 'class' => 'required-entry',
128
+ 'label' => Mage::helper('zendesk')->__('Priority'),
129
+ 'values' => Mage::helper('zendesk')->getPriorityMap()
130
+ )
131
+ )
132
+ ));
133
+
134
+ $this->getMassactionBlock()->addItem('change_type', array(
135
+ 'label' => Mage::helper('zendesk')->__('Change Type'),
136
+ 'url' => $this->getUrl('*/adminhtml_zendesk/bulkChangeType', array('form_key' => $formKey, '_current' => true)),
137
+ 'confirm' => Mage::helper('zendesk')->__('Are you sure you want to change type of selected tickets?'),
138
+ 'additional' => array(
139
+ 'visibility' => array(
140
+ 'name' => 'type',
141
+ 'type' => 'select',
142
+ 'class' => 'required-entry',
143
+ 'label' => Mage::helper('zendesk')->__('Type'),
144
+ 'values' => Mage::helper('zendesk')->getTypeMap()
145
+ )
146
+ )
147
+ ));
148
+
149
+ $this->getMassactionBlock()->addItem('mark_as_spam', array(
150
+ 'label' => Mage::helper('zendesk')->__('Mark as Spam'),
151
+ 'url' => $this->getUrl('*/adminhtml_zendesk/bulkMarkSpam', array('form_key' => $formKey, '_current' => true)),
152
+ 'confirm' => Mage::helper('zendesk')->__('Are you sure you want to mark as spam selected tickets?'),
153
+ ));
154
+
155
+ return $this;
156
+ }
157
+
158
+ protected function getNoFilterMassactionColumn(){
159
+ return true;
160
+ }
161
+
162
+ protected function addColumnBasedOnType($index, $title, $filter = false, $sortable = true) {
163
+ $column = array(
164
+ 'header' => Mage::helper('zendesk')->__($title),
165
+ 'sortable' => $sortable,
166
+ 'filter' => $filter,
167
+ 'index' => $index,
168
+ 'type' => $this->getColumnType($index),
169
+ );
170
+
171
+ $renderer = $this->getColumnRenderer($index);
172
+
173
+ if($renderer !== null) {
174
+ $column['renderer'] = $renderer;
175
+ }
176
+
177
+ $this->addColumn($index, $column);
178
+ }
179
+
180
+ protected function getColumnType($index) {
181
+ switch($index) {
182
+ case 'created_at':
183
+ case 'created':
184
+ case 'requested':
185
+ case 'updated_at':
186
+ case 'updated':
187
+ return 'datetime';
188
+ default:
189
+ return 'text';
190
+ }
191
+ }
192
+
193
+ protected function getColumnRenderer($index) {
194
+ switch($index) {
195
+ case 'requester':
196
+ case 'assignee':
197
+ return 'zendesk/adminhtml_dashboard_tab_tickets_grid_renderer_user';
198
+ case 'subject':
199
+ return 'zendesk/adminhtml_dashboard_tab_tickets_grid_renderer_action';
200
+ case 'group':
201
+ return 'zendesk/adminhtml_dashboard_tab_tickets_grid_renderer_group';
202
+ default:
203
+ return null;
204
+ }
205
+ }
206
+
207
+ protected function getGridParams() {
208
+ return array(
209
+ 'page' => $this->_page,
210
+ 'per_page' => $this->_limit,
211
+ 'sort_order' => $this->getParam( $this->getVarNameDir(), $this->_defaultDir),
212
+ 'sort_by' => $this->getParam( $this->getVarNameSort(), $this->_defaultSort),
213
+ );
214
+ }
215
+
216
+ public function getGridJavascript()
217
+ {
218
+ $js = $this->getJsObjectName()."= new varienGrid('".$this->getId()."', '".$this->getGridUrl()."', '".$this->getVarNamePage()."', '".$this->getVarNameSort()."', '".$this->getVarNameDir()."', '".$this->getVarNameFilter()."');";
219
+ $js .= $this->getJsObjectName() .".useAjax = '".$this->getUseAjax()."';";
220
+
221
+ if($this->getRowClickCallback())
222
+ $js .= $this->getJsObjectName() .".rowClickCallback = ".$this->getRowClickCallback().";";
223
+
224
+ if($this->getCheckboxCheckCallback())
225
+ $js .= $this->getJsObjectName().".checkboxCheckCallback = ".$this->getCheckboxCheckCallback().";";
226
+
227
+ if($this->getRowInitCallback()) {
228
+ $js .= $this->getJsObjectName().".initRowCallback = ".$this->getRowInitCallback().";";
229
+ $js .= $this->getJsObjectName().".initGridRows();";
230
+ }
231
+
232
+ if($this->getMassactionBlock()->isAvailable())
233
+ $js .= $this->getMassactionBlock()->getJavaScript();
234
+
235
+ $js .= $this->getAdditionalJavaScript();
236
+
237
+ return $js;
238
+ }
239
+
240
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/All.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_All extends Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Abstract {
20
+
21
+ public function __construct($attributes = array()) {
22
+ $this->setViewId('all');
23
+
24
+ parent::__construct($attributes);
25
+ }
26
+
27
+ protected function _getCollection($collection) {
28
+ return $collection->getCollection($this->getGridParams());
29
+ }
30
+
31
+ public function getGridUrl() {
32
+ return $this->getUrl('*/*/ticketsAll', array('_current' => true));
33
+ }
34
+
35
+ protected function _prepareColumns() {
36
+ $this->addColumn('id', array(
37
+ 'header' => Mage::helper('zendesk')->__('Ticket ID'),
38
+ 'sortable' => false,
39
+ 'align' => 'right',
40
+ 'width' => '30px',
41
+ 'index' => 'id',
42
+ ));
43
+
44
+ $this->addColumn('subject', array(
45
+ 'header' => Mage::helper('zendesk')->__('Subject'),
46
+ 'sortable' => false,
47
+ 'index' => 'description',
48
+ 'type' => 'text',
49
+ 'renderer' => 'zendesk/adminhtml_dashboard_tab_tickets_grid_renderer_action',
50
+ ));
51
+
52
+ $this->addColumn('requester_id', array(
53
+ 'header' => Mage::helper('zendesk')->__('Email'),
54
+ 'width' => '60',
55
+ 'renderer' => 'zendesk/adminhtml_dashboard_tab_tickets_grid_renderer_email',
56
+ 'index' => 'requester_id',
57
+ 'sortable' => false,
58
+ ));
59
+
60
+ $this->addColumn('type', array(
61
+ 'header' => Mage::helper('zendesk')->__('Type'),
62
+ 'width' => '100',
63
+ 'type' => 'options',
64
+ 'options' => Mage::helper('zendesk')->getTypeMap(),
65
+ 'index' => 'type',
66
+ 'sortable' => false,
67
+ ));
68
+
69
+ $this->addColumn('status', array(
70
+ 'header' => Mage::helper('zendesk')->__('Status'),
71
+ 'sortable' => true,
72
+ 'width' => '100px',
73
+ 'index' => 'status',
74
+ 'type' => 'options',
75
+ 'options' => Mage::helper('zendesk')->getStatusMap(),
76
+ ));
77
+
78
+ $this->addColumn('priority', array(
79
+ 'header' => Mage::helper('zendesk')->__('Priority'),
80
+ 'sortable' => true,
81
+ 'width' => '100px',
82
+ 'index' => 'priority',
83
+ 'type' => 'options',
84
+ 'options' => Mage::helper('zendesk')->getPriorityMap(),
85
+ ));
86
+
87
+ $this->addColumn('created_at', array(
88
+ 'header' => Mage::helper('zendesk')->__('Requested'),
89
+ 'sortable' => true,
90
+ 'width' => '160px',
91
+ 'index' => 'created_at',
92
+ 'type' => 'datetime',
93
+ ));
94
+
95
+ $this->addColumn('updated_at', array(
96
+ 'header' => Mage::helper('zendesk')->__('Updated'),
97
+ 'sortable' => true,
98
+ 'width' => '160px',
99
+ 'index' => 'updated_at',
100
+ 'type' => 'datetime',
101
+ ));
102
+
103
+ return parent::_prepareColumns();
104
+ }
105
+
106
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Massaction.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Massaction extends Mage_Adminhtml_Block_Widget_Grid_Massaction {
20
+
21
+ public function getJavaScript() {
22
+ return " {$this->getJsObjectName()} = new varienGridMassaction('{$this->getHtmlId()}', "
23
+ . "{$this->getGridJsObjectName()}, '{$this->getSelectedJson()}'"
24
+ . ", '{$this->getFormFieldNameInternal()}', '{$this->getFormFieldName()}');"
25
+ . "{$this->getJsObjectName()}.setItems({$this->getItemsJson()}); "
26
+ . "{$this->getJsObjectName()}.setGridIds('{$this->getGridIdsJson()}');"
27
+ . ($this->getUseAjax() ? "{$this->getJsObjectName()}.setUseAjax(true);" : '')
28
+ . ($this->getUseSelectAll() ? "{$this->getJsObjectName()}.setUseSelectAll(true);" : '')
29
+ . "{$this->getJsObjectName()}.errorText = '{$this->getErrorText()}';";
30
+ }
31
+
32
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Action.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Renderer_Action extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
20
+
21
+ public function render(Varien_Object $row) {
22
+ return Mage::helper('zendesk')->getTicketUrl($row->getData());
23
+ }
24
+
25
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Email.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Renderer_Email extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
20
+
21
+ public function render(Varien_Object $row) {
22
+ $users = Mage::registry('zendesk_users');
23
+ $value = (int) $row->getData($this->getColumn()->getIndex());
24
+
25
+ $found = array_filter($users, function($user) use($value) {
26
+ return (int) $user['id'] === $value;
27
+ });
28
+
29
+ if( count($found) ) {
30
+ $user = array_shift($found);
31
+
32
+ return $user['email'];
33
+ }
34
+
35
+ return '';
36
+ }
37
+
38
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Group.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Renderer_Group extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
20
+
21
+ public function render(Varien_Object $row) {
22
+ $groups = Mage::registry('zendesk_groups');
23
+ $value = (int) $row->getData($this->getColumn()->getIndex());
24
+
25
+ $found = array_filter($groups, function($group) use($value) {
26
+ return (int) $group['id'] === $value;
27
+ });
28
+
29
+ if( count($found) ) {
30
+ $group = array_shift($found);
31
+
32
+ return $group['name'];
33
+ }
34
+
35
+ return '';
36
+ }
37
+
38
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/Type.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Renderer_Type extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
20
+
21
+ public function render(Varien_Object $row) {
22
+ return ucfirst($row['type']);
23
+ }
24
+
25
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/Renderer/User.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Renderer_User extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
20
+
21
+ public function render(Varien_Object $row) {
22
+ $users = Mage::registry('zendesk_users');
23
+ $value = (int) $row->getData($this->getColumn()->getIndex());
24
+
25
+ $found = array_filter($users, function($user) use($value) {
26
+ return (int) $user['id'] === $value;
27
+ });
28
+
29
+ if( count($found) ) {
30
+ $user = array_shift($found);
31
+
32
+ return $user['name'];
33
+ }
34
+
35
+ return '';
36
+ }
37
+
38
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Tab/Tickets/Grid/View.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_View extends Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_Tickets_Grid_Abstract {
20
+
21
+ public function __construct($attributes = array()) {
22
+ $viewId = Mage::registry('zendesk_tickets_view');
23
+ $this->setViewId($viewId);
24
+
25
+ parent::__construct($attributes);
26
+ }
27
+
28
+ protected function _getCollection($collection) {
29
+ return $collection->getCollectionFromView($this->_viewId, $this->getGridParams());
30
+ }
31
+
32
+ public function getGridUrl() {
33
+ return $this->getUrl('*/*/ticketsView', array('_current' => true));
34
+ }
35
+
36
+ protected function _prepareGrid() {
37
+ parent::_prepareGrid();
38
+ $this->_prepareDynamicColumns();
39
+ $this->_prepareCollection();
40
+
41
+ return $this;
42
+ }
43
+
44
+ protected function _prepareColumns() {
45
+ $this->addColumn('id', array(
46
+ 'header' => Mage::helper('zendesk')->__('Ticket ID'),
47
+ 'sortable' => true,
48
+ 'filter' => false,
49
+ 'align' => 'right',
50
+ 'width' => '30px',
51
+ 'index' => 'id',
52
+ ));
53
+
54
+ return parent::_prepareColumns();
55
+ }
56
+
57
+ protected function _prepareDynamicColumns() {
58
+ $viewColumns = $this->getCollection()->getColumnsForView();
59
+
60
+ foreach($viewColumns as $column) {
61
+ $this->addColumnBasedOnType($column['id'], $column['title']);
62
+ }
63
+ }
64
+
65
+ }
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Log.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Menu.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Order/View.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright 2012 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
- class Zendesk_Zendesk_Block_Adminhtml_Order_View extends Mage_Adminhtml_Block_Sales_Order_View
19
- {
20
- public function __construct()
21
- {
22
- parent::__construct();
23
-
24
- if(Mage::getStoreConfig('zendesk/features/show_on_order')) {
25
- $this->_addButton('ticket_new', array(
26
- 'label' => Mage::helper('zendesk')->__('Create Ticket'),
27
- 'onclick' => 'setLocation(\'' . $this->getTicketUrl() . '\')',
28
- 'class' => 'zendesk',
29
- ));
30
- }
31
- }
32
-
33
- public function getTicketUrl()
34
- {
35
- // Since we're subclassing from the Sales_Order_View block, the order_id is already
36
- // being passed in as a URL parameter so there's no need for us to do it
37
- return $this->getUrl('adminhtml/zendesk/create');
38
- }
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Zendesk/Zendesk/Block/Adminhtml/Order/View/Tickets.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Block/{Adminhtml/Dashboard/Tab/View.php → Customer/Tickets.php} RENAMED
@@ -15,26 +15,16 @@
15
  * limitations under the License.
16
  */
17
 
18
- class Zendesk_Zendesk_Block_Adminhtml_Dashboard_Tab_View extends Mage_Adminhtml_Block_Widget_Container
19
  {
20
- protected $_view = null;
21
-
22
- public function setView($view)
23
- {
24
- $this->_view = $view;
25
- $this->setId('view-' . $view['id']);
26
-
27
- return $this;
28
- }
29
-
30
- public function getView()
31
- {
32
- return $this->_view;
33
- }
34
-
35
  public function __construct()
36
  {
37
  parent::__construct();
38
- $this->setTemplate('zendesk/dashboard/tabs/view.phtml');
 
 
 
 
 
39
  }
40
  }
15
  * limitations under the License.
16
  */
17
 
18
+ class Zendesk_Zendesk_Block_Customer_Tickets extends Mage_Core_Block_Template
19
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  public function __construct()
21
  {
22
  parent::__construct();
23
+ $this->setTemplate('zendesk/customer/tickets.phtml');
24
+ }
25
+
26
+ public function getSubmitAction() {
27
+ $url = Mage::helper('adminhtml')->getUrl('*/sso/login', array("return_url" => Mage::helper('core')->urlEncode("http://".Mage::getStoreConfig('zendesk/general/domain')."/requests/new")));
28
+ return $url;
29
  }
30
  }
app/code/community/Zendesk/Zendesk/Block/Customer/Tickets/List.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2012 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
+ class Zendesk_Zendesk_Block_Customer_Tickets_List extends Mage_Core_Block_Template
19
+ {
20
+ public function __construct()
21
+ {
22
+ parent::__construct();
23
+
24
+ $key = array(
25
+ 'ZendeskCustomerTickets',
26
+ $this->getCustomer()->getId()
27
+ );
28
+
29
+ $this->addData(array(
30
+ 'cache_lifetime' => 60 * 5,
31
+ 'cache_tags' => array('Zendesk_Customer_Tickets'),
32
+ 'cache_key' => implode('_', $key)
33
+
34
+ ));
35
+
36
+ $this->setTemplate('zendesk/customer/tickets/list.phtml');
37
+ }
38
+
39
+
40
+ protected function _getCustomerSession()
41
+ {
42
+ return Mage::getSingleton('customer/session');
43
+ }
44
+
45
+
46
+ public function getCustomer()
47
+ {
48
+ $session = $this->_getCustomerSession();
49
+ $customer = false;
50
+
51
+ if($session) {
52
+ $customer = $session->getCustomer();
53
+ }
54
+
55
+ return $customer;
56
+ }
57
+
58
+
59
+ public function getList()
60
+ {
61
+ $customer = $this->getCustomer();
62
+ $tickets = null;
63
+
64
+ if($customer && $customer->getEmail()) {
65
+ $tickets = Mage::getModel('zendesk/api_tickets')->forRequester($customer->getEmail());
66
+ }
67
+
68
+ return $tickets;
69
+ }
70
+ }
app/code/community/Zendesk/Zendesk/Block/Supporttab.php CHANGED
@@ -19,10 +19,10 @@ class Zendesk_Zendesk_Block_Supporttab extends Mage_Core_Block_Template
19
  {
20
  protected function _toHtml()
21
  {
22
- if(!Mage::getStoreConfig('zendesk/features/feedback_tab_code_active')) {
23
  return '';
24
  }
25
 
26
- return Mage::getStoreConfig('zendesk/features/feedback_tab_code');
27
  }
28
- }
19
  {
20
  protected function _toHtml()
21
  {
22
+ if(!Mage::getStoreConfig('zendesk/frontend_features/feedback_tab_code_active')) {
23
  return '';
24
  }
25
 
26
+ return Mage::getStoreConfig('zendesk/frontend_features/feedback_tab_code');
27
  }
28
+ }
app/code/community/Zendesk/Zendesk/Helper/Data.php CHANGED
@@ -25,7 +25,7 @@ class Zendesk_Zendesk_Helper_Data extends Mage_Core_Helper_Abstract
25
  $root = ($format === 'old') ? '' : '/agent/#';
26
 
27
  $base = $protocol . $domain . $root;
28
-
29
  switch($object) {
30
  case '':
31
  return $base;
@@ -45,6 +45,88 @@ class Zendesk_Zendesk_Helper_Data extends Mage_Core_Helper_Abstract
45
  }
46
  }
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  public function getApiToken($generate = true)
49
  {
50
  // Grab any existing token from the admin scope
@@ -109,6 +191,9 @@ class Zendesk_Zendesk_Helper_Data extends Mage_Core_Helper_Abstract
109
 
110
  public function getOrderDetail($order)
111
  {
 
 
 
112
  $orderInfo = array(
113
  'id' => $order->getIncrementId(),
114
  'status' => $order->getStatus(),
@@ -124,7 +209,7 @@ class Zendesk_Zendesk_Helper_Data extends Mage_Core_Helper_Abstract
124
  'total' => $order->getGrandTotal(),
125
  'currency' => $order->getOrderCurrencyCode(),
126
  'items' => array(),
127
- 'admin_url' => Mage::helper('adminhtml')->getUrl('adminhtml/sales_order/view', array('order_id' => $order->getId())),
128
  );
129
 
130
  foreach($order->getItemsCollection(array(), true) as $item) {
@@ -175,4 +260,114 @@ class Zendesk_Zendesk_Helper_Data extends Mage_Core_Helper_Abstract
175
 
176
  return $customer;
177
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  }
25
  $root = ($format === 'old') ? '' : '/agent/#';
26
 
27
  $base = $protocol . $domain . $root;
28
+
29
  switch($object) {
30
  case '':
31
  return $base;
45
  }
46
  }
47
 
48
+ /**
49
+ * Returns configured Zendesk Domain
50
+ * format: company.zendesk.com
51
+ *
52
+ * @return mixed Zendesk Account Domain
53
+ */
54
+ public function getZendeskDomain()
55
+ {
56
+ return Mage::getStoreConfig('zendesk/general/domain');
57
+ }
58
+
59
+
60
+ /**
61
+ * Returns if SSO is enabled for EndUsers
62
+ * @return integer
63
+ */
64
+ public function isSSOEndUsersEnabled()
65
+ {
66
+ return Mage::getStoreConfig('zendesk/sso_frontend/enabled');
67
+ }
68
+
69
+ /**
70
+ * Returns if SSO is enabled for Admin/Agent Users
71
+ * @return integer
72
+ */
73
+ public function isSSOAdminUsersEnabled()
74
+ {
75
+ return Mage::getStoreConfig('zendesk/sso/enabled');
76
+ }
77
+
78
+ /**
79
+ * Returns frontend URL where authentication process starts for EndUsers
80
+ *
81
+ * @return string SSO Url to auth EndUsers
82
+ */
83
+ public function getSSOAuthUrlEndUsers()
84
+ {
85
+ return Mage::getUrl('zendesk/sso/login');
86
+ }
87
+
88
+ /**
89
+ * Returns backend URL where authentication process starts for Admin/Agents
90
+ *
91
+ * @return string SSO Url to auth Admin/Agents
92
+ */
93
+ public function getSSOAuthUrlAdminUsers()
94
+ {
95
+ return Mage::helper('adminhtml')->getUrl('*/zendesk/login');
96
+ }
97
+
98
+ /**
99
+ * Returns Zendesk Account Login URL for normal access
100
+ * format: https://<zendesk_account>/<route>
101
+ *
102
+ * @return string Zendesk Account login url
103
+ */
104
+ public function getZendeskAuthNormalUrl()
105
+ {
106
+ $protocol = 'https://';
107
+ $domain = $this->getZendeskDomain();
108
+ $route = '/access/normal';
109
+
110
+ return $protocol . $domain . $route;
111
+ }
112
+
113
+ /**
114
+ * Returns Zendesk Login Form unauthenticated URL
115
+ * format: https://<zendesk_account>/<route>
116
+ *
117
+ * @return string Zendesk Account login unauthenticated form url
118
+ */
119
+ public function getZendeskUnauthUrl()
120
+ {
121
+ $protocol = 'https://';
122
+ $domain = $this->getZendeskDomain();
123
+ //Zendesk will automatically redirect to login if user is not logged in
124
+ //previous URL followed to login page even if user has already logged in
125
+ $route = '/home';
126
+
127
+ return $protocol . $domain . $route;
128
+ }
129
+
130
  public function getApiToken($generate = true)
131
  {
132
  // Grab any existing token from the admin scope
191
 
192
  public function getOrderDetail($order)
193
  {
194
+ // if the admin site has a custom URL, use it
195
+ $urlModel = Mage::getModel('adminhtml/url')->setStore('admin');
196
+
197
  $orderInfo = array(
198
  'id' => $order->getIncrementId(),
199
  'status' => $order->getStatus(),
209
  'total' => $order->getGrandTotal(),
210
  'currency' => $order->getOrderCurrencyCode(),
211
  'items' => array(),
212
+ 'admin_url' => $urlModel->getUrl('adminhtml/sales_order/view', array('order_id' => $order->getId())),
213
  );
214
 
215
  foreach($order->getItemsCollection(array(), true) as $item) {
260
 
261
  return $customer;
262
  }
263
+
264
+ /**
265
+ * Retrieve Use External ID config option
266
+ *
267
+ * @return integer
268
+ */
269
+ public function isExternalIdEnabled()
270
+ {
271
+ return Mage::getStoreConfig('zendesk/general/use_external_id');
272
+ }
273
+
274
+ public function getTicketUrl($row, $link = false)
275
+ {
276
+ $path = Mage::getSingleton('admin/session')->getUser() ? 'adminhtml/zendesk/login' : '*/sso/login';
277
+ $url = Mage::helper('adminhtml')->getUrl($path, array("return_url" => Mage::helper('core')->urlEncode(Mage::helper('zendesk')->getUrl('ticket', $row['id']))));
278
+
279
+ if ($link)
280
+ return $url;
281
+
282
+ $subject = $row['subject'] ? $row['subject'] : $this->__('No Subject');
283
+
284
+ return '<a href="' . $url . '" target="_blank">' . Mage::helper('core')->escapeHtml($subject) . '</a>';
285
+ }
286
+
287
+ public function getStatusMap()
288
+ {
289
+ return array(
290
+ 'new' => 'New',
291
+ 'open' => 'Open',
292
+ 'pending' => 'Pending',
293
+ 'solved' => 'Solved',
294
+ 'closed' => 'Closed',
295
+ 'hold' => 'Hold'
296
+ );
297
+ }
298
+
299
+ public function getPriorityMap()
300
+ {
301
+ return array(
302
+ 'low' => 'Low',
303
+ 'normal' => 'Normal',
304
+ 'high' => 'High',
305
+ 'urgent' => 'Urgent'
306
+ );
307
+ }
308
+
309
+ public function getTypeMap()
310
+ {
311
+ return array(
312
+ 'problem' => 'Problem',
313
+ 'incident' => 'Incident',
314
+ 'question' => 'Question',
315
+ 'task' => 'Task'
316
+ );
317
+ }
318
+
319
+ public function getChosenViews() {
320
+ $list = trim(trim(Mage::getStoreConfig('zendesk/backend_features/show_views')), ',');
321
+ return explode(',', $list);
322
+ }
323
+
324
+ public function getFormatedDataForAPI($dateToFormat) {
325
+ $myDateTime = DateTime::createFromFormat('d/m/Y', $dateToFormat);
326
+ return $myDateTime->format('Y-m-d');
327
+ }
328
+
329
+ public function isValidDate($date) {
330
+ if(is_string($date)) {
331
+ $d = DateTime::createFromFormat('d/m/Y', $date);
332
+ return $d && $d->format('d/m/Y') == $date;
333
+ }
334
+
335
+ return false;
336
+ }
337
+
338
+ public function getFormatedDateTime($dateToFormat) {
339
+ return Mage::helper('core')->formatDate($dateToFormat, 'medium', true);
340
+ }
341
+
342
+ public function getConnectionStatus() {
343
+ try {
344
+ $user = Mage::getModel('zendesk/api_users')->me();
345
+
346
+ if($user['id']) {
347
+ return array(
348
+ 'success' => true,
349
+ 'msg' => Mage::helper('zendesk')->__('Connection to Zendesk API successful'),
350
+ );
351
+ }
352
+
353
+ $error = Mage::helper('zendesk')->__('Connection to Zendesk API failed') .
354
+ '<br />' . Mage::helper('zendesk')->__('Troubleshooting tips can be found at <a href=%s>%s</a>', 'https://support.zendesk.com/entries/26579987', 'https://support.zendesk.com/entries/26579987');
355
+
356
+ return array(
357
+ 'success' => false,
358
+ 'msg' => $error,
359
+ );
360
+
361
+ } catch (Exception $ex) {
362
+ $error = Mage::helper('zendesk')->__('Connection to Zendesk API failed') .
363
+ '<br />' . $ex->getCode() . ': ' . $ex->getMessage() .
364
+ '<br />' . Mage::helper('zendesk')->__('Troubleshooting tips can be found at <a href=%s>%s</a>', 'https://support.zendesk.com/entries/26579987', 'https://support.zendesk.com/entries/26579987');
365
+
366
+ return array(
367
+ 'success' => false,
368
+ 'msg' => $error,
369
+ );
370
+ }
371
+ }
372
+
373
  }
app/code/community/Zendesk/Zendesk/Helper/JWT.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Helper/Log.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/LICENSE.txt CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Model/Api/Abstract.php CHANGED
@@ -24,7 +24,7 @@ class Zendesk_Zendesk_Model_Api_Abstract extends Mage_Core_Model_Abstract
24
  return $base_url . '/' . $path;
25
  }
26
 
27
- protected function _call($endpoint, $params = null, $method = 'GET', $data = null)
28
  {
29
  if($params && is_array($params) && count($params) > 0) {
30
  $args = array();
@@ -33,7 +33,7 @@ class Zendesk_Zendesk_Model_Api_Abstract extends Mage_Core_Model_Abstract
33
  }
34
  $endpoint .= '?' . implode('&', $args);
35
  }
36
-
37
  $url = $this->_getUrl($endpoint);
38
 
39
  $method = strtoupper($method);
@@ -46,12 +46,13 @@ class Zendesk_Zendesk_Model_Api_Abstract extends Mage_Core_Model_Abstract
46
  'Content-Type' => 'application/json'
47
  )
48
  );
 
49
  $client->setAuth(
50
- Mage::getStoreConfig('zendesk/general/email') . '/token',
51
  Mage::getStoreConfig('zendesk/general/password')
52
  );
53
 
54
- if($method == 'POST') {
55
  $client->setRawData(json_encode($data), 'application/json');
56
  }
57
 
@@ -67,8 +68,13 @@ class Zendesk_Zendesk_Model_Api_Abstract extends Mage_Core_Model_Abstract
67
  null,
68
  'zendesk.log'
69
  );
70
-
71
- $response = $client->request();
 
 
 
 
 
72
  $body = json_decode($response->getBody(), true);
73
 
74
  Mage::log(var_export($body, true), null, 'zendesk.log');
@@ -76,15 +82,30 @@ class Zendesk_Zendesk_Model_Api_Abstract extends Mage_Core_Model_Abstract
76
  if($response->isError()) {
77
  if(is_array($body) && isset($body['error'])) {
78
  if(is_array($body['error']) && isset($body['error']['title'])) {
79
- throw new Exception($body['error']['title'], $response->getStatus());
 
 
 
 
 
80
  } else {
81
- throw new Exception($body['error'], $response->getStatus());
 
 
 
 
 
82
  }
83
  } else {
84
- throw new Exception($body, $response->getStatus());
 
 
 
 
 
85
  }
86
  }
87
 
88
  return $body;
89
  }
90
- }
24
  return $base_url . '/' . $path;
25
  }
26
 
27
+ protected function _call($endpoint, $params = null, $method = 'GET', $data = null, $silent = false, $global = false)
28
  {
29
  if($params && is_array($params) && count($params) > 0) {
30
  $args = array();
33
  }
34
  $endpoint .= '?' . implode('&', $args);
35
  }
36
+
37
  $url = $this->_getUrl($endpoint);
38
 
39
  $method = strtoupper($method);
46
  'Content-Type' => 'application/json'
47
  )
48
  );
49
+
50
  $client->setAuth(
51
+ Mage::getStoreConfig('zendesk/general/email'). '/token',
52
  Mage::getStoreConfig('zendesk/general/password')
53
  );
54
 
55
+ if($method == 'POST' || $method == "PUT") {
56
  $client->setRawData(json_encode($data), 'application/json');
57
  }
58
 
68
  null,
69
  'zendesk.log'
70
  );
71
+
72
+ try {
73
+ $response = $client->request();
74
+ } catch ( Exception $ex ) {
75
+ return array();
76
+ }
77
+
78
  $body = json_decode($response->getBody(), true);
79
 
80
  Mage::log(var_export($body, true), null, 'zendesk.log');
82
  if($response->isError()) {
83
  if(is_array($body) && isset($body['error'])) {
84
  if(is_array($body['error']) && isset($body['error']['title'])) {
85
+ if (!$silent) {
86
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__($body['error']['title'],$response->getStatus()));
87
+ return;
88
+ } else {
89
+ return $body;
90
+ }
91
  } else {
92
+ if (!$silent) {
93
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__($body['error'],$response->getStatus()));
94
+ return;
95
+ } else {
96
+ return $body;
97
+ }
98
  }
99
  } else {
100
+ if (!$silent) {
101
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__($body, $response->getStatus()));
102
+ return;
103
+ } else {
104
+ return $body;
105
+ }
106
  }
107
  }
108
 
109
  return $body;
110
  }
111
+ }
app/code/community/Zendesk/Zendesk/Model/Api/Groups.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2012 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ class Zendesk_Zendesk_Model_Api_Groups extends Zendesk_Zendesk_Model_Api_Abstract {
19
+
20
+ public function all() {
21
+ $page = 1;
22
+ $groups = array();
23
+
24
+ while ($page) {
25
+ $response = $this->_call('groups.json?page=' . $page);
26
+ $groups = array_merge($groups, $response['groups']);
27
+ $page = is_null($response['next_page']) ? 0 : $page + 1;
28
+ }
29
+
30
+ return $groups;
31
+ }
32
+
33
+ }
app/code/community/Zendesk/Zendesk/Model/Api/Requesters.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Model/Api/Tickets.php CHANGED
@@ -87,6 +87,17 @@ class Zendesk_Zendesk_Model_Api_Tickets extends Zendesk_Zendesk_Model_Api_Abstra
87
  return $response['tickets'];
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
 
90
  public function forOrder($orderIncrementId)
91
  {
92
  if(!$orderIncrementId) {
@@ -103,7 +114,7 @@ class Zendesk_Zendesk_Model_Api_Tickets extends Zendesk_Zendesk_Model_Api_Abstra
103
 
104
  // Now check through the tickets to make sure the appropriate field has been filled out with the order number
105
  $tickets = array();
106
- $fieldId = Mage::getStoreConfig('zendesk/features/order_field_id');
107
 
108
  if(!$fieldId) {
109
  return false;
@@ -132,25 +143,51 @@ class Zendesk_Zendesk_Model_Api_Tickets extends Zendesk_Zendesk_Model_Api_Abstra
132
 
133
  public function forRequester($customerEmail)
134
  {
135
- if(!$customerEmail || strlen(trim($customerEmail)) === 0) {
136
- throw new InvalidArgumentException('Customer email address not valid');
 
 
 
 
137
  }
138
-
139
- $response = $this->_call('search.json',
140
- array(
141
- 'query' => 'requester:' . $customerEmail . ' type:ticket',
142
- 'sort_order' => 'desc',
143
- 'sort_by' => 'updated_at',
144
- )
145
- );
146
-
147
- return $response['results'];
148
  }
149
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  public function create($data)
151
  {
152
  $response = $this->_call('tickets.json', null, 'POST', $data);
153
-
154
  return $response['ticket'];
155
  }
156
 
87
  return $response['tickets'];
88
  }
89
 
90
+ public function all()
91
+ {
92
+ $response = $this->_call('tickets.json');
93
+ return $response['tickets'];
94
+ }
95
+
96
+ public function search($data)
97
+ {
98
+ return $this->_call('search.json', $data);
99
+ }
100
+
101
  public function forOrder($orderIncrementId)
102
  {
103
  if(!$orderIncrementId) {
114
 
115
  // Now check through the tickets to make sure the appropriate field has been filled out with the order number
116
  $tickets = array();
117
+ $fieldId = Mage::getStoreConfig('zendesk/frontend_features/order_field_id');
118
 
119
  if(!$fieldId) {
120
  return false;
143
 
144
  public function forRequester($customerEmail)
145
  {
146
+ $user = Mage::getModel('zendesk/api_users')->find($customerEmail);
147
+ if(isset($user['id'])) {
148
+ $response = $this->_call('users/' . $user['id'] . '/requests.json', null, 'GET', null, false);
149
+ return $response['requests'];
150
+ } else {
151
+ return array();
152
  }
 
 
 
 
 
 
 
 
 
 
153
  }
154
+
155
+ public function bulkDelete($data)
156
+ {
157
+ if (is_array($data)) {
158
+ $params['ids'] = implode(",",$data);
159
+ return $this->_call('tickets/destroy_many.json', $params, 'DELETE');
160
+ }
161
+ }
162
+
163
+ public function updateMany($ids, $data) {
164
+ if(is_array($ids)) {
165
+ $params['ids'] = implode(",", $ids);
166
+ $ticket['ticket'] = $data;
167
+
168
+ return $this->_call('tickets/update_many.json', $params, 'PUT', $ticket);
169
+ }
170
+ }
171
+
172
+ public function getJobStatus($url)
173
+ {
174
+ $parts = explode("/", $url);
175
+ $link = 'job_statuses/'.end($parts);
176
+ return $this->_call($link);
177
+ }
178
+
179
+ public function bulkMarkAsSpam($data)
180
+ {
181
+ if (is_array($data)) {
182
+ $params['ids'] = implode(",",$data);
183
+ return $this->_call('tickets/mark_many_as_spam.json', $params, 'PUT');
184
+ }
185
+ }
186
+
187
  public function create($data)
188
  {
189
  $response = $this->_call('tickets.json', null, 'POST', $data);
190
+
191
  return $response['ticket'];
192
  }
193
 
app/code/community/Zendesk/Zendesk/Model/Api/Users.php CHANGED
@@ -33,6 +33,13 @@ class Zendesk_Zendesk_Model_Api_Users extends Zendesk_Zendesk_Model_Api_Abstract
33
  }
34
  }
35
 
 
 
 
 
 
 
 
36
  public function get($id)
37
  {
38
  if(!Zend_Validate::is($id, 'NotEmpty')) {
@@ -46,7 +53,62 @@ class Zendesk_Zendesk_Model_Api_Users extends Zendesk_Zendesk_Model_Api_Abstract
46
 
47
  public function all()
48
  {
49
- $response = $this->_call('users.json');
50
- return $response['users'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
  }
33
  }
34
  }
35
 
36
+ public function me()
37
+ {
38
+ $response = $this->_call('users/me.json');
39
+
40
+ return $response['user'];
41
+ }
42
+
43
  public function get($id)
44
  {
45
  if(!Zend_Validate::is($id, 'NotEmpty')) {
53
 
54
  public function all()
55
  {
56
+ $page = 1;
57
+ $users = array();
58
+
59
+ while($page) {
60
+ $response = $this->_call('users.json?page=' . $page);
61
+ $users = array_merge($users, $response['users']);
62
+ $page = is_null($response['next_page']) ? 0 : $page + 1;
63
+ }
64
+
65
+ return $users;
66
+ }
67
+
68
+ public function end($id)
69
+ {
70
+ if(!Zend_Validate::is($id, 'NotEmpty')) {
71
+ throw new InvalidArgumentException('No ID value provided');
72
+ }
73
+
74
+ $response = $this->_call('end_users/'. $id .'.json');
75
+
76
+ return $response['user'];
77
+ }
78
+
79
+ public function getIdentities($id)
80
+ {
81
+ $response = $this->_call('users/' . $id . '/identities.json');
82
+ return $response['identities'];
83
+ }
84
+
85
+ public function setPrimaryIdentity($user_id, $identity_id)
86
+ {
87
+ $response = $this->_call('users/' . $user_id . '/identities/'.$identity_id.'/make_primary.json', null, 'PUT', null, true);
88
+ return $response['identities'];
89
+ }
90
+
91
+ public function addIdentity($user_id, $data)
92
+ {
93
+ $response = $this->_call('users/' . $user_id . '/identities.json', null, 'POST', $data, true);
94
+ return $response['identity'];
95
+ }
96
+
97
+ public function update($user_id, $user)
98
+ {
99
+ $response = $this->_call('users/' . $user_id . '.json', null, 'PUT', $user, true);
100
+ return $response['user'];
101
+ }
102
+
103
+ public function create($user)
104
+ {
105
+ $response = $this->_call('users.json', null, 'POST', $user, true);
106
+ return $response['user'];
107
+ }
108
+
109
+ public function createUserField($field)
110
+ {
111
+ $response = $this->_call('user_fields.json', null, 'POST', $field, true);
112
+ return $response['user_field'];
113
  }
114
  }
app/code/community/Zendesk/Zendesk/Model/Api/Views.php CHANGED
@@ -33,13 +33,25 @@ class Zendesk_Zendesk_Model_Api_Views extends Zendesk_Zendesk_Model_Api_Abstract
33
  return $response['view'];
34
  }
35
 
36
- public function execute($id)
37
  {
38
  if(!Zend_Validate::is($id, 'NotEmpty')) {
39
  throw new InvalidArgumentException('View ID not provided');
40
  }
41
 
42
- $response = $this->_call('views/' . $id . '/execute.json');
 
 
 
 
 
 
 
 
 
 
 
 
43
  return $response;
44
  }
45
- }
33
  return $response['view'];
34
  }
35
 
36
+ public function execute($id, array $params = array())
37
  {
38
  if(!Zend_Validate::is($id, 'NotEmpty')) {
39
  throw new InvalidArgumentException('View ID not provided');
40
  }
41
 
42
+ $paramsString = count($params) ? '?' . http_build_query($params) : '';
43
+
44
+ $response = $this->_call('views/' . $id . '/execute.json' . $paramsString);
45
+ return $response;
46
+ }
47
+
48
+ public function countByIds(array $ids) {
49
+ if(empty($ids)) {
50
+ throw new InvalidArgumentException('View ID not provided');
51
+ }
52
+
53
+ $response = $this->_call('views/count_many.json?ids=' . implode(',', $ids));
54
+
55
  return $response;
56
  }
57
+ }
app/code/community/Zendesk/Zendesk/Model/Observer.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Copyright 2012 Zendesk.
4
  *
@@ -70,7 +71,7 @@ class Zendesk_Zendesk_Model_Observer
70
  $scopeId = $store->getId();
71
  }
72
 
73
- $enableEmail = Mage::getStoreConfig('zendesk/features/contact_us', $storeCode);
74
  $currentEmail = Mage::getStoreConfig('contacts/email/recipient_email', $storeCode);
75
  $oldEmail = Mage::getStoreConfig('zendesk/hidden/contact_email_old', $storeCode);
76
  $zendeskEmail = Mage::helper('zendesk')->getSupportEmail($storeCode);
@@ -97,4 +98,113 @@ class Zendesk_Zendesk_Model_Observer
97
  }
98
  }
99
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
1
  <?php
2
+
3
  /**
4
  * Copyright 2012 Zendesk.
5
  *
71
  $scopeId = $store->getId();
72
  }
73
 
74
+ $enableEmail = Mage::getStoreConfig('zendesk/frontend_features/contact_us', $storeCode);
75
  $currentEmail = Mage::getStoreConfig('contacts/email/recipient_email', $storeCode);
76
  $oldEmail = Mage::getStoreConfig('zendesk/hidden/contact_email_old', $storeCode);
77
  $zendeskEmail = Mage::helper('zendesk')->getSupportEmail($storeCode);
98
  }
99
  }
100
  }
101
+
102
+ public function addTicketButton(Varien_Event_Observer $event)
103
+ {
104
+ $block = $event->getBlock();
105
+ if ($block instanceof Mage_Adminhtml_Block_Sales_Order_View && Mage::getStoreConfig('zendesk/backend_features/show_on_order')) {
106
+ $block->addButton('ticket_new', array(
107
+ 'label' => Mage::helper('zendesk')->__('Create Ticket'),
108
+ 'onclick' => 'setLocation(\'' . $block->getUrl('adminhtml/zendesk/create') . '\')',
109
+ 'class' => 'zendesk',
110
+ ));
111
+ }
112
+ }
113
+
114
+ public function changeIdentity(Varien_Event_Observer $event)
115
+ {
116
+ if(!Mage::getStoreConfig('zendesk/general/customer_sync'))
117
+ return;
118
+
119
+ $user = null;
120
+ $customer = $event->getCustomer();
121
+ $email = $customer->getEmail();
122
+ $orig_email = $customer->getOrigData();
123
+ $orig_email = $orig_email['email'];
124
+
125
+ //Get Customer Group
126
+ $group_id = $customer->getGroupId();
127
+ $group = Mage::getModel('customer/group')->load($group_id);
128
+
129
+ //Get Customer Last Login Date
130
+ $log_customer = Mage::getModel('log/customer')->loadByCustomer($customer);
131
+ if ($log_customer->getLoginAt())
132
+ $logged_in = date("Y-m-d\TH:i:s\Z",strtotime($log_customer->getLoginAt()));
133
+ else
134
+ $logged_in = "";
135
+
136
+ //Get Customer Sales Statistics
137
+ $order_totals = Mage::getResourceModel('sales/order_collection');
138
+ $lifetime_sale = 0;
139
+ $average_sale = 0;
140
+
141
+ if (is_object($order_totals)) {
142
+ $order_totals
143
+ ->addFieldToSelect('*')
144
+ ->addFieldToFilter('customer_id', $customer->getId())
145
+ ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE)
146
+ ->addAttributeToSelect('grand_total')
147
+ ->getColumnValues('grand_total');
148
+
149
+ $sum = 0;
150
+ foreach ($order_totals as $total) {
151
+ if (isset($total['grand_total']))
152
+ $sum += (float)$total['grand_total'];
153
+ }
154
+
155
+ $lifetime_sale = Mage::helper('core')->currency($sum, true, false);
156
+ $average_sale = Mage::helper('core')->currency($sum / count($order_totals), true, false);
157
+ }
158
+
159
+ $info['user'] = array(
160
+ "name" => $customer->getFirstname() . " " . $customer->getLastname(),
161
+ "email" => $email,
162
+ "user_fields" => array(
163
+ "group" => $group->getCode(),
164
+ "name" => $customer->getFirstname() . " " . $customer->getLastname(),
165
+ "id" => $customer->getId(),
166
+ "logged_in" => $logged_in,
167
+ "average_sale" => $average_sale,
168
+ "lifetime_sale" => $lifetime_sale
169
+ )
170
+ );
171
+
172
+ if($orig_email && $orig_email !== $email) {
173
+ $user = Mage::getModel('zendesk/api_users')->find($orig_email);
174
+
175
+ if(isset($user['id'])) {
176
+ $data['identity'] = array(
177
+ 'type' => 'email',
178
+ 'value' => $email,
179
+ 'verified' => true
180
+ );
181
+ $identity = Mage::getModel('zendesk/api_users')->addIdentity($user['id'],$data);
182
+ if(isset($identity['id'])) {
183
+ Mage::getModel('zendesk/api_users')->setPrimaryIdentity($user['id'], $identity['id']);
184
+ }
185
+ }
186
+ }
187
+
188
+ if(!$user) {
189
+ $user = Mage::getModel('zendesk/api_users')->find($email);
190
+ }
191
+
192
+ if(isset($user['id'])) {
193
+ $this->syncData($user['id'], $info);
194
+ } else {
195
+ $info['user']['verified'] = true;
196
+ $this->createAccount($info);
197
+ }
198
+ }
199
+
200
+ public function syncData($user_id, $data)
201
+ {
202
+ Mage::getModel('zendesk/api_users')->update($user_id, $data);
203
+ }
204
+
205
+ public function createAccount($data)
206
+ {
207
+ Mage::getModel('zendesk/api_users')->create($data);
208
+ }
209
+
210
  }
app/code/community/Zendesk/Zendesk/Model/Resource/Tickets.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Model_Resource_Tickets extends Mage_Core_Model_Resource_Db_Abstract {
20
+
21
+ protected function _construct()
22
+ {
23
+ $this->_init('zendesk/tickets', 'id');
24
+ }
25
+ }
app/code/community/Zendesk/Zendesk/Model/Resource/Tickets/Collection.php ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Model_Resource_Tickets_Collection extends Varien_Data_Collection {
20
+
21
+ protected $_count;
22
+ protected $_search;
23
+ protected $_viewColumns = array();
24
+ protected static $_excludedColumns = array('score');
25
+
26
+ public function __construct() {
27
+ $this->_search = new Zendesk_Zendesk_Model_Search( Zendesk_Zendesk_Model_Search::TYPE_TICKET );
28
+ }
29
+
30
+ public function addFieldToFilter($fieldName, $condition = null) {
31
+ if(is_string($condition) OR is_array($condition)) {
32
+
33
+ $searchFields = array();
34
+
35
+ switch($fieldName) {
36
+ case 'subject':
37
+ $searchFields[] = array(
38
+ 'field' => 'subject',
39
+ 'value' => '"'.$condition.'"'
40
+ );
41
+ break;
42
+ case 'requester':
43
+ case 'requester_id':
44
+ $value = is_numeric($condition) ? $condition : '*' . $condition . '*';
45
+ $searchFields[] = array(
46
+ 'field' => 'requester',
47
+ 'value' => $value
48
+ );
49
+ break;
50
+ case 'tags':
51
+ case 'status':
52
+ case 'priority':
53
+ case 'status':
54
+ case 'group':
55
+ case 'assignee':
56
+ $searchFields[] = array(
57
+ 'field' => $fieldName,
58
+ 'value' => $condition
59
+ );
60
+ break;
61
+ case 'type':
62
+ $searchFields[] = array(
63
+ 'field' => 'ticket_type',
64
+ 'value' => $condition
65
+ );
66
+ break;
67
+ case 'id':
68
+ $searchFields[] = array(
69
+ 'field' => '',
70
+ 'value' => $condition,
71
+ 'operator' => ''
72
+ );
73
+ break;
74
+ case 'created_at':
75
+ case 'updated_at':
76
+ $fieldName = substr($fieldName, 0, -3);
77
+
78
+ if( isset($condition['from']) AND Mage::helper('zendesk')->isValidDate($condition['from']) ) {
79
+ $value = Mage::helper('zendesk')->getFormatedDataForAPI( $condition['from'] );
80
+ $searchFields[] = array(
81
+ 'field' => $fieldName,
82
+ 'value' => $value,
83
+ 'operator' => '>'
84
+ );
85
+ }
86
+
87
+ if( isset($condition['to']) AND Mage::helper('zendesk')->isValidDate($condition['to']) ) {
88
+ $value = Mage::helper('zendesk')->getFormatedDataForAPI( $condition['to'] );
89
+ $searchFields[] = array(
90
+ 'field' => $fieldName,
91
+ 'value' => $value,
92
+ 'operator' => '<'
93
+ );
94
+ }
95
+ break;
96
+ }
97
+ foreach ($searchFields as $field) {
98
+ $operator = isset($field['operator']) ? $field['operator'] : ":";
99
+ $value = isset($field['value']) ? $field['value'] : "none";
100
+ $this->_search->addField( new Zendesk_Zendesk_Model_Search_Field($field['field'], $value, $operator));
101
+ }
102
+ }
103
+
104
+ return $this;
105
+ }
106
+
107
+ public function getCollection(array $params = array()) {
108
+ $searchQuery = array(
109
+ 'query' => $this->_search->getString(),
110
+ );
111
+
112
+ $params = array_merge($searchQuery, $params);
113
+
114
+ $all = Mage::getModel('zendesk/api_tickets')->search($params);
115
+
116
+ foreach ($all['results'] as $ticket) {
117
+ $obj = new Varien_Object();
118
+ $obj->setData($ticket);
119
+ $this->addItem($obj);
120
+ }
121
+
122
+ $this->setPageSize($params['per_page']);
123
+ $this->setCurPage($params['page']);
124
+ $this->setOrder($params['sort_by'], $params['sort_order']);
125
+ $this->_count = $all['count'];
126
+
127
+ Mage::unregister('zendesk_tickets_all');
128
+ Mage::register('zendesk_tickets_all', $all['count']);
129
+
130
+ return $this;
131
+ }
132
+
133
+ public function getCollectionFromView($viewId, array $params = array()) {
134
+ $view = Mage::getModel('zendesk/api_views')->execute($viewId, $params);
135
+
136
+ foreach ($view['rows'] as $row) {
137
+ $ticket = array_merge($row, $row['ticket']);
138
+
139
+ $this->appendParamsWithoutIdPostfix($ticket, array('requester', 'assignee', 'group'));
140
+
141
+ $obj = new Varien_Object();
142
+ $obj->setData($ticket);
143
+ $this->addItem($obj);
144
+ }
145
+
146
+ $this->_viewColumns = $view['columns'];
147
+
148
+ $this->setPageSize($params['per_page']);
149
+ $this->setCurPage($params['page']);
150
+ $this->setOrder($params['sort_by'], $params['sort_order']);
151
+ $this->_count = $view['count'];
152
+
153
+ Mage::unregister('zendesk_tickets_view_'.$viewId);
154
+ Mage::register('zendesk_tickets_view_'.$viewId, $view['count']);
155
+
156
+ return $this;
157
+ }
158
+
159
+ protected function appendParamsWithoutIdPostfix(& $item, array $params = array()) {
160
+ foreach($params as $param) {
161
+ $name = $param . '_id';
162
+
163
+ if(isset($item[$name])) {
164
+ $item[$param] = $item[$name];
165
+ }
166
+ }
167
+ }
168
+
169
+ public function getColumnsForView() {
170
+ $excludedColumns = static::$_excludedColumns;
171
+
172
+ return array_filter($this->_viewColumns, function($column) use($excludedColumns) {
173
+ return ! in_array($column['id'], $excludedColumns);
174
+ });
175
+ }
176
+
177
+ /**
178
+ * Retrieve collection all items count
179
+ *
180
+ * @return int
181
+ */
182
+ public function getSize() {
183
+ return (int) $this->_count;
184
+ }
185
+
186
+ }
app/code/community/Zendesk/Zendesk/Model/Search.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Model_Search {
20
+ const TYPE_TICKET = 'ticket';
21
+ const TYPE_USER = 'user';
22
+
23
+ protected $type;
24
+ protected $separator = ' ';
25
+ protected $fields = array();
26
+
27
+ public function __construct($type) {
28
+ $this->setType($type);
29
+ }
30
+
31
+ public function setType($type) {
32
+ $this->type = $type;
33
+ }
34
+
35
+ public function addField(Zendesk_Zendesk_Model_Search_Field $field) {
36
+ $this->fields[] = $field;
37
+ }
38
+
39
+ public function addFields(array $fields) {
40
+ foreach($fields as $field) {
41
+ if($field instanceof Zendesk_Zendesk_Model_Search_Field) {
42
+ $this->addField($field);
43
+ }
44
+ }
45
+ }
46
+
47
+ public function getString() {
48
+ return 'type:' . $this->type . $this->separator . implode($this->separator, $this->fields);
49
+ }
50
+ }
app/code/community/Zendesk/Zendesk/Model/Search/Field.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2013 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Model_Search_Field {
20
+ protected $name;
21
+ protected $value;
22
+ protected $operator;
23
+
24
+ public function __construct($name, $value = 'none', $operator = ':') {
25
+ $this->setName($name);
26
+ $this->setValue($value);
27
+ $this->setOperator($operator);
28
+ }
29
+
30
+ public function setName($name) {
31
+ $this->name = $name;
32
+ }
33
+
34
+ public function setValue($value) {
35
+ $this->value = $value;
36
+ }
37
+
38
+ public function setOperator($operator) {
39
+ $this->operator = $operator;
40
+ }
41
+
42
+ public function getString() {
43
+ return $this->name . $this->operator . $this->value;
44
+ }
45
+
46
+ public function __toString() {
47
+ return $this->getString();
48
+ }
49
+
50
+ }
app/code/community/Zendesk/Zendesk/Model/Source/Sortdir.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Model_Source_Sortdir {
19
+
20
+ protected $_options = array();
21
+
22
+ public function toOptionArray() {
23
+
24
+ $this->_options[] = array(
25
+ 'label' => Mage::helper('zendesk')->__('Descending'),
26
+ 'value' => 'desc'
27
+ );
28
+
29
+ $this->_options[] = array(
30
+ 'label' => Mage::helper('zendesk')->__('Ascending'),
31
+ 'value' => 'asc'
32
+ );
33
+
34
+
35
+ return $this->_options;
36
+ }
37
+ }
app/code/community/Zendesk/Zendesk/Model/Source/Sortorder.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ class Zendesk_Zendesk_Model_Source_Sortorder {
19
+
20
+ protected $_options = array();
21
+
22
+ public function toOptionArray() {
23
+
24
+ $this->_options[] = array(
25
+ 'label' => Mage::helper('zendesk')->__('Requested Date'),
26
+ 'value' => 'created_at'
27
+ );
28
+
29
+ $this->_options[] = array(
30
+ 'label' => Mage::helper('zendesk')->__('Updated Date'),
31
+ 'value' => 'updated_at'
32
+ );
33
+
34
+
35
+ return $this->_options;
36
+ }
37
+ }
app/code/community/Zendesk/Zendesk/Model/Source/Views.php CHANGED
File without changes
app/code/community/Zendesk/Zendesk/Model/Tickets.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+
19
+ class Zendesk_Zendesk_Model_Tickets extends Mage_Core_Model_Abstract {
20
+
21
+ protected function _construct()
22
+ {
23
+ $this->_init('zendesk/tickets');
24
+ }
25
+
26
+ }
app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php CHANGED
@@ -23,6 +23,21 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
23
 
24
  public function indexAction()
25
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  $this->_title($this->__('Zendesk Dashboard'));
27
  $this->loadLayout();
28
  $this->_setActiveMenu('zendesk/zendesk_dashboard');
@@ -66,6 +81,7 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
66
 
67
  $domain = Mage::getStoreConfig('zendesk/general/domain');
68
  $token = Mage::getStoreConfig('zendesk/sso/token');
 
69
 
70
  if(!Zend_Validate::is($domain, 'NotEmpty')) {
71
  Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Zendesk domain not set. Please add this to the settings page.'));
@@ -82,33 +98,45 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
82
 
83
  $user = Mage::getSingleton('admin/session')->getUser();
84
  $name = $user->getName();
85
- $email = $user->getEmail();
86
  $externalId = $user->getId();
87
 
88
  $payload = array(
89
- "iat" => $now,
90
- "jti" => $jti,
91
- "name" => $name,
92
- "email" => $email,
93
- "external_id" => $externalId
94
  );
 
 
 
 
 
 
95
 
96
  Mage::log('Admin JWT: ' . var_export($payload, true), null, 'zendesk.log');
97
 
98
  $jwt = JWT::encode($payload, $token);
99
-
100
- $url = "http://".$domain."/access/jwt?jwt=" . $jwt;
 
101
 
102
  Mage::log('Admin URL: ' . $url, null, 'zendesk.log');
103
 
104
  $this->_redirectUrl($url);
105
  }
106
-
107
  /**
108
  * Wrapper for the existing authenticate action. Mirrors the login/logout actions available for customers.
109
  */
110
  public function loginAction()
111
  {
 
 
 
 
 
 
112
  $this->authenticateAction();
113
  }
114
 
@@ -124,11 +152,15 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
124
  $adminSession->getCookie()->delete($adminSession->getSessionName());
125
  $adminSession->addSuccess(Mage::helper('adminhtml')->__('You have logged out.'));
126
 
127
- $this->_redirect('*');
128
  }
129
 
130
  public function createAction()
131
  {
 
 
 
 
132
  // Check if we have been passed an order ID, in which case we can preload some of the form details
133
  if($orderId = $this->getRequest()->getParam('order_id')) {
134
  $order = Mage::getModel('sales/order')->load($orderId);
@@ -157,11 +189,27 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
157
  $this->getLayout()->getBlock('js')->append($block);
158
 
159
  $this->renderLayout();
 
160
  }
161
 
162
  public function launchAction()
163
  {
164
- $this->_redirectUrl(Mage::helper('zendesk')->getUrl());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  }
166
 
167
  public function saveAction()
@@ -234,9 +282,11 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
234
  }
235
 
236
  try {
 
237
  $ticket = array(
238
  'ticket' => array(
239
  'requester_id' => $requesterId,
 
240
  'subject' => $data['subject'],
241
  'status' => $data['status'],
242
  'priority' => $data['priority'],
@@ -250,7 +300,7 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
250
  $ticket['ticket']['type'] = $data['type'];
251
  }
252
 
253
- if( ($fieldId = Mage::getStoreConfig('zendesk/features/order_field_id')) && isset($data['order']) && strlen(trim($data['order'])) > 0) {
254
  $ticket['ticket']['fields'] = array(
255
  'id' => $fieldId,
256
  'value' => $data['order']
@@ -260,7 +310,7 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
260
  $response = Mage::getModel('zendesk/api_tickets')->create($ticket);
261
 
262
  $text = Mage::helper('zendesk')->__('Ticket #%s Created', $response['id']);
263
- $text .= ' <a href="' . Mage::helper('zendesk')->getUrl('ticket', $response['id']) . '" target="_blank">';
264
  $text .= Mage::helper('zendesk')->__('View ticket in Zendesk');
265
  $text .= '</a>';
266
 
@@ -316,7 +366,12 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
316
  $path = Mage::helper('zendesk/log')->getLogPath();
317
 
318
  if(!file_exists($path)) {
319
- Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('The Zendesk log file has not been created. Check to see if logging has been enabled.'));
 
 
 
 
 
320
  }
321
 
322
  if(Mage::helper('zendesk/log')->isLogTooLarge()) {
@@ -341,18 +396,329 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
341
  }
342
 
343
  public function checkOutboundAction()
 
 
 
 
 
 
 
 
 
 
 
344
  {
345
- try {
346
- // Try to retrieve a user with ID 1, which should always exist as a user account is needed to set up
347
- // the API credentials in the first place.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
  $user = Mage::getModel('zendesk/api_users')->all();
349
- Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('zendesk')->__('Connection to Zendesk API successful'));
350
- } catch(Exception $e) {
351
- Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Connection to Zendesk API failed') .
352
- '<br />' . $e->getCode() . ': ' . $e->getMessage() .
353
- '<br />' . Mage::helper('zendesk')->__('Troubleshooting tips can be found at <a href=%s>%s</a>', 'https://support.zendesk.com/entries/26579987', 'https://support.zendesk.com/entries/26579987'));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
354
  }
 
 
 
355
 
356
- $this->_redirect('adminhtml/system_config/edit/section/zendesk');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  }
23
 
24
  public function indexAction()
25
  {
26
+ if (!$this->_domainConfigured()) {
27
+ return;
28
+ }
29
+
30
+ $connection = Mage::helper('zendesk')->getConnectionStatus();
31
+
32
+ if(!$connection['success']) {
33
+ $this->setFlag('', 'no-dispatch', true);
34
+ Mage::getSingleton('adminhtml/session')->addError( $connection['msg'] );
35
+ $this->_redirect('adminhtml/dashboard');
36
+ return;
37
+ }
38
+
39
+ $this->storeDependenciesInCachedRegistry();
40
+
41
  $this->_title($this->__('Zendesk Dashboard'));
42
  $this->loadLayout();
43
  $this->_setActiveMenu('zendesk/zendesk_dashboard');
81
 
82
  $domain = Mage::getStoreConfig('zendesk/general/domain');
83
  $token = Mage::getStoreConfig('zendesk/sso/token');
84
+ $return_url = Mage::helper('core')->urlDecode($this->getRequest()->getParam('return_url', ""));
85
 
86
  if(!Zend_Validate::is($domain, 'NotEmpty')) {
87
  Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Zendesk domain not set. Please add this to the settings page.'));
98
 
99
  $user = Mage::getSingleton('admin/session')->getUser();
100
  $name = $user->getName();
101
+ $email = Mage::getStoreConfig('zendesk/general/email');
102
  $externalId = $user->getId();
103
 
104
  $payload = array(
105
+ "iat" => $now,
106
+ "jti" => $jti,
107
+ "name" => $name,
108
+ "email" => $email
 
109
  );
110
+
111
+ // Validate if we need to include external_id param
112
+ $externalIdEnabled = Mage::helper('zendesk')->isExternalIdEnabled();
113
+ if($externalIdEnabled) {
114
+ $payload['external_id'] = $user->getId();
115
+ }
116
 
117
  Mage::log('Admin JWT: ' . var_export($payload, true), null, 'zendesk.log');
118
 
119
  $jwt = JWT::encode($payload, $token);
120
+ $return = $return_url ? "&return_to=".$return_url : "";
121
+
122
+ $url = "http://".$domain."/access/jwt?jwt=" . $jwt . $return;
123
 
124
  Mage::log('Admin URL: ' . $url, null, 'zendesk.log');
125
 
126
  $this->_redirectUrl($url);
127
  }
128
+
129
  /**
130
  * Wrapper for the existing authenticate action. Mirrors the login/logout actions available for customers.
131
  */
132
  public function loginAction()
133
  {
134
+ if(!Mage::getStoreConfig('zendesk/sso/enabled')) {
135
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Single sign-on disabled.'));
136
+ $url = Mage::helper('core')->urlDecode($this->getRequest()->getParam('return_url', ""));
137
+ $this->_redirectUrl($url);
138
+ return;
139
+ }
140
  $this->authenticateAction();
141
  }
142
 
152
  $adminSession->getCookie()->delete($adminSession->getSessionName());
153
  $adminSession->addSuccess(Mage::helper('adminhtml')->__('You have logged out.'));
154
 
155
+ $this->_redirect('adminhtml/zendesk/*');
156
  }
157
 
158
  public function createAction()
159
  {
160
+ if (!$this->_domainConfigured()) {
161
+ return;
162
+ }
163
+
164
  // Check if we have been passed an order ID, in which case we can preload some of the form details
165
  if($orderId = $this->getRequest()->getParam('order_id')) {
166
  $order = Mage::getModel('sales/order')->load($orderId);
189
  $this->getLayout()->getBlock('js')->append($block);
190
 
191
  $this->renderLayout();
192
+
193
  }
194
 
195
  public function launchAction()
196
  {
197
+ $domain = $this->_domainConfigured();
198
+ if (!$domain) {
199
+ return;
200
+ }
201
+
202
+ $sso = Mage::getStoreConfig('zendesk/sso/enabled');
203
+
204
+ if (!$sso) {
205
+ $url = "http://".$domain;
206
+ } elseif(Mage::helper('zendesk')->isSSOAdminUsersEnabled()) {
207
+ $url = Mage::helper('zendesk')->getSSOAuthUrlAdminUsers();
208
+ } else {
209
+ $url = Mage::helper('zendesk')->getZendeskUnauthUrl();
210
+ }
211
+
212
+ $this->_redirectUrl($url);
213
  }
214
 
215
  public function saveAction()
282
  }
283
 
284
  try {
285
+ $admin = Mage::getModel('zendesk/api_users')->me();
286
  $ticket = array(
287
  'ticket' => array(
288
  'requester_id' => $requesterId,
289
+ 'submitter_id' => $admin['id'],
290
  'subject' => $data['subject'],
291
  'status' => $data['status'],
292
  'priority' => $data['priority'],
300
  $ticket['ticket']['type'] = $data['type'];
301
  }
302
 
303
+ if( ($fieldId = Mage::getStoreConfig('zendesk/frontend_features/order_field_id')) && isset($data['order']) && strlen(trim($data['order'])) > 0) {
304
  $ticket['ticket']['fields'] = array(
305
  'id' => $fieldId,
306
  'value' => $data['order']
310
  $response = Mage::getModel('zendesk/api_tickets')->create($ticket);
311
 
312
  $text = Mage::helper('zendesk')->__('Ticket #%s Created', $response['id']);
313
+ $text .= ' <a href="' . Mage::helper('zendesk')->getTicketUrl($response, true) . '" target="_blank">';
314
  $text .= Mage::helper('zendesk')->__('View ticket in Zendesk');
315
  $text .= '</a>';
316
 
366
  $path = Mage::helper('zendesk/log')->getLogPath();
367
 
368
  if(!file_exists($path)) {
369
+ if (is_writable($path)) {
370
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Creating a Zendesk log file.'));
371
+ file_put_contents(" ",$path);
372
+ } else {
373
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Magento logging has been disabled or Magento log folder has incorrect permissions.'));
374
+ }
375
  }
376
 
377
  if(Mage::helper('zendesk/log')->isLogTooLarge()) {
396
  }
397
 
398
  public function checkOutboundAction()
399
+ {
400
+ $connection = Mage::helper('zendesk')->getConnectionStatus();
401
+
402
+ $this->getResponse()->clearHeaders()->setHeader('Content-type','application/json', true);
403
+ $this->getResponse()->setBody(json_encode($connection));
404
+ }
405
+
406
+ /**
407
+ * Loading page block
408
+ */
409
+ public function loadBlockAction()
410
  {
411
+ $request = $this->getRequest();
412
+
413
+ $block = $request->getParam('block');
414
+ $update = $this->getLayout()->getUpdate();
415
+
416
+
417
+ $update->addHandle('adminhtml_zendesk_create_load_block_'.$block);
418
+
419
+ $this->loadLayoutUpdates()->generateLayoutXml()->generateLayoutBlocks();
420
+ $result = $this->getLayout()->getBlock('content')->toHtml();
421
+ if ($request->getParam('as_js_varname')) {
422
+ Mage::getSingleton('adminhtml/session')->setUpdateResult($result);
423
+ $this->_redirect('*/*/showUpdateResult');
424
+ } else {
425
+ $this->getResponse()->setBody($result);
426
+ }
427
+ }
428
+
429
+ public function getUserAction()
430
+ {
431
+ $request = $this->getRequest();
432
+ $id = $request->getParam('id');
433
+
434
+ $user = Mage::getModel('customer/customer')->load($id);
435
+
436
+ $this->getResponse()->clearHeaders()->setHeader('Content-type','application/json',true);
437
+
438
+ if($user->getId()) {
439
+ $this->getResponse()->setBody(json_encode(array('success'=>true, 'usr'=> array(
440
+ 'firstname' => $user->getFirstname(),
441
+ 'lastname' => $user->getLastname(),
442
+ 'email' => $user->getEmail()
443
+ ))));
444
+ } else {
445
+ $this->getResponse()->setBody(json_encode(array('success'=>false, 'msg'=>Mage::helper('zendesk')->__('User does not exist'))));
446
+ }
447
+ }
448
+
449
+ public function getOrderAction()
450
+ {
451
+ $request = $this->getRequest();
452
+ $id= $request->getParam('id');
453
+
454
+ $order = Mage::getModel('sales/order')->load($id);
455
+
456
+ $this->getResponse()->clearHeaders()->setHeader('Content-type','application/json',true);
457
+ if($order->getId()) {
458
+ $this->getResponse()->setBody(json_encode(array('success'=>true, 'order'=> array(
459
+ 'number' => $order->getIncrementId(),
460
+ ))));
461
+ } else {
462
+ $this->getResponse()->setBody(json_encode(array('success'=>false, 'msg'=>Mage::helper('zendesk')->__('Order does not exist'))));
463
+ }
464
+ }
465
+
466
+ public function syncAction()
467
+ {
468
+ $this->getResponse()->clearHeaders()->setHeader('Content-type','application/json',true);
469
+ Mage::log('Synchronization started', null, 'zendesk.log');
470
+ try {
471
  $user = Mage::getModel('zendesk/api_users')->all();
472
+ if (is_null($user))
473
+ throw new Exception("Connection Failed");
474
+
475
+ $data = array();
476
+ $data[] = array(
477
+ 'user_field' => array(
478
+ 'type' => 'integer',
479
+ 'title' => 'ID',
480
+ 'description' => 'Magento Customer Id',
481
+ 'position' => 0,
482
+ 'active' => true,
483
+ 'key' => 'id'
484
+ )
485
+ );
486
+ $data[] = array(
487
+ 'user_field' => array(
488
+ 'type' => 'text',
489
+ 'title' => 'Name',
490
+ 'description' => 'Magento Customer Name',
491
+ 'position' => 1,
492
+ 'active' => true,
493
+ 'key' => 'name'
494
+ )
495
+ );
496
+ $data[] = array(
497
+ 'user_field' => array(
498
+ 'type' => 'text',
499
+ 'title' => 'Group',
500
+ 'description' => 'Magento Customer Group',
501
+ 'position' => 2,
502
+ 'active' => true,
503
+ 'key' => 'group'
504
+ )
505
+ );
506
+ $data[] = array(
507
+ 'user_field' => array(
508
+ 'type' => 'text',
509
+ 'title' => 'Lifetime Sale',
510
+ 'description' => 'Magento Customer Lifetime Sale',
511
+ 'position' => 3,
512
+ 'active' => true,
513
+ 'key' => 'lifetime_sale'
514
+ )
515
+ );
516
+ $data[] = array(
517
+ 'user_field' => array(
518
+ 'type' => 'text',
519
+ 'title' => 'Average Sale',
520
+ 'description' => 'Magento Customer Average Sale',
521
+ 'position' => 4,
522
+ 'active' => true,
523
+ 'key' => 'average_sale'
524
+ )
525
+ );
526
+ $data[] = array(
527
+ 'user_field' => array(
528
+ 'type' => 'date',
529
+ 'title' => 'Last Logged In',
530
+ 'description' => 'Last Logged In',
531
+ 'position' => 5,
532
+ 'active' => true,
533
+ 'key' => 'logged_in'
534
+ )
535
+ );
536
+
537
+ foreach($data as $field) {
538
+ $response = Mage::getModel('zendesk/api_users')->createUserField($field);
539
+ if (!isset($response['active']) || $response['active'] === false)
540
+ Mage::log('Unable to create User Field with key '.$field['user_field']['key'], null, 'zendesk.log');
541
+ }
542
+
543
+ $customers = Mage::getModel('customer/customer')->getCollection();
544
+ $customers->addAttributeToSelect(array('firstname', 'lastname', 'email'));
545
+ foreach($customers as $customer) {
546
+ Mage::log('Synchronizing customer with id '.$customer->getId(), null, 'zendesk.log');
547
+ Mage::dispatchEvent('customer_save_commit_after', array('customer' => $customer));
548
+ }
549
+
550
+ } catch (Exception $ex) {
551
+ Mage::log('Synchronization failed: '.$ex->getMessage(), null, 'zendesk.log');
552
+ $this->getResponse()->setBody(json_encode(array('success'=>false, 'msg'=>Mage::helper('zendesk')->__('Synchronization failed: ').$ex->getMessage())));
553
+ return;
554
  }
555
+ Mage::log('Synchronization completed successfully', null, 'zendesk.log');
556
+ $this->getResponse()->setBody(json_encode(array('success'=>true, 'msg'=>Mage::helper('zendesk')->__('Customers synchronization finished successfuly'))));
557
+ }
558
 
559
+ public function bulkDeleteAction()
560
+ {
561
+ $ids = $this->getRequest()->getParam('id');
562
+ try {
563
+ $response = Mage::getModel('zendesk/api_tickets')->bulkDelete($ids);
564
+ $message = '%d out of %d ticket(s) were deleted.';
565
+ $this->getMassActionResponse($response, $ids, $message);
566
+ } catch (Exception $e) {
567
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
568
+ }
569
+ $this->_redirectReferer();
570
+ }
571
+
572
+ public function bulkChangeStatusAction()
573
+ {
574
+ $ids = $this->getRequest()->getParam('id');
575
+ $status = $this->getRequest()->getParam('status');
576
+
577
+ try {
578
+ $response = Mage::getModel('zendesk/api_tickets')->updateMany($ids, compact('status'));
579
+ $this->getMassActionResponse($response, $ids);
580
+ } catch (Exception $e) {
581
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
582
+ }
583
+ $this->_redirect('adminhtml/zendesk/');
584
+ }
585
+
586
+ public function bulkChangePriorityAction()
587
+ {
588
+ $ids = $this->getRequest()->getParam('id');
589
+ $priority = $this->getRequest()->getParam('priority');
590
+
591
+ try {
592
+ $response = Mage::getModel('zendesk/api_tickets')->updateMany($ids, compact('priority'));
593
+ $this->getMassActionResponse($response, $ids);
594
+ } catch (Exception $e) {
595
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
596
+ }
597
+ $this->_redirect('adminhtml/zendesk/');
598
+ }
599
+
600
+ public function bulkChangeTypeAction()
601
+ {
602
+ $ids = $this->getRequest()->getParam('id');
603
+ $type = $this->getRequest()->getParam('type');
604
+
605
+ try {
606
+ $response = Mage::getModel('zendesk/api_tickets')->updateMany($ids, compact('type'));
607
+ $this->getMassActionResponse($response, $ids);
608
+ } catch (Exception $e) {
609
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
610
+ }
611
+ $this->_redirect('adminhtml/zendesk/');
612
+ }
613
+
614
+ public function bulkMarkSpamAction()
615
+ {
616
+ $ids = $this->getRequest()->getParam('id');
617
+
618
+ try {
619
+ $response = Mage::getModel('zendesk/api_tickets')->bulkMarkAsSpam($ids);
620
+ $message = '%d out of %d ticket(s) were marked as spam.';
621
+ $this->getMassActionResponse($response, $ids, $message);
622
+ } catch (Exception $e) {
623
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
624
+ }
625
+ $this->_redirectReferer();
626
+ }
627
+
628
+ public function ticketsAllAction() {
629
+ $isAjax = Mage::app()->getRequest()->isAjax();
630
+
631
+ if ($isAjax) {
632
+ $this->storeDependenciesInCachedRegistry();
633
+ $this->getResponse()->setBody($this->getLayout()->createBlock('zendesk/adminhtml_dashboard_tab_tickets_grid_all')->toHtml());
634
+ }
635
+ }
636
+
637
+ public function ticketsViewAction() {
638
+ $isAjax = Mage::app()->getRequest()->isAjax();
639
+
640
+ if ($isAjax) {
641
+ $this->storeDependenciesInCachedRegistry();
642
+ $viewId = (int) $this->getRequest()->getParam('viewid');
643
+ Mage::register('zendesk_tickets_view', $viewId);
644
+
645
+ $this->getResponse()->setBody($this->getLayout()->createBlock('zendesk/adminhtml_dashboard_tab_tickets_grid_view')->toHtml());
646
+ }
647
  }
648
+
649
+ protected function storeDependenciesInCachedRegistry() {
650
+ $cache = Mage::app()->getCache();
651
+
652
+ if( $cache->load('zendesk_users') === false) {
653
+ $users = serialize( Mage::getModel('zendesk/api_users')->all() );
654
+ $cache->save($users, 'zendesk_users', array('zendesk', 'zendesk_users'), 300);
655
+ }
656
+
657
+ if( $cache->load('zendesk_groups') === false) {
658
+ $groups = serialize( Mage::getModel('zendesk/api_groups')->all() );
659
+ $cache->save($groups, 'zendesk_groups', array('zendesk', 'zendesk_groups'), 1200);
660
+ }
661
+
662
+ $users = unserialize( $cache->load('zendesk_users') );
663
+ $groups = unserialize( $cache->load('zendesk_groups') );
664
+
665
+ Mage::register('zendesk_users', $users);
666
+ Mage::register('zendesk_groups', $groups);
667
+ }
668
+
669
+ protected function getMassActionResponse($response, $ids, $message = '%d out of %d ticket(s) were updated.')
670
+ {
671
+ if (isset($response['job_status']) && isset($response['job_status']['url'])) {
672
+ $job_status = Mage::getModel('zendesk/api_tickets')->getJobStatus($response['job_status']['url']);
673
+
674
+ $parsed = array();
675
+ $parsed['errors'] = array();
676
+ $parsed['success'] = 0;
677
+
678
+ if (isset($job_status['job_status']['results'])) {
679
+ foreach ($job_status['job_status']['results'] as $result) {
680
+ if ($result['success']) {
681
+ $parsed['success'] ++;
682
+ continue;
683
+ }
684
+
685
+ if ($result['errors'])
686
+ $parsed['errors'][] = $result['errors']." (ID:".$result['id'].")";
687
+ }
688
+ }
689
+
690
+ Mage::getSingleton('adminhtml/session')->addSuccess(
691
+ Mage::helper('zendesk')->__(
692
+ $message,
693
+ $parsed['success'],
694
+ count($ids)
695
+ )
696
+ );
697
+
698
+ foreach ($parsed['errors'] as $error) {
699
+ Mage::getSingleton('adminhtml/session')->addError(
700
+ Mage::helper('zendesk')->__($error)
701
+ );
702
+ }
703
+ } else {
704
+ Mage::getSingleton('adminhtml/session')->addError(
705
+ Mage::helper('zendesk')->__(
706
+ 'Request failed for %d ticket(s).', count($ids)
707
+ )
708
+ );
709
+ }
710
+ }
711
+
712
+ private function _domainConfigured()
713
+ {
714
+ $domain = Mage::getStoreConfig('zendesk/general/domain');
715
+ if(!$domain) {
716
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('zendesk')->__('Please set up Zendesk connection.'));
717
+ $this->_redirect('adminhtml/dashboard');
718
+ return false;
719
+ } else {
720
+ return $domain;
721
+ }
722
+ }
723
+
724
  }
app/code/community/Zendesk/Zendesk/controllers/ApiController.php CHANGED
@@ -23,14 +23,33 @@ class Zendesk_Zendesk_ApiController extends Mage_Core_Controller_Front_Action
23
  // Perform some basic checks before running any of the API methods
24
  // Note that authorisation will accept either the provisioning or the standard API token, which facilitates API
25
  // methods being called during the setup process
26
- $authHeader = $this->getRequest()->getHeader('authorization');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- if (!$authHeader) {
29
- Mage::log('Unable to extract authorization header from request', null, 'zendesk.log');
30
  return false;
31
  }
32
 
33
- $tokenString = stripslashes($authHeader);
34
 
35
  $token = null;
36
  $matches = array();
@@ -135,6 +154,9 @@ class Zendesk_Zendesk_ApiController extends Mage_Core_Controller_Front_Action
135
  // Try to load a corresponding customer object for the provided email address
136
  $customer = Mage::helper('zendesk')->loadCustomer($email);
137
 
 
 
 
138
  if($customer && $customer->getId()) {
139
  $info = array(
140
  'guest' => false,
@@ -142,7 +164,7 @@ class Zendesk_Zendesk_ApiController extends Mage_Core_Controller_Front_Action
142
  'name' => $customer->getName(),
143
  'email' => $customer->getEmail(),
144
  'active' => (bool)$customer->getIsActive(),
145
- 'admin_url' => Mage::helper('adminhtml')->getUrl('adminhtml/zendesk/redirect', array('id' => $customer->getId(), 'type' => 'customer')),
146
  'created' => $customer->getCreatedAt(),
147
  'dob' => $customer->getDob(),
148
  'addresses' => array(),
@@ -290,7 +312,7 @@ class Zendesk_Zendesk_ApiController extends Mage_Core_Controller_Front_Action
290
  if(!isset($data['order_field_id'])) {
291
  $missingFields[] = 'order_field_id';
292
  } else {
293
- $configUpdates['zendesk/features/order_field_id'] = $data['order_field_id'];
294
  }
295
 
296
  // Check that the required fields were provided and send back an error if not
@@ -321,15 +343,15 @@ class Zendesk_Zendesk_ApiController extends Mage_Core_Controller_Front_Action
321
  }
322
 
323
  if(isset($data['magento_footer_link'])) {
324
- $configUpdates['zendesk/features/footer_link_enabled'] = ($data['magento_footer_link'] == 'true');
325
  }
326
 
327
  if(isset($data['email_forwarding'])) {
328
- $configUpdates['zendesk/features/contact_us'] = ($data['email_forwarding'] == 'true');
329
 
330
  // Process this now, since it otherwise won't be triggered until the config page is saved
331
  // Unlike in the observer, we only need to deal with the case where the setting is enabled
332
- if($configUpdates['zendesk/features/contact_us']) {
333
 
334
  $currentEmail = Mage::getStoreConfig('contacts/email/recipient_email');
335
  $zendeskEmail = 'support@' . $configUpdates['zendesk/general/domain'];
@@ -346,11 +368,11 @@ class Zendesk_Zendesk_ApiController extends Mage_Core_Controller_Front_Action
346
  }
347
 
348
  if(isset($data['feedback_tab'])) {
349
- $configUpdates['zendesk/features/feedback_tab_code_active'] = ($data['feedback_tab'] === 'true');
350
  }
351
 
352
  if(isset($data['feedback_tab_html'])) {
353
- $configUpdates['zendesk/features/feedback_tab_code'] = $data['feedback_tab_html'];
354
  }
355
 
356
 
23
  // Perform some basic checks before running any of the API methods
24
  // Note that authorisation will accept either the provisioning or the standard API token, which facilitates API
25
  // methods being called during the setup process
26
+ $tokenString = $this->getRequest()->getHeader('authorization');
27
+
28
+ if(!$tokenString && isset($_SERVER['Authorization'])) {
29
+ $tokenString = $_SERVER['Authorization'];
30
+ }
31
+
32
+ if(!$tokenString && isset($_SERVER['HTTP_AUTHORIZATION'])) {
33
+ $tokenString = $_SERVER['HTTP_AUTHORIZATION'];
34
+ }
35
+
36
+ if (!$tokenString && isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
37
+ $tokenString = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
38
+ }
39
+
40
+ if (!$tokenString) {
41
+ // Certain server configurations fail to extract headers from the request, see PR #24.
42
+ Mage::log('Unable to extract authorization header from request.', null, 'zendesk.log');
43
+
44
+ $this->getResponse()
45
+ ->setBody(json_encode(array('success' => false, 'message' => 'Unable to extract authorization header from request')))
46
+ ->setHttpResponseCode(403)
47
+ ->setHeader('Content-type', 'application/json', true);
48
 
 
 
49
  return false;
50
  }
51
 
52
+ $tokenString = stripslashes($tokenString);
53
 
54
  $token = null;
55
  $matches = array();
154
  // Try to load a corresponding customer object for the provided email address
155
  $customer = Mage::helper('zendesk')->loadCustomer($email);
156
 
157
+ // if the admin site has a custom URL, use it
158
+ $urlModel = Mage::getModel('adminhtml/url')->setStore('admin');
159
+
160
  if($customer && $customer->getId()) {
161
  $info = array(
162
  'guest' => false,
164
  'name' => $customer->getName(),
165
  'email' => $customer->getEmail(),
166
  'active' => (bool)$customer->getIsActive(),
167
+ 'admin_url' => $urlModel->getUrl('adminhtml/zendesk/redirect', array('id' => $customer->getId(), 'type' => 'customer')),
168
  'created' => $customer->getCreatedAt(),
169
  'dob' => $customer->getDob(),
170
  'addresses' => array(),
312
  if(!isset($data['order_field_id'])) {
313
  $missingFields[] = 'order_field_id';
314
  } else {
315
+ $configUpdates['zendesk/frontend_features/order_field_id'] = $data['order_field_id'];
316
  }
317
 
318
  // Check that the required fields were provided and send back an error if not
343
  }
344
 
345
  if(isset($data['magento_footer_link'])) {
346
+ $configUpdates['zendesk/frontend_features/footer_link_enabled'] = ($data['magento_footer_link'] == 'true');
347
  }
348
 
349
  if(isset($data['email_forwarding'])) {
350
+ $configUpdates['zendesk/frontend_features/contact_us'] = ($data['email_forwarding'] == 'true');
351
 
352
  // Process this now, since it otherwise won't be triggered until the config page is saved
353
  // Unlike in the observer, we only need to deal with the case where the setting is enabled
354
+ if($configUpdates['zendesk/frontend_features/contact_us']) {
355
 
356
  $currentEmail = Mage::getStoreConfig('contacts/email/recipient_email');
357
  $zendeskEmail = 'support@' . $configUpdates['zendesk/general/domain'];
368
  }
369
 
370
  if(isset($data['feedback_tab'])) {
371
+ $configUpdates['zendesk/frontend_features/feedback_tab_code_active'] = ($data['feedback_tab'] === 'true');
372
  }
373
 
374
  if(isset($data['feedback_tab_html'])) {
375
+ $configUpdates['zendesk/frontend_features/feedback_tab_code'] = $data['feedback_tab_html'];
376
  }
377
 
378
 
app/code/community/Zendesk/Zendesk/controllers/Customer/TicketsController.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2012 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
+ class Zendesk_Zendesk_Customer_TicketsController extends Mage_Core_Controller_Front_Action
19
+ {
20
+
21
+ public function preDispatch()
22
+ {
23
+ parent::preDispatch();
24
+ if (!Mage::getSingleton('customer/session')->isLoggedIn()) {
25
+ $this->_redirectUrl(Mage::helper('customer')->getAccountUrl());
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Display data
31
+ */
32
+ public function indexAction()
33
+ {
34
+ $this->loadLayout();
35
+
36
+ $this->renderLayout();
37
+ }
38
+
39
+ }
app/code/community/Zendesk/Zendesk/controllers/IndexController.php CHANGED
@@ -22,7 +22,12 @@ class Zendesk_Zendesk_IndexController extends Mage_Core_Controller_Front_Action
22
  */
23
  public function indexAction()
24
  {
25
- $url = Mage::helper('zendesk')->getUrl();
 
 
 
 
26
  $this->_redirectUrl($url);
27
  }
28
- }
 
22
  */
23
  public function indexAction()
24
  {
25
+ if(Mage::helper('zendesk')->isSSOEndUsersEnabled()) {
26
+ $url = Mage::helper('zendesk')->getSSOAuthUrlEndUsers();
27
+ } else {
28
+ $url = Mage::helper('zendesk')->getUrl();
29
+ }
30
  $this->_redirectUrl($url);
31
  }
32
+
33
+ }
app/code/community/Zendesk/Zendesk/controllers/SsoController.php CHANGED
@@ -25,14 +25,15 @@ class Zendesk_Zendesk_SsoController extends Mage_Core_Controller_Front_Action
25
  */
26
  public function loginAction()
27
  {
 
28
  if(!Mage::getStoreConfig('zendesk/sso_frontend/enabled')) {
29
- $this->_redirect('/');
30
  return $this;
31
  }
32
 
33
  $domain = Mage::getStoreConfig('zendesk/general/domain');
34
  $token = Mage::getStoreConfig('zendesk/sso_frontend/token');
35
-
36
  if(!Zend_Validate::is($domain, 'NotEmpty')) {
37
  Mage::log(Mage::helper('zendesk')->__('Zendesk domain not set. Please add this to the settings page.'), null, 'zendesk.log');
38
  $this->_redirect('/');
@@ -65,15 +66,21 @@ class Zendesk_Zendesk_SsoController extends Mage_Core_Controller_Front_Action
65
  "iat" => $now,
66
  "jti" => $jti,
67
  "name" => $name,
68
- "email" => $email,
69
- "external_id" => $externalId
70
  );
71
 
 
 
 
 
 
 
72
  Mage::log('End-user JWT: ' . var_export($payload, true), null, 'zendesk.log');
73
 
74
  $jwt = JWT::encode($payload, $token);
75
-
76
- $url = "http://".$domain."/access/jwt?jwt=" . $jwt;
 
77
 
78
  Mage::log('End-user URL: ' . $url, null, 'zendesk.log');
79
 
25
  */
26
  public function loginAction()
27
  {
28
+ $return_url = Mage::helper('core')->urlDecode($this->getRequest()->getParam('return_url', ""));
29
  if(!Mage::getStoreConfig('zendesk/sso_frontend/enabled')) {
30
+ $this->_redirectUrl($return_url ? $return_url : Mage::helper('zendesk')->getZendeskUnauthUrl());
31
  return $this;
32
  }
33
 
34
  $domain = Mage::getStoreConfig('zendesk/general/domain');
35
  $token = Mage::getStoreConfig('zendesk/sso_frontend/token');
36
+
37
  if(!Zend_Validate::is($domain, 'NotEmpty')) {
38
  Mage::log(Mage::helper('zendesk')->__('Zendesk domain not set. Please add this to the settings page.'), null, 'zendesk.log');
39
  $this->_redirect('/');
66
  "iat" => $now,
67
  "jti" => $jti,
68
  "name" => $name,
69
+ "email" => $email
 
70
  );
71
 
72
+ // Validate if we need to include external_id param
73
+ $externalIdEnabled = Mage::helper('zendesk')->isExternalIdEnabled();
74
+ if($externalIdEnabled) {
75
+ $payload['external_id'] = $user->getId();
76
+ }
77
+
78
  Mage::log('End-user JWT: ' . var_export($payload, true), null, 'zendesk.log');
79
 
80
  $jwt = JWT::encode($payload, $token);
81
+ $return_url = $return_url ? "&return_to=".$return_url : "";
82
+
83
+ $url = "http://".$domain."/access/jwt?jwt=" . $jwt.$return_url;
84
 
85
  Mage::log('End-user URL: ' . $url, null, 'zendesk.log');
86
 
app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-1.3.0-1.4.0.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ $config = new Mage_Core_Model_Config();
19
+ $options = array();
20
+
21
+ $options['zendesk/backend_features/show_on_dashboard'] = Mage::getStoreConfig('zendesk/features/show_on_dashboard');
22
+ $options['zendesk/backend_features/show_on_order'] = Mage::getStoreConfig('zendesk/features/show_on_order');
23
+ $options['zendesk/backend_features/show_views'] = Mage::getStoreConfig('zendesk/features/show_views');
24
+ $options['zendesk/backend_features/show_on_customer'] = Mage::getStoreConfig('zendesk/features/show_on_customer');
25
+ $options['zendesk/frontend_features/show_on_dashboard'] = Mage::getStoreConfig('zendesk/features/contact_us');
26
+ $options['zendesk/frontend_features/feedback_tab_code_active'] = Mage::getStoreConfig('zendesk/features/feedback_tab_code_active');
27
+ $options['zendesk/frontend_features/feedback_tab_code'] = Mage::getStoreConfig('zendesk/features/feedback_tab_code');
28
+ $options['zendesk/frontend_features/feedback_tab_customise'] = Mage::getStoreConfig('zendesk/features/feedback_tab_customise');
29
+ $options['zendesk/frontend_features/order_field_id'] = Mage::getStoreConfig('zendesk/features/order_field_id');
30
+ $options['zendesk/frontend_features/customer_tickets'] = Mage::getStoreConfig('zendesk/features/customer_tickets');
31
+ $options['zendesk/frontend_features/footer_link_enabled'] = Mage::getStoreConfig('zendesk/features/footer_link_enabled');
32
+
33
+ foreach ( $options as $key => $value )
34
+ {
35
+ $config->saveConfig($key, $value, 'default', 0);
36
+ }
app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-1.3.1-1.4.0.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ $config = new Mage_Core_Model_Config();
19
+ $options = array();
20
+
21
+ $options['zendesk/backend_features/show_on_dashboard'] = Mage::getStoreConfig('zendesk/features/show_on_dashboard');
22
+ $options['zendesk/backend_features/show_on_order'] = Mage::getStoreConfig('zendesk/features/show_on_order');
23
+ $options['zendesk/backend_features/show_views'] = Mage::getStoreConfig('zendesk/features/show_views');
24
+ $options['zendesk/backend_features/show_on_customer'] = Mage::getStoreConfig('zendesk/features/show_on_customer');
25
+ $options['zendesk/frontend_features/show_on_dashboard'] = Mage::getStoreConfig('zendesk/features/contact_us');
26
+ $options['zendesk/frontend_features/feedback_tab_code_active'] = Mage::getStoreConfig('zendesk/features/feedback_tab_code_active');
27
+ $options['zendesk/frontend_features/feedback_tab_code'] = Mage::getStoreConfig('zendesk/features/feedback_tab_code');
28
+ $options['zendesk/frontend_features/feedback_tab_customise'] = Mage::getStoreConfig('zendesk/features/feedback_tab_customise');
29
+ $options['zendesk/frontend_features/order_field_id'] = Mage::getStoreConfig('zendesk/features/order_field_id');
30
+ $options['zendesk/frontend_features/customer_tickets'] = Mage::getStoreConfig('zendesk/features/customer_tickets');
31
+ $options['zendesk/frontend_features/footer_link_enabled'] = Mage::getStoreConfig('zendesk/features/footer_link_enabled');
32
+
33
+ foreach ( $options as $key => $value )
34
+ {
35
+ $config->saveConfig($key, $value, 'default', 0);
36
+ }
app/code/community/Zendesk/Zendesk/etc/config.xml CHANGED
@@ -19,7 +19,7 @@
19
  <config>
20
  <modules>
21
  <Zendesk_Zendesk>
22
- <version>1.3.0</version>
23
  </Zendesk_Zendesk>
24
  </modules>
25
  <zendesk>
@@ -40,11 +40,6 @@
40
  <zendesk>
41
  <class>Zendesk_Zendesk_Block</class>
42
  </zendesk>
43
- <adminhtml>
44
- <rewrite>
45
- <sales_order_view>Zendesk_Zendesk_Block_Adminhtml_Order_View</sales_order_view>
46
- </rewrite>
47
- </adminhtml>
48
  </blocks>
49
  <resources>
50
  <zendesk_setup>
@@ -84,6 +79,24 @@
84
  </zendesk>
85
  </updates>
86
  </layout>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  </frontend>
88
  <admin>
89
  <routers>
@@ -102,6 +115,9 @@
102
  <zendesk>
103
  <file>zendesk.xml</file>
104
  </zendesk>
 
 
 
105
  </updates>
106
  </layout>
107
  <translate>
@@ -114,6 +130,15 @@
114
  </modules>
115
  </translate>
116
  <events>
 
 
 
 
 
 
 
 
 
117
  <core_block_abstract_prepare_layout_after>
118
  <observers>
119
  <zendesk>
@@ -138,6 +163,15 @@
138
  </zendesk>
139
  </observers>
140
  </admin_system_config_changed_section_zendesk>
 
 
 
 
 
 
 
 
 
141
  </events>
142
  <menu>
143
  <zendesk translate="title" module="zendesk">
@@ -159,11 +193,11 @@
159
  <action>adminhtml/zendesk/launch</action>
160
  <sort_order>3</sort_order>
161
  </zendesk_launch>
162
- <zendesk_settings module="zendesk">
163
- <title>Settings</title>
164
  <action>adminhtml/system_config/edit/section/zendesk</action>
165
  <sort_order>4</sort_order>
166
- </zendesk_settings>
167
  <zendesk_log module="zendesk">
168
  <title>Log Viewer</title>
169
  <action>adminhtml/zendesk/log</action>
@@ -215,13 +249,21 @@
215
  </adminhtml>
216
  <default>
217
  <zendesk>
218
- <features>
219
- <show_on_dashboard>1</show_on_dashboard>
220
- <show_on_customer>1</show_on_customer>
221
- <show_on_order>1</show_on_order>
222
  <feedback_tab_code_active>0</feedback_tab_code_active>
223
  <contact_us>0</contact_us>
224
- </features>
 
 
 
 
 
 
 
 
225
  </zendesk>
226
  </default>
227
  </config>
19
  <config>
20
  <modules>
21
  <Zendesk_Zendesk>
22
+ <version>1.4.0</version>
23
  </Zendesk_Zendesk>
24
  </modules>
25
  <zendesk>
40
  <zendesk>
41
  <class>Zendesk_Zendesk_Block</class>
42
  </zendesk>
 
 
 
 
 
43
  </blocks>
44
  <resources>
45
  <zendesk_setup>
79
  </zendesk>
80
  </updates>
81
  </layout>
82
+ <events>
83
+ <customer_save_commit_after>
84
+ <observers>
85
+ <zendesk>
86
+ <class>zendesk/observer</class>
87
+ <method>changeIdentity</method>
88
+ </zendesk>
89
+ </observers>
90
+ </customer_save_commit_after>
91
+ <customer_login>
92
+ <observers>
93
+ <zendesk>
94
+ <class>zendesk/observer</class>
95
+ <method>changeIdentity</method>
96
+ </zendesk>
97
+ </observers>
98
+ </customer_login>
99
+ </events>
100
  </frontend>
101
  <admin>
102
  <routers>
115
  <zendesk>
116
  <file>zendesk.xml</file>
117
  </zendesk>
118
+ <jstranslate>
119
+ <file>jstranslate.xml</file>
120
+ </jstranslate>
121
  </updates>
122
  </layout>
123
  <translate>
130
  </modules>
131
  </translate>
132
  <events>
133
+
134
+ <core_block_abstract_prepare_layout_before>
135
+ <observers>
136
+ <zendesk>
137
+ <class>zendesk/observer</class>
138
+ <method>addTicketButton</method>
139
+ </zendesk>
140
+ </observers>
141
+ </core_block_abstract_prepare_layout_before>
142
  <core_block_abstract_prepare_layout_after>
143
  <observers>
144
  <zendesk>
163
  </zendesk>
164
  </observers>
165
  </admin_system_config_changed_section_zendesk>
166
+ <customer_save_commit_after>
167
+ <observers>
168
+ <zendesk>
169
+ <class>zendesk/observer</class>
170
+ <method>changeIdentity</method>
171
+ </zendesk>
172
+ </observers>
173
+ </customer_save_commit_after>
174
+
175
  </events>
176
  <menu>
177
  <zendesk translate="title" module="zendesk">
193
  <action>adminhtml/zendesk/launch</action>
194
  <sort_order>3</sort_order>
195
  </zendesk_launch>
196
+ <zendesk_configurations module="zendesk">
197
+ <title>Configuration</title>
198
  <action>adminhtml/system_config/edit/section/zendesk</action>
199
  <sort_order>4</sort_order>
200
+ </zendesk_configurations>
201
  <zendesk_log module="zendesk">
202
  <title>Log Viewer</title>
203
  <action>adminhtml/zendesk/log</action>
249
  </adminhtml>
250
  <default>
251
  <zendesk>
252
+ <general>
253
+ <customer_sync>0</customer_sync>
254
+ </general>
255
+ <frontend_features>
256
  <feedback_tab_code_active>0</feedback_tab_code_active>
257
  <contact_us>0</contact_us>
258
+ </frontend_features>
259
+ <backend_features>
260
+ <show_on_dashboard>0</show_on_dashboard>
261
+ <show_all>1</show_all>
262
+ <show_on_customer>1</show_on_customer>
263
+ <show_on_order>1</show_on_order>
264
+ <default_sort>created_at</default_sort>
265
+ <default_sort_dir>desc</default_sort_dir>
266
+ </backend_features>
267
  </zendesk>
268
  </default>
269
  </config>
app/code/community/Zendesk/Zendesk/etc/jstranslator.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Copyright 2015 Zendesk
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ -->
19
+ <jstranslator>
20
+ <validate-zendesk-sso-token translate="message" module="zendesk">
21
+ <message>Token cannot be empty</message>
22
+ </validate-zendesk-sso-token>
23
+ <validate-zendesk-sso-frontend-token translate="message" module="zendesk">
24
+ <message>Token cannot be empty</message>
25
+ </validate-zendesk-sso-frontend-token>
26
+ </jstranslator>
app/code/community/Zendesk/Zendesk/etc/system.xml CHANGED
@@ -35,7 +35,7 @@
35
  <show_in_website>1</show_in_website>
36
  <show_in_store>1</show_in_store>
37
  <groups>
38
- <general translate="label comment">
39
  <expanded>1</expanded>
40
  <label>General</label>
41
  <comment>General settings that are required to connect Zendesk and Magento.</comment>
@@ -44,7 +44,7 @@
44
  <show_in_default>1</show_in_default>
45
  <show_in_website>1</show_in_website>
46
  <show_in_store>1</show_in_store>
47
- <fields>
48
  <domain translate="label comment">
49
  <label>Zendesk Domain</label>
50
  <frontend_type>text</frontend_type>
@@ -80,6 +80,36 @@
80
  <show_in_website>1</show_in_website>
81
  <show_in_store>1</show_in_store>
82
  </test>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  </fields>
84
  </general>
85
  <sso translate="label comment">
@@ -105,6 +135,7 @@
105
  <label>Remote Authentication Token</label>
106
  <frontend_type>text</frontend_type>
107
  <sort_order>2</sort_order>
 
108
  <show_in_default>1</show_in_default>
109
  <show_in_website>1</show_in_website>
110
  <show_in_store>1</show_in_store>
@@ -134,59 +165,23 @@
134
  <label>Remote Authentication Token</label>
135
  <frontend_type>text</frontend_type>
136
  <sort_order>2</sort_order>
 
137
  <show_in_default>1</show_in_default>
138
  <show_in_website>1</show_in_website>
139
  <show_in_store>1</show_in_store>
140
  </token>
141
  </fields>
142
  </sso_frontend>
143
- <features translate="label">
144
  <expanded>1</expanded>
145
- <label>Features</label>
146
  <comment>Decide which features you would like turned on in your Magento store.</comment>
147
  <frontend_type>text</frontend_type>
148
  <sort_order>30</sort_order>
149
  <show_in_default>1</show_in_default>
150
  <show_in_website>1</show_in_website>
151
  <show_in_store>1</show_in_store>
152
- <fields>
153
- <show_on_dashboard translate="label">
154
- <label>Show support tickets on admin dashboard</label>
155
- <frontend_type>select</frontend_type>
156
- <source_model>adminhtml/system_config_source_yesno</source_model>
157
- <sort_order>1</sort_order>
158
- <show_in_default>1</show_in_default>
159
- <show_in_website>1</show_in_website>
160
- <show_in_store>0</show_in_store>
161
- </show_on_dashboard>
162
- <show_views translate="label">
163
- <label>Views to show on dashboards</label>
164
- <frontend_type>multiselect</frontend_type>
165
- <source_model>zendesk/source_views</source_model>
166
- <sort_order>2</sort_order>
167
- <show_in_default>1</show_in_default>
168
- <show_in_website>1</show_in_website>
169
- <show_in_store>0</show_in_store>
170
- <can_be_empty>1</can_be_empty>
171
- </show_views>
172
- <show_on_customer translate="label">
173
- <label>Show support tickets on customer view</label>
174
- <frontend_type>select</frontend_type>
175
- <source_model>adminhtml/system_config_source_yesno</source_model>
176
- <sort_order>3</sort_order>
177
- <show_in_default>1</show_in_default>
178
- <show_in_website>1</show_in_website>
179
- <show_in_store>0</show_in_store>
180
- </show_on_customer>
181
- <show_on_order translate="label">
182
- <label>Show support tickets on order view</label>
183
- <frontend_type>select</frontend_type>
184
- <source_model>adminhtml/system_config_source_yesno</source_model>
185
- <sort_order>4</sort_order>
186
- <show_in_default>1</show_in_default>
187
- <show_in_website>1</show_in_website>
188
- <show_in_store>0</show_in_store>
189
- </show_on_order>
190
  <contact_us translate="label">
191
  <label>Create tickets from Contact Us form</label>
192
  <frontend_type>select</frontend_type>
@@ -237,6 +232,16 @@
237
  <show_in_website>1</show_in_website>
238
  <show_in_store>1</show_in_store>
239
  </footer_link_enabled>
 
 
 
 
 
 
 
 
 
 
240
  <order_field_id translate="label comment">
241
  <label>Zendesk Order Number field ID</label>
242
  <frontend_type>text</frontend_type>
@@ -247,7 +252,83 @@
247
  <comment><![CDATA[Used to link order in Magento with tickets in Zendesk]]></comment>
248
  </order_field_id>
249
  </fields>
250
- </features>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  <api translate="label comment">
252
  <label>API Details</label>
253
  <comment>Required for Magento App inside Zendesk to work.</comment>
@@ -276,7 +357,7 @@
276
  </token>
277
  <sign_up translate="button_label">
278
  <label></label>
279
- <button_label>Generate new token</button_label>
280
  <frontend_model>zendesk/adminhtml_config_buttons_generate</frontend_model>
281
  <sort_order>3</sort_order>
282
  <show_in_default>1</show_in_default>
@@ -397,7 +478,7 @@
397
  <fields>
398
  <sign_up translate="button_label">
399
  <label></label>
400
- <button_label>Setup guide</button_label>
401
  <frontend_model>zendesk/adminhtml_config_buttons_signup</frontend_model>
402
  <sort_order>1</sort_order>
403
  <show_in_default>1</show_in_default>
35
  <show_in_website>1</show_in_website>
36
  <show_in_store>1</show_in_store>
37
  <groups>
38
+ <general translate="label comment">
39
  <expanded>1</expanded>
40
  <label>General</label>
41
  <comment>General settings that are required to connect Zendesk and Magento.</comment>
44
  <show_in_default>1</show_in_default>
45
  <show_in_website>1</show_in_website>
46
  <show_in_store>1</show_in_store>
47
+ <fields>
48
  <domain translate="label comment">
49
  <label>Zendesk Domain</label>
50
  <frontend_type>text</frontend_type>
80
  <show_in_website>1</show_in_website>
81
  <show_in_store>1</show_in_store>
82
  </test>
83
+ <use_external_id translate="label comment">
84
+ <label>Use External ID</label>
85
+ <frontend_type>select</frontend_type>
86
+ <source_model>adminhtml/system_config_source_yesno</source_model>
87
+ <sort_order>5</sort_order>
88
+ <show_in_default>1</show_in_default>
89
+ <show_in_website>1</show_in_website>
90
+ <show_in_store>1</show_in_store>
91
+ <comment><![CDATA[Depending on your Zendesk configuration under "Settings / Security / JSON Web Token / Update of external IDs?" ]]></comment>
92
+ </use_external_id>
93
+ <customer_sync translate="label comment">
94
+ <label>Synchronize Customers</label>
95
+ <frontend_type>select</frontend_type>
96
+ <source_model>adminhtml/system_config_source_yesno</source_model>
97
+ <sort_order>6</sort_order>
98
+ <show_in_default>1</show_in_default>
99
+ <show_in_website>1</show_in_website>
100
+ <show_in_store>1</show_in_store>
101
+ <comment><![CDATA[Synchronize magento customer accounts with zendesk end-users? ]]></comment>
102
+ </customer_sync>
103
+ <sync_now translate="button_label comment">
104
+ <label></label>
105
+ <button_label>Sync All Customers And Create User Fields</button_label>
106
+ <frontend_model>zendesk/adminhtml_config_buttons_sync</frontend_model>
107
+ <sort_order>7</sort_order>
108
+ <show_in_default>1</show_in_default>
109
+ <show_in_website>1</show_in_website>
110
+ <show_in_store>1</show_in_store>
111
+ <comment><![CDATA[Only if customers synchronization is enabled ]]></comment>
112
+ </sync_now>
113
  </fields>
114
  </general>
115
  <sso translate="label comment">
135
  <label>Remote Authentication Token</label>
136
  <frontend_type>text</frontend_type>
137
  <sort_order>2</sort_order>
138
+ <validate>validate-zendesk-sso-token</validate>
139
  <show_in_default>1</show_in_default>
140
  <show_in_website>1</show_in_website>
141
  <show_in_store>1</show_in_store>
165
  <label>Remote Authentication Token</label>
166
  <frontend_type>text</frontend_type>
167
  <sort_order>2</sort_order>
168
+ <validate>validate-zendesk-sso-frontend-token</validate>
169
  <show_in_default>1</show_in_default>
170
  <show_in_website>1</show_in_website>
171
  <show_in_store>1</show_in_store>
172
  </token>
173
  </fields>
174
  </sso_frontend>
175
+ <frontend_features translate="label comment">
176
  <expanded>1</expanded>
177
+ <label>Customer Frontend</label>
178
  <comment>Decide which features you would like turned on in your Magento store.</comment>
179
  <frontend_type>text</frontend_type>
180
  <sort_order>30</sort_order>
181
  <show_in_default>1</show_in_default>
182
  <show_in_website>1</show_in_website>
183
  <show_in_store>1</show_in_store>
184
+ <fields>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  <contact_us translate="label">
186
  <label>Create tickets from Contact Us form</label>
187
  <frontend_type>select</frontend_type>
232
  <show_in_website>1</show_in_website>
233
  <show_in_store>1</show_in_store>
234
  </footer_link_enabled>
235
+ <customer_tickets translate="label comment">
236
+ <label>Show Tickets in Customer Accounts</label>
237
+ <frontend_type>select</frontend_type>
238
+ <source_model>adminhtml/system_config_source_yesno</source_model>
239
+ <sort_order>20</sort_order>
240
+ <show_in_default>1</show_in_default>
241
+ <show_in_website>1</show_in_website>
242
+ <show_in_store>1</show_in_store>
243
+ <comment><![CDATA[Display Customer's tickets in My Account]]></comment>
244
+ </customer_tickets>
245
  <order_field_id translate="label comment">
246
  <label>Zendesk Order Number field ID</label>
247
  <frontend_type>text</frontend_type>
252
  <comment><![CDATA[Used to link order in Magento with tickets in Zendesk]]></comment>
253
  </order_field_id>
254
  </fields>
255
+ </frontend_features>
256
+ <backend_features translate="label comment">
257
+ <expanded>1</expanded>
258
+ <label>Admin Backend</label>
259
+ <comment>Decide which features you would like turned on in your admin panel.</comment>
260
+ <frontend_type>text</frontend_type>
261
+ <sort_order>35</sort_order>
262
+ <show_in_default>1</show_in_default>
263
+ <show_in_website>1</show_in_website>
264
+ <show_in_store>1</show_in_store>
265
+ <fields>
266
+ <show_on_order translate="label">
267
+ <label>Show support tickets on order view</label>
268
+ <frontend_type>select</frontend_type>
269
+ <source_model>adminhtml/system_config_source_yesno</source_model>
270
+ <sort_order>7</sort_order>
271
+ <show_in_default>1</show_in_default>
272
+ <show_in_website>1</show_in_website>
273
+ <show_in_store>0</show_in_store>
274
+ </show_on_order>
275
+ <show_on_dashboard translate="label">
276
+ <label>Show support tickets on admin dashboard</label>
277
+ <frontend_type>select</frontend_type>
278
+ <source_model>adminhtml/system_config_source_yesno</source_model>
279
+ <sort_order>5</sort_order>
280
+ <show_in_default>1</show_in_default>
281
+ <show_in_website>1</show_in_website>
282
+ <show_in_store>0</show_in_store>
283
+ </show_on_dashboard>
284
+ <show_all translate="label">
285
+ <label>Show "All" tab on dashboard</label>
286
+ <frontend_type>select</frontend_type>
287
+ <source_model>adminhtml/system_config_source_yesno</source_model>
288
+ <sort_order>1</sort_order>
289
+ <show_in_default>1</show_in_default>
290
+ <show_in_website>1</show_in_website>
291
+ <show_in_store>0</show_in_store>
292
+ </show_all>
293
+ <default_sort translate="label">
294
+ <label>Default Sort Order</label>
295
+ <frontend_type>select</frontend_type>
296
+ <source_model>zendesk/source_sortorder</source_model>
297
+ <sort_order>2</sort_order>
298
+ <show_in_default>1</show_in_default>
299
+ <show_in_website>1</show_in_website>
300
+ <show_in_store>0</show_in_store>
301
+ </default_sort>
302
+ <default_sort_dir translate="label">
303
+ <label>Default Sort Direction</label>
304
+ <frontend_type>select</frontend_type>
305
+ <source_model>zendesk/source_sortdir</source_model>
306
+ <sort_order>3</sort_order>
307
+ <show_in_default>1</show_in_default>
308
+ <show_in_website>1</show_in_website>
309
+ <show_in_store>0</show_in_store>
310
+ </default_sort_dir>
311
+ <show_views translate="label">
312
+ <label>Views to show on dashboards</label>
313
+ <frontend_type>multiselect</frontend_type>
314
+ <source_model>zendesk/source_views</source_model>
315
+ <sort_order>4</sort_order>
316
+ <show_in_default>1</show_in_default>
317
+ <show_in_website>1</show_in_website>
318
+ <show_in_store>0</show_in_store>
319
+ <can_be_empty>1</can_be_empty>
320
+ </show_views>
321
+ <show_on_customer translate="label">
322
+ <label>Show support tickets on customer view</label>
323
+ <frontend_type>select</frontend_type>
324
+ <source_model>adminhtml/system_config_source_yesno</source_model>
325
+ <sort_order>6</sort_order>
326
+ <show_in_default>1</show_in_default>
327
+ <show_in_website>1</show_in_website>
328
+ <show_in_store>0</show_in_store>
329
+ </show_on_customer>
330
+ </fields>
331
+ </backend_features>
332
  <api translate="label comment">
333
  <label>API Details</label>
334
  <comment>Required for Magento App inside Zendesk to work.</comment>
357
  </token>
358
  <sign_up translate="button_label">
359
  <label></label>
360
+ <button_label>Generate New Token</button_label>
361
  <frontend_model>zendesk/adminhtml_config_buttons_generate</frontend_model>
362
  <sort_order>3</sort_order>
363
  <show_in_default>1</show_in_default>
478
  <fields>
479
  <sign_up translate="button_label">
480
  <label></label>
481
+ <button_label>Setup Guide</button_label>
482
  <frontend_model>zendesk/adminhtml_config_buttons_signup</frontend_model>
483
  <sort_order>1</sort_order>
484
  <show_in_default>1</show_in_default>
app/design/adminhtml/default/default/layout/zendesk.xml CHANGED
@@ -1,37 +1,55 @@
1
  <?xml version="1.0"?>
2
  <!--
3
  /**
4
- * Copyright 2012 Zendesk.
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this file except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- */
18
- -->
19
  <layout>
20
- <adminhtml_system_config_edit>
21
- <reference name="head">
22
- <action method="addCss"><stylesheet>zendesk/zendesk.css</stylesheet></action>
23
- </reference>
24
- </adminhtml_system_config_edit>
 
 
 
 
 
 
 
 
25
 
26
  <adminhtml_sales_order_view>
27
  <reference name="head">
28
- <action method="addCss"><stylesheet>zendesk/zendesk.css</stylesheet></action>
 
 
29
  </reference>
30
  <reference name="content">
31
  <block type="zendesk/adminhtml_order_view_tickets" name="zendesk_order_view_tickets" after="sales_order_edit"/>
32
  </reference>
33
  </adminhtml_sales_order_view>
34
 
 
 
 
 
 
 
 
 
35
  <adminhtml_customer_edit>
36
  <reference name="customer_edit_tab_view">
37
  <block type="adminhtml/template" after="-" name="zendesk.tickets" template="zendesk/customer/tickets.phtml"/>
@@ -39,26 +57,69 @@
39
  </adminhtml_customer_edit>
40
 
41
  <adminhtml_zendesk_index>
 
 
 
 
 
42
  <reference name="left">
43
  <block type="zendesk/adminhtml_menu" name="adminhtml.left.menu">
44
- <action method="setActiveItem"><params>dashboard</params></action>
 
 
45
  </block>
46
  </reference>
47
  <reference name="content">
48
  <block type="zendesk/adminhtml_dashboard" name="zendesk_dashboard">
49
- <block type="zendesk/adminhtml_dashboard_grids" name="zendesk_dashboard_grids" />
 
50
  </block>
 
51
  </reference>
52
  </adminhtml_zendesk_index>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  <adminhtml_zendesk_create>
 
 
 
 
 
55
  <reference name="left">
56
  <block type="zendesk/adminhtml_menu" name="adminhtml.left.menu">
57
- <action method="setActiveItem"><params>create</params></action>
 
 
58
  </block>
59
  </reference>
60
  <reference name="content">
61
  <block type="zendesk/adminhtml_create_edit" name="create"/>
 
 
 
 
 
 
62
  </reference>
63
  </adminhtml_zendesk_create>
64
 
1
  <?xml version="1.0"?>
2
  <!--
3
  /**
4
+ * Copyright 2012 Zendesk.
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */
18
+ -->
19
  <layout>
20
+ <adminhtml_system_config_edit>
21
+ <reference name="head">
22
+ <action method="addCss">
23
+ <stylesheet>zendesk/zendesk.css</stylesheet>
24
+ </action>
25
+ <action method="addJs">
26
+ <script>zendesk/validation.js</script>
27
+ </action>
28
+ </reference>
29
+ <reference name="content">
30
+ <block type="core/template" template="zendesk/translations.phtml"></block>
31
+ </reference>
32
+ </adminhtml_system_config_edit>
33
 
34
  <adminhtml_sales_order_view>
35
  <reference name="head">
36
+ <action method="addCss">
37
+ <stylesheet>zendesk/zendesk.css</stylesheet>
38
+ </action>
39
  </reference>
40
  <reference name="content">
41
  <block type="zendesk/adminhtml_order_view_tickets" name="zendesk_order_view_tickets" after="sales_order_edit"/>
42
  </reference>
43
  </adminhtml_sales_order_view>
44
 
45
+ <adminhtml_dashboard_index>
46
+ <reference name="head">
47
+ <action method="addCss">
48
+ <stylesheet>zendesk/zendesk.css</stylesheet>
49
+ </action>
50
+ </reference>
51
+ </adminhtml_dashboard_index>
52
+
53
  <adminhtml_customer_edit>
54
  <reference name="customer_edit_tab_view">
55
  <block type="adminhtml/template" after="-" name="zendesk.tickets" template="zendesk/customer/tickets.phtml"/>
57
  </adminhtml_customer_edit>
58
 
59
  <adminhtml_zendesk_index>
60
+ <reference name="head">
61
+ <action method="addCss">
62
+ <stylesheet>zendesk/zendesk.css</stylesheet>
63
+ </action>
64
+ </reference>
65
  <reference name="left">
66
  <block type="zendesk/adminhtml_menu" name="adminhtml.left.menu">
67
+ <action method="setActiveItem">
68
+ <params>dashboard</params>
69
+ </action>
70
  </block>
71
  </reference>
72
  <reference name="content">
73
  <block type="zendesk/adminhtml_dashboard" name="zendesk_dashboard">
74
+ <block type="zendesk/adminhtml_dashboard_grids" name="zendesk_dashboard_grids"/>
75
+
76
  </block>
77
+
78
  </reference>
79
  </adminhtml_zendesk_index>
80
+ <adminhtml_zendesk_create_load_block_order_grid>
81
+ <reference name="root">
82
+ <block type="core/text_list" name="content" >
83
+ <block type="zendesk/adminhtml_create_order_grid" name="grid" />
84
+ </block>
85
+ </reference>
86
+ </adminhtml_zendesk_create_load_block_order_grid>
87
+ <adminhtml_zendesk_create_load_block_tickets>
88
+ <reference name="root">
89
+ <block type="core/text_list" name="content" >
90
+ <block type="zendesk/adminhtml_dashboard_tab_tickets_grid" name="grid" />
91
+ </block>
92
+ </reference>
93
+ </adminhtml_zendesk_create_load_block_tickets>
94
+ <adminhtml_zendesk_create_load_block_customer_grid>
95
+ <reference name="root">
96
+ <block type="core/text_list" name="content" >
97
+ <block type="zendesk/adminhtml_create_customer_grid" name="grid" />
98
+ </block>
99
+ </reference>
100
+ </adminhtml_zendesk_create_load_block_customer_grid>
101
 
102
  <adminhtml_zendesk_create>
103
+ <reference name="head">
104
+ <action method="addCss">
105
+ <stylesheet>zendesk/zendesk.css</stylesheet>
106
+ </action>
107
+ </reference>
108
  <reference name="left">
109
  <block type="zendesk/adminhtml_menu" name="adminhtml.left.menu">
110
+ <action method="setActiveItem">
111
+ <params>create</params>
112
+ </action>
113
  </block>
114
  </reference>
115
  <reference name="content">
116
  <block type="zendesk/adminhtml_create_edit" name="create"/>
117
+ <block type="zendesk/adminhtml_create_customer" template="zendesk/create/customer.phtml" name="search">
118
+ <block type="zendesk/adminhtml_create_customer_grid" name="grid" />
119
+ </block>
120
+ <block type="zendesk/adminhtml_create_order" template="zendesk/create/order.phtml" name="order">
121
+ <block type="zendesk/adminhtml_create_order_grid" name="grid" />
122
+ </block>
123
  </reference>
124
  </adminhtml_zendesk_create>
125
 
app/design/adminhtml/default/default/template/zendesk/autocomplete.phtml CHANGED
File without changes
app/design/adminhtml/default/default/template/zendesk/config/button-generate.phtml CHANGED
File without changes
app/design/adminhtml/default/default/template/zendesk/config/button-signup.phtml CHANGED
File without changes
app/design/adminhtml/default/default/template/zendesk/config/button-sync.phtml ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2013 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
+ <script type="text/javascript">
19
+ function sync() {
20
+ var request = new Ajax.Request('<?php echo $this->getTestUrl(); ?>', {
21
+ method: 'get',
22
+
23
+ onCreate: function() {
24
+ document.getElementById('zendesk-sync-results').innerHTML = '';
25
+ },
26
+ onSuccess: function(transport) {
27
+ if (transport.responseJSON.success === true) {
28
+ var message = '<ul class="messages"><li class="success-msg">' + transport.responseJSON.msg + '</li></ul>';
29
+ document.getElementById('zendesk-sync-results').innerHTML = message;
30
+ } else {
31
+ var message = '<ul class="messages"><li class="error-msg">' + transport.responseJSON.msg +
32
+ '</li></ul>';
33
+ document.getElementById('zendesk-sync-results').innerHTML = message;
34
+ }
35
+ }
36
+ });
37
+ }
38
+ </script>
39
+ <button style="" onclick="javascript:sync(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
40
+ <span><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
41
+ </button>
42
+ <div id="zendesk-sync-results"></div>
43
+
app/design/adminhtml/default/default/template/zendesk/config/button-test-magento.phtml CHANGED
@@ -41,4 +41,4 @@
41
  <button style="" onclick="javascript:checkApiConnection(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
42
  <span><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
43
  </button>
44
- <div id="zendesk-test-connection-results"></div>
41
  <button style="" onclick="javascript:checkApiConnection(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
42
  <span><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
43
  </button>
44
+ <div id="zendesk-test-connection-results"></div>
app/design/adminhtml/default/default/template/zendesk/config/button-test-zendesk.phtml CHANGED
@@ -15,6 +15,28 @@
15
  * limitations under the License.
16
  */
17
  ?>
18
- <button style="" onclick="setLocation('<?php echo $this->getUrl('adminhtml/zendesk/checkOutbound'); ?>');" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
19
  <span><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
20
- </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  * limitations under the License.
16
  */
17
  ?>
18
+ <button style="" onclick="javascript:checkZendApiConnection(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
19
  <span><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
20
+ </button>
21
+ <script type="text/javascript">
22
+ function checkZendApiConnection() {
23
+ var request = new Ajax.Request('<?php echo $this->getUrl('adminhtml/zendesk/checkOutbound'); ?>', {
24
+ method: 'get',
25
+ onCreate: function() {
26
+ document.getElementById('zendesk-api-connection-results').innerHTML = '';
27
+ },
28
+ onSuccess: function(transport) {
29
+ if (transport.responseJSON.success === true) {
30
+ var message = '<ul class="messages"><li class="success-msg">' + transport.responseJSON.msg + '</li></ul>';
31
+ document.getElementById('zendesk-api-connection-results').innerHTML = message;
32
+ } else {
33
+ var message = '<ul class="messages"><li class="error-msg">' + transport.responseJSON.msg +
34
+ '</li></ul>';
35
+ document.getElementById('zendesk-api-connection-results').innerHTML = message;
36
+ }
37
+ }
38
+ });
39
+ }
40
+ </script>
41
+ <div id="zendesk-api-connection-results"></div>
42
+
app/design/adminhtml/default/default/template/zendesk/config/link.phtml CHANGED
File without changes
app/design/adminhtml/default/default/template/zendesk/create/customer.phtml ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ <div class="entry-edit">
19
+ <div class="entry-edit-head">
20
+ <div class="fright"><?php echo $this->getButtonsHtml() ?></div>
21
+ <h4 class="fieldset-legend <?php echo ($this->getHeaderCssClass()) ? $this->getHeaderCssClass().' icon-head' : '' ?>"><?php echo $this->getHeaderText() ?></h4>
22
+ </div>
23
+ <div class="fieldset">
24
+ <?php echo $this->getChildHtml('', true, true) ?>
25
+ </div>
26
+ </div>
27
+ <script>
28
+ document.getElementById('zendesk_create_customer_search_grid').parentNode.style.display = 'none';
29
+ function insertUser(id) {
30
+ var request = new Ajax.Request('<?php echo $this->getUrl('adminhtml/zendesk/getUser'); ?>'+'id/'+id, {
31
+ method: 'get',
32
+ onSuccess: function(transport) {
33
+ if (transport.responseJSON.success === true) {
34
+ document.getElementById('requester_name').value = transport.responseJSON.usr.firstname;
35
+ document.getElementById('requester').value = transport.responseJSON.usr.email;
36
+ document.getElementById('zendesk_create_customer_search_grid').parentNode.style.display = 'none';
37
+ document.getElementById('show-users').style.display = 'block';
38
+ }
39
+ }
40
+ });
41
+ }
42
+ function showUsers() {
43
+ document.getElementById('zendesk_create_customer_search_grid').parentNode.style.display = 'block';
44
+ document.getElementById('show-users').style.display = 'none';
45
+ }
46
+ </script>
app/design/adminhtml/default/default/template/zendesk/create/order.phtml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ <div style='margin-top: 10px;' class="entry-edit">
19
+ <div class="entry-edit-head">
20
+ <div class="fright"><?php echo $this->getButtonsHtml() ?></div>
21
+ <h4 class="fieldset-legend <?php echo ($this->getHeaderCssClass()) ? $this->getHeaderCssClass().' icon-head' : '' ?>"><?php echo $this->getHeaderText() ?></h4>
22
+ </div>
23
+ <div class="fieldset">
24
+ <?php echo $this->getChildHtml('', true, true) ?>
25
+ </div>
26
+ </div>
27
+ <script>
28
+ document.getElementById('zendesk_create_order_search_grid').parentNode.className = 'no-display';
29
+ function insertOrder(id) {
30
+ var request = new Ajax.Request('<?php echo $this->getUrl('adminhtml/zendesk/getOrder'); ?>'+'id/'+id, {
31
+ method: 'get',
32
+ onSuccess: function(transport) {
33
+ if (transport.responseJSON.success === true) {
34
+ document.getElementById('order').value = transport.responseJSON.order.number;
35
+ document.getElementById('zendesk_create_order_search_grid').parentNode.className = 'no-display';
36
+ document.getElementById('show-orders').className = '';
37
+ }
38
+ }
39
+ });
40
+ }
41
+ function showOrders() {
42
+ document.getElementById('zendesk_create_order_search_grid').parentNode.className = '';
43
+ document.getElementById('show-orders').className = 'no-display';
44
+ }
45
+ </script>
app/design/adminhtml/default/default/template/zendesk/customer/tickets.phtml CHANGED
@@ -17,7 +17,7 @@
17
  ?>
18
  <?php
19
 
20
- if(!Mage::getStoreConfig('zendesk/features/show_on_customer')) {
21
  return;
22
  }
23
 
@@ -54,16 +54,16 @@ if($customer = Mage::registry('current_customer')) {
54
  </thead>
55
  <tbody class="odd">
56
  <?php foreach($tickets as $ticket): ?>
57
- <?php $t = Mage::getModel('zendesk/api_tickets')->get($ticket['id'], true); ?>
58
- <tr class="border">
59
- <td><?php echo ucwords($ticket['priority']); ?></td>
60
- <td><a href="<?php echo Mage::helper('zendesk')->getUrl('ticket', $ticket['id']); ?>" target="_blank"><?php echo $ticket['subject']; ?></a></td>
61
- <td><?php echo Mage::helper('core')->formatDate($ticket['created_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
62
- <td><?php echo Mage::helper('core')->formatDate($ticket['updated_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
63
- <td><?php echo ucwords($ticket['status']); ?></td>
64
- <td><?php echo ($ticket['group_id']) ? $t['group']['name'] : ''; ?></td>
65
- <td><?php echo ($ticket['assignee_id']) ? $t['assignee']['name'] : ''; ?></td>
66
- </tr>
67
  <?php endforeach; ?>
68
  </tbody>
69
  </table>
@@ -71,4 +71,4 @@ if($customer = Mage::registry('current_customer')) {
71
  </div>
72
  </div>
73
  <div class="clear"></div>
74
- <?php endif; ?>
17
  ?>
18
  <?php
19
 
20
+ if(!Mage::getStoreConfig('zendesk/backend_features/show_on_customer')) {
21
  return;
22
  }
23
 
54
  </thead>
55
  <tbody class="odd">
56
  <?php foreach($tickets as $ticket): ?>
57
+ <?php $t = Mage::getModel('zendesk/api_tickets')->get($ticket['id'], true); ?>
58
+ <tr class="border">
59
+ <td><?php echo ucwords($ticket['priority']); ?></td>
60
+ <td><?php echo Mage::helper('zendesk')->getTicketUrl($ticket); ?></td>
61
+ <td><?php echo Mage::helper('core')->formatDate($ticket['created_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
62
+ <td><?php echo Mage::helper('core')->formatDate($ticket['updated_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
63
+ <td><?php echo ucwords($ticket['status']); ?></td>
64
+ <td><?php echo ($ticket['group_id']) ? $t['group']['name'] : ''; ?></td>
65
+ <td><?php echo ($ticket['assignee_id']) ? $t['assignee']['name'] : ''; ?></td>
66
+ </tr>
67
  <?php endforeach; ?>
68
  </tbody>
69
  </table>
71
  </div>
72
  </div>
73
  <div class="clear"></div>
74
+ <?php endif; ?>
app/design/adminhtml/default/default/template/zendesk/dashboard/empty.phtml CHANGED
File without changes
app/design/adminhtml/default/default/template/zendesk/dashboard/index.phtml CHANGED
@@ -15,30 +15,31 @@
15
  * limitations under the License.
16
  */
17
  ?>
18
- <?php if($this->getIsZendeskDashboard() || Mage::getStoreConfig('zendesk/features/show_on_dashboard')): ?>
19
- <?php if($this->getIsZendeskDashboard()): ?>
20
- <div class="content-header">
21
- <table cellspacing="0">
22
- <tr>
23
- <td><h3 class="head-dashboard"><?php echo $this->__('Dashboard') ?></h3></td>
24
- </tr>
25
- </table>
26
- </div>
27
- <?php endif; ?>
28
- <div class="zendesk_dashboard_container">
29
- <?php echo $this->getChildHtml('zendesk_dashboard_grids') ?>
30
- <div id="tickets_grid_tab_content"></div>
31
-
32
- <?php if(!$this->getIsZendeskDashboard()): ?>
33
- <div class="a-right" style="margin: 6px 0;">
34
- <button style="" onclick="setLocation('<?php echo $this->getUrl('adminhtml/zendesk/create'); ?>');" class="scalable" type="button" id="zendesk-create-ticket">
35
- <span><?php echo $this->__('New Support Ticket'); ?></span>
36
- </button>
37
- <button style="" onclick="setLocation('<?php echo Mage::helper('zendesk')->getUrl(); ?>');" class="scalable" type="button" id="zendesk-view-all">
38
- <span><?php echo $this->__('View All Tickets'); ?></span>
39
- </button>
40
  </div>
41
  <?php endif; ?>
42
- </div>
43
- <?php echo $this->getChildHtml('zendesk_dashboard_empty'); ?>
44
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  * limitations under the License.
16
  */
17
  ?>
18
+ <?php if( $this->isConnected() ): ?>
19
+ <?php if ($this->getIsZendeskDashboard() || Mage::getStoreConfig('zendesk/backend_features/show_on_dashboard')): ?>
20
+ <?php if ($this->getIsZendeskDashboard()): ?>
21
+ <div class="content-header">
22
+ <table cellspacing="0">
23
+ <tr>
24
+ <td><h3 class="head-dashboard"><?php echo $this->__('Dashboard') ?></h3></td>
25
+ </tr>
26
+ </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  </div>
28
  <?php endif; ?>
29
+ <div class="zendesk_dashboard_container">
30
+ <?php echo $this->getChildHtml('zendesk_dashboard_grids') ?>
31
+ <div id="tickets_grid_tab_content"></div>
32
+ <?php if (!$this->getIsZendeskDashboard()): ?>
33
+ <div class="a-right" style="margin: 6px 0;">
34
+ <button style="" onclick="setLocation('<?php echo $this->getUrl('adminhtml/zendesk/create'); ?>');" class="scalable" type="button" id="zendesk-create-ticket">
35
+ <span><?php echo $this->__('New Support Ticket'); ?></span>
36
+ </button>
37
+ <button style="" onclick="setLocation('<?php echo Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/zendesk/launch'); ?>');" class="scalable" type="button" id="zendesk-view-all">
38
+ <span><?php echo $this->__('View All Tickets'); ?></span>
39
+ </button>
40
+ </div>
41
+ <?php endif; ?>
42
+ </div>
43
+ <?php echo $this->getChildHtml('zendesk_dashboard_empty'); ?>
44
+ <?php endif; ?>
45
+ <?php endif; ?>
app/design/adminhtml/default/default/template/zendesk/dashboard/tabs/view.phtml DELETED
@@ -1,140 +0,0 @@
1
- <?php
2
- /**
3
- * Copyright 2012 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
- <?php
19
- $view = $this->getView();
20
-
21
- if($view) {
22
- try {
23
- $execute = Mage::getModel('zendesk/api_views')->execute($view['id']);
24
-
25
- $columns = $execute['columns'];
26
- $rows = $execute['rows'];
27
-
28
- $isScoped = Mage::getModel('customer/customer')->getSharingConfig()->isWebsiteScope();
29
-
30
- $users = array();
31
- $magentoUsers = array();
32
-
33
- if(isset($execute['users'])) {
34
- foreach($execute['users'] as $user) {
35
- $users[$user['id']] = $user['name'];
36
-
37
- // TODO: Re-enable once the results can be cached, to reduce the significant performance impact
38
- // if(!$isScoped && !isset($magentoUsers[$user['id']])) {
39
- // $info = Mage::getModel('zendesk/api_users')->get($user['id']);
40
- // $customer = Mage::getModel('customer/customer')->loadByEmail($info['email']);
41
- //
42
- // if($customer && $customer->getId()) {
43
- // $magentoUsers[$user['id']] = $customer->getId();
44
- // } else {
45
- // $magentoUsers[$user['id']] = false;
46
- // }
47
- // }
48
- }
49
- }
50
-
51
- if(isset($execute['groups'])) {
52
- $groups = array();
53
- foreach($execute['groups'] as $group) {
54
- $groups[$group['id']] = $group['name'];
55
- }
56
- }
57
- } catch(Exception $e) {
58
- // Most likely the Zendesk domain has not been configured, so just don't show anything here.
59
- $view = null;
60
- }
61
- }
62
- ?>
63
- <?php if($view): ?>
64
- <div class="grid np">
65
- <table cellspacing="0" class="data order-tables">
66
- <thead>
67
- <tr class="headings">
68
- <?php foreach($columns as $col): ?>
69
- <?php if($col['id'] === 'score') continue; ?>
70
- <th class="<?php echo $col['id']; ?>"><?php echo Mage::helper('zendesk')->__($col['title']); ?></th>
71
- <?php endforeach; ?>
72
- </tr>
73
- </thead>
74
- <tbody>
75
- <?php if ($rows): ?>
76
- <?php $i = 0; ?>
77
- <?php foreach ($rows as $row): ?>
78
- <tr class="border <?php echo (++$i % 2) ? 'even' : 'odd'; ?>">
79
- <?php foreach($columns as $col): ?>
80
- <?php
81
- if($col['id'] === 'score') continue;
82
-
83
- $value = isset($row[$col['id']]) ? $row[$col['id']] : null;
84
-
85
- if($value === null) {
86
- // Attempt to match on a modified column name, which might happen for users in
87
- // particular
88
- $value = $row[$col['id'] . '_id'];
89
- }
90
-
91
- switch($col['id']) {
92
- case 'subject':
93
- if(isset($row['ticket']) && isset($row['ticket']['id'])) {
94
- $url = Mage::helper('zendesk')->getUrl('ticket', $row['ticket']['id']);
95
- $value = '<a href="' . $url . '" target="_blank">' . $value . '</a>';
96
- }
97
- break;
98
-
99
- case 'requester':
100
- case 'assignee':
101
- $name = $value;
102
-
103
- if(isset($users[$value])) {
104
- $name = $users[$value];
105
- }
106
-
107
- if(isset($magentoUsers[$value]) && $magentoUsers[$value] !== false) {
108
- $url = $this->getUrl('adminhtml/customer/edit', array('id' => $magentoUsers[$value]));
109
- $value = '<a href="' . $url . '">' . $name . '</a>';
110
- } else {
111
- $value = $name;
112
- }
113
- break;
114
-
115
- case 'created':
116
- case 'updated':
117
- $value = Mage::helper('core')->formatDate($value, Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true);
118
- break;
119
-
120
- case 'group':
121
- if(isset($groups[$value])) {
122
- $value = $groups[$value];
123
- }
124
- break;
125
- }
126
- ?>
127
- <td><?php echo $value; ?></td>
128
- <?php endforeach; ?>
129
- </tr>
130
- <?php endforeach; ?>
131
- <?php else: ?>
132
- <tr>
133
- <td class="empty-text a-center" colspan="100"><?php echo Mage::helper('zendesk')->__('No tickets found'); ?></td>
134
- </tr>
135
- <?php endif; ?>
136
- </tbody>
137
- </table>
138
- </div>
139
- <div class="clear"></div>
140
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/design/adminhtml/default/default/template/zendesk/left-menu.phtml CHANGED
@@ -33,7 +33,7 @@
33
  <?php } ?>
34
  <?php if ($this->isAllowed('launch')) { ?>
35
  <li>
36
- <a href="<?php echo Mage::helper('zendesk')->getUrl(); ?>" target="_blank" class="tab-item-link">
37
  <span><?php echo $this->__('Launch Zendesk'); ?></span>
38
  </a>
39
  </li>
@@ -41,8 +41,9 @@
41
  <?php if ($this->isAllowed('settings')) { ?>
42
  <li>
43
  <a href="<?php echo $this->getUrl('adminhtml/system_config/edit/section/zendesk'); ?>" class="tab-item-link">
44
- <span><?php echo $this->__('Settings'); ?></span>
45
  </a>
46
  </li>
47
  <?php } ?>
48
  </ul>
 
33
  <?php } ?>
34
  <?php if ($this->isAllowed('launch')) { ?>
35
  <li>
36
+ <a href="<?php echo Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/zendesk/launch'); ?>" target="_blank" class="tab-item-link">
37
  <span><?php echo $this->__('Launch Zendesk'); ?></span>
38
  </a>
39
  </li>
41
  <?php if ($this->isAllowed('settings')) { ?>
42
  <li>
43
  <a href="<?php echo $this->getUrl('adminhtml/system_config/edit/section/zendesk'); ?>" class="tab-item-link">
44
+ <span><?php echo $this->__('Configuration'); ?></span>
45
  </a>
46
  </li>
47
  <?php } ?>
48
  </ul>
49
+
app/design/adminhtml/default/default/template/zendesk/log/index.phtml CHANGED
File without changes
app/design/adminhtml/default/default/template/zendesk/order/tickets.phtml CHANGED
@@ -17,7 +17,7 @@
17
  ?>
18
  <?php
19
 
20
- if(!Mage::getStoreConfig('zendesk/features/show_on_order')) {
21
  return;
22
  }
23
 
17
  ?>
18
  <?php
19
 
20
+ if(!Mage::getStoreConfig('zendesk/backend_features/show_on_order')) {
21
  return;
22
  }
23
 
app/design/adminhtml/default/default/template/zendesk/tickets/tickets.phtml ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2012 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
+ <?php
19
+
20
+ if(!Mage::getStoreConfig('zendesk/backend_features/show_on_customer')) {
21
+ return;
22
+ }
23
+
24
+ $tickets = null;
25
+ if($customer = Mage::registry('current_customer')) {
26
+ try {
27
+ $tickets = Mage::getModel('zendesk/api_tickets')->forRequester($customer->getEmail());
28
+ } catch(Exception $e) {
29
+ // Don't do anything, just don't show the tickets
30
+ }
31
+ }
32
+ ?>
33
+ <?php if($tickets): ?>
34
+ <div class="clear"></div>
35
+ <br/>
36
+ <div class="entry-edit">
37
+ <div class="entry-edit-head">
38
+ <h4 class="icon-head head-account"><?php echo Mage::helper('zendesk')->__('Support Tickets') ?></h4>
39
+ </div>
40
+ <div class="grid">
41
+ <div class="hor-scroll">
42
+ <table cellspacing="0" class="data order-tables">
43
+ <thead>
44
+ <tr class="headings">
45
+ <th><?php echo Mage::helper('zendesk')->__('Priority') ?></th>
46
+ <th><?php echo Mage::helper('zendesk')->__('Subject') ?></th>
47
+ <th><?php echo Mage::helper('zendesk')->__('Requested') ?></th>
48
+ <th><?php echo Mage::helper('zendesk')->__('Updated') ?></th>
49
+ <th><?php echo Mage::helper('zendesk')->__('Status') ?></th>
50
+ <th><?php echo Mage::helper('zendesk')->__('Group') ?></th>
51
+ <th><?php echo Mage::helper('zendesk')->__('Assignee') ?></th>
52
+ </tr>
53
+ </thead>
54
+ <tbody class="odd">
55
+ <?php foreach($tickets as $ticket): ?>
56
+ <?php $t = Mage::getModel('zendesk/api_tickets')->get($ticket['id'], true); ?>
57
+ <tr class="border">
58
+ <td><?php echo ucwords($ticket['priority']); ?></td>
59
+ <td><a href="<?php echo Mage::helper('zendesk')->getTicketUrl($ticket); ?>" target="_blank"><?php echo $ticket['subject']; ?></a></td>
60
+ <td><?php echo Mage::helper('core')->formatDate($ticket['created_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
61
+ <td><?php echo Mage::helper('core')->formatDate($ticket['updated_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
62
+ <td><?php echo ucwords($ticket['status']); ?></td>
63
+ <td><?php echo ($ticket['group_id']) ? $t['group']['name'] : ''; ?></td>
64
+ <td><?php echo ($ticket['assignee_id']) ? $t['assignee']['name'] : ''; ?></td>
65
+ </tr>
66
+ <?php endforeach; ?>
67
+ </tbody>
68
+ </table>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ <div class="clear"></div>
73
+ <?php endif; ?>
app/design/adminhtml/default/default/template/zendesk/translations.phtml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ <script>
19
+ Translator.add('Token cannot be empty', '<?php echo $this->__('Token cannot be empty'); ?>');
20
+ </script>
app/design/adminhtml/default/default/template/zendesk/widget/grid.phtml ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php
28
+ /**
29
+ * Template for Mage_Adminhtml_Block_Widget_Grid
30
+ *
31
+ * getId()
32
+ * getCollection()
33
+ * getColumns()
34
+ * getPagerVisibility()
35
+ * getVarNamePage()
36
+ */
37
+ $numColumns = sizeof($this->getColumns());
38
+ ?>
39
+ <?php if($this->getCollection()): ?>
40
+ <?php if($this->canDisplayContainer()): ?>
41
+ <?php if($this->getGridHeader()): ?>
42
+ <div class="content-header">
43
+ <table cellspacing="0">
44
+ <tr>
45
+ <td style="width:50%;"><h2><?php echo $this->getGridHeader(); ?></h2></td>
46
+ </tr>
47
+ </table>
48
+ </div>
49
+ <?php endif ?>
50
+
51
+ <div id="<?php echo $this->getId() ?>">
52
+ <?php else: ?>
53
+ <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
54
+ <?php endif; ?>
55
+ <?php if($this->getPagerVisibility() || $this->getExportTypes() || $this->getFilterVisibility()): ?>
56
+ <table cellspacing="0" class="actions">
57
+ <tr>
58
+ <?php if($this->getPagerVisibility()): ?>
59
+ <td class="pager">
60
+ <?php echo $this->__('Page') ?>
61
+
62
+ <?php $_curPage = $this->getCollection()->getCurPage() ?>
63
+ <?php $_lastPage = $this->getCollection()->getLastPageNumber() ?>
64
+ <?php if($_curPage>1): ?>
65
+ <a href="#" title="<?php echo $this->__('Previous page') ?>" onclick="<?php echo $this->getJsObjectName() ?>.setPage('<?php echo ($_curPage-1) ?>');return false;"><img src="<?php echo $this->getSkinUrl('images/pager_arrow_left.gif') ?>" alt="Go to Previous page" class="arrow"/></a>
66
+ <?php else: ?>
67
+ <img src="<?php echo $this->getSkinUrl('images/pager_arrow_left_off.gif') ?>" alt="Go to Previous page" class="arrow"/>
68
+ <?php endif; ?>
69
+
70
+ <input type="text" name="<?php echo $this->getVarNamePage() ?>" value="<?php echo $_curPage ?>" class="input-text page" onkeypress="<?php echo $this->getJsObjectName() ?>.inputPage(event, '<?php echo $_lastPage ?>')"/>
71
+
72
+ <?php if($_curPage < $_lastPage): ?>
73
+ <a href="#" title="<?php echo $this->__('Next page') ?>" onclick="<?php echo $this->getJsObjectName() ?>.setPage('<?php echo ($_curPage+1) ?>');return false;"><img src="<?php echo $this->getSkinUrl('images/pager_arrow_right.gif') ?>" alt="Go to Next page" class="arrow"/></a>
74
+ <?php else: ?>
75
+ <img src="<?php echo $this->getSkinUrl('images/pager_arrow_right_off.gif') ?>" alt="Go to Previous page" class="arrow"/>
76
+ <?php endif; ?>
77
+
78
+ <?php echo $this->__('of %s pages', $this->getCollection()->getLastPageNumber()) ?>
79
+ <span class="separator">|</span>
80
+ <?php echo $this->__('View') ?>
81
+ <select name="<?php echo $this->getVarNameLimit() ?>" onchange="<?php echo $this->getJsObjectName() ?>.loadByElement(this)">
82
+ <option value="20"<?php if($this->getCollection()->getPageSize()==20): ?> selected="selected"<?php endif; ?>>20</option>
83
+ <option value="30"<?php if($this->getCollection()->getPageSize()==30): ?> selected="selected"<?php endif; ?>>30</option>
84
+ <option value="50"<?php if($this->getCollection()->getPageSize()==50): ?> selected="selected"<?php endif; ?>>50</option>
85
+ <option value="100"<?php if($this->getCollection()->getPageSize()==100): ?> selected="selected"<?php endif; ?>>100</option>
86
+ </select>
87
+ <?php echo $this->__('per page') ?><span class="separator">|</span>
88
+ <?php echo $this->__('Total %d records found', $this->getCollection()->getSize()) ?>
89
+ <span id="<?php echo $this->getHtmlId() ?>-total-count" class="no-display"><?php echo $this->getCollection()->getSize() ?></span>
90
+ <?php if($this->getRssLists()): ?>
91
+ <?php foreach ($this->getRssLists() as $_rss): ?>
92
+ <span class="separator">|</span><a href="<?php echo $_rss->getUrl() ?>" class="link-feed"><?php echo $_rss->getLabel() ?></a>
93
+ <?php endforeach ?>
94
+ <?php endif; ?>
95
+ </td>
96
+ <?php endif ?>
97
+ <?php if($this->getExportTypes()): ?>
98
+ <td class="export a-right">
99
+ <img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/>&nbsp; <?php echo $this->__('Export to:') ?>
100
+ <select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
101
+ <?php foreach ($this->getExportTypes() as $_type): ?>
102
+ <option value="<?php echo $_type->getUrl() ?>"><?php echo $_type->getLabel() ?></option>
103
+ <?php endforeach; ?>
104
+ </select>
105
+ <?php echo $this->getExportButtonHtml() ?>
106
+ </td>
107
+ <?php endif; ?>
108
+ <td class="filter-actions a-right">
109
+ <?php echo $this->getMainButtonsHtml() ?>
110
+ </td>
111
+ </tr>
112
+ </table>
113
+ <?php endif; ?>
114
+ <?php
115
+ if($this->getMassactionBlock()->isAvailable()){
116
+ echo $this->getMassactionBlockHtml();
117
+ }
118
+ ?>
119
+ <div class="grid">
120
+ <div class="hor-scroll">
121
+ <table cellspacing="0" class="data" id="<?php echo $this->getId() ?>_table">
122
+ <?php foreach ($this->getColumns() as $_column): ?>
123
+ <col <?php echo $_column->getHtmlProperty() ?> />
124
+ <?php endforeach; ?>
125
+ <?php if ($this->getHeadersVisibility() || $this->getFilterVisibility()): ?>
126
+ <thead>
127
+ <?php if ($this->getHeadersVisibility()): ?>
128
+ <tr class="headings">
129
+ <?php foreach ($this->getColumns() as $_column): ?>
130
+ <th<?php echo $_column->getHeaderHtmlProperty() ?>><span class="nobr"><?php echo $_column->getHeaderHtml() ?></span></th>
131
+ <?php endforeach; ?>
132
+ </tr>
133
+ <?php endif; ?>
134
+ <?php if ($this->getFilterVisibility()): ?>
135
+ <tr class="filter">
136
+ <?php $i=0;foreach ($this->getColumns() as $_column): ?>
137
+ <th<?php echo $_column->getHeaderHtmlProperty() ?>><?php echo $_column->getFilterHtml() ?></th>
138
+ <?php endforeach; ?>
139
+ </tr>
140
+ <?php endif ?>
141
+ </thead>
142
+ <?php endif; ?>
143
+ <?php if ($this->getCountTotals()): ?>
144
+ <tfoot>
145
+ <tr class="totals">
146
+ <?php foreach ($this->getColumns() as $_column): ?>
147
+ <th class="<?php echo $_column->getCssProperty() ?>"><?php echo ($_column->hasTotalsLabel()) ? $_column->getTotalsLabel() : $_column->getRowField($_column->getGrid()->getTotals()) ?>&nbsp;</th>
148
+ <?php endforeach; ?>
149
+ </tr>
150
+ </tfoot>
151
+ <?php endif; ?>
152
+
153
+ <tbody>
154
+ <?php if (($this->getCollection()->getSize()>0) && (!$this->getIsCollapsed())): ?>
155
+ <?php foreach ($this->getCollection() as $_index=>$_item): ?>
156
+ <tr class="zendesk-grid-tr <?php if ($_class = $this->getRowClass($_item)):?><?php echo $_class; ?><?php endif;?>" >
157
+ <?php $i=0;foreach ($this->getColumns() as $_column): ?>
158
+
159
+ <?php if ($this->shouldRenderCell($_item, $_column)):?>
160
+ <?php $_rowspan = $this->getRowspan($_item, $_column);?>
161
+ <td <?php echo ($_rowspan ? 'rowspan="' . $_rowspan . '" ' : '') ?>class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns?'last':'' ?>">
162
+ <?php echo (($_html = $_column->getRowField($_item)) != '' ? $_html : '&nbsp;') ?>
163
+ </td>
164
+ <?php if ($this->shouldRenderEmptyCell($_item, $_column)):?>
165
+ <td colspan="<?php echo $this->getEmptyCellColspan($_item)?>" class="last"><?php echo $this->getEmptyCellLabel()?></td>
166
+ <?php endif;?>
167
+ <?php endif;?>
168
+
169
+ <?php endforeach; ?>
170
+ </tr>
171
+ <?php if ($_multipleRows = $this->getMultipleRows($_item)):?>
172
+ <?php foreach ($_multipleRows as $_i):?>
173
+ <tr>
174
+ <?php $i=0;foreach ($this->getMultipleRowColumns($_i) as $_column): ?>
175
+ <td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns-1?'last':'' ?>">
176
+ <?php echo (($_html = $_column->getRowField($_i)) != '' ? $_html : '&nbsp;') ?>
177
+ </td>
178
+ <?php endforeach; ?>
179
+ </tr>
180
+ <?php endforeach;?>
181
+ <?php endif;?>
182
+
183
+ <?php if ($this->shouldRenderSubTotal($_item)): ?>
184
+ <tr class="subtotals">
185
+ <?php $i=0;foreach ($this->getSubTotalColumns() as $_column): ?>
186
+ <td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i == $numColumns ? 'last' : '' ?>">
187
+ <?php echo ($_column->hasSubtotalsLabel() ? $_column->getSubtotalsLabel() :
188
+ $_column->getRowField($this->getSubTotalItem($_item))
189
+ );
190
+ ?>
191
+ </td>
192
+ <?php endforeach; ?>
193
+ </tr>
194
+ <?php endif; ?>
195
+ <?php endforeach; ?>
196
+ <?php elseif ($this->getEmptyText()): ?>
197
+ <tr>
198
+ <td class="empty-text <?php echo $this->getEmptyTextClass() ?>" colspan="<?php echo $numColumns ?>"><?php echo $this->getEmptyText() ?></td>
199
+ </tr>
200
+ <?php endif; ?>
201
+ </tbody>
202
+
203
+ </table>
204
+ </div>
205
+ </div>
206
+ <?php if($this->canDisplayContainer()): ?>
207
+ </div>
208
+ <script type="text/javascript">
209
+ //<![CDATA[
210
+ <?php echo $this->getGridJavascript() ?>
211
+ //]]>
212
+ </script>
213
+ <?php endif; ?>
214
+ <?php endif; ?>
app/design/frontend/base/default/layout/zendesk.xml CHANGED
@@ -19,10 +19,36 @@
19
  <layout>
20
  <default>
21
  <reference name="footer_links">
22
- <action method="addLink" translate="label title" module="contacts" ifconfig="zendesk/features/footer_link_enabled"><label>Support</label><url>zendesk</url><title>Support</title><prepare>true</prepare></action>
 
 
 
 
 
23
  </reference>
24
  <reference name="before_body_end">
25
  <block type="zendesk/supporttab" name="zendesk_support_tab"/>
26
  </reference>
27
  </default>
28
- </layout>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  <layout>
20
  <default>
21
  <reference name="footer_links">
22
+ <action method="addLink" translate="label title" module="contacts" ifconfig="zendesk/frontend_features/footer_link_enabled">
23
+ <label>Support</label>
24
+ <url>zendesk</url>
25
+ <title>Support</title>
26
+ <prepare>true</prepare>
27
+ </action>
28
  </reference>
29
  <reference name="before_body_end">
30
  <block type="zendesk/supporttab" name="zendesk_support_tab"/>
31
  </reference>
32
  </default>
33
+
34
+ <customer_account>
35
+ <reference name="customer_account_navigation">
36
+ <action method="addLink" ifconfig="zendesk/frontend_features/customer_tickets" translate="label" module="zendesk">
37
+ <name>customertickets</name>
38
+ <path>zendesk/customer_tickets/index</path>
39
+ <label>My Tickets</label>
40
+ </action>
41
+ </reference>
42
+ </customer_account>
43
+
44
+ <zendesk_customer_tickets_index>
45
+ <update handle="customer_account"/>
46
+ <reference name="my.account.wrapper">
47
+ <block type="zendesk/customer_tickets" name="zendesk.customer.tickets">
48
+ <block type="zendesk/customer_tickets_list" name="zendesk.customer.tickets.list" />
49
+ </block>
50
+ </reference>
51
+ </zendesk_customer_tickets_index>
52
+ <zendesk_sso_login>
53
+ </zendesk_sso_login>
54
+ </layout>
app/design/frontend/base/default/template/zendesk/customer/tickets.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 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
+ <?php
20
+ if(!Mage::getStoreConfig('zendesk/frontend_features/customer_tickets')) {
21
+ return;
22
+ }
23
+ ?>
24
+
25
+ <div>
26
+ <div class="page-title">
27
+ <h1><?php echo $this->__('My Tickets') ?></h1>
28
+ </div>
29
+
30
+ <div><?php echo $this->getChildHtml(); ?></div>
31
+ </div>
32
+ <div class="buttons-set">
33
+ <a class="button" target="_blank" href="<?php echo $this->getSubmitAction() ?>"><span><span><?php echo $this->__('Open Ticket') ?></span></span></a>
34
+ <a class="button" target="_blank" href="<?php echo Mage::helper('zendesk')->getSSOAuthUrlEndUsers(); ?>"><span><span><?php echo $this->__('Log In To Zendesk') ?></span></span></a>
35
+ </div>
app/design/frontend/base/default/template/zendesk/customer/tickets/list.phtml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2014 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
+ <?php $tickets = $this->getList(); ?>
20
+
21
+ <?php if($tickets): ?>
22
+ <div class="entry-edit">
23
+ <div class="entry-edit-head">
24
+ <h4 class="icon-head head-account"><?php echo Mage::helper('zendesk')->__('Support Tickets') ?></h4>
25
+ </div>
26
+ <div class="grid">
27
+ <div class="hor-scroll">
28
+ <table cellspacing="0" class="data-table">
29
+ <thead>
30
+ <tr>
31
+ <th><?php echo Mage::helper('zendesk')->__('Subject') ?></th>
32
+ <th><?php echo Mage::helper('zendesk')->__('Requested') ?></th>
33
+ <th><?php echo Mage::helper('zendesk')->__('Updated') ?></th>
34
+ <th><?php echo Mage::helper('zendesk')->__('Status') ?></th>
35
+ </tr>
36
+ </thead>
37
+ <tbody class="odd">
38
+ <?php foreach($tickets as $ticket): ?>
39
+ <?php $t = Mage::getModel('zendesk/api_tickets')->get($ticket['id'], true); ?>
40
+ <tr class="border">
41
+ <td><?php echo Mage::helper('zendesk')->getTicketUrl($ticket); ?></td>
42
+ <td><?php echo Mage::helper('core')->formatDate($ticket['created_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
43
+ <td><?php echo Mage::helper('core')->formatDate($ticket['updated_at'], Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true); ?></td>
44
+ <td><?php echo ucwords($ticket['status']); ?></td>
45
+ </tr>
46
+ <?php endforeach; ?>
47
+ </tbody>
48
+ </table>
49
+ </div>
50
+ </div>
51
+ </div>
52
+ <?php else: ?>
53
+ <div><?php echo $this->__('You dont have any tickets'); ?></div>
54
+ <?php endif; ?>
app/etc/modules/Zendesk_Zendesk.xml CHANGED
File without changes
app/locale/da_DA/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Dansk"
2
+ "API Details","API-detaljer"
3
+ "API Enabled","API aktiveret"
4
+ "API Token","API-token"
5
+ "API test connection failed","API-prøvetilslutning mislykkedes"
6
+ "API test connection successful","API-prøvetilslutning lykkedes"
7
+ "API","API"
8
+ "Agent Email Address","Agentens e-mailadresse"
9
+ "Agent Token","Agent-token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Er du sikker på, at du vil rydde hele Zendesk-logfilen?"
11
+ "Assignee","Ansvarlig"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Kode til visning af Feedback-fanen"
14
+ "Connection to Zendesk API failed","Tilslutning til Zendesk API mislykkedes"
15
+ "Connection to Zendesk API successful","Tilslutning til Zendesk API lykkedes"
16
+ "Create Ticket","Opret ticket"
17
+ "Create tickets from Contact Us form","Opret tickets fra formularen Kontakt os"
18
+ "Customize Feedback Tab","Brugerdefiner fanen Feedback"
19
+ "Dashboard","Panel"
20
+ "Decide which features you would like turned on in your Magento store.","Beslut hvilke funktioner, du vil aktivere i Magento-forretningen."
21
+ "Description","Beskrivelse"
22
+ "Display link to Zendesk in Magento footer","Vis link til Zendesk i Magent-sidefod"
23
+ "Email","E-mail"
24
+ "Facebook","Facebook"
25
+ "Features","Funktioner"
26
+ "Feedback Tab","Feedback-fane"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","Filstørrelse for stor – viser kun de sidste %s linjer. Klik på Download for at hente hele filen."
28
+ "General settings that are required to connect Zendesk and Magento.","Generelle indstillinger, der er nødvendige for at forbinde Zendesk og Magento."
29
+ "General","Generelt"
30
+ "Generate","Generer"
31
+ "Group","Gruppe"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Har du ikke installeret Zendesk endnu? Følg den brugervenlige installationsguide for at komme i gang med Zendesk og hjælpe dine kunder."
33
+ "High","Høj"
34
+ "Incident","Hændelse"
35
+ "Launch Zendesk","Start Zendesk"
36
+ "Low","Lav"
37
+ "New Support Ticket","Ny support-ticket"
38
+ "New","Ny"
39
+ "No tickets found","Der blev ikke fundet nogen tickets"
40
+ "No views selected. Please select one or more from the settings page.","Ingen views er valgt. Vælg et eller flere på siden med indstillinger."
41
+ "Normal","Normal"
42
+ "On-hold","I bero"
43
+ "Open","Åben"
44
+ "Order Number","Ordrenummer"
45
+ "Pending","Venter"
46
+ "Priority","Prioritet"
47
+ "Problem","Problem"
48
+ "Question","Spørgsmål"
49
+ "Remote Authentication Token","Remote Authentication-token"
50
+ "Remote Authentication Token","Remote Authentication-token"
51
+ "Requested","Anmodet"
52
+ "Requester Email","Anmoderens e-mail"
53
+ "Requester Name","Anmoderens navn"
54
+ "Requester Website","Anmoderens website"
55
+ "Requester","Anmoder"
56
+ "Required for Magento App inside Zendesk to work.","Nødvendig for at Magento App i Zendesk vil virke."
57
+ "Save Config","Gem konfiguration"
58
+ "Settings","Indstillinger"
59
+ "Setup guide","Installationsguide"
60
+ "Setup","Installation"
61
+ "Show support tickets on admin dashboard","Vis support-tickets på administratorpanel."
62
+ "Show support tickets on customer view","Vis support-tickets på brugerdefineret view"
63
+ "Show support tickets on order view","Vis support-tickets på ordre-view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on – Administratorer og agenter"
65
+ "Single Sign-on - End-users","Single Sign-on - Slutbrugere"
66
+ "Single Sign-on Enabled","Single Sign-on aktiveret"
67
+ "Single Sign-on Enabled","Single Sign-on aktiveret"
68
+ "Solved","Løst"
69
+ "Status","Status"
70
+ "Subject","Emne"
71
+ "Successfully generated a new API token","Genererede et nyt API-token."
72
+ "Support Channels","Supportkanaler"
73
+ "Support Tickets","Support-tickets"
74
+ "Task","Opgave"
75
+ "Test Connection","Prøvetilslutning"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","Zendesk-logfilen er ikke blevet oprettet. Kontroller, om logføring er blevet aktiveret."
77
+ "Ticket #%s Created","Ticket #%s oprettet"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","Du genererer et token ved at logge ind til Zendesk og dernæst vælge Administrer > Kanaler > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Der findes tip til fejlfinding på <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Opdateret"
83
+ "Urgent","Haster"
84
+ "Use Magento to manage admin and agent authentication.","Brug Magento til at administrere administrator- og agentautentifikation."
85
+ "Use Magento to manage end-user authentication.","Brug Magento til at administrere slutbrugerautentifikation."
86
+ "Use Magento to manage user authentication.","Brug Magento til at administrere brugerautentifikation."
87
+ "Used to link order in Magento with tickets in Zendesk","Bruges til at sammenkæde ordre i Magento med tickets i Zendesk"
88
+ "View All Tickets","Vis alle tickets"
89
+ "View ticket in Zendesk","Vis ticket i Zendesk"
90
+ "Views to show on dashboards","Views, der skal vises på paneler"
91
+ "Voice","Voice"
92
+ "Web Portal","Webportal"
93
+ "Zendesk Domain","Zendesk-domæne"
94
+ "Zendesk Log Viewer","Zendesk-logfremviser"
95
+ "Zendesk Order Number field ID","Id til feltet Zendesk-ordrenummer"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO-token er ikke blevet angivet. Føj dette til siden med indstillinger."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk giver dine kunder mulighed for at kontakte dig ved hjælp af deres foretrukne metoder. Brug nedenstående links til at konfigurere de kanaler, som du vil bruge."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk-domæne ikke angivet. Føj dette til siden med indstillinger."
app/locale/de_DE/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normal"
42
  "On-hold","Angehalten"
43
  "Open","Offen"
44
- "Order number","Bestellnummer"
45
  "Pending","Wartend"
46
  "Priority","Priorität"
47
  "Problem","Problem"
41
  "Normal","Normal"
42
  "On-hold","Angehalten"
43
  "Open","Offen"
44
+ "Order Number","Bestellnummer"
45
  "Pending","Wartend"
46
  "Priority","Priorität"
47
  "Problem","Problem"
app/locale/en_CA/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","English (CA)"
2
+ "API Details","API Details"
3
+ "API Enabled","API Enabled"
4
+ "API Token","API Token"
5
+ "API test connection failed","API test connection failed"
6
+ "API test connection successful","API test connection successful"
7
+ "API","API"
8
+ "Agent Email Address","Agent Email Address"
9
+ "Agent Token","Agent Token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Are you sure you want to clear the entire Zendesk log?"
11
+ "Assignee","Assignee"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Code to display Feedback Tab"
14
+ "Connection to Zendesk API failed","Connection to Zendesk API failed"
15
+ "Connection to Zendesk API successful","Connection to Zendesk API successful"
16
+ "Create Ticket","Create Ticket"
17
+ "Create tickets from Contact Us form","Create tickets from Contact Us form"
18
+ "Customize Feedback Tab","Customize Feedback Tab"
19
+ "Dashboard","Dashboard"
20
+ "Decide which features you would like turned on in your Magento store.","Decide which features you would like turned on in your Magento store."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Display link to Zendesk in Magento footer"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Features"
26
+ "Feedback Tab","Feedback Tab"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
28
+ "General settings that are required to connect Zendesk and Magento.","General settings that are required to connect Zendesk and Magento."
29
+ "General","General"
30
+ "Generate","Generate"
31
+ "Group","Group"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
33
+ "High","High"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Launch Zendesk"
36
+ "Low","Low"
37
+ "New Support Ticket","New Support Ticket"
38
+ "New","New"
39
+ "No tickets found","No tickets found"
40
+ "No views selected. Please select one or more from the settings page.","No views selected. Please select one or more from the settings page."
41
+ "Normal","Normal"
42
+ "On-hold","On-hold"
43
+ "Open","Open"
44
+ "Order Number","Order Number"
45
+ "Pending","Pending"
46
+ "Priority","Priority"
47
+ "Problem","Problem"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Remote Authentication Token"
50
+ "Remote Authentication Token","Remote Authentication Token"
51
+ "Requested","Requested"
52
+ "Requester Email","Requester Email"
53
+ "Requester Name","Requester Name"
54
+ "Requester Website","Requester Website"
55
+ "Requester","Requester"
56
+ "Required for Magento App inside Zendesk to work.","Required for Magento App inside Zendesk to work."
57
+ "Save Config","Save Config"
58
+ "Settings","Settings"
59
+ "Setup guide","Setup guide"
60
+ "Setup","Setup"
61
+ "Show support tickets on admin dashboard","Show support tickets on admin dashboard"
62
+ "Show support tickets on customer view","Show support tickets on customer view"
63
+ "Show support tickets on order view","Show support tickets on order view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on - Admins and Agents"
65
+ "Single Sign-on - End-users","Single Sign-on - End-users"
66
+ "Single Sign-on Enabled","Single Sign-on Enabled"
67
+ "Single Sign-on Enabled","Single Sign-on Enabled"
68
+ "Solved","Solved"
69
+ "Status","Status"
70
+ "Subject","Subject"
71
+ "Successfully generated a new API token","Successfully generated a new API token"
72
+ "Support Channels","Support Channels"
73
+ "Support Tickets","Support Tickets"
74
+ "Task","Task"
75
+ "Test Connection","Test Connection"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","The Zendesk log file has not been created. Check to see if logging has been enabled."
77
+ "Ticket #%s Created","Ticket #%s Created"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","To generate a token, log in to Zendesk then select Manage > Channels > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Troubleshooting tips can be found at <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Updated"
83
+ "Urgent","Urgent"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento to manage admin and agent authentication."
85
+ "Use Magento to manage end-user authentication.","Use Magento to manage end-user authentication."
86
+ "Use Magento to manage user authentication.","Use Magento to manage user authentication."
87
+ "Used to link order in Magento with tickets in Zendesk","Used to link order in Magento with tickets in Zendesk"
88
+ "View All Tickets","View All Tickets"
89
+ "View ticket in Zendesk","View ticket in Zendesk"
90
+ "Views to show on dashboards","Views to show on dashboards"
91
+ "Voice","Voice"
92
+ "Web Portal","Web Portal"
93
+ "Zendesk Domain","Zendesk Domain"
94
+ "Zendesk Log Viewer","Zendesk Log Viewer"
95
+ "Zendesk Order Number field ID","Zendesk Order Number field ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
app/locale/en_GB/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","English (UK)"
2
+ "API Details","API Details"
3
+ "API Enabled","API Enabled"
4
+ "API Token","API Token"
5
+ "API test connection failed","API test connection failed"
6
+ "API test connection successful","API test connection successful"
7
+ "API","API"
8
+ "Agent Email Address","Agent Email Address"
9
+ "Agent Token","Agent Token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Are you sure you want to clear the entire Zendesk log?"
11
+ "Assignee","Assignee"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Code to display Feedback Tab"
14
+ "Connection to Zendesk API failed","Connection to Zendesk API failed"
15
+ "Connection to Zendesk API successful","Connection to Zendesk API successful"
16
+ "Create Ticket","Create Ticket"
17
+ "Create tickets from Contact Us form","Create tickets from Contact Us form"
18
+ "Customize Feedback Tab","Customize Feedback Tab"
19
+ "Dashboard","Dashboard"
20
+ "Decide which features you would like turned on in your Magento store.","Decide which features you would like turned on in your Magento store."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Display link to Zendesk in Magento footer"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Features"
26
+ "Feedback Tab","Feedback Tab"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
28
+ "General settings that are required to connect Zendesk and Magento.","General settings that are required to connect Zendesk and Magento."
29
+ "General","General"
30
+ "Generate","Generate"
31
+ "Group","Group"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
33
+ "High","High"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Launch Zendesk"
36
+ "Low","Low"
37
+ "New Support Ticket","New Support Ticket"
38
+ "New","New"
39
+ "No tickets found","No tickets found"
40
+ "No views selected. Please select one or more from the settings page.","No views selected. Please select one or more from the settings page."
41
+ "Normal","Normal"
42
+ "On-hold","On-hold"
43
+ "Open","Open"
44
+ "Order Number","Order Number"
45
+ "Pending","Pending"
46
+ "Priority","Priority"
47
+ "Problem","Problem"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Remote Authentication Token"
50
+ "Remote Authentication Token","Remote Authentication Token"
51
+ "Requested","Requested"
52
+ "Requester Email","Requester Email"
53
+ "Requester Name","Requester Name"
54
+ "Requester Website","Requester Website"
55
+ "Requester","Requester"
56
+ "Required for Magento App inside Zendesk to work.","Required for Magento App inside Zendesk to work."
57
+ "Save Config","Save Config"
58
+ "Settings","Settings"
59
+ "Setup guide","Setup guide"
60
+ "Setup","Setup"
61
+ "Show support tickets on admin dashboard","Show support tickets on admin dashboard"
62
+ "Show support tickets on customer view","Show support tickets on customer view"
63
+ "Show support tickets on order view","Show support tickets on order view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on - Admins and Agents"
65
+ "Single Sign-on - End-users","Single Sign-on - End-users"
66
+ "Single Sign-on Enabled","Single Sign-on Enabled"
67
+ "Single Sign-on Enabled","Single Sign-on Enabled"
68
+ "Solved","Solved"
69
+ "Status","Status"
70
+ "Subject","Subject"
71
+ "Successfully generated a new API token","Successfully generated a new API token"
72
+ "Support Channels","Support Channels"
73
+ "Support Tickets","Support Tickets"
74
+ "Task","Task"
75
+ "Test Connection","Test Connection"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","The Zendesk log file has not been created. Check to see if logging has been enabled."
77
+ "Ticket #%s Created","Ticket #%s Created"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","To generate a token, log in to Zendesk then select Manage > Channels > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Troubleshooting tips can be found at <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Updated"
83
+ "Urgent","Urgent"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento to manage admin and agent authentication."
85
+ "Use Magento to manage end-user authentication.","Use Magento to manage end-user authentication."
86
+ "Use Magento to manage user authentication.","Use Magento to manage user authentication."
87
+ "Used to link order in Magento with tickets in Zendesk","Used to link order in Magento with tickets in Zendesk"
88
+ "View All Tickets","View All Tickets"
89
+ "View ticket in Zendesk","View ticket in Zendesk"
90
+ "Views to show on dashboards","Views to show on dashboards"
91
+ "Voice","Voice"
92
+ "Web Portal","Web Portal"
93
+ "Zendesk Domain","Zendesk Domain"
94
+ "Zendesk Log Viewer","Zendesk Log Viewer"
95
+ "Zendesk Order Number field ID","Zendesk Order Number field ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
app/locale/en_US/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normal"
42
  "On-hold","On-hold"
43
  "Open","Open"
44
- "Order number","Order number"
45
  "Pending","Pending"
46
  "Priority","Priority"
47
  "Problem","Problem"
@@ -96,3 +96,17 @@
96
  "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
  "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
  "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  "Normal","Normal"
42
  "On-hold","On-hold"
43
  "Open","Open"
44
+ "Order Number","Order Number"
45
  "Pending","Pending"
46
  "Priority","Priority"
47
  "Problem","Problem"
96
  "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
  "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
  "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
99
+ "Use External ID","Use External ID"
100
+ "Depending on your Zendesk configuration under "Settings / Security / JSON Web Token / Update of external IDs?","Depending on your Zendesk configuration under "Settings / Security / JSON Web Token / Update of external IDs?"
101
+ "Synchronize Customers","Synchronize Customers"
102
+ "Synchronize magento customer accounts with zendesk end-users?","Synchronize magento customer accounts with zendesk end-users?"
103
+ "Sync All Customers And Create User Fields","Sync All Customers And Create User Fields"
104
+ "Only if customers synchronization is enabled ","Only if customers synchronization is enabled "
105
+ "Customer Frontend","Customer Frontend"
106
+ "Show Tickets in Customer Accounts","Show Tickets in Customer Accounts"
107
+ "Display Customer's tickets in My Account","Display Customer's tickets in My Account"
108
+ "Admin Backend","Admin Backend"
109
+ "Decide which features you would like turned on in your admin panel.","Decide which features you would like turned on in your admin panel."
110
+ "Show "All" tab on dashboard","Show "All" tab on dashboard"
111
+ "Generate New Token","Generate New Token"
112
+ "Token cannot be empty","Token cannot be empty"
app/locale/en_US/Zendesk_Zendesk.yml ADDED
@@ -0,0 +1,412 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ title: "Magento"
2
+ packages:
3
+ - default
4
+ - magento
5
+ - classic
6
+
7
+ parts:
8
+
9
+ # Configuration Form
10
+ - translation:
11
+ key: "txt.integrations.magento.config.general.title"
12
+ title: "Configuration form: title for the group of general configuration options"
13
+ value: "General"
14
+ - translation:
15
+ key: "txt.integrations.magento.config.general.description"
16
+ title: "Configuration form: description for the general section"
17
+ value: "General settings that are required to connect Zendesk and Magento."
18
+ - translation:
19
+ key: "txt.integrations.magento.config.general.domain"
20
+ title: "Configuration form: label for their Zendesk Domain"
21
+ value: "Zendesk Domain"
22
+ - translation:
23
+ key: "txt.integrations.magento.config.general.email"
24
+ title: "Configuration form: label for a Zendesk agent email address"
25
+ value: "Agent Email Address"
26
+ - translation:
27
+ key: "txt.integrations.magento.config.general.token"
28
+ title: "Configuration form: label for a Zendesk agent token"
29
+ value: "Agent Token"
30
+ - translation:
31
+ key: "txt.integrations.magento.config.general.token_hint"
32
+ title: "Configuration form: helper text to show them where to generate a token in Zendesk"
33
+ value: "To generate a token, sign in to Zendesk then select Manage > Channels > API > Token"
34
+ - translation:
35
+ key: "txt.integrations.magento.config.sso.title"
36
+ title: "Configuration form: title for agent Single Sign-on section"
37
+ value: "Single Sign-on - Admins and Agents"
38
+ - translation:
39
+ key: "txt.integrations.magento.config.sso.comment"
40
+ title: "Configuration form: description for agent Single Sign-on section"
41
+ value: "Use Magento to manage admin and agent authentication."
42
+ - translation:
43
+ key: "txt.integrations.magento.config.sso.label"
44
+ title: "Configuration form: label for single sign-on feature"
45
+ value: "Single Sign-on Enabled"
46
+ - translation:
47
+ key: "txt.integrations.magento.config.sso.description"
48
+ title: "Configuration form: description for the single sign-on section"
49
+ value: "Use Magento to manage user authentication."
50
+ - translation:
51
+ key: "txt.integrations.magento.config.general.remote_auth"
52
+ title: "Configuration form: label for the Zendesk remote authentication token"
53
+ value: "Remote Authentication Token"
54
+ - translation:
55
+ key: "txt.integrations.magento.config.features.title"
56
+ title: "Configuration form: title for features section"
57
+ value: "Features"
58
+ - translation:
59
+ key: "txt.integrations.magento.config.features.description"
60
+ title: "Configuration form: description for the features section"
61
+ value: "Decide which features you would like turned on in your Magento store."
62
+ - translation:
63
+ key: "txt.integrations.magento.config.features.show_support_on_dashboard"
64
+ title: "Configuration form: label asking if they would like to have a feature turned on or off"
65
+ value: "Show support tickets on admin dashboard"
66
+ - translation:
67
+ key: "txt.integrations.magento.config.features.views_to_display"
68
+ title: "Configuration form: label asking which Zendesk Views they would like to display"
69
+ value: "Views to show on dashboards"
70
+ - translation:
71
+ key: "txt.integrations.magento.config.features.show_support_on_customer"
72
+ title: "Configuration form: label asking if they would like to have a feature turned on or off"
73
+ value: "Show support tickets on customer view"
74
+ - translation:
75
+ key: "txt.integrations.magento.config.features.show_support_on_order"
76
+ title: "Configuration form: label asking if they would like to have a feature turned on or off"
77
+ value: "Show support tickets on order view"
78
+ - translation:
79
+ key: "txt.integrations.magento.config.features.create_tickets"
80
+ title: "Configuration form: label asking if they would like to have a feature turned on or off"
81
+ value: "Create tickets from Contact Us form"
82
+ - translation:
83
+ key: "txt.integrations.magento.config.features.feedback_tab"
84
+ title: "Configuration form: label asking if they would like to display a feedback tab"
85
+ value: "Code to display Feedback Tab"
86
+ - translation:
87
+ key: "txt.integrations.magento.config.features.feedback_tab_customize"
88
+ title: "Configuration form: link to let them customize their feedback tab"
89
+ value: "Customize Feedback Tab"
90
+ - translation:
91
+ key: "txt.integrations.magento.config.features.web_widget"
92
+ title: "Configuration form: label asking if they would like to display the web widget"
93
+ value: "Include Web Widget"
94
+ - translation:
95
+ key: "txt.integrations.magento.config.features.web_widget_customize"
96
+ title: "Configuration form: link to let them customize their web widget"
97
+ value: "Customize Web Widget"
98
+ - translation:
99
+ key: "txt.integrations.magento.config.features.display_link_to_zendesk"
100
+ title: "Configuration form: link to let them toggle the display of a link to Zendesk in the footer"
101
+ value: "Display link to Zendesk in Magento footer"
102
+ - translation:
103
+ key: "txt.integrations.magento.config.features.order_field_id"
104
+ title: "Configuration form: label asking for their Zendesk order number custom field ID"
105
+ value: "Zendesk Order Number field ID"
106
+ - translation:
107
+ key: "txt.integrations.magento.config.features.order_field_id_hint"
108
+ title: "Configuration form: hint text describing why the field is required"
109
+ value: "Used to link order in Magento with tickets in Zendesk"
110
+ - translation:
111
+ key: "txt.integrations.magento.config.api_details.title"
112
+ title: "Configuration form: title for API Details section"
113
+ value: "API Details"
114
+ - translation:
115
+ key: "txt.integrations.magento.config.api_details.description"
116
+ title: "Configuration form: description for the API details section"
117
+ value: "Required for Magento App inside Zendesk to work."
118
+ - translation:
119
+ key: "txt.integrations.magento.config.api_details.enabled"
120
+ title: "Configuration form: label asking if they would like the API to be enabled"
121
+ value: "API Enabled"
122
+ - translation:
123
+ key: "txt.integrations.magento.config.api_details.token"
124
+ title: "Configuration form: label for their API Token"
125
+ value: "API Token"
126
+ - translation:
127
+ key: "txt.integrations.magento.config.api_details.generate"
128
+ title: "Configuration form: button to generate an API token"
129
+ value: "Generate"
130
+ - translation:
131
+ key: "txt.integrations.magento.config.api_details.generate_success"
132
+ title: "Configuration form: message after a token has been successfully generated"
133
+ value: "Successfully generated a new API token"
134
+ - translation:
135
+ key: "txt.integrations.magento.config.support_channels.title"
136
+ title: "Configuration form: title for the support channels section"
137
+ value: "Support Channels"
138
+ - translation:
139
+ key: "txt.integrations.magento.config.support_channels.description"
140
+ title: "Configuration form: description for the support channels section"
141
+ value: "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
142
+ - translation:
143
+ key: "txt.integrations.magento.config.support_channels.voice"
144
+ title: "Configuration form: label for a link to our voice channel"
145
+ value: "Voice"
146
+ - translation:
147
+ key: "txt.integrations.magento.config.support_channels.feedback_tab"
148
+ title: "Configuration form: label for a link to our feedback tab channel"
149
+ value: "Feedback Tab"
150
+ - translation:
151
+ key: "txt.integrations.magento.config.support_channels.api"
152
+ title: "Configuration form: label for a link to our API channel"
153
+ value: "API"
154
+ - translation:
155
+ key: "txt.integrations.magento.config.support_channels.facebook"
156
+ title: "Configuration form: label for a link to our Facebook channel"
157
+ value: "Facebook"
158
+ - translation:
159
+ key: "txt.integrations.magento.config.support_channels.chat"
160
+ title: "Configuration form: label for a link to our chat channel"
161
+ value: "Chat"
162
+ - translation:
163
+ key: "txt.integrations.magento.config.support_channels.web_portal"
164
+ title: "Configuration form: label for a link to our web portal channel"
165
+ value: "Web Portal"
166
+ - translation:
167
+ key: "txt.integrations.magento.config.support_channels.twitter"
168
+ title: "Configuration form: label for a link to our twitter channel"
169
+ value: "Twitter"
170
+ - translation:
171
+ key: "txt.integrations.magento.config.support_channels.email"
172
+ title: "Configuration form: label for a link to our email channel"
173
+ value: "Email"
174
+ - translation:
175
+ key: "txt.integrations.magento.config.setup.title"
176
+ title: "Configuration form: title for the setup section"
177
+ value: "Setup"
178
+ - translation:
179
+ key: "txt.integrations.magento.config.setup.description"
180
+ title: "Configuration form: description for the setup section"
181
+ value: "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
182
+ - translation:
183
+ key: "txt.integrations.magento.config.setup.guide"
184
+ title: "Configuration form: button linking to the setup guide"
185
+ value: "Setup guide"
186
+ - translation:
187
+ key: "txt.integrations.magento.config.save"
188
+ title: "Configuration form: button to save the form"
189
+ value: "Save Config"
190
+ - translation:
191
+ key: "text.integrations.magento.config.test_connection.title"
192
+ title: "Configuration form: buttons to test API connections"
193
+ value: "Test Connection"
194
+ - translation:
195
+ key: "text.integrations.magento.config.sso_frontend.title"
196
+ title: "Configuration form: title for frontend SSO settings"
197
+ value: "Single Sign-on - End-users"
198
+ - translation:
199
+ key: "text.integrations.magento.config.sso_frontend.comment"
200
+ title: "Configuration form: description of frontend SSO"
201
+ value: "Use Magento to manage end-user authentication."
202
+ - translation:
203
+ key: "text.integrations.magento.config.sso_frontend.enabled"
204
+ title: "Configuration form: select box for enabling SSO for frontend users"
205
+ value: "Single Sign-on Enabled"
206
+ - translation:
207
+ key: "text.integrations.magento.config.sso_frontend.token"
208
+ title: "Configuration form: shared secret for SSO support"
209
+ value: "Remote Authentication Token"
210
+ - translation:
211
+ key: "text.integrations.magento.config.test_connection.inbound.success"
212
+ title: "Configuration message: connection to the Magento API succeeded"
213
+ value: "API test connection successful"
214
+ - translation:
215
+ key: "text.integrations.magento.config.test_connection.outbound.success"
216
+ title: "Configuration message: connection to the Zendesk API succeeded"
217
+ value: "Connection to Zendesk API successful"
218
+ - translation:
219
+ key: "text.integrations.magento.config.test_connection.inbound.failure"
220
+ title: "Configuration message: connection to the Magento API failed"
221
+ value: "API test connection failed"
222
+ - translation:
223
+ key: "text.integrations.magento.config.test_connection.tips"
224
+ title: "Configuration message: suggestion to look at provided URL for troubleshooting"
225
+ value: 'Troubleshooting tips can be found at <a href="%s" target="_blank">%s</a>'
226
+ - translation:
227
+ key: "text.integrations.magento.config.test_connection.outbound.failure"
228
+ title: "Configuration message: connection to the Zendesk API failed"
229
+ value: "Connection to Zendesk API failed"
230
+
231
+
232
+ # Tickets
233
+ - translation:
234
+ key: "txt.integrations.magento.tickets.assignee"
235
+ title: "The Zendesk assignee for a ticket"
236
+ value: "Assignee"
237
+ - translation:
238
+ key: "txt.integrations.magento.tickets.create_ticket"
239
+ title: "Create a Zendesk ticket"
240
+ value: "Create Ticket"
241
+ - translation:
242
+ key: "txt.integrations.magento.tickets.group"
243
+ title: "A Zendesk group"
244
+ value: "Group"
245
+ - translation:
246
+ key: "txt.integrations.magento.tickets.new_ticket"
247
+ title: "Create a new support ticket"
248
+ value: "New Support Ticket"
249
+ - translation:
250
+ key: "txt.integrations.magento.tickets.no_tickets"
251
+ title: "No tickets could be found"
252
+ value: "No tickets found"
253
+ - translation:
254
+ key: "txt.integrations.magento.tickets.priority"
255
+ title: "The priority of a ticket"
256
+ value: "Priority"
257
+ - translation:
258
+ key: "txt.integrations.magento.tickets.priority_low"
259
+ title: "Low priority of a ticket"
260
+ value: "Low"
261
+ - translation:
262
+ key: "txt.integrations.magento.tickets.priority_normal"
263
+ title: "Normal priority of a ticket"
264
+ value: "Normal"
265
+ - translation:
266
+ key: "txt.integrations.magento.tickets.priority_high"
267
+ title: "High priority of a ticket"
268
+ value: "High"
269
+ - translation:
270
+ key: "txt.integrations.magento.tickets.priority_urgent"
271
+ title: "Urgent priority of a ticket"
272
+ value: "Urgent"
273
+ - translation:
274
+ key: "txt.integrations.magento.tickets.requester"
275
+ title: "The label for the requester of a ticket"
276
+ value: "Requester"
277
+ - translation:
278
+ key: "txt.integrations.magento.tickets.requested"
279
+ title: "The label for when a ticket was requested"
280
+ value: "Requested"
281
+ - translation:
282
+ key: "txt.integrations.magento.tickets.requester_email"
283
+ title: "The label for the requester's email address"
284
+ value: "Requester Email"
285
+ - translation:
286
+ key: "txt.integrations.magento.tickets.requester_name"
287
+ title: "The label for the requester's name"
288
+ value: "Requester Name"
289
+ - translation:
290
+ key: "txt.integrations.magento.tickets.requester_website"
291
+ title: "The label for the requester's website"
292
+ value: "Requester Website"
293
+ - translation:
294
+ key: "txt.integrations.magento.tickets.subject"
295
+ title: "Subject of the ticket"
296
+ value: "Subject"
297
+ - translation:
298
+ key: "txt.integrations.magento.tickets.status"
299
+ title: "Status of the ticket"
300
+ value: "Status"
301
+ - translation:
302
+ key: "txt.integrations.magento.tickets.status_new"
303
+ title: "New status of ticket"
304
+ value: "New"
305
+ - translation:
306
+ key: "txt.integrations.magento.tickets.status_open"
307
+ title: "Open status of ticket"
308
+ value: "Open"
309
+ - translation:
310
+ key: "txt.integrations.magento.tickets.status_pending"
311
+ title: "Pending status of ticket"
312
+ value: "Pending"
313
+ - translation:
314
+ key: "txt.integrations.magento.tickets.status_on_hold"
315
+ title: "On-hold status of ticket"
316
+ value: "On-hold"
317
+ - translation:
318
+ key: "txt.integrations.magento.tickets.status_solved"
319
+ title: "Solved status of ticket"
320
+ value: "Solved"
321
+ - translation:
322
+ key: "txt.integrations.magento.tickets.type"
323
+ title: "Type of the ticket"
324
+ value: "Type"
325
+ - translation:
326
+ key: "txt.integrations.magento.tickets.type_problem"
327
+ title: "Problem type of ticket"
328
+ value: "Problem"
329
+ - translation:
330
+ key: "txt.integrations.magento.tickets.type_incident"
331
+ title: "Incident type of ticket"
332
+ value: "Incident"
333
+ - translation:
334
+ key: "txt.integrations.magento.tickets.type_question"
335
+ title: "Question type of ticket"
336
+ value: "Question"
337
+ - translation:
338
+ key: "txt.integrations.magento.tickets.type_task"
339
+ title: "Task type of ticket"
340
+ value: "Task"
341
+ - translation:
342
+ key: "txt.integrations.magento.tickets.order_number"
343
+ title: "Label for order number field"
344
+ value: "Order number"
345
+ - translation:
346
+ key: "txt.integrations.magento.tickets.description"
347
+ title: "Label for the description of a ticket"
348
+ value: "Description"
349
+ - translation:
350
+ key: "txt.integrations.magento.tickets.update"
351
+ title: "When a ticket was last updated"
352
+ value: "Updated"
353
+ - translation:
354
+ key: "txt.integrations.magento.tickets.ticket_created"
355
+ title: "Ticket # %s Created"
356
+ value: "Ticket #%s Created"
357
+
358
+ # Log Viewer
359
+ - translation:
360
+ key: "txt.integrations.magento.log_viewer.title"
361
+ title: "Log viewer page title"
362
+ value: "Zendesk Log Viewer"
363
+ - translation:
364
+ key: "txt.integrations.magento.log_viewer.clear_confirmation"
365
+ title: "Confirmation message for clearing the log file"
366
+ value: "Are you sure you want to clear the entire Zendesk log?"
367
+ - translation:
368
+ key: "txt.integrations.magento.log_viewer.message.no_file"
369
+ title: "Error message if log file does not exist"
370
+ value: "The Zendesk log file has not been created. Check to see if logging has been enabled."
371
+ - translation:
372
+ key: "txt.integrations.magento.log_viewer.message.file_too_large"
373
+ title: "Warning message shown if log file is too large to show all of it on screen"
374
+ value: "File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
375
+
376
+ # General
377
+ - translation:
378
+ key: "txt.integrations.magento.general.dashboard"
379
+ title: "Display the dashboard"
380
+ value: "Dashboard"
381
+ - translation:
382
+ key: "txt.integrations.magento.general.settings"
383
+ title: "Display the settings for the Zendesk extension"
384
+ value: "Settings"
385
+ - translation:
386
+ key: "txt.integrations.magento.general.no_views_selected"
387
+ title: "No views have been selected to display. Please select one or more from the settings page."
388
+ value: "No views selected. Please select one or more from the settings page."
389
+ - translation:
390
+ key: "txt.integrations.magento.general.launch"
391
+ title: "Open Zendesk"
392
+ value: "Launch Zendesk"
393
+ - translation:
394
+ key: "txt.integrations.magento.general.sso_token_not_set"
395
+ title: "Zendesk SSO token has not been set. Please add this to the settings page"
396
+ value: "Zendesk SSO token not been set. Please add this to the settings page."
397
+ - translation:
398
+ key: "txt.integrations.magento.general.domain_not_set"
399
+ title: "Zendesk domain has not set. Please add this to the settings page"
400
+ value: "Zendesk domain not set. Please add this to the settings page."
401
+ - translation:
402
+ key: "txt.integrations.magento.general.view_ticket_in_zendesk"
403
+ title: "View the ticket in Zendesk"
404
+ value: "View ticket in Zendesk"
405
+ - translation:
406
+ key: "txt.integrations.magento.general.view_all_tickets"
407
+ title: "View all the tickets"
408
+ value: "View All Tickets"
409
+ - translation:
410
+ key: "txt.integrations.magento.general.support_tickets"
411
+ title: "Title for a section display support tickets"
412
+ value: "Support Tickets"
app/locale/es_419/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Español (Latinoamérica)"
2
+ "API Details","Detalles de API"
3
+ "API Enabled","API activada"
4
+ "API Token","Token de API"
5
+ "API test connection failed","Falló la conexión de prueba de API"
6
+ "API test connection successful","Conexión de prueba de API realizada correctamente"
7
+ "API","API"
8
+ "Agent Email Address","Dirección de correo electrónico de agente"
9
+ "Agent Token","Token de agente"
10
+ "Are you sure you want to clear the entire Zendesk log?","¿Está seguro de que desea borrar todo el registro de Zendesk?"
11
+ "Assignee","Agente asignado"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Código para mostrar la pestaña de ayuda"
14
+ "Connection to Zendesk API failed","Falló la conexión a la API de Zendesk"
15
+ "Connection to Zendesk API successful","Conexión a la API de Zendesk realizada correctamente"
16
+ "Create Ticket","Crear ticket"
17
+ "Create tickets from Contact Us form","Crear tickets basados en el formulario Contáctenos"
18
+ "Customize Feedback Tab","Personalizar pestaña de ayuda"
19
+ "Dashboard","Panel"
20
+ "Decide which features you would like turned on in your Magento store.","Decida qué funciones desea tener activadas en su tienda Magento."
21
+ "Description","Descripción"
22
+ "Display link to Zendesk in Magento footer","Mostrar vínculo a Zendesk en pie de página de Magento"
23
+ "Email","Correo electrónico"
24
+ "Facebook","Facebook"
25
+ "Features","Funciones"
26
+ "Feedback Tab","Pestaña de ayuda"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","Tamaño de archivo muy grande: solo se muestran las últimas %s líneas. Haga clic en Descargar para recuperar todo el archivo."
28
+ "General settings that are required to connect Zendesk and Magento.","Configuración general requerida para conectar a Zendesk con Magento."
29
+ "General","General"
30
+ "Generate","Generar"
31
+ "Group","Grupo"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","¿No ha configurado su cuenta de Zendesk? Deje que la guía fácil le enseñe a usar Zendesk para ayudar a sus clientes."
33
+ "High","Alta"
34
+ "Incident","Incidente"
35
+ "Launch Zendesk","Inicie su cuenta de Zendesk."
36
+ "Low","Baja"
37
+ "New Support Ticket","Nuevo ticket de soporte"
38
+ "New","Nuevo"
39
+ "No tickets found","No se encontraron tickets"
40
+ "No views selected. Please select one or more from the settings page.","No se han seleccionado vistas. Seleccione una o más en la página de configuración."
41
+ "Normal","Normal"
42
+ "On-hold","En espera"
43
+ "Open","Abierto"
44
+ "Order Number","Número de pedido"
45
+ "Pending","Pendiente"
46
+ "Priority","Prioridad"
47
+ "Problem","Problema"
48
+ "Question","Pregunta"
49
+ "Remote Authentication Token","Token de autenticación remota"
50
+ "Remote Authentication Token","Token de autenticación remota"
51
+ "Requested","Solicitada"
52
+ "Requester Email","Correo electrónico del solicitante"
53
+ "Requester Name","Nombre del solicitante"
54
+ "Requester Website","Sitio web del solicitante"
55
+ "Requester","Solicitante"
56
+ "Required for Magento App inside Zendesk to work.","Necesario para que Magento App pueda funcionar dentro de Zendesk."
57
+ "Save Config","Guardar config"
58
+ "Settings","Configuración"
59
+ "Setup guide","Guía de configuración"
60
+ "Setup","Configuración"
61
+ "Show support tickets on admin dashboard","Mostrar tickets de soporte en el panel del administrador."
62
+ "Show support tickets on customer view","Mostrar tickets de soporte en la vista del cliente."
63
+ "Show support tickets on order view","Mostrar tickets de soporte en la vista del pedido."
64
+ "Single Sign-on - Admins and Agents","Inicio de sesión único: administradores y agentes"
65
+ "Single Sign-on - End-users","Inicio de sesión único: usuarios finales"
66
+ "Single Sign-on Enabled","Inicio de sesión único activado"
67
+ "Single Sign-on Enabled","Inicio de sesión único activado"
68
+ "Solved","Resuelto"
69
+ "Status","Estado"
70
+ "Subject","Asunto"
71
+ "Successfully generated a new API token","Se generó correctamente un nuevo token de API."
72
+ "Support Channels","Canales de soporte"
73
+ "Support Tickets","Tickets de soporte"
74
+ "Task","Tarea"
75
+ "Test Connection","Conexión de prueba"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","No se ha creado el archivo de registro de Zendesk. Verifique si se ha activado el registro."
77
+ "Ticket #%s Created","El ticket #%s fue creado"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","Para generar un token, inicie sesión en Zendesk y luego seleccione Administrar > Canales > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Las sugerencias para la resolución de problemas se encuentran en <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Tipo"
82
+ "Updated","Actualizado"
83
+ "Urgent","Urgente"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento para administrar la autenticación de administradores y agentes."
85
+ "Use Magento to manage end-user authentication.","Use Magento para administrar la autenticación de usuarios finales."
86
+ "Use Magento to manage user authentication.","Use Magento para administrar la autenticación de usuarios."
87
+ "Used to link order in Magento with tickets in Zendesk","Se usa para vincular el pedido en Magento con tickets en Zendesk"
88
+ "View All Tickets","Ver todos los tickets"
89
+ "View ticket in Zendesk","Ver ticket en Zendesk"
90
+ "Views to show on dashboards","Vistas para mostrar en los paneles "
91
+ "Voice","Voice"
92
+ "Web Portal","Portal web"
93
+ "Zendesk Domain","Dominio de Zendesk"
94
+ "Zendesk Log Viewer","Visor del registro de Zendesk"
95
+ "Zendesk Order Number field ID","ID de campo del número del pedido de Zendesk"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Token SSO de Zendesk no se ha configurado. Agréguelo a la página de configuración."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk permite que sus clientes lo contacten con su método preferido. Use los vínculos a continuación para configurar los canales que desee usar."
98
+ "Zendesk domain not set. Please add this to the settings page.","Dominio de Zendesk no se ha configurado. Agréguelo a la página de configuración."
app/locale/es_ES/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normal"
42
  "On-hold","En espera"
43
  "Open","Abierto"
44
- "Order number","Número de pedido"
45
  "Pending","Pendiente"
46
  "Priority","Prioridad"
47
  "Problem","Problema"
41
  "Normal","Normal"
42
  "On-hold","En espera"
43
  "Open","Abierto"
44
+ "Order Number","Número de pedido"
45
  "Pending","Pendiente"
46
  "Priority","Prioridad"
47
  "Problem","Problema"
app/locale/fr_CA/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Français (Canada)"
2
+ "API Details","Détails de l’API"
3
+ "API Enabled","API activée"
4
+ "API Token","Jeton API"
5
+ "API test connection failed","Échec de la connexion test à l’API"
6
+ "API test connection successful","Réussite de la connexion test à l’API"
7
+ "API","API"
8
+ "Agent Email Address","Adresse courriel de l’agent"
9
+ "Agent Token","Jeton de l’agent"
10
+ "Are you sure you want to clear the entire Zendesk log?","Voulez-vraiment effacer la totalité du journal Zendesk ?"
11
+ "Assignee","Assigné"
12
+ "Chat","Clavardage"
13
+ "Code to display Feedback Tab","Code pour afficher l’onglet de suggestions"
14
+ "Connection to Zendesk API failed","Échec de la connexion à l’API Zendesk"
15
+ "Connection to Zendesk API successful","Réussite de la connexion à l’API Zendesk"
16
+ "Create Ticket","Créer le billet"
17
+ "Create tickets from Contact Us form","Créer des billets à partir du formulaire Nous contacter"
18
+ "Customize Feedback Tab","Personnaliser l’onglet de suggestions"
19
+ "Dashboard","Tableau de bord"
20
+ "Decide which features you would like turned on in your Magento store.","Décidez des fonctionnalités que vous souhaitez activer dans votre magasin Magento."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Afficher le lien vers Zendesk dans le bas de page Magento"
23
+ "Email","Courriel"
24
+ "Facebook","Facebook"
25
+ "Features","Fonctionnalités"
26
+ "Feedback Tab","Onglet de suggestions"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","Fichier trop volumineux – Seules les % dernières lignes sont affichées. Cliquez sur Télécharger pour récupérer la totalité du fichier."
28
+ "General settings that are required to connect Zendesk and Magento.","Paramètres généraux requis pour connecter Zendesk et Magento."
29
+ "General","Général"
30
+ "Generate","Générer"
31
+ "Group","Groupe"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Vous n’avez pas encore configuré Zendesk ? Suivez notre guide de configuration facile et commencez à utiliser Zendesk pour assister vos clients."
33
+ "High","Élevée"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Lancer Zendesk"
36
+ "Low","Basse"
37
+ "New Support Ticket","Nouveau billet d’assistance"
38
+ "New","Nouveau"
39
+ "No tickets found","Aucun billet trouvé"
40
+ "No views selected. Please select one or more from the settings page.","Aucune vue sélectionnée. Sélectionnez-en au moins une dans la page des paramètres."
41
+ "Normal","Normale"
42
+ "On-hold","En pause"
43
+ "Open","Ouvert"
44
+ "Order Number","Numéro de commande"
45
+ "Pending","En attente"
46
+ "Priority","Priorité"
47
+ "Problem","Problème"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Jeton d’authentification à distance"
50
+ "Remote Authentication Token","Jeton d’authentification à distance"
51
+ "Requested","Création"
52
+ "Requester Email","Courriel du demandeur"
53
+ "Requester Name","Nom du demandeur"
54
+ "Requester Website","Site Web du demandeur"
55
+ "Requester","Demandeur"
56
+ "Required for Magento App inside Zendesk to work.","Requis pour que l’application Magento fonctionne dans Zendesk."
57
+ "Save Config","Enregistrer la configuration"
58
+ "Settings","Paramètres"
59
+ "Setup guide","Guide de configuration"
60
+ "Setup","Configuration"
61
+ "Show support tickets on admin dashboard","Afficher les billets d’assistance dans le tableau de bord d’administration"
62
+ "Show support tickets on customer view","Afficher les billets d’assistance dans la vue client"
63
+ "Show support tickets on order view","Afficher les billets d’assistance dans la vue commande"
64
+ "Single Sign-on - Admins and Agents","Connexion unique"
65
+ "Single Sign-on - End-users","Connexion unique – Utilisateurs finaux"
66
+ "Single Sign-on Enabled","Connexion unique activée"
67
+ "Single Sign-on Enabled","Connexion unique activée"
68
+ "Solved","Résolu"
69
+ "Status","Statut"
70
+ "Subject","Sujet"
71
+ "Successfully generated a new API token","Nouveau jeton API généré"
72
+ "Support Channels","Canaux d’assistance"
73
+ "Support Tickets","Billets d’assistance"
74
+ "Task","Tâche"
75
+ "Test Connection","Tester la connexion"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","Le fichier journal Zendesk n’a pas été créé. Vérifiez que l’enregistrement est activé."
77
+ "Ticket #%s Created","Billet #%s créé"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","Pour générer un jeton, connectez-vous à Zendesk, puis sélectionnez Gérer > Canaux > API > Jeton."
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Vous trouverez des conseils de dépannage sur <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Mis à jour"
83
+ "Urgent","Urgente"
84
+ "Use Magento to manage admin and agent authentication.","Utilisez Magento pour gérer l’authentification des administrateurs et des agents."
85
+ "Use Magento to manage end-user authentication.","Utilisez Magento pour gérer l’authentification des utilisateurs finaux."
86
+ "Use Magento to manage user authentication.","Utilisez Magento pour gérer l’authentification des utilisateurs."
87
+ "Used to link order in Magento with tickets in Zendesk","Utilisé pour lier la commande dans Magento aux billets dans Zendesk"
88
+ "View All Tickets","Afficher tous les billets"
89
+ "View ticket in Zendesk","Afficher le billet dans Zendesk"
90
+ "Views to show on dashboards","Vues à afficher dans les tableaux de bord"
91
+ "Voice","Centre d’appels"
92
+ "Web Portal","Portail"
93
+ "Zendesk Domain","Domaine Zendesk"
94
+ "Zendesk Log Viewer","Afficheur du journal Zendesk"
95
+ "Zendesk Order Number field ID","ID de champ du numéro de commande Zendesk"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Jeton de connexion unique Zendesk non configuré. Ajoutez-le à la page des paramètres."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk permet à vos clients de vous contacter en utilisant la méthode de leur choix. Utilisez les liens ci-dessous pour configurer les canaux que vous voulez utiliser."
98
+ "Zendesk domain not set. Please add this to the settings page.","Domaine Zendesk non configuré. Ajoutez-le à la page des paramètres."
app/locale/fr_FR/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normale"
42
  "On-hold","En pause"
43
  "Open","Ouvert"
44
- "Order number","Numéro de commande"
45
  "Pending","En attente"
46
  "Priority","Priorité"
47
  "Problem","Problème"
41
  "Normal","Normale"
42
  "On-hold","En pause"
43
  "Open","Ouvert"
44
+ "Order Number","Numéro de commande"
45
  "Pending","En attente"
46
  "Priority","Priorité"
47
  "Problem","Problème"
app/locale/it_IT/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normale"
42
  "On-hold","In sospeso"
43
  "Open","Aperto"
44
- "Order number","Numero ordine"
45
  "Pending","In attesa"
46
  "Priority","Priorità"
47
  "Problem","Problema"
41
  "Normal","Normale"
42
  "On-hold","In sospeso"
43
  "Open","Aperto"
44
+ "Order Number","Numero ordine"
45
  "Pending","In attesa"
46
  "Priority","Priorità"
47
  "Problem","Problema"
app/locale/ja_JA/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","日本語 (Japanese)"
2
+ "API Details","APIの詳細"
3
+ "API Enabled","API有効"
4
+ "API Token","APIトークン"
5
+ "API test connection failed","APIテスト接続が失敗しました"
6
+ "API test connection successful","APIテスト接続が成功しました"
7
+ "API","API"
8
+ "Agent Email Address","エージェントのメールアドレス"
9
+ "Agent Token","エージェントのトークン"
10
+ "Are you sure you want to clear the entire Zendesk log?","Zendeskログをすべて消去しますか?"
11
+ "Assignee","担当者"
12
+ "Chat","チャット"
13
+ "Code to display Feedback Tab","「フィードバック」タブを表示するコード"
14
+ "Connection to Zendesk API failed","Zendesk APIへの接続が失敗しました"
15
+ "Connection to Zendesk API successful","Zendesk APIへの接続が成功しました"
16
+ "Create Ticket","チケットを作成"
17
+ "Create tickets from Contact Us form","「お問い合わせください」からチケットを作成"
18
+ "Customize Feedback Tab","Feedbackタブをカスタマイズ"
19
+ "Dashboard","ダッシュボード"
20
+ "Decide which features you would like turned on in your Magento store.","Magentoストアで有効にする機能を決めてください。"
21
+ "Description","説明"
22
+ "Display link to Zendesk in Magento footer","MagentoフッターにZendeskへのリンクを表示"
23
+ "Email","メール"
24
+ "Facebook","Facebook"
25
+ "Features","機能"
26
+ "Feedback Tab","フィードバックタブ"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","ファイルサイズが大きすぎます - 最後の%s行のみ表示します。「ダウンロード」をクリックして、ファイル全体を取得してください。"
28
+ "General settings that are required to connect Zendesk and Magento.","ZendeskとMagentoを接続するために必要な一般的な設定。"
29
+ "General","全般"
30
+ "Generate","生成"
31
+ "Group","グループ"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","まだZendeskを設定していませんか?簡単な設定ガイドに従って、Zendeskを使用した顧客サポートを開始してください。"
33
+ "High","高"
34
+ "Incident","事象"
35
+ "Launch Zendesk","Zendeskを起動"
36
+ "Low","低"
37
+ "New Support Ticket","新規サポートチケット"
38
+ "New","新規"
39
+ "No tickets found","該当するチケットがありません"
40
+ "No views selected. Please select one or more from the settings page.","ビューが選択されていません。1つ以上のビューを設定ページから選択してください。"
41
+ "Normal","普通"
42
+ "On-hold","待機中"
43
+ "Open","オープン"
44
+ "Order Number","注文番号"
45
+ "Pending","保留中"
46
+ "Priority","優先度"
47
+ "Problem","問題"
48
+ "Question","質問"
49
+ "Remote Authentication Token","リモート認証トークン"
50
+ "Remote Authentication Token","リモート認証トークン"
51
+ "Requested","要求日"
52
+ "Requester Email","リクエスタのメール"
53
+ "Requester Name","リクエスタ名"
54
+ "Requester Website","リクエスタのWebサイト"
55
+ "Requester","リクエスタ"
56
+ "Required for Magento App inside Zendesk to work.","Zendesk内でMagnetアプリが動作するために必要です。"
57
+ "Save Config","設定の保存"
58
+ "Settings","設定"
59
+ "Setup guide","設定ガイド"
60
+ "Setup","設定"
61
+ "Show support tickets on admin dashboard","adminダッシュボードにサポートチケットを表示します。"
62
+ "Show support tickets on customer view","カスタマービューにサポートチケットを表示"
63
+ "Show support tickets on order view","オーダービューにサポートチケットを表示"
64
+ "Single Sign-on - Admins and Agents","シングルサインオン – 管理者およびエージェント"
65
+ "Single Sign-on - End-users","シングルサインオン - エンドユーザー"
66
+ "Single Sign-on Enabled","シングルサインオン有効"
67
+ "Single Sign-on Enabled","シングルサインオン有効"
68
+ "Solved","解決済み"
69
+ "Status","ステータス"
70
+ "Subject","件名"
71
+ "Successfully generated a new API token","新しいAPIトークンが正しく作成されました"
72
+ "Support Channels","サポートチャネル"
73
+ "Support Tickets","サポートチケット"
74
+ "Task","タスク"
75
+ "Test Connection","テスト接続"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","Zendeskログファイルが作成されませんでした。ログが有効になっていたか確認してください。"
77
+ "Ticket #%s Created","チケット#%sが作成されました"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","トークンを生成するには、Zendeskにログインして、「管理」>「チャネル」>「API」>「トークン」を選択します"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","トラブルシューティングのヒントが<a href="%s">%s</a>にあります"
80
+ "Twitter","Twitter"
81
+ "Type","タイプ"
82
+ "Updated","最終更新日時"
83
+ "Urgent","緊急"
84
+ "Use Magento to manage admin and agent authentication.","Magentoを使用して、管理者およびエージェント認証を管理します。"
85
+ "Use Magento to manage end-user authentication.","Magentoを使用して、エンドユーザー認証を管理します。"
86
+ "Use Magento to manage user authentication.","Magentoを使用して、ユーザー認証を管理します。"
87
+ "Used to link order in Magento with tickets in Zendesk","Magentoでの注文をZendeskのチケットにリンクさせるために使用"
88
+ "View All Tickets","すべてのチケットを表示"
89
+ "View ticket in Zendesk","Zendeskのチケットを表示"
90
+ "Views to show on dashboards","ダッシュボードに表示するビュー"
91
+ "Voice","Voice"
92
+ "Web Portal","Webポータル"
93
+ "Zendesk Domain","Zendeskドメイン"
94
+ "Zendesk Log Viewer","Zendeskログビューア"
95
+ "Zendesk Order Number field ID","Zendesk注文番号フィールドID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSOトークンが設定されていません。設定ページにこれを追加してください。"
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendeskでは、あなたのお客様が好きな方法で問い合わせることを可能にします。下のリンクをたどって、使用するチャネルを設定してください。"
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendeskドメインが設定されていません。設定ページにこれを追加してください。"
app/locale/ja_JP/Zendesk_Zendesk.csv CHANGED
@@ -51,7 +51,7 @@
51
  "Group","グループ"
52
  "New Support Ticket","新規サポートチケット"
53
  "No tickets found","該当するチケットがありません"
54
- "Order number","注文番号"
55
  "Priority","優先度"
56
  "High","高"
57
  "Low","低"
51
  "Group","グループ"
52
  "New Support Ticket","新規サポートチケット"
53
  "No tickets found","該当するチケットがありません"
54
+ "Order Number","注文番号"
55
  "Priority","優先度"
56
  "High","高"
57
  "Low","低"
app/locale/ko_KO/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","한국어 (Korean)"
2
+ "API Details","API 세부 정보"
3
+ "API Enabled","API 사용"
4
+ "API Token","API 토큰"
5
+ "API test connection failed","API 연결 테스트에 실패했습니다"
6
+ "API test connection successful","API 연결 테스트에 성공했습니다"
7
+ "API","API"
8
+ "Agent Email Address","상담원 이메일 주소"
9
+ "Agent Token","상담원 토큰"
10
+ "Are you sure you want to clear the entire Zendesk log?","전체 Zendesk 로그를 지우시겠습니까?"
11
+ "Assignee","담당자"
12
+ "Chat","채팅"
13
+ "Code to display Feedback Tab","피드백 탭을 표시하는 코드"
14
+ "Connection to Zendesk API failed","Zendesk API 연결에 실패했습니다"
15
+ "Connection to Zendesk API successful","Zendesk API 연결에 성공했습니다"
16
+ "Create Ticket","티켓 만들기"
17
+ "Create tickets from Contact Us form","사용자 문의 양식에서 티켓 만들기"
18
+ "Customize Feedback Tab","피드백 탭 사용자 지정"
19
+ "Dashboard","대시보드"
20
+ "Decide which features you would like turned on in your Magento store.","Magento 스토어에서 설정하고자 하는 기능을 결정합니다."
21
+ "Description","설명"
22
+ "Display link to Zendesk in Magento footer","Magento 바닥글에 Zendesk에 대한 링크 표시"
23
+ "Email","이메일"
24
+ "Facebook","페이스북"
25
+ "Features","기능"
26
+ "Feedback Tab","피드백 탭"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","파일 크기가 너무 커서 마지막 %s개 행만 표시합니다. 전체 파일을 검색하려면 다운로드를 클릭하십시오."
28
+ "General settings that are required to connect Zendesk and Magento.","Zendesk와 Magento를 연결하는 데 필요한 일반 설정입니다."
29
+ "General","일반"
30
+ "Generate","생성"
31
+ "Group","그룹"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","아직 Zendesk를 설정하지 않으셨습니까? 쉬운 설치 설명서를 따라 Zendesk를 설치하여 고객을 지원하십시오."
33
+ "High","높음"
34
+ "Incident","사건"
35
+ "Launch Zendesk","Zendesk 시작"
36
+ "Low","낮음"
37
+ "New Support Ticket","새 지원 티켓"
38
+ "New","신규"
39
+ "No tickets found","티켓을 찾을 수 없습니다"
40
+ "No views selected. Please select one or more from the settings page.","보기를 선택하지 않았습니다. 설정 페이지에서 하나 이상을 선택하십시오."
41
+ "Normal","보통"
42
+ "On-hold","대기"
43
+ "Open","등록"
44
+ "Order Number","주문 번호"
45
+ "Pending","보류"
46
+ "Priority","우선 순위"
47
+ "Problem","문제"
48
+ "Question","질문"
49
+ "Remote Authentication Token","원격 인증 토큰"
50
+ "Remote Authentication Token","원격 인증 토큰"
51
+ "Requested","요청"
52
+ "Requester Email","요청자 이메일"
53
+ "Requester Name","요청자 이름"
54
+ "Requester Website","요청자 웹사이트"
55
+ "Requester","요청자"
56
+ "Required for Magento App inside Zendesk to work.","Zendesk 내부 Magento 앱 작동을 위해 필요한 사항"
57
+ "Save Config","구성 저장"
58
+ "Settings","설정"
59
+ "Setup guide","설치 설명서"
60
+ "Setup","설정"
61
+ "Show support tickets on admin dashboard","관리자 대시보드에서 지원 티켓 표시"
62
+ "Show support tickets on customer view","고객 보기에서 지원 티켓 표시"
63
+ "Show support tickets on order view","주문 보기에서 지원 티켓 표시"
64
+ "Single Sign-on - Admins and Agents","관리자 및 상담원에 대한 통합 인증"
65
+ "Single Sign-on - End-users","최종 사용자에 대한 통합 인증"
66
+ "Single Sign-on Enabled","통합 인증 사용"
67
+ "Single Sign-on Enabled","통합 인증 사용"
68
+ "Solved","해결"
69
+ "Status","상태"
70
+ "Subject","제목"
71
+ "Successfully generated a new API token","성공적으로 새로운 API 토큰 생성"
72
+ "Support Channels","지원 채널"
73
+ "Support Tickets","지원 티켓"
74
+ "Task","작업"
75
+ "Test Connection","연결 테스트"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","Zendesk 로그 파일이 만들어지 않았습니다. 로깅이 활성화되었는지를 확인하십시오."
77
+ "Ticket #%s Created","티켓 #%s을(를) 만들었습니다"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","토큰을 생성하려면 Zendesk에 로그인한 후 관리 > 채널 > API > 토큰을 선택합니다."
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","문제 해결 방법에 대한 팁을 <a href="%s">%s</a>에서 제공합니다"
80
+ "Twitter","트위터"
81
+ "Type","유형"
82
+ "Updated","업데이트됨"
83
+ "Urgent","긴급"
84
+ "Use Magento to manage admin and agent authentication.","관리자 및 상담원 인증을 관리하려면 Magento를 사용하십시오."
85
+ "Use Magento to manage end-user authentication.","최종 사용자 인증을 관리하려면 Magento를 사용하십시오."
86
+ "Use Magento to manage user authentication.","사용자 인증을 관리하려면 Magento를 사용하십시오."
87
+ "Used to link order in Magento with tickets in Zendesk","Magento의 주문과 Zendesk의 티켓 연결에 사용됩니다."
88
+ "View All Tickets","모든 티켓 보기"
89
+ "View ticket in Zendesk","Zendesk의 티켓 보기"
90
+ "Views to show on dashboards","대시보드에 표시할 보기"
91
+ "Voice","음성"
92
+ "Web Portal","웹 포털"
93
+ "Zendesk Domain","Zendesk 도메인"
94
+ "Zendesk Log Viewer","Zendesk 로그 뷰어"
95
+ "Zendesk Order Number field ID","Zendesk 주문 번호 필드 ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO 토큰이 설정되지 않았습니다. Zendesk SSO 토큰을 설정 페이지에 추가하십시오."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk를 통해 고객들이 원하는 방법을 사용하여 귀사에 연락할수 있습니다. 사용하고자하는 채널을 구성하려면 아래 링크를 사용하십시오."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk 도메인이 설정되지 않았습니다. Zendesk 도메인을 설정 페이지에 추가하십시오."
app/locale/ko_KR/Zendesk_Zendesk.csv CHANGED
@@ -51,7 +51,7 @@
51
  "Group","그룹"
52
  "New Support Ticket","새 지원 티켓"
53
  "No tickets found","티켓을 찾을 수 없습니다"
54
- "Order number","주문 번호"
55
  "Priority","우선 순위"
56
  "High","높음"
57
  "Low","낮음"
51
  "Group","그룹"
52
  "New Support Ticket","새 지원 티켓"
53
  "No tickets found","티켓을 찾을 수 없습니다"
54
+ "Order Number","주문 번호"
55
  "Priority","우선 순위"
56
  "High","높음"
57
  "Low","낮음"
app/locale/nl_NL/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normaal"
42
  "On-hold","Geparkeerd"
43
  "Open","Open"
44
- "Order number","Ordernummer"
45
  "Pending","In afwachting"
46
  "Priority","Prioriteit"
47
  "Problem","Probleem"
41
  "Normal","Normaal"
42
  "On-hold","Geparkeerd"
43
  "Open","Open"
44
+ "Order Number","Ordernummer"
45
  "Pending","In afwachting"
46
  "Priority","Prioriteit"
47
  "Problem","Probleem"
app/locale/no_NO/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Norsk"
2
+ "API Details","API Details"
3
+ "API Enabled","API Enabled"
4
+ "API Token","API Token"
5
+ "API test connection failed","API test connection failed"
6
+ "API test connection successful","API test connection successful"
7
+ "API","API"
8
+ "Agent Email Address","Agent Email Address"
9
+ "Agent Token","Agent Token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Are you sure you want to clear the entire Zendesk log?"
11
+ "Assignee","Assignee"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Code to display Feedback Tab"
14
+ "Connection to Zendesk API failed","Connection to Zendesk API failed"
15
+ "Connection to Zendesk API successful","Connection to Zendesk API successful"
16
+ "Create Ticket","Create Ticket"
17
+ "Create tickets from Contact Us form","Create tickets from Contact Us form"
18
+ "Customize Feedback Tab","Customize Feedback Tab"
19
+ "Dashboard","Dashboard"
20
+ "Decide which features you would like turned on in your Magento store.","Decide which features you would like turned on in your Magento store."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Display link to Zendesk in Magento footer"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Features"
26
+ "Feedback Tab","Feedback Tab"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
28
+ "General settings that are required to connect Zendesk and Magento.","General settings that are required to connect Zendesk and Magento."
29
+ "General","General"
30
+ "Generate","Generate"
31
+ "Group","Group"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
33
+ "High","Høy"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Launch Zendesk"
36
+ "Low","Low"
37
+ "New Support Ticket","New Support Ticket"
38
+ "New","New"
39
+ "No tickets found","No tickets found"
40
+ "No views selected. Please select one or more from the settings page.","No views selected. Please select one or more from the settings page."
41
+ "Normal","Normal"
42
+ "On-hold","On-hold"
43
+ "Open","Open"
44
+ "Order Number","Order Number"
45
+ "Pending","Pending"
46
+ "Priority","Priority"
47
+ "Problem","Problem"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Remote Authentication Token"
50
+ "Remote Authentication Token","Remote Authentication Token"
51
+ "Requested","Requested"
52
+ "Requester Email","Requester Email"
53
+ "Requester Name","Requester Name"
54
+ "Requester Website","Requester Website"
55
+ "Requester","Requester"
56
+ "Required for Magento App inside Zendesk to work.","Required for Magento App inside Zendesk to work."
57
+ "Save Config","Save Config"
58
+ "Settings","Settings"
59
+ "Setup guide","Setup guide"
60
+ "Setup","Setup"
61
+ "Show support tickets on admin dashboard","Show support tickets on admin dashboard"
62
+ "Show support tickets on customer view","Show support tickets on customer view"
63
+ "Show support tickets on order view","Show support tickets on order view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on - Admins and Agents"
65
+ "Single Sign-on - End-users","Single Sign-on - End-users"
66
+ "Single Sign-on Enabled","Single Sign-on Enabled"
67
+ "Single Sign-on Enabled","Single Sign-on Enabled"
68
+ "Solved","Solved"
69
+ "Status","Status"
70
+ "Subject","Subject"
71
+ "Successfully generated a new API token","Successfully generated a new API token"
72
+ "Support Channels","Support Channels"
73
+ "Support Tickets","Support Tickets"
74
+ "Task","Task"
75
+ "Test Connection","Test Connection"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","The Zendesk log file has not been created. Check to see if logging has been enabled."
77
+ "Ticket #%s Created","Ticket #%s Created"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","To generate a token, log in to Zendesk then select Manage > Channels > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Troubleshooting tips can be found at <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Updated"
83
+ "Urgent","Urgent"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento to manage admin and agent authentication."
85
+ "Use Magento to manage end-user authentication.","Use Magento to manage end-user authentication."
86
+ "Use Magento to manage user authentication.","Use Magento to manage user authentication."
87
+ "Used to link order in Magento with tickets in Zendesk","Used to link order in Magento with tickets in Zendesk"
88
+ "View All Tickets","View All Tickets"
89
+ "View ticket in Zendesk","View ticket in Zendesk"
90
+ "Views to show on dashboards","Views to show on dashboards"
91
+ "Voice","Voice"
92
+ "Web Portal","Web Portal"
93
+ "Zendesk Domain","Zendesk Domain"
94
+ "Zendesk Log Viewer","Zendesk Log Viewer"
95
+ "Zendesk Order Number field ID","Zendesk Order Number field ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
app/locale/pt_BR/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Normal"
42
  "On-hold","Em espera"
43
  "Open","Aberto"
44
- "Order number","Número do pedido"
45
  "Pending","Pendente"
46
  "Priority","Prioridade"
47
  "Problem","Problema"
41
  "Normal","Normal"
42
  "On-hold","Em espera"
43
  "Open","Aberto"
44
+ "Order Number","Número do pedido"
45
  "Pending","Pendente"
46
  "Priority","Prioridade"
47
  "Problem","Problema"
app/locale/pt_PT/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Português (Portugal)"
2
+ "API Details","Detalhes de API"
3
+ "API Enabled","API ativada"
4
+ "API Token","Token da API"
5
+ "API test connection failed","Falha no teste de conexão da API"
6
+ "API test connection successful","Teste de conexão da API com êxito"
7
+ "API","API"
8
+ "Agent Email Address","Endereço de email do agente"
9
+ "Agent Token","Token de agente"
10
+ "Are you sure you want to clear the entire Zendesk log?","Tem certeza de que deseja limpar todo o registro do Zendesk?"
11
+ "Assignee","Atribuído"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Código para exibir Aba de ajuda"
14
+ "Connection to Zendesk API failed","Falha no teste da conexão da API do Zendesk"
15
+ "Connection to Zendesk API successful","Teste da conexão da API do Zendesk com êxito"
16
+ "Create Ticket","Criar ticket"
17
+ "Create tickets from Contact Us form","Criar tickets a partir do formulário Entre em contato conosco"
18
+ "Customize Feedback Tab","Personalizar Aba de ajuda"
19
+ "Dashboard","Painel de controle"
20
+ "Decide which features you would like turned on in your Magento store.","Decida quais recursos deseja ativar em sua loja Magento."
21
+ "Description","Descrição"
22
+ "Display link to Zendesk in Magento footer","Exibir link para o Zendesk no rodapé do Magento"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Características"
26
+ "Feedback Tab","Aba de ajuda"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","Tamanho de arquivo muito grande - exibindo apenas as últimas %s linhas. Clique em Baixar para recuperar todo o arquivo."
28
+ "General settings that are required to connect Zendesk and Magento.","Configurações gerais obrigatórias para conectar o Zendesk ao Magento."
29
+ "General","Geral"
30
+ "Generate","Gerar"
31
+ "Group","Grupo"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Ainda não configurou o Zendesk? Siga nosso guia de configuração fácil para começar a usar o Zendesk para dar suporte a seus clientes."
33
+ "High","Alta"
34
+ "Incident","Incidente"
35
+ "Launch Zendesk","Iniciar o Zendesk"
36
+ "Low","Baixa"
37
+ "New Support Ticket","Novo ticket de suporte"
38
+ "New","Novo"
39
+ "No tickets found","Nenhum ticket foi encontrado"
40
+ "No views selected. Please select one or more from the settings page.","Nenhuma visualização selecionada. Selecione uma ou mais da página de configurações."
41
+ "Normal","Normal"
42
+ "On-hold","Em espera"
43
+ "Open","Aberto"
44
+ "Order Number","Número do pedido"
45
+ "Pending","Pendente"
46
+ "Priority","Prioridade"
47
+ "Problem","Problema"
48
+ "Question","Pergunta"
49
+ "Remote Authentication Token","Token de autenticação remota"
50
+ "Remote Authentication Token","Token de autenticação remota"
51
+ "Requested","Solicitado"
52
+ "Requester Email","Email do solicitante"
53
+ "Requester Name","Nome do solicitante"
54
+ "Requester Website","Website do solicitante"
55
+ "Requester","Solicitante"
56
+ "Required for Magento App inside Zendesk to work.","Obrigatório para que o aplicativo do Magento no Zendesk funcione."
57
+ "Save Config","Salvar configurações"
58
+ "Settings","Configurações"
59
+ "Setup guide","Guia de configuração"
60
+ "Setup","Configuração"
61
+ "Show support tickets on admin dashboard","Exibir tickets de suporte no painel de informações"
62
+ "Show support tickets on customer view","Mostrar tickets de suporte na visualização do cliente"
63
+ "Show support tickets on order view","Mostrar tickets de suporte na visualização de pedidos"
64
+ "Single Sign-on - Admins and Agents","Single Sign-On Ativado"
65
+ "Single Sign-on - End-users","Single Sign-on - Usuários finais"
66
+ "Single Sign-on Enabled","Single Sign-On habilitado"
67
+ "Single Sign-on Enabled","Single Sign-On habilitado"
68
+ "Solved","Resolvido"
69
+ "Status","Status"
70
+ "Subject","Assunto"
71
+ "Successfully generated a new API token","Token da API gerado com êxito"
72
+ "Support Channels","Canais de suporte"
73
+ "Support Tickets","Tickets de suporte"
74
+ "Task","Tarefa"
75
+ "Test Connection","Testar conexão"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","O arquivo do registro do Zendesk não foi criado. Verifique se o registro foi habilitado."
77
+ "Ticket #%s Created","Ticket #%s criado"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","Para gerar um token, faça login no Zendesk e selecione Gerir > Canais > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","As dicas para solução de problemas podem ser encontradas em <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Tipo"
82
+ "Updated","Atualizado"
83
+ "Urgent","Urgente"
84
+ "Use Magento to manage admin and agent authentication.","Use o Magento para gerenciar a autenticação de administrador e de agente."
85
+ "Use Magento to manage end-user authentication.","Use o Magento para gerenciar a autenticação de usuário final."
86
+ "Use Magento to manage user authentication."," Use o Magento para gerir a autenticação de utilizadores."
87
+ "Used to link order in Magento with tickets in Zendesk","Usado para vincular o pedido no Magento com tickets no Zendesk"
88
+ "View All Tickets","Visualizar todos os tickets"
89
+ "View ticket in Zendesk","Visualizar ticket no Zendesk"
90
+ "Views to show on dashboards","Visualizações a serem exibidas nos painéis de informação"
91
+ "Voice","Voice"
92
+ "Web Portal","Portal web"
93
+ "Zendesk Domain","Domínio Zendesk"
94
+ "Zendesk Log Viewer","Visualizador de registro do Zendesk"
95
+ "Zendesk Order Number field ID","ID do campo número do pedido do Zendesk"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","O token do Zendesk SSO não foi configurado. Adicione-o à página de configurações."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","O Zendesk permite que seus clientes entrem em contato com você usando o método que eles preferirem. Use os links abaixo para configurar os canais que você deseja usar."
98
+ "Zendesk domain not set. Please add this to the settings page.","Domínio Zendesk não configurado. Adicione-o à página de configurações."
app/locale/ru_RU/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","Нормальный"
42
  "On-hold","На удержании"
43
  "Open","Открыт"
44
- "Order number","Номер заказа"
45
  "Pending","В ожидании"
46
  "Priority","Приоритет"
47
  "Problem","Проблема"
41
  "Normal","Нормальный"
42
  "On-hold","На удержании"
43
  "Open","Открыт"
44
+ "Order Number","Номер заказа"
45
  "Pending","В ожидании"
46
  "Priority","Приоритет"
47
  "Problem","Проблема"
app/locale/sv_SV/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Svenska"
2
+ "API Details","API Details"
3
+ "API Enabled","API Enabled"
4
+ "API Token","API Token"
5
+ "API test connection failed","API test connection failed"
6
+ "API test connection successful","API test connection successful"
7
+ "API","API"
8
+ "Agent Email Address","Agent E-post Adress"
9
+ "Agent Token","Agent Token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Are you sure you want to clear the entire Zendesk log?"
11
+ "Assignee","Assignee"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Code to display Feedback Tab"
14
+ "Connection to Zendesk API failed","Connection to Zendesk API failed"
15
+ "Connection to Zendesk API successful","Connection to Zendesk API successful"
16
+ "Create Ticket","Create Ticket"
17
+ "Create tickets from Contact Us form","Create tickets from Contact Us form"
18
+ "Customize Feedback Tab","Customize Feedback Tab"
19
+ "Dashboard","Dashboard"
20
+ "Decide which features you would like turned on in your Magento store.","Decide which features you would like turned on in your Magento store."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Display link to Zendesk in Magento footer"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Funktioner"
26
+ "Feedback Tab","Feedback Tab"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
28
+ "General settings that are required to connect Zendesk and Magento.","Allmänna inställningar som är krävs för att koppla ihop Zendesk och Magento."
29
+ "General","Allmänt"
30
+ "Generate","Generate"
31
+ "Group","Group"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
33
+ "High","High"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Launch Zendesk"
36
+ "Low","Low"
37
+ "New Support Ticket","New Support Ticket"
38
+ "New","New"
39
+ "No tickets found","No tickets found"
40
+ "No views selected. Please select one or more from the settings page.","No views selected. Please select one or more from the settings page."
41
+ "Normal","Normal"
42
+ "On-hold","On-hold"
43
+ "Open","Open"
44
+ "Order Number","Order Number"
45
+ "Pending","Pending"
46
+ "Priority","Priority"
47
+ "Problem","Problem"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Remote Authentication Token"
50
+ "Remote Authentication Token","Remote Authentication Token"
51
+ "Requested","Requested"
52
+ "Requester Email","Requester Email"
53
+ "Requester Name","Requester Name"
54
+ "Requester Website","Requester Website"
55
+ "Requester","Requester"
56
+ "Required for Magento App inside Zendesk to work.","Required for Magento App inside Zendesk to work."
57
+ "Save Config","Save Config"
58
+ "Settings","Settings"
59
+ "Setup guide","Setup guide"
60
+ "Setup","Setup"
61
+ "Show support tickets on admin dashboard","Show support tickets on admin dashboard"
62
+ "Show support tickets on customer view","Show support tickets on customer view"
63
+ "Show support tickets on order view","Show support tickets on order view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on Aktiverat"
65
+ "Single Sign-on - End-users","Single Sign-on - End-users"
66
+ "Single Sign-on Enabled","Single Sign-on Enabled"
67
+ "Single Sign-on Enabled","Single Sign-on Enabled"
68
+ "Solved","Solved"
69
+ "Status","Status"
70
+ "Subject","Subject"
71
+ "Successfully generated a new API token","Successfully generated a new API token"
72
+ "Support Channels","Support Channels"
73
+ "Support Tickets","Support Tickets"
74
+ "Task","Task"
75
+ "Test Connection","Test Connection"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","The Zendesk log file has not been created. Check to see if logging has been enabled."
77
+ "Ticket #%s Created","Ticket #%s Created"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","För att generera ett token loggar du in i Zendesk och väljer Hantera > Kanaler > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Troubleshooting tips can be found at <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Updated"
83
+ "Urgent","Urgent"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento to manage admin and agent authentication."
85
+ "Use Magento to manage end-user authentication.","Use Magento to manage end-user authentication."
86
+ "Use Magento to manage user authentication.","Använd Magento för att hantera användarautentisering. "
87
+ "Used to link order in Magento with tickets in Zendesk","Used to link order in Magento with tickets in Zendesk"
88
+ "View All Tickets","View All Tickets"
89
+ "View ticket in Zendesk","View ticket in Zendesk"
90
+ "Views to show on dashboards","Views to show on dashboards"
91
+ "Voice","Voice"
92
+ "Web Portal","Web Portal"
93
+ "Zendesk Domain","Zendesk Domän"
94
+ "Zendesk Log Viewer","Zendesk Log Viewer"
95
+ "Zendesk Order Number field ID","Zendesk Order Number field ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
app/locale/tr_TR/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Türkçe"
2
+ "API Details","API Details"
3
+ "API Enabled","API Enabled"
4
+ "API Token","API Token"
5
+ "API test connection failed","API test connection failed"
6
+ "API test connection successful","API test connection successful"
7
+ "API","API"
8
+ "Agent Email Address","Agent Email Address"
9
+ "Agent Token","Agent Token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Are you sure you want to clear the entire Zendesk log?"
11
+ "Assignee","Assignee"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Code to display Feedback Tab"
14
+ "Connection to Zendesk API failed","Connection to Zendesk API failed"
15
+ "Connection to Zendesk API successful","Connection to Zendesk API successful"
16
+ "Create Ticket","Create Ticket"
17
+ "Create tickets from Contact Us form","Create tickets from Contact Us form"
18
+ "Customize Feedback Tab","Customize Feedback Tab"
19
+ "Dashboard","Dashboard"
20
+ "Decide which features you would like turned on in your Magento store.","Decide which features you would like turned on in your Magento store."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Display link to Zendesk in Magento footer"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Features"
26
+ "Feedback Tab","Feedback Tab"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
28
+ "General settings that are required to connect Zendesk and Magento.","General settings that are required to connect Zendesk and Magento."
29
+ "General","General"
30
+ "Generate","Generate"
31
+ "Group","Group"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
33
+ "High","High"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Launch Zendesk"
36
+ "Low","Low"
37
+ "New Support Ticket","New Support Ticket"
38
+ "New","New"
39
+ "No tickets found","No tickets found"
40
+ "No views selected. Please select one or more from the settings page.","No views selected. Please select one or more from the settings page."
41
+ "Normal","Normal"
42
+ "On-hold","On-hold"
43
+ "Open","Open"
44
+ "Order Number","Order Number"
45
+ "Pending","Pending"
46
+ "Priority","Priority"
47
+ "Problem","Problem"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Remote Authentication Token"
50
+ "Remote Authentication Token","Remote Authentication Token"
51
+ "Requested","Requested"
52
+ "Requester Email","Requester Email"
53
+ "Requester Name","Requester Name"
54
+ "Requester Website","Requester Website"
55
+ "Requester","Requester"
56
+ "Required for Magento App inside Zendesk to work.","Required for Magento App inside Zendesk to work."
57
+ "Save Config","Save Config"
58
+ "Settings","Settings"
59
+ "Setup guide","Setup guide"
60
+ "Setup","Setup"
61
+ "Show support tickets on admin dashboard","Show support tickets on admin dashboard"
62
+ "Show support tickets on customer view","Show support tickets on customer view"
63
+ "Show support tickets on order view","Show support tickets on order view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on - Admins and Agents"
65
+ "Single Sign-on - End-users","Single Sign-on - End-users"
66
+ "Single Sign-on Enabled","Single Sign-on Enabled"
67
+ "Single Sign-on Enabled","Single Sign-on Enabled"
68
+ "Solved","Solved"
69
+ "Status","Status"
70
+ "Subject","Subject"
71
+ "Successfully generated a new API token","Successfully generated a new API token"
72
+ "Support Channels","Support Channels"
73
+ "Support Tickets","Support Tickets"
74
+ "Task","Task"
75
+ "Test Connection","Test Connection"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","The Zendesk log file has not been created. Check to see if logging has been enabled."
77
+ "Ticket #%s Created","Ticket #%s Created"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","To generate a token, log in to Zendesk then select Manage > Channels > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Troubleshooting tips can be found at <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Updated"
83
+ "Urgent","Urgent"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento to manage admin and agent authentication."
85
+ "Use Magento to manage end-user authentication.","Use Magento to manage end-user authentication."
86
+ "Use Magento to manage user authentication.","Use Magento to manage user authentication."
87
+ "Used to link order in Magento with tickets in Zendesk","Used to link order in Magento with tickets in Zendesk"
88
+ "View All Tickets","View All Tickets"
89
+ "View ticket in Zendesk","View ticket in Zendesk"
90
+ "Views to show on dashboards","Views to show on dashboards"
91
+ "Voice","Voice"
92
+ "Web Portal","Web Portal"
93
+ "Zendesk Domain","Zendesk Domain"
94
+ "Zendesk Log Viewer","Zendesk Log Viewer"
95
+ "Zendesk Order Number field ID","Zendesk Order Number field ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
app/locale/uk_UK/Zendesk_Zendesk.csv ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "English","Українська"
2
+ "API Details","API Details"
3
+ "API Enabled","API Enabled"
4
+ "API Token","API Token"
5
+ "API test connection failed","API test connection failed"
6
+ "API test connection successful","API test connection successful"
7
+ "API","API"
8
+ "Agent Email Address","Agent Email Address"
9
+ "Agent Token","Agent Token"
10
+ "Are you sure you want to clear the entire Zendesk log?","Are you sure you want to clear the entire Zendesk log?"
11
+ "Assignee","Assignee"
12
+ "Chat","Chat"
13
+ "Code to display Feedback Tab","Code to display Feedback Tab"
14
+ "Connection to Zendesk API failed","Connection to Zendesk API failed"
15
+ "Connection to Zendesk API successful","Connection to Zendesk API successful"
16
+ "Create Ticket","Create Ticket"
17
+ "Create tickets from Contact Us form","Create tickets from Contact Us form"
18
+ "Customize Feedback Tab","Customize Feedback Tab"
19
+ "Dashboard","Dashboard"
20
+ "Decide which features you would like turned on in your Magento store.","Decide which features you would like turned on in your Magento store."
21
+ "Description","Description"
22
+ "Display link to Zendesk in Magento footer","Display link to Zendesk in Magento footer"
23
+ "Email","Email"
24
+ "Facebook","Facebook"
25
+ "Features","Features"
26
+ "Feedback Tab","Feedback Tab"
27
+ "File size too large - only showing the last %s lines. Click Download to retrieve the entire file.","File size too large - only showing the last %s lines. Click Download to retrieve the entire file."
28
+ "General settings that are required to connect Zendesk and Magento.","General settings that are required to connect Zendesk and Magento."
29
+ "General","General"
30
+ "Generate","Generate"
31
+ "Group","Group"
32
+ "Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers.","Haven't setup Zendesk yet? Follow our easy setup guide to start using Zendesk to support your customers."
33
+ "High","High"
34
+ "Incident","Incident"
35
+ "Launch Zendesk","Launch Zendesk"
36
+ "Low","Low"
37
+ "New Support Ticket","New Support Ticket"
38
+ "New","New"
39
+ "No tickets found","No tickets found"
40
+ "No views selected. Please select one or more from the settings page.","No views selected. Please select one or more from the settings page."
41
+ "Normal","Normal"
42
+ "On-hold","On-hold"
43
+ "Open","Open"
44
+ "Order Number","Order Number"
45
+ "Pending","Pending"
46
+ "Priority","Priority"
47
+ "Problem","Problem"
48
+ "Question","Question"
49
+ "Remote Authentication Token","Remote Authentication Token"
50
+ "Remote Authentication Token","Remote Authentication Token"
51
+ "Requested","Requested"
52
+ "Requester Email","Requester Email"
53
+ "Requester Name","Requester Name"
54
+ "Requester Website","Requester Website"
55
+ "Requester","Requester"
56
+ "Required for Magento App inside Zendesk to work.","Required for Magento App inside Zendesk to work."
57
+ "Save Config","Save Config"
58
+ "Settings","Settings"
59
+ "Setup guide","Setup guide"
60
+ "Setup","Setup"
61
+ "Show support tickets on admin dashboard","Show support tickets on admin dashboard"
62
+ "Show support tickets on customer view","Show support tickets on customer view"
63
+ "Show support tickets on order view","Show support tickets on order view"
64
+ "Single Sign-on - Admins and Agents","Single Sign-on - Admins and Agents"
65
+ "Single Sign-on - End-users","Single Sign-on - End-users"
66
+ "Single Sign-on Enabled","Single Sign-on Enabled"
67
+ "Single Sign-on Enabled","Single Sign-on Enabled"
68
+ "Solved","Solved"
69
+ "Status","Status"
70
+ "Subject","Subject"
71
+ "Successfully generated a new API token","Successfully generated a new API token"
72
+ "Support Channels","Support Channels"
73
+ "Support Tickets","Support Tickets"
74
+ "Task","Task"
75
+ "Test Connection","Test Connection"
76
+ "The Zendesk log file has not been created. Check to see if logging has been enabled.","The Zendesk log file has not been created. Check to see if logging has been enabled."
77
+ "Ticket #%s Created","Ticket #%s Created"
78
+ "To generate a token, log in to Zendesk then select Manage > Channels > API > Token","To generate a token, log in to Zendesk then select Manage > Channels > API > Token"
79
+ "Troubleshooting tips can be found at <a href="%s">%s</a>","Troubleshooting tips can be found at <a href="%s">%s</a>"
80
+ "Twitter","Twitter"
81
+ "Type","Type"
82
+ "Updated","Updated"
83
+ "Urgent","Urgent"
84
+ "Use Magento to manage admin and agent authentication.","Use Magento to manage admin and agent authentication."
85
+ "Use Magento to manage end-user authentication.","Use Magento to manage end-user authentication."
86
+ "Use Magento to manage user authentication.","Use Magento to manage user authentication."
87
+ "Used to link order in Magento with tickets in Zendesk","Used to link order in Magento with tickets in Zendesk"
88
+ "View All Tickets","View All Tickets"
89
+ "View ticket in Zendesk","View ticket in Zendesk"
90
+ "Views to show on dashboards","Views to show on dashboards"
91
+ "Voice","Voice"
92
+ "Web Portal","Web Portal"
93
+ "Zendesk Domain","Zendesk Domain"
94
+ "Zendesk Log Viewer","Zendesk Log Viewer"
95
+ "Zendesk Order Number field ID","Zendesk Order Number field ID"
96
+ "Zendesk SSO token not been set. Please add this to the settings page.","Zendesk SSO token not been set. Please add this to the settings page."
97
+ "Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use.","Zendesk allows your customers to contact you using the methods they prefer. Use the links below to configure the channels you would like to use."
98
+ "Zendesk domain not set. Please add this to the settings page.","Zendesk domain not set. Please add this to the settings page."
app/locale/zh_CN/Zendesk_Zendesk.csv CHANGED
File without changes
app/locale/zh_TW/Zendesk_Zendesk.csv CHANGED
@@ -41,7 +41,7 @@
41
  "Normal","正常"
42
  "On-hold","暫停"
43
  "Open","已開啟"
44
- "Order number","訂單號碼"
45
  "Pending","未決"
46
  "Priority","優先等級"
47
  "Problem","事故"
41
  "Normal","正常"
42
  "On-hold","暫停"
43
  "Open","已開啟"
44
+ "Order Number","訂單號碼"
45
  "Pending","未決"
46
  "Priority","優先等級"
47
  "Problem","事故"
js/zendesk/validation.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Validation.addAllThese([
2
+ ['validate-zendesk-sso-token', 'Token cannot be empty', function (v) {
3
+ if ($('zendesk_sso_enabled').getValue() === '1') {
4
+ return !Validation.get('IsEmpty').test(v);
5
+ } else {
6
+ return true;
7
+ }
8
+ }],
9
+ ['validate-zendesk-sso-frontend-token', 'Token cannot be empty', function (v) {
10
+ if ($('zendesk_sso_frontend_enabled').getValue() === '1') {
11
+ return !Validation.get('IsEmpty').test(v);
12
+ } else {
13
+ return true;
14
+ }
15
+ }]
16
+ ]);
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>zendesk</name>
4
- <version>1.3.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</license>
7
  <channel>community</channel>
@@ -9,36 +9,23 @@
9
  <summary>Zendesk helps you deliver the best customer support to your customers.</summary>
10
  <description>Zendesk is the market leader of smart, agile and convenient cloud-based customer support software. For growing organizations, Zendesk is the fastest way to enable great customer service.&#xD;
11
  &#xD;
12
- This extension makes Zendesk work seamlessly with Magento to enable stores to deliver great customer support. &#xD;
13
  &#xD;
14
  Features include:&#xD;
15
  - Enable Single Sign-on for Magento administrators&#xD;
16
  - Create support tickets without leaving Magento&#xD;
17
- - Display relevant support tickets on order &amp; customer dashboards&#xD;
18
  - Create support tickets from Contact Us requests&#xD;
19
  - Easily add a feedback tab to your site</description>
20
- <notes>Fix getModuleDir error for JWT.&#xD;
21
- Fix Typing error on ApiController.php.&#xD;
22
- Fix Invalid parameter for parent::getBackUrl(). Renamed method to getZdBackUrl().&#xD;
23
- Fix for 'Invalid block type: Mage_Adminhtml_Block_Empty_Edit_Form'.&#xD;
24
- Fix Strip slashes from the request header since some servers will escape quotes.&#xD;
25
- Fix ACL Children ordering for Zendesk backend menu.&#xD;
26
- Fix ACL to allow Roles to add the Zendesk Menu to Non Full Access Users.&#xD;
27
- Updated README.md to include SSO URLs.&#xD;
28
- Added Composer JSON.&#xD;
29
- Added new translations in locales and improvements for yml. &#xD;
30
- Added modman config.&#xD;
31
- Added check for Authorization header.&#xD;
32
- Added logging viewer via backend.&#xD;
33
- Added new SSO functionality for end-user and agents.&#xD;
34
- Added connection checks for APIs.&#xD;
35
- Added logout method for admin SSO.&#xD;
36
- Added troubleshooting link to test responses.&#xD;
37
- Added Permissions check to the left menu to match the main dropdown menu.</notes>
38
  <authors><author><name>Jason Smale</name><user>zendesk</user><email>jsmale@zendesk.com</email></author></authors>
39
- <date>2014-01-21</date>
40
- <time>16:22:48</time>
41
- <contents><target name="magecommunity"><dir name="Zendesk"><dir name="Zendesk"><dir name="Block"><dir name="Adminhtml"><dir name="Config"><dir name="Buttons"><file name="Generate.php" hash="7fa35e3e71b4bfb94f2dceddb19e86a0"/><file name="MagentoTest.php" hash="005323c12510f8ac07b46bede8df6349"/><file name="Signup.php" hash="f0d9ec9bc9a99f8643f1c2e6ac9989f2"/><file name="ZendeskTest.php" hash="83b67b5e66f8a9757ec424a72121133c"/></dir><file name="Link.php" hash="779827427e11db311b6e1de9d42818f2"/></dir><dir name="Create"><dir name="Edit"><file name="Form.php" hash="fce297c645bb4bcc5433f317500aff96"/></dir><file name="Edit.php" hash="aeebba5b9e0a5ea1b14022b9522cdff8"/></dir><dir name="Dashboard"><file name="Grids.php" hash="5b733e8b0f1e9c555619ff37f909bc00"/><dir name="Tab"><file name="View.php" hash="7d98b1f871626a4e783a9dd82bb4ea24"/></dir></dir><file name="Dashboard.php" hash="cd58a68d5a8cb2f3814426598ef016c3"/><file name="Log.php" hash="da85421d71f2e50c1ef2384eedd5688a"/><file name="Menu.php" hash="ceb245a4ee23c65c828add89402d411b"/><dir name="Order"><dir name="View"><file name="Tickets.php" hash="a83a2ad42801ddbddad2d761779a597b"/></dir><file name="View.php" hash="db944df25b671288ad9e04d699653a19"/></dir></dir><file name="Supporttab.php" hash="4c5cbb2a18827045a3d0989ccb878733"/></dir><dir name="Helper"><file name="Data.php" hash="c1c7d21a04a472202d7e7639aa7837e5"/><file name="JWT.php" hash="6610b92191eccedb8edcf993730c3dc0"/><file name="Log.php" hash="358c44a7a478dc6166208eb59ccd53fb"/></dir><file name="LICENSE.txt" hash="d9922043f61f536de5d4d7af831e7f73"/><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="b35882c9a98dcb83274108b756e86b35"/><file name="Requesters.php" hash="24eeb10f3eb80c15915af3fd50506e38"/><file name="Tickets.php" hash="f878859ca5bcac3e2abe7d307ce4fd20"/><file name="Users.php" hash="e32a46ad0ec07f4bb7903eb2021f218c"/><file name="Views.php" hash="3cf9eedc651389599a4fe5e5ecfbeebe"/></dir><file name="Observer.php" hash="a745f0ebef9f5a3f203914b55a7854b8"/><dir name="Source"><file name="Views.php" hash="1c7527338bf40082016a62e45fe44622"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ZendeskController.php" hash="f3f80df11af38281ed9f7768d9631220"/></dir><file name="ApiController.php" hash="7c57ba9909861206336c70abd5fd7b44"/><file name="IndexController.php" hash="a9c590f951f294d3641c29bd98b6834c"/><file name="SsoController.php" hash="e3511e9defb1606052354d635dfa6482"/></dir><dir name="etc"><file name="config.xml" hash="f5fef0bd1916b26284a90a1ad275ee14"/><file name="system.xml" hash="8f702b12efcb5a89336780796489ff47"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Zendesk_Zendesk.xml" hash="a630cf18c788dafb70d4c156a33eaa07"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="zendesk.xml" hash="6854919cf22eac3d9245e098973e1216"/></dir><dir name="template"><dir name="zendesk"><file name="autocomplete.phtml" hash="01f42e0bbe3337c058ebc0a8832ddca9"/><dir name="config"><file name="button-generate.phtml" hash="21a25898c1fdea93d31b02ae91c1dd6f"/><file name="button-signup.phtml" hash="8871a0aa0bad7f85a7419853db8e0ce4"/><file name="button-test-magento.phtml" hash="5ab9e6e2ee5ba70b02e1437e23f3018e"/><file name="button-test-zendesk.phtml" hash="9e9311af0d1ab1d304688656912021bc"/><file name="link.phtml" hash="ce55d65900113183e770b2905a31b0eb"/></dir><dir name="customer"><file name="tickets.phtml" hash="e417ed76cee982be652dfe858822a26a"/></dir><dir name="dashboard"><file name="empty.phtml" hash="d0c30af25f17ff45215d210b48063a46"/><file name="index.phtml" hash="ac71050399d3789d2d4217472bc726cf"/><dir name="tabs"><file name="view.phtml" hash="64e0edada0c03972bc57afdd9ff70c4d"/></dir></dir><file name="left-menu.phtml" hash="01c5d4430e47159e3e3d072db932e813"/><dir name="log"><file name="index.phtml" hash="c54c187ce5f09da6f56078cbfdf3ca29"/></dir><dir name="order"><file name="tickets.phtml" hash="c12ae3af7d9591af53f7c6f910a9a438"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="zendesk.xml" hash="5aefda9b293f1a8c9384c9c98a4c70b2"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="zendesk"><file name="button.png" hash="58e62edb7f4be46e3b29c0bb774c7ad7"/><file name="icon.png" hash="b5bfce535c987d1e9e604823ac4b3943"/><file name="zendesk-tab.png" hash="0f322d15c392528c212d6491732bc133"/><file name="zendesk.css" hash="454aaabc787598a2ee2db5dd48f8ed96"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Zendesk_Zendesk.csv" hash="79a3b5867e79bc846d33923793af5a67"/></dir><dir name="en_US"><file name="Zendesk_Zendesk.csv" hash="ac68a8bbf18cc4dd69a71f9670febaa9"/></dir><dir name="es_ES"><file name="Zendesk_Zendesk.csv" hash="915587dda3fac2287e4dcf4f72aa3338"/></dir><dir name="fr_FR"><file name="Zendesk_Zendesk.csv" hash="3a04b6308b0ab6d975a9de9b1bee0f41"/></dir><dir name="it_IT"><file name="Zendesk_Zendesk.csv" hash="ab36a69452663003075e22feaa17f131"/></dir><dir name="ja_JP"><file name="Zendesk_Zendesk.csv" hash="71de6c4043003e0cfc0ac8f03fb71a31"/></dir><dir name="ko_KR"><file name="Zendesk_Zendesk.csv" hash="f1ab32c6d8eb2e4486a7dbfb8d1e1abc"/></dir><dir name="nl_NL"><file name="Zendesk_Zendesk.csv" hash="086d758a40f15b5568a33ce95a5401ea"/></dir><dir name="pt_BR"><file name="Zendesk_Zendesk.csv" hash="f9e62c6e45875a1ab139179d43eaf4a0"/></dir><dir name="ru_RU"><file name="Zendesk_Zendesk.csv" hash="75b570f3dfc06158398ec48f7989f6da"/></dir><dir name="zh_CN"><file name="Zendesk_Zendesk.csv" hash="c8bfa3b4398c99ec8fd498b1635be1db"/></dir><dir name="zh_TW"><file name="Zendesk_Zendesk.csv" hash="f078574e7e5a170d2083226ee9ab053b"/></dir></target></contents>
42
  <compatible/>
43
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
44
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>zendesk</name>
4
+ <version>1.4.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</license>
7
  <channel>community</channel>
9
  <summary>Zendesk helps you deliver the best customer support to your customers.</summary>
10
  <description>Zendesk is the market leader of smart, agile and convenient cloud-based customer support software. For growing organizations, Zendesk is the fastest way to enable great customer service.&#xD;
11
  &#xD;
12
+ This extension makes Zendesk work seamlessly with Magento to enable stores to deliver great customer support.&#xD;
13
  &#xD;
14
  Features include:&#xD;
15
  - Enable Single Sign-on for Magento administrators&#xD;
16
  - Create support tickets without leaving Magento&#xD;
17
+ - Display relevant support tickets on order &amp;amp; customer dashboards&#xD;
18
  - Create support tickets from Contact Us requests&#xD;
19
  - Easily add a feedback tab to your site</description>
20
+ <notes>Replace Feedback Tab with Web Widget&#xD;
21
+ Set raw body also for PUT requests&#xD;
22
+ Add headers param to API calls, auto-detect JSON for encoding to raw data, prevent exceptions caused by logging non UTF-8 data&#xD;
23
+ Redirect to login page if trying to access tickets list in customer account while logged out&#xD;
24
+ Various bug fixes (SSO, better debugging &amp; validation)</notes>
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  <authors><author><name>Jason Smale</name><user>zendesk</user><email>jsmale@zendesk.com</email></author></authors>
26
+ <date>2015-04-10</date>
27
+ <time>07:22:50</time>
28
+ <contents><target name="mageetc"><dir name="modules"><file name="Zendesk_Zendesk.xml" hash="a630cf18c788dafb70d4c156a33eaa07"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="zendesk.xml" hash="b824f0f7099d22a7f1c0a31d83cd9efc"/></dir><dir name="template"><dir name="zendesk"><file name="autocomplete.phtml" hash="01f42e0bbe3337c058ebc0a8832ddca9"/><dir name="config"><file name="button-generate.phtml" hash="21a25898c1fdea93d31b02ae91c1dd6f"/><file name="button-signup.phtml" hash="8871a0aa0bad7f85a7419853db8e0ce4"/><file name="button-sync.phtml" hash="0a79ffa3cb7021e2883844d37133af3e"/><file name="button-test-magento.phtml" hash="e86287ab32a2ee29ce44aad62249bcab"/><file name="button-test-zendesk.phtml" hash="434623e895e3044fe826639824f90dc9"/><file name="link.phtml" hash="ce55d65900113183e770b2905a31b0eb"/></dir><dir name="create"><file name="customer.phtml" hash="4195705109186f619780613f31d3799d"/><file name="order.phtml" hash="6565383d06a6428ce91238d90a1a0a1a"/></dir><dir name="customer"><file name="tickets.phtml" hash="bb86da828b1f8837b3e8d7e3df8be06e"/></dir><dir name="dashboard"><file name="empty.phtml" hash="d0c30af25f17ff45215d210b48063a46"/><file name="index.phtml" hash="2ea21311d37450c55adff7b44601f00b"/></dir><file name="left-menu.phtml" hash="51913c4c343c7e751324651e8f0efbae"/><dir name="log"><file name="index.phtml" hash="c54c187ce5f09da6f56078cbfdf3ca29"/></dir><dir name="order"><file name="tickets.phtml" hash="4fe433f11c40708b0eb56aef5b0ce663"/></dir><dir name="tickets"><file name="tickets.phtml" hash="fc60966507ec30a2521413cb9b998770"/></dir><file name="translations.phtml" hash="663af777fa809b84ea9001afa740109f"/><dir name="widget"><file name="grid.phtml" hash="5e7beb2c7e37c9efe225ea3e80f1ffd7"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="zendesk.xml" hash="2f3d419fe38e683597cdbe1664e4490f"/></dir><dir name="template"><dir name="zendesk"><dir name="customer"><dir name="tickets"><file name="list.phtml" hash="70faead25efe6e55d4e45d0923ba55e2"/></dir><file name="tickets.phtml" hash="1a33c2429f13b16a98225b43e345ac37"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="zendesk"><file name="button.png" hash="58e62edb7f4be46e3b29c0bb774c7ad7"/><file name="icon.png" hash="b5bfce535c987d1e9e604823ac4b3943"/><file name="zendesk-tab.png" hash="0f322d15c392528c212d6491732bc133"/><file name="zendesk.css" hash="0ebc697c77767467aaeceacefaa2d1a5"/></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="zendesk"><file name="validation.js" hash="488b2fe21b2d34ce0814815e745771a0"/></dir></dir></target><target name="magecommunity"><dir name="Zendesk"><dir name="Zendesk"><dir name="Block"><dir name="Adminhtml"><dir name="Config"><dir name="Buttons"><file name="Generate.php" hash="7fa35e3e71b4bfb94f2dceddb19e86a0"/><file name="MagentoTest.php" hash="005323c12510f8ac07b46bede8df6349"/><file name="Signup.php" hash="f0d9ec9bc9a99f8643f1c2e6ac9989f2"/><file name="Sync.php" hash="d561b6fcbf69d284e866113e7d9afd44"/><file name="ZendeskTest.php" hash="83b67b5e66f8a9757ec424a72121133c"/></dir><file name="Link.php" hash="779827427e11db311b6e1de9d42818f2"/></dir><dir name="Create"><dir name="Customer"><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="4c599ec0b7210b32733318ca40b403f1"/></dir></dir><file name="Grid.php" hash="d5da59c8bd8f939a578d776648a1920c"/></dir><file name="Customer.php" hash="5dfc10a90b94a32d5b9af8c56dd76e41"/><dir name="Edit"><file name="Form.php" hash="c94acf32924a5140edeef7eae238aa4e"/></dir><file name="Edit.php" hash="07f7737751db6cbd8b2cda75ee637645"/><dir name="Order"><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="7e9aa2cbd5600865fc77ce35fd6cb73a"/></dir></dir><file name="Grid.php" hash="0e4f085158ce9cc9d3566411b80d4592"/></dir><file name="Order.php" hash="74566cabf111cded79f3f494a65111ae"/></dir><dir name="Dashboard"><file name="Grids.php" hash="d0cf137ab733f4f8fa0ebf79be05b990"/><dir name="Tab"><dir name="Tickets"><dir name="Grid"><file name="Abstract.php" hash="7403aac1c3eb52e25aef0ec2e989836f"/><file name="All.php" hash="b545bedb568c6ce6fe2696197b1729f5"/><file name="Massaction.php" hash="9d3ba44e00b40f4585e167c200b4bfa6"/><dir name="Renderer"><file name="Action.php" hash="53a3b787e3f473a86bd896a0f8d7992e"/><file name="Email.php" hash="3fec2a42ee9c3c39fa159ccd7155389c"/><file name="Group.php" hash="814178c8eabb9d8444d2beadd1c07a84"/><file name="Type.php" hash="4f0cd9a88be44fbe7faa4e1f1ba55a38"/><file name="User.php" hash="d3e74cab3ec8706d2576cb56d0fcc77e"/></dir><file name="View.php" hash="5b5320a258e838e680bfbde6a8491d88"/></dir></dir></dir></dir><file name="Dashboard.php" hash="3b2ff1e8355be7750f19b93dcfcb50ec"/><file name="Log.php" hash="da85421d71f2e50c1ef2384eedd5688a"/><file name="Menu.php" hash="ceb245a4ee23c65c828add89402d411b"/><dir name="Order"><dir name="View"><file name="Tickets.php" hash="a83a2ad42801ddbddad2d761779a597b"/></dir></dir></dir><dir name="Customer"><dir name="Tickets"><file name="List.php" hash="eddae13553494e6689ba1736896327a7"/></dir><file name="Tickets.php" hash="ce9e710f6bb1a625c555543a5fc3121d"/></dir><file name="Supporttab.php" hash="6c55ed5f1cd6daa0d188dc7839f084e7"/></dir><dir name="Helper"><file name="Data.php" hash="05051a21a36a04b9baa533ffb315b8c1"/><file name="JWT.php" hash="6610b92191eccedb8edcf993730c3dc0"/><file name="Log.php" hash="358c44a7a478dc6166208eb59ccd53fb"/></dir><file name="LICENSE.txt" hash="d9922043f61f536de5d4d7af831e7f73"/><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="86a16008112175b4448e6abd729fce17"/><file name="Groups.php" hash="7c2694b292399083c8209d297a1e6746"/><file name="Requesters.php" hash="24eeb10f3eb80c15915af3fd50506e38"/><file name="Tickets.php" hash="a73bd8178a57738f7e1d55a5ff74bb28"/><file name="Users.php" hash="b5c67e552efcdc574bd753d097e33339"/><file name="Views.php" hash="757dac0b088d8cac6d591d41b622b682"/></dir><file name="Observer.php" hash="a0fee1fce3269fe597f1124a04ce6e80"/><dir name="Resource"><dir name="Tickets"><file name="Collection.php" hash="a9a1d5ea99282019a86a103b14051566"/></dir><file name="Tickets.php" hash="8eed34a07f8d65e3680ba3e735a3a4a1"/></dir><dir name="Search"><file name="Field.php" hash="2961022121af96a4bc599141d82e6732"/></dir><file name="Search.php" hash="cac21f222a240bab7ea813023c4523f0"/><dir name="Source"><file name="Sortdir.php" hash="916a3319d52661df8a77438935bae56f"/><file name="Sortorder.php" hash="1c58234e5253987027c174aa192a2b5f"/><file name="Views.php" hash="1c7527338bf40082016a62e45fe44622"/></dir><file name="Tickets.php" hash="796782889d46c6bc658f3cd03ee74a1c"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="ZendeskController.php" hash="76c6823c8881d8eb3799f14e7d6ef6e5"/></dir><file name="ApiController.php" hash="be7a8a3e564ebc5649c1d2dfa07944e5"/><dir name="Customer"><file name="TicketsController.php" hash="89164100a9640def75e94345e0fe1a14"/></dir><file name="IndexController.php" hash="f2caa943c4619d5add2149ef26443108"/><file name="SsoController.php" hash="7b8d222b604ec77316978928e648ff34"/></dir><dir name="data"><dir name="zendesk_setup"><file name="data-upgrade-1.3.0-1.4.0.php" hash="bcf2b209ab108ed2fc045176262d35ad"/><file name="data-upgrade-1.3.1-1.4.0.php" hash="bcf2b209ab108ed2fc045176262d35ad"/></dir></dir><dir name="etc"><file name="config.xml" hash="6c8d13e8b5c4218b1b36f8aa9cd21fc1"/><file name="jstranslator.xml" hash="3f3bd74e4b6484613126a2b2f7e34aac"/><file name="system.xml" hash="66603f48cbb2fffa40d703631491b60d"/></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Zendesk_Zendesk.csv" hash="3892feb95f2173d3f934fe964708b75b"/></dir><dir name="en_US"><file name="Zendesk_Zendesk.csv" hash="4efeb491f30912c01a59dea88552e542"/><file name="Zendesk_Zendesk.yml" hash="957aa6188087e5b3af2124716b55315c"/></dir><dir name="es_ES"><file name="Zendesk_Zendesk.csv" hash="a0c3268b8136b65ee5a5a961212323c0"/></dir><dir name="fr_FR"><file name="Zendesk_Zendesk.csv" hash="7a7609df060c812fb3c30c935b157a75"/></dir><dir name="it_IT"><file name="Zendesk_Zendesk.csv" hash="64de62c856de4c83a69dac292c2f04a7"/></dir><dir name="ja_JP"><file name="Zendesk_Zendesk.csv" hash="8d0ab1a39457a8ba2dcf986faf4eb742"/></dir><dir name="ko_KR"><file name="Zendesk_Zendesk.csv" hash="38aee57e5520d82f607999ce25ba5dc2"/></dir><dir name="nl_NL"><file name="Zendesk_Zendesk.csv" hash="985790d52273a6127c9e941dacc6a25d"/></dir><dir name="pt_BR"><file name="Zendesk_Zendesk.csv" hash="90568149b111a18cc7db9debf82f9dfc"/><file name="Zendesk_Zendesk.csv" hash="90568149b111a18cc7db9debf82f9dfc"/></dir><dir name="ru_RU"><file name="Zendesk_Zendesk.csv" hash="534791f7ae25eb537b9fa5c2be70d2d3"/></dir><dir name="zh_CN"><file name="Zendesk_Zendesk.csv" hash="c8bfa3b4398c99ec8fd498b1635be1db"/></dir><dir name="zh_TW"><file name="Zendesk_Zendesk.csv" hash="2fff120a9ee211608f505400b60c733f"/></dir><dir name="da_DA"><file name="Zendesk_Zendesk.csv" hash="7c20868dcfedb4be3d4c3acd688d0572"/></dir><dir name="en_CA"><file name="Zendesk_Zendesk.csv" hash="96f26f9fa0b6060ec5e47ceb5bfee923"/></dir><dir name="en_GB"><file name="Zendesk_Zendesk.csv" hash="6d38497b88ad5da6d2eafa6a7677fd1a"/></dir><dir name="es_419"><file name="Zendesk_Zendesk.csv" hash="59edae01cec3de6fd62228f391222529"/></dir><dir name="fr_CA"><file name="Zendesk_Zendesk.csv" hash="e8fba8cc289173cec7db70a527cd5ceb"/></dir><dir name="ja_JA"><file name="Zendesk_Zendesk.csv" hash="d0b39c43faa0a858cf89602d6424d652"/></dir><dir name="ko_KO"><file name="Zendesk_Zendesk.csv" hash="46a5072434274f035a34272c5fbf5042"/></dir><dir name="no_NO"><file name="Zendesk_Zendesk.csv" hash="455b220ca4d9a2362f78855032ad2482"/></dir><dir name="pt_PT"><file name="Zendesk_Zendesk.csv" hash="ab137db1555f19a61cfffef603bed878"/></dir><dir name="sv_SV"><file name="Zendesk_Zendesk.csv" hash="7e0b337874ff0352c1020c56a0649b62"/></dir><dir name="tr_TR"><file name="Zendesk_Zendesk.csv" hash="a0c73068b30d7c1ab4f3100123415249"/></dir><dir name="uk_UK"><file name="Zendesk_Zendesk.csv" hash="cc4e4541ff307b51be5a089e6c5e0f38"/></dir></target></contents>
29
  <compatible/>
30
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
31
  </package>
skin/adminhtml/default/default/zendesk/button.png CHANGED
File without changes
skin/adminhtml/default/default/zendesk/icon.png CHANGED
File without changes
skin/adminhtml/default/default/zendesk/zendesk-tab.png CHANGED
File without changes
skin/adminhtml/default/default/zendesk/zendesk.css CHANGED
@@ -45,4 +45,43 @@ h3.zendesk-header {
45
  button.zendesk span {
46
  background-image: url("button.png");
47
  padding-left: 16px;
48
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  button.zendesk span {
46
  background-image: url("button.png");
47
  padding-left: 16px;
48
+ }
49
+ .grid tr.headings th.col-1 {
50
+ width: 100%;
51
+ }
52
+ .grid tr.headings th.col-2 {
53
+ width: 50%;
54
+ }
55
+ .grid tr.headings th.col-3 {
56
+ width: 33.33%;
57
+ }
58
+ .grid tr.headings th.col-4 {
59
+ width: 25%;
60
+ }
61
+ .grid tr.headings th.col-5 {
62
+ width: 20%;
63
+ }
64
+ .grid tr.headings th.col-6 {
65
+ width: 16.66%;
66
+ }
67
+ .grid tr.headings th.col-7 {
68
+ width: 14.28%;
69
+ }
70
+ .grid tr.headings th.col-8 {
71
+ width: 12.5%;
72
+ }
73
+ .grid tr.filter .range input {
74
+ min-width: 61px !important;
75
+ }
76
+ div.entry-edit-head .fright {
77
+ float: right;
78
+ }
79
+ #tickets_grid_tab_content tbody .zendesk-grid-tr:hover,
80
+ #zendesk_create_customer_search_grid_table tbody tr:hover,
81
+ #zendesk_create_order_search_grid_table tbody tr:hover,
82
+ #zendesk_tab_tickets_grid_all_table .zendesk-grid-tr:hover {
83
+ background: #fcf5dd;
84
+ }
85
+ #zendesk_create_order_search_grid_table tr.filter .range .range-line {
86
+ min-width: 124px;
87
+ }