From 95f2798459688a85305ebd1aa5350ce726c4a99d Mon Sep 17 00:00:00 2001 From: Jose Consador Date: Sun, 20 Sep 2015 16:07:50 +0800 Subject: [PATCH] get connection details from input fields --- .../community/Zendesk/Zendesk/Helper/Data.php | 20 +++++- .../Zendesk/Zendesk/Model/Api/Abstract.php | 67 ++++++++++++++++++- .../Adminhtml/ZendeskController.php | 8 ++- .../zendesk/config/button-test-zendesk.phtml | 5 ++ 4 files changed, 93 insertions(+), 7 deletions(-) diff --git a/src/app/code/community/Zendesk/Zendesk/Helper/Data.php b/src/app/code/community/Zendesk/Zendesk/Helper/Data.php index d3b60050..ea80849f 100644 --- a/src/app/code/community/Zendesk/Zendesk/Helper/Data.php +++ b/src/app/code/community/Zendesk/Zendesk/Helper/Data.php @@ -360,10 +360,24 @@ public function isValidDate($date) { public function getFormatedDateTime($dateToFormat) { return Mage::helper('core')->formatDate($dateToFormat, 'medium', true); } - - public function getConnectionStatus() { + + /** + * Tests if the provided username and password is correct. If either is empty the database values will be used. + * + * @param string $domain + * @param string $username + * @param string $password + * @return array + */ + public function getConnectionStatus($domain = null, $username = null, $password = null) { try { - $user = Mage::getModel('zendesk/api_users')->me(); + $usersApi = Mage::getModel('zendesk/api_users'); + + $usersApi->setUsername($username); + $usersApi->setPassword($password); + $usersApi->setDomain($domain); + + $user = $usersApi->me(); if(isset($user['id'])) { return array( diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Api/Abstract.php b/src/app/code/community/Zendesk/Zendesk/Model/Api/Abstract.php index 2d02b6e2..d3b4dd34 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Api/Abstract.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Api/Abstract.php @@ -17,9 +17,70 @@ class Zendesk_Zendesk_Model_Api_Abstract extends Mage_Core_Model_Abstract { + protected $username = null; + protected $password = null; + protected $domain = null; + + /** + * Sets the domain to be used for this instance + * + * @param string $username The user domain + */ + public function setDomain($domain) + { + $this->domain = $domain; + } + + /** + * Sets the email to be used for this instance + * + * @param string $username The user email + */ + public function setUsername($username) + { + $this->username = $username; + } + + /** + * Sets the API token for this instance + * + * @param string $password The API token + */ + public function setPassword($password) + { + $this->password = $password; + } + + public function getUsername() + { + if ($this->username === null) { + $this->username = Mage::getStoreConfig('zendesk/general/email'); + } + + return $this->username . '/token'; + } + + public function getPassword() + { + if ($this->password === null) { + $this->password = Mage::getStoreConfig('zendesk/general/password'); + } + + return $this->password; + } + + public function getDomain() + { + if ($this->domain === null) { + $this->domain = Mage::getStoreConfig('zendesk/general/domain'); + } + + return $this->domain; + } + protected function _getUrl($path) { - $base_url = 'https://' . Mage::getStoreConfig('zendesk/general/domain') . '/api/v2'; + $base_url = 'https://' . $this->getDomain() . '/api/v2'; $path = trim($path, '/'); return $base_url . '/' . $path; } @@ -48,8 +109,8 @@ protected function _call($endpoint, $params = null, $method = 'GET', $data = nul ); $client->setAuth( - Mage::getStoreConfig('zendesk/general/email'). '/token', - Mage::getStoreConfig('zendesk/general/password') + $this->getUsername(), + $this->getPassword() ); if($method == 'POST' || $method == "PUT") { diff --git a/src/app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php b/src/app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php index 4134c2c2..b9d0747b 100644 --- a/src/app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php +++ b/src/app/code/community/Zendesk/Zendesk/controllers/Adminhtml/ZendeskController.php @@ -463,7 +463,13 @@ public function clearLogAction() public function checkOutboundAction() { - $connection = Mage::helper('zendesk')->getConnectionStatus(); + $request = Mage::app()->getRequest(); + + $connection = Mage::helper('zendesk')->getConnectionStatus( + $request->getParam('domain'), + $request->getParam('username'), + $request->getParam('password') + ); $this->getResponse()->clearHeaders()->setHeader('Content-type','application/json', true); $this->getResponse()->setBody(json_encode($connection)); diff --git a/src/app/design/adminhtml/default/default/template/zendesk/config/button-test-zendesk.phtml b/src/app/design/adminhtml/default/default/template/zendesk/config/button-test-zendesk.phtml index 54e2f7a0..74d5e954 100644 --- a/src/app/design/adminhtml/default/default/template/zendesk/config/button-test-zendesk.phtml +++ b/src/app/design/adminhtml/default/default/template/zendesk/config/button-test-zendesk.phtml @@ -22,6 +22,11 @@ function checkZendApiConnection() { var request = new Ajax.Request('getUrl('adminhtml/zendesk/checkOutbound'); ?>', { method: 'get', + parameters: { + domain: document.getElementById('zendesk_general_domain').value, + username: document.getElementById('zendesk_general_email').value, + password: document.getElementById('zendesk_general_password').value + }, onCreate: function() { document.getElementById('zendesk-api-connection-results').innerHTML = ''; },