Version Notes
Switch to new Single Sign On approach using JWT and update the way user tickets are requests from the Zendesk search API
Download this release
Release Info
Developer | Jason Smale |
Extension | zendesk |
Version | 1.2.0 |
Comparing to | |
See all releases |
Code changes from version 1.1.5 to 1.2.0
app/code/community/Zendesk/Zendesk/Helper/JWT.php
ADDED
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Retrieved 2013-04-29 - commit 82113fd351cea127ded3d07e40eb46865db9e8f2
|
4 |
+
// https://github.com/firebase/php-jwt
|
5 |
+
|
6 |
+
/**
|
7 |
+
* JSON Web Token implementation, based on this spec:
|
8 |
+
* http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
|
9 |
+
*
|
10 |
+
* PHP version 5
|
11 |
+
*
|
12 |
+
* @category Authentication
|
13 |
+
* @package Authentication_JWT
|
14 |
+
* @author Neuman Vong <neuman@twilio.com>
|
15 |
+
* @author Anant Narayanan <anant@php.net>
|
16 |
+
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
|
17 |
+
* @link https://github.com/firebase/php-jwt
|
18 |
+
*/
|
19 |
+
/**
|
20 |
+
* JSON Web Token implementation, based on this spec:
|
21 |
+
* http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06
|
22 |
+
*
|
23 |
+
* @category Authentication
|
24 |
+
* @package Authentication_JWT
|
25 |
+
* @author Neuman Vong <neuman@twilio.com>
|
26 |
+
* @author Anant Narayanan <anant@php.net>
|
27 |
+
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
|
28 |
+
* @link https://github.com/firebase/php-jwt
|
29 |
+
*/
|
30 |
+
class JWT
|
31 |
+
{
|
32 |
+
/**
|
33 |
+
* Decodes a JWT string into a PHP object.
|
34 |
+
*
|
35 |
+
* @param string $jwt The JWT
|
36 |
+
* @param string|null $key The secret key
|
37 |
+
* @param bool $verify Don't skip verification process
|
38 |
+
*
|
39 |
+
* @return object The JWT's payload as a PHP object
|
40 |
+
* @throws UnexpectedValueException Provided JWT was invalid
|
41 |
+
* @throws DomainException Algorithm was not provided
|
42 |
+
*
|
43 |
+
* @uses jsonDecode
|
44 |
+
* @uses urlsafeB64Decode
|
45 |
+
*/
|
46 |
+
public static function decode($jwt, $key = null, $verify = true)
|
47 |
+
{
|
48 |
+
$tks = explode('.', $jwt);
|
49 |
+
if (count($tks) != 3) {
|
50 |
+
throw new UnexpectedValueException('Wrong number of segments');
|
51 |
+
}
|
52 |
+
list($headb64, $bodyb64, $cryptob64) = $tks;
|
53 |
+
if (null === ($header = JWT::jsonDecode(JWT::urlsafeB64Decode($headb64)))) {
|
54 |
+
throw new UnexpectedValueException('Invalid segment encoding');
|
55 |
+
}
|
56 |
+
if (null === $payload = JWT::jsonDecode(JWT::urlsafeB64Decode($bodyb64))) {
|
57 |
+
throw new UnexpectedValueException('Invalid segment encoding');
|
58 |
+
}
|
59 |
+
$sig = JWT::urlsafeB64Decode($cryptob64);
|
60 |
+
if ($verify) {
|
61 |
+
if (empty($header->alg)) {
|
62 |
+
throw new DomainException('Empty algorithm');
|
63 |
+
}
|
64 |
+
if ($sig != JWT::sign("$headb64.$bodyb64", $key, $header->alg)) {
|
65 |
+
throw new UnexpectedValueException('Signature verification failed');
|
66 |
+
}
|
67 |
+
}
|
68 |
+
return $payload;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Converts and signs a PHP object or array into a JWT string.
|
73 |
+
*
|
74 |
+
* @param object|array $payload PHP object or array
|
75 |
+
* @param string $key The secret key
|
76 |
+
* @param string $algo The signing algorithm. Supported
|
77 |
+
* algorithms are 'HS256', 'HS384' and 'HS512'
|
78 |
+
*
|
79 |
+
* @return string A signed JWT
|
80 |
+
* @uses jsonEncode
|
81 |
+
* @uses urlsafeB64Encode
|
82 |
+
*/
|
83 |
+
public static function encode($payload, $key, $algo = 'HS256')
|
84 |
+
{
|
85 |
+
$header = array('typ' => 'JWT', 'alg' => $algo);
|
86 |
+
|
87 |
+
$segments = array();
|
88 |
+
$segments[] = JWT::urlsafeB64Encode(JWT::jsonEncode($header));
|
89 |
+
$segments[] = JWT::urlsafeB64Encode(JWT::jsonEncode($payload));
|
90 |
+
$signing_input = implode('.', $segments);
|
91 |
+
|
92 |
+
$signature = JWT::sign($signing_input, $key, $algo);
|
93 |
+
$segments[] = JWT::urlsafeB64Encode($signature);
|
94 |
+
|
95 |
+
return implode('.', $segments);
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Sign a string with a given key and algorithm.
|
100 |
+
*
|
101 |
+
* @param string $msg The message to sign
|
102 |
+
* @param string $key The secret key
|
103 |
+
* @param string $method The signing algorithm. Supported
|
104 |
+
* algorithms are 'HS256', 'HS384' and 'HS512'
|
105 |
+
*
|
106 |
+
* @return string An encrypted message
|
107 |
+
* @throws DomainException Unsupported algorithm was specified
|
108 |
+
*/
|
109 |
+
public static function sign($msg, $key, $method = 'HS256')
|
110 |
+
{
|
111 |
+
$methods = array(
|
112 |
+
'HS256' => 'sha256',
|
113 |
+
'HS384' => 'sha384',
|
114 |
+
'HS512' => 'sha512',
|
115 |
+
);
|
116 |
+
if (empty($methods[$method])) {
|
117 |
+
throw new DomainException('Algorithm not supported');
|
118 |
+
}
|
119 |
+
return hash_hmac($methods[$method], $msg, $key, true);
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Decode a JSON string into a PHP object.
|
124 |
+
*
|
125 |
+
* @param string $input JSON string
|
126 |
+
*
|
127 |
+
* @return object Object representation of JSON string
|
128 |
+
* @throws DomainException Provided string was invalid JSON
|
129 |
+
*/
|
130 |
+
public static function jsonDecode($input)
|
131 |
+
{
|
132 |
+
$obj = json_decode($input);
|
133 |
+
if (function_exists('json_last_error') && $errno = json_last_error()) {
|
134 |
+
JWT::_handleJsonError($errno);
|
135 |
+
} else if ($obj === null && $input !== 'null') {
|
136 |
+
throw new DomainException('Null result with non-null input');
|
137 |
+
}
|
138 |
+
return $obj;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Encode a PHP object into a JSON string.
|
143 |
+
*
|
144 |
+
* @param object|array $input A PHP object or array
|
145 |
+
*
|
146 |
+
* @return string JSON representation of the PHP object or array
|
147 |
+
* @throws DomainException Provided object could not be encoded to valid JSON
|
148 |
+
*/
|
149 |
+
public static function jsonEncode($input)
|
150 |
+
{
|
151 |
+
$json = json_encode($input);
|
152 |
+
if (function_exists('json_last_error') && $errno = json_last_error()) {
|
153 |
+
JWT::_handleJsonError($errno);
|
154 |
+
} else if ($json === 'null' && $input !== null) {
|
155 |
+
throw new DomainException('Null result with non-null input');
|
156 |
+
}
|
157 |
+
return $json;
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Decode a string with URL-safe Base64.
|
162 |
+
*
|
163 |
+
* @param string $input A Base64 encoded string
|
164 |
+
*
|
165 |
+
* @return string A decoded string
|
166 |
+
*/
|
167 |
+
public static function urlsafeB64Decode($input)
|
168 |
+
{
|
169 |
+
$remainder = strlen($input) % 4;
|
170 |
+
if ($remainder) {
|
171 |
+
$padlen = 4 - $remainder;
|
172 |
+
$input .= str_repeat('=', $padlen);
|
173 |
+
}
|
174 |
+
return base64_decode(strtr($input, '-_', '+/'));
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Encode a string with URL-safe Base64.
|
179 |
+
*
|
180 |
+
* @param string $input The string you want encoded
|
181 |
+
*
|
182 |
+
* @return string The base64 encode of what you passed in
|
183 |
+
*/
|
184 |
+
public static function urlsafeB64Encode($input)
|
185 |
+
{
|
186 |
+
return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Helper method to create a JSON error.
|
191 |
+
*
|
192 |
+
* @param int $errno An error number from json_last_error()
|
193 |
+
*
|
194 |
+
* @return void
|
195 |
+
*/
|
196 |
+
private static function _handleJsonError($errno)
|
197 |
+
{
|
198 |
+
$messages = array(
|
199 |
+
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
|
200 |
+
JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
|
201 |
+
JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON'
|
202 |
+
);
|
203 |
+
throw new DomainException(
|
204 |
+
isset($messages[$errno])
|
205 |
+
? $messages[$errno]
|
206 |
+
: 'Unknown JSON error: ' . $errno
|
207 |
+
);
|
208 |
+
}
|
209 |
+
|
210 |
+
}
|
211 |
+
|
app/code/community/Zendesk/Zendesk/Model/Api/Tickets.php
CHANGED
@@ -138,7 +138,7 @@ class Zendesk_Zendesk_Model_Api_Tickets extends Zendesk_Zendesk_Model_Api_Abstra
|
|
138 |
|
139 |
$response = $this->_call('search.json',
|
140 |
array(
|
141 |
-
'query' => '
|
142 |
'sort_order' => 'desc',
|
143 |
'sort_by' => 'updated_at',
|
144 |
)
|
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 |
)
|
app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php
CHANGED
@@ -15,6 +15,8 @@
|
|
15 |
* limitations under the License.
|
16 |
*/
|
17 |
|
|
|
|
|
18 |
class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Controller_Action
|
19 |
{
|
20 |
protected $_publicActions = array('redirect', 'authenticate');
|
@@ -75,16 +77,29 @@ class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Control
|
|
75 |
$this->_redirect(Mage::getSingleton('admin/session')->getUser()->getStartupPageUrl());
|
76 |
}
|
77 |
|
|
|
|
|
|
|
78 |
$user = Mage::getSingleton('admin/session')->getUser();
|
79 |
$name = $user->getName();
|
80 |
$email = $user->getEmail();
|
81 |
$externalId = $user->getId();
|
82 |
|
83 |
-
$
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
|
87 |
-
$url
|
88 |
|
89 |
$this->_redirectUrl($url);
|
90 |
}
|
15 |
* limitations under the License.
|
16 |
*/
|
17 |
|
18 |
+
require_once( Mage::getModuleDir('base'). 'community/Zendesk/Zendesk/Helper/JWT.php');
|
19 |
+
|
20 |
class Zendesk_Zendesk_Adminhtml_ZendeskController extends Mage_Adminhtml_Controller_Action
|
21 |
{
|
22 |
protected $_publicActions = array('redirect', 'authenticate');
|
77 |
$this->_redirect(Mage::getSingleton('admin/session')->getUser()->getStartupPageUrl());
|
78 |
}
|
79 |
|
80 |
+
$now = time();
|
81 |
+
$jti = md5($now . rand());
|
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(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(var_export($url, true), null, 'zendesk.log');
|
103 |
|
104 |
$this->_redirectUrl($url);
|
105 |
}
|
app/code/community/Zendesk/Zendesk/etc/config.xml
CHANGED
@@ -19,7 +19,7 @@
|
|
19 |
<config>
|
20 |
<modules>
|
21 |
<Zendesk_Zendesk>
|
22 |
-
<version>1.
|
23 |
</Zendesk_Zendesk>
|
24 |
</modules>
|
25 |
<zendesk>
|
19 |
<config>
|
20 |
<modules>
|
21 |
<Zendesk_Zendesk>
|
22 |
+
<version>1.2.0</version>
|
23 |
</Zendesk_Zendesk>
|
24 |
</modules>
|
25 |
<zendesk>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>zendesk</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.apache.org/licenses/LICENSE-2.0.html">Apache Software License v2</license>
|
7 |
<channel>community</channel>
|
@@ -17,11 +17,11 @@ This extension makes Zendesk work seamlessly with Magento to enable stores to de
|
|
17 |
- Display relevant support tickets on order & customer dashboards<br />
|
18 |
- Create support tickets from Contact Us requests<br />
|
19 |
- Easily add a feedback tab to your site</description>
|
20 |
-
<notes>
|
21 |
<authors><author><name>Jason Smale</name><user>zendesk</user><email>jsmale@zendesk.com</email></author><author><name>Fontis</name><user>fontis</user><email>magento@fontis.com.au</email></author></authors>
|
22 |
-
<date>2013-
|
23 |
-
<time>
|
24 |
-
<contents><target name="mageetc"><dir name="modules"><file name="Zendesk_Zendesk.xml" hash="a630cf18c788dafb70d4c156a33eaa07"/></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="Signup.php" hash="f0d9ec9bc9a99f8643f1c2e6ac9989f2"/></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="43aaf990ffaf4fd2ef0f65bbbbc19935"/></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="Menu.php" hash="c6000d5c571de25414f67dc8f49d97a0"/><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"/></dir><file name="LICENSE.txt" hash="d9922043f61f536de5d4d7af831e7f73"/><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="02c9893a6d4452988ea68629b2d64558"/><file name="Requesters.php" hash="24eeb10f3eb80c15915af3fd50506e38"/><file name="Tickets.php" hash="
|
25 |
<compatible/>
|
26 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
27 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>zendesk</name>
|
4 |
+
<version>1.2.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.apache.org/licenses/LICENSE-2.0.html">Apache Software License v2</license>
|
7 |
<channel>community</channel>
|
17 |
- Display relevant support tickets on order & customer dashboards<br />
|
18 |
- Create support tickets from Contact Us requests<br />
|
19 |
- Easily add a feedback tab to your site</description>
|
20 |
+
<notes>Switch to new Single Sign On approach using JWT and update the way user tickets are requests from the Zendesk search API</notes>
|
21 |
<authors><author><name>Jason Smale</name><user>zendesk</user><email>jsmale@zendesk.com</email></author><author><name>Fontis</name><user>fontis</user><email>magento@fontis.com.au</email></author></authors>
|
22 |
+
<date>2013-05-01</date>
|
23 |
+
<time>08:21:19</time>
|
24 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Zendesk_Zendesk.xml" hash="a630cf18c788dafb70d4c156a33eaa07"/></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="Signup.php" hash="f0d9ec9bc9a99f8643f1c2e6ac9989f2"/></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="43aaf990ffaf4fd2ef0f65bbbbc19935"/></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="Menu.php" hash="c6000d5c571de25414f67dc8f49d97a0"/><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"/></dir><file name="LICENSE.txt" hash="d9922043f61f536de5d4d7af831e7f73"/><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="02c9893a6d4452988ea68629b2d64558"/><file name="Requesters.php" hash="24eeb10f3eb80c15915af3fd50506e38"/><file name="Tickets.php" hash="f878859ca5bcac3e2abe7d307ce4fd20"/><file name="Users.php" hash="1ecfe4c536bb45ccc6046dbb3743712b"/><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="b3a86f28be08ee9a21adce03bbee759f"/></dir><file name="ApiController.php" hash="65fdebea6b94b44344300308376722d2"/><file name="IndexController.php" hash="a9c590f951f294d3641c29bd98b6834c"/></dir><dir name="etc"><file name="config.xml" hash="c5b610f7ba5c126b318601b8eeddff6b"/><file name="system.xml" hash="6e3e922965b5d713a1a1ef100401f28e"/></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Zendesk_Zendesk.csv" hash="7ca6957ec2ab86d7cad0da6d3db451d8"/></dir><dir name="de_DE"><file name="Zendesk_Zendesk.csv" hash="763c45870e912c2510cd5202cd844ee5"/></dir><dir name="es_ES"><file name="Zendesk_Zendesk.csv" hash="0602d8b70510f15784e1cca16cc2c41c"/></dir><dir name="fr_FR"><file name="Zendesk_Zendesk.csv" hash="f292cb30c7103dee6d47f808f82b3b6d"/></dir><dir name="it_IT"><file name="Zendesk_Zendesk.csv" hash="1dca15b2c95ac058a442fe764afb359c"/></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="bdda5f5ab107984487cbba1e1cb47c15"/></dir><dir name="pt_BR"><file name="Zendesk_Zendesk.csv" hash="8a1458f0e498706c7541851a9a32ed3c"/></dir><dir name="ru_RU"><file name="Zendesk_Zendesk.csv" hash="871fcc5befc62df4e93c3c36ca8dcc87"/></dir><dir name="zh_TW"><file name="Zendesk_Zendesk.csv" hash="486ee9e2eea24301299f73d9e745dc00"/></dir><dir name="zh_CN"><file name="Zendesk_Zendesk.csv" hash="414730c8365bd652b2a7934f948de9b2"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="zendesk.xml" hash="d11620289479769a35c98b0676153906"/></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="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="7dd3ea0c5540e78f6f1415c02b4fdcaa"/></dir></dir><file name="left-menu.phtml" hash="3147dca7821863ae6da3f7b650739780"/><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></contents>
|
25 |
<compatible/>
|
26 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
27 |
</package>
|