Version Notes
Initial release
Download this release
Release Info
| Developer | Hussey Coding |
| Extension | HusseyCoding_Sirportly |
| Version | 1.0.0 |
| Comparing to | |
| See all releases | |
Version 1.0.0
- app/code/community/HusseyCoding/Common/etc/system.xml +9 -0
- app/code/community/HusseyCoding/Sirportly/Helper/Data.php +167 -0
- app/code/community/HusseyCoding/Sirportly/Model/Observer.php +26 -0
- app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Department.php +8 -0
- app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Priority.php +8 -0
- app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Status.php +8 -0
- app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Team.php +8 -0
- app/code/community/HusseyCoding/Sirportly/controllers/TicketController.php +15 -0
- app/code/community/HusseyCoding/Sirportly/etc/adminhtml.xml +25 -0
- app/code/community/HusseyCoding/Sirportly/etc/config.xml +50 -0
- app/code/community/HusseyCoding/Sirportly/etc/system.xml +116 -0
- app/design/frontend/base/default/layout/sirportly.xml +12 -0
- app/design/frontend/base/default/template/sirportly/contact.phtml +7 -0
- app/etc/modules/HusseyCoding_Common.xml +9 -0
- app/etc/modules/HusseyCoding_Sirportly.xml +9 -0
- package.xml +18 -0
- skin/frontend/base/default/js/sirportlysubmit.js +75 -0
app/code/community/HusseyCoding/Common/etc/system.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<tabs>
|
| 4 |
+
<husseycoding translate="label">
|
| 5 |
+
<label>Hussey Coding</label>
|
| 6 |
+
<sort_order>500</sort_order>
|
| 7 |
+
</husseycoding>
|
| 8 |
+
</tabs>
|
| 9 |
+
</config>
|
app/code/community/HusseyCoding/Sirportly/Helper/Data.php
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_Helper_Data extends Mage_Core_Helper_Abstract
|
| 3 |
+
{
|
| 4 |
+
private $_verified;
|
| 5 |
+
|
| 6 |
+
public function verifyCredentials($token = null, $secret = null)
|
| 7 |
+
{
|
| 8 |
+
if (!isset($this->_verified)):
|
| 9 |
+
$client = $this->_getRequestObject('/api/v2/tickets/all', null, $token, $secret);
|
| 10 |
+
$this->_verified = $this->_sendRequest($client);
|
| 11 |
+
endif;
|
| 12 |
+
|
| 13 |
+
return $this->_verified;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
public function createTicket($data = array())
|
| 17 |
+
{
|
| 18 |
+
if ($this->_canSend($data)):
|
| 19 |
+
$params = array(
|
| 20 |
+
'name' => $data['name'],
|
| 21 |
+
'email' => $data['email'],
|
| 22 |
+
'subject' => $data['subject'],
|
| 23 |
+
'message' => $data['comment'],
|
| 24 |
+
'status' => Mage::getStoreConfig('sirportly/ticketassign/status'),
|
| 25 |
+
'priority' => Mage::getStoreConfig('sirportly/ticketassign/priority'),
|
| 26 |
+
'team' => Mage::getStoreConfig('sirportly/ticketassign/team'),
|
| 27 |
+
'department' => Mage::getStoreConfig('sirportly/ticketassign/department')
|
| 28 |
+
);
|
| 29 |
+
|
| 30 |
+
$client = $this->_getRequestObject('/api/v2/tickets/submit', $params);
|
| 31 |
+
return $this->_sendRequest($client);
|
| 32 |
+
endif;
|
| 33 |
+
|
| 34 |
+
return false;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
private function _getRequestObject($url, $params = null, $token = null, $secret = null)
|
| 38 |
+
{
|
| 39 |
+
if (!isset($token)):
|
| 40 |
+
$token = Mage::getStoreConfig('sirportly/api/token');
|
| 41 |
+
endif;
|
| 42 |
+
|
| 43 |
+
if (!isset($secret)):
|
| 44 |
+
$secret = Mage::getStoreConfig('sirportly/api/secret');
|
| 45 |
+
endif;
|
| 46 |
+
|
| 47 |
+
if (isset($url)):
|
| 48 |
+
$url = '/' . trim($url, '/');
|
| 49 |
+
$url = $this->_getApiUrl() . $url;
|
| 50 |
+
else:
|
| 51 |
+
$url = $this->_getApiUrl();
|
| 52 |
+
endif;
|
| 53 |
+
|
| 54 |
+
$client = new Zend_Http_Client();
|
| 55 |
+
$client
|
| 56 |
+
->setUri($url)
|
| 57 |
+
->setMethod(Zend_Http_Client::POST)
|
| 58 |
+
->setHeaders(array(
|
| 59 |
+
'X-Auth-Token' => $token,
|
| 60 |
+
'X-Auth-Secret' => $secret
|
| 61 |
+
));
|
| 62 |
+
|
| 63 |
+
$client
|
| 64 |
+
->setConfig(array(
|
| 65 |
+
'timeout' => 5
|
| 66 |
+
));
|
| 67 |
+
|
| 68 |
+
$params = isset($params) ? $params : array();
|
| 69 |
+
|
| 70 |
+
foreach ($params as $key => $value):
|
| 71 |
+
$client->setParameterPost($key, $value);
|
| 72 |
+
endforeach;
|
| 73 |
+
|
| 74 |
+
return $client;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
private function _getApiUrl()
|
| 78 |
+
{
|
| 79 |
+
return 'https://api.sirportly.com';
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
private function _sendRequest($client, $sendbody = false)
|
| 83 |
+
{
|
| 84 |
+
try {
|
| 85 |
+
$result = $client->request();
|
| 86 |
+
} catch (Exception $e) {
|
| 87 |
+
return false;
|
| 88 |
+
}
|
| 89 |
+
$body = $result->getBody();
|
| 90 |
+
$body = Zend_Json::decode($body);
|
| 91 |
+
|
| 92 |
+
if (array_key_exists('error', $body) || array_key_exists('errors', $body)):
|
| 93 |
+
return false;
|
| 94 |
+
endif;
|
| 95 |
+
|
| 96 |
+
return $sendbody ? $body : true;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
public function getSelectOptions($url, $optgroup = false)
|
| 100 |
+
{
|
| 101 |
+
if (!$this->verifyCredentials()):
|
| 102 |
+
return array(
|
| 103 |
+
array('value' => '', 'label' => $this->__('Invalid API Credentials'))
|
| 104 |
+
);
|
| 105 |
+
else:
|
| 106 |
+
$client = $this->_getRequestObject($url);
|
| 107 |
+
if ($result = $this->_sendRequest($client, true)):
|
| 108 |
+
$return = array();
|
| 109 |
+
if ($result):
|
| 110 |
+
if ($optgroup):
|
| 111 |
+
$return = $this->_getOptGroups($result, $optgroup);
|
| 112 |
+
else:
|
| 113 |
+
foreach ($result as $option):
|
| 114 |
+
if (!empty($option['name']) && !empty($option['id'])):
|
| 115 |
+
$return[] = array('value' => $option['id'], 'label' => $option['name']);
|
| 116 |
+
endif;
|
| 117 |
+
endforeach;
|
| 118 |
+
endif;
|
| 119 |
+
endif;
|
| 120 |
+
|
| 121 |
+
if ($return):
|
| 122 |
+
array_unshift($return, array('value' => '', 'label' => $this->__('--Please Select--')));
|
| 123 |
+
return $return;
|
| 124 |
+
endif;
|
| 125 |
+
endif;
|
| 126 |
+
|
| 127 |
+
return array(
|
| 128 |
+
array('value' => '', 'label' => $this->__('No Options Found'))
|
| 129 |
+
);
|
| 130 |
+
endif;
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
private function _getOptGroups($options, $optgroup)
|
| 134 |
+
{
|
| 135 |
+
$groups = array();
|
| 136 |
+
foreach ($options as $option):
|
| 137 |
+
if (!empty($option['name']) && !empty($option['id'])):
|
| 138 |
+
if (isset($option[$optgroup]) && is_array($option[$optgroup])):
|
| 139 |
+
if (!empty($option[$optgroup]['name']) && !empty($option[$optgroup]['id'])):
|
| 140 |
+
$id = $option[$optgroup]['id'];
|
| 141 |
+
$value = $option[$optgroup]['name'];
|
| 142 |
+
if (!isset($groups[$id]['value'])):
|
| 143 |
+
$groups[$id]['value'] = array();
|
| 144 |
+
endif;
|
| 145 |
+
if (!isset($groups[$id]['label'])):
|
| 146 |
+
$groups[$id]['label'] = $value;
|
| 147 |
+
endif;
|
| 148 |
+
$groups[$id]['value'][] = array('value' => $option['id'], 'label' => $option['name']);
|
| 149 |
+
endif;
|
| 150 |
+
endif;
|
| 151 |
+
endif;
|
| 152 |
+
endforeach;
|
| 153 |
+
|
| 154 |
+
return $groups;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
private function _canSend($data)
|
| 158 |
+
{
|
| 159 |
+
if (!empty($data['name']) && !empty($data['email']) && !empty($data['subject']) && !empty($data['comment'])):
|
| 160 |
+
if (Mage::getStoreConfig('sirportly/ticketassign/status') && Mage::getStoreConfig('sirportly/ticketassign/priority') && Mage::getStoreConfig('sirportly/ticketassign/team') && Mage::getStoreConfig('sirportly/ticketassign/department')):
|
| 161 |
+
return true;
|
| 162 |
+
endif;
|
| 163 |
+
endif;
|
| 164 |
+
|
| 165 |
+
return false;
|
| 166 |
+
}
|
| 167 |
+
}
|
app/code/community/HusseyCoding/Sirportly/Model/Observer.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_Model_Observer
|
| 3 |
+
{
|
| 4 |
+
private $_token;
|
| 5 |
+
private $_secret;
|
| 6 |
+
private $_informed = false;
|
| 7 |
+
|
| 8 |
+
public function adminhtmlCoreConfigDataSaveAfter($observer)
|
| 9 |
+
{
|
| 10 |
+
$data = $observer->getConfigData();
|
| 11 |
+
if ($data->getPath() == 'sirportly/api/token'):
|
| 12 |
+
$this->_token = $data->getValue();
|
| 13 |
+
elseif ($data->getPath() == 'sirportly/api/secret'):
|
| 14 |
+
$this->_secret = $data->getValue();
|
| 15 |
+
endif;
|
| 16 |
+
|
| 17 |
+
if (isset($this->_token) && isset($this->_secret) && !$this->_informed):
|
| 18 |
+
$this->_informed = true;
|
| 19 |
+
if (Mage::helper('sirportly')->verifyCredentials($this->_token, $this->_secret)):
|
| 20 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('sirportly')->__('Successfully verified Sirportly API credentials.'));
|
| 21 |
+
else:
|
| 22 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('sirportly')->__('Failed to verify Sirportly API credentials.'));
|
| 23 |
+
endif;
|
| 24 |
+
endif;
|
| 25 |
+
}
|
| 26 |
+
}
|
app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Department.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_Model_System_Config_Source_Department
|
| 3 |
+
{
|
| 4 |
+
public function toOptionArray()
|
| 5 |
+
{
|
| 6 |
+
return Mage::helper('sirportly')->getSelectOptions('/api/v2/objects/departments', 'brand');
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Priority.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_Model_System_Config_Source_Priority
|
| 3 |
+
{
|
| 4 |
+
public function toOptionArray()
|
| 5 |
+
{
|
| 6 |
+
return Mage::helper('sirportly')->getSelectOptions('/api/v2/objects/priorities');
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Status.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_Model_System_Config_Source_Status
|
| 3 |
+
{
|
| 4 |
+
public function toOptionArray()
|
| 5 |
+
{
|
| 6 |
+
return Mage::helper('sirportly')->getSelectOptions('/api/v2/objects/statuses');
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/Sirportly/Model/System/Config/Source/Team.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_Model_System_Config_Source_Team
|
| 3 |
+
{
|
| 4 |
+
public function toOptionArray()
|
| 5 |
+
{
|
| 6 |
+
return Mage::helper('sirportly')->getSelectOptions('/api/v2/objects/teams');
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/Sirportly/controllers/TicketController.php
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_Sirportly_TicketController extends Mage_Core_Controller_Front_Action
|
| 3 |
+
{
|
| 4 |
+
public function createAction()
|
| 5 |
+
{
|
| 6 |
+
if (Mage::helper('sirportly')->createTicket($this->getRequest()->getPost())):
|
| 7 |
+
Mage::getSingleton('customer/session')->addSuccess(Mage::helper('sirportly')->__('Your inquiry was submitted and will be responded to as soon as possible. Thank you for contacting us.'));
|
| 8 |
+
$response = Zend_Json::encode(array('status' => 'success'));
|
| 9 |
+
else:
|
| 10 |
+
$response = Zend_Json::encode(array('status' => 'failed'));
|
| 11 |
+
endif;
|
| 12 |
+
|
| 13 |
+
$this->getResponse()->setBody($response);
|
| 14 |
+
}
|
| 15 |
+
}
|
app/code/community/HusseyCoding/Sirportly/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<acl>
|
| 4 |
+
<resources>
|
| 5 |
+
<all>
|
| 6 |
+
<title>Allow Everything</title>
|
| 7 |
+
</all>
|
| 8 |
+
<admin>
|
| 9 |
+
<children>
|
| 10 |
+
<system>
|
| 11 |
+
<children>
|
| 12 |
+
<config>
|
| 13 |
+
<children>
|
| 14 |
+
<sirportly module="sirportly">
|
| 15 |
+
<title>Sirportly</title>
|
| 16 |
+
</sirportly>
|
| 17 |
+
</children>
|
| 18 |
+
</config>
|
| 19 |
+
</children>
|
| 20 |
+
</system>
|
| 21 |
+
</children>
|
| 22 |
+
</admin>
|
| 23 |
+
</resources>
|
| 24 |
+
</acl>
|
| 25 |
+
</config>
|
app/code/community/HusseyCoding/Sirportly/etc/config.xml
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<HusseyCoding_Sirportly>
|
| 5 |
+
<version>1.0.0</version>
|
| 6 |
+
</HusseyCoding_Sirportly>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<helpers>
|
| 10 |
+
<sirportly>
|
| 11 |
+
<class>HusseyCoding_Sirportly_Helper</class>
|
| 12 |
+
</sirportly>
|
| 13 |
+
</helpers>
|
| 14 |
+
<models>
|
| 15 |
+
<sirportly>
|
| 16 |
+
<class>HusseyCoding_Sirportly_Model</class>
|
| 17 |
+
</sirportly>
|
| 18 |
+
</models>
|
| 19 |
+
</global>
|
| 20 |
+
<frontend>
|
| 21 |
+
<routers>
|
| 22 |
+
<sirportly>
|
| 23 |
+
<use>standard</use>
|
| 24 |
+
<args>
|
| 25 |
+
<module>HusseyCoding_Sirportly</module>
|
| 26 |
+
<frontName>sirportly</frontName>
|
| 27 |
+
</args>
|
| 28 |
+
</sirportly>
|
| 29 |
+
</routers>
|
| 30 |
+
<layout>
|
| 31 |
+
<updates>
|
| 32 |
+
<sirportly>
|
| 33 |
+
<file>sirportly.xml</file>
|
| 34 |
+
</sirportly>
|
| 35 |
+
</updates>
|
| 36 |
+
</layout>
|
| 37 |
+
</frontend>
|
| 38 |
+
<adminhtml>
|
| 39 |
+
<events>
|
| 40 |
+
<core_config_data_save_after>
|
| 41 |
+
<observers>
|
| 42 |
+
<adminhtml_core_config_data_save_after_sirportly>
|
| 43 |
+
<class>sirportly/observer</class>
|
| 44 |
+
<method>adminhtmlCoreConfigDataSaveAfter</method>
|
| 45 |
+
</adminhtml_core_config_data_save_after_sirportly>
|
| 46 |
+
</observers>
|
| 47 |
+
</core_config_data_save_after>
|
| 48 |
+
</events>
|
| 49 |
+
</adminhtml>
|
| 50 |
+
</config>
|
app/code/community/HusseyCoding/Sirportly/etc/system.xml
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<sections>
|
| 4 |
+
<sirportly translate="label" module="sirportly">
|
| 5 |
+
<label>Sirportly</label>
|
| 6 |
+
<tab>husseycoding</tab>
|
| 7 |
+
<frontend_type>text</frontend_type>
|
| 8 |
+
<sort_order>1500</sort_order>
|
| 9 |
+
<show_in_default>1</show_in_default>
|
| 10 |
+
<show_in_website>1</show_in_website>
|
| 11 |
+
<show_in_store>1</show_in_store>
|
| 12 |
+
<groups>
|
| 13 |
+
<api translate="label">
|
| 14 |
+
<label>API Credentials</label>
|
| 15 |
+
<frontend_type>text</frontend_type>
|
| 16 |
+
<sort_order>1</sort_order>
|
| 17 |
+
<show_in_default>1</show_in_default>
|
| 18 |
+
<show_in_website>1</show_in_website>
|
| 19 |
+
<show_in_store>1</show_in_store>
|
| 20 |
+
<comment><![CDATA[Enter the API token and secret from the Sirportly API Access configuration. You can create an API token under Admin → API Access when logged in to Sirportly.]]></comment>
|
| 21 |
+
<fields>
|
| 22 |
+
<token>
|
| 23 |
+
<label>Token</label>
|
| 24 |
+
<frontend_type>text</frontend_type>
|
| 25 |
+
<sort_order>1</sort_order>
|
| 26 |
+
<show_in_default>1</show_in_default>
|
| 27 |
+
<show_in_website>1</show_in_website>
|
| 28 |
+
<show_in_store>1</show_in_store>
|
| 29 |
+
<comment>Required</comment>
|
| 30 |
+
</token>
|
| 31 |
+
<secret>
|
| 32 |
+
<label>Secret</label>
|
| 33 |
+
<frontend_type>text</frontend_type>
|
| 34 |
+
<sort_order>2</sort_order>
|
| 35 |
+
<show_in_default>1</show_in_default>
|
| 36 |
+
<show_in_website>1</show_in_website>
|
| 37 |
+
<show_in_store>1</show_in_store>
|
| 38 |
+
<comment>Required</comment>
|
| 39 |
+
</secret>
|
| 40 |
+
</fields>
|
| 41 |
+
</api>
|
| 42 |
+
<ticketassign translate="label">
|
| 43 |
+
<label>Ticket Defaults</label>
|
| 44 |
+
<frontend_type>text</frontend_type>
|
| 45 |
+
<sort_order>2</sort_order>
|
| 46 |
+
<show_in_default>1</show_in_default>
|
| 47 |
+
<show_in_website>1</show_in_website>
|
| 48 |
+
<show_in_store>1</show_in_store>
|
| 49 |
+
<comment>Here you can define a status, priority, team and department to assign new tickets to in Sirportly.</comment>
|
| 50 |
+
<fields>
|
| 51 |
+
<status>
|
| 52 |
+
<label>Status</label>
|
| 53 |
+
<frontend_type>select</frontend_type>
|
| 54 |
+
<sort_order>1</sort_order>
|
| 55 |
+
<show_in_default>1</show_in_default>
|
| 56 |
+
<show_in_website>1</show_in_website>
|
| 57 |
+
<show_in_store>1</show_in_store>
|
| 58 |
+
<source_model>sirportly/system_config_source_status</source_model>
|
| 59 |
+
<comment>Required</comment>
|
| 60 |
+
</status>
|
| 61 |
+
<priority>
|
| 62 |
+
<label>Priority</label>
|
| 63 |
+
<frontend_type>select</frontend_type>
|
| 64 |
+
<sort_order>2</sort_order>
|
| 65 |
+
<show_in_default>1</show_in_default>
|
| 66 |
+
<show_in_website>1</show_in_website>
|
| 67 |
+
<show_in_store>1</show_in_store>
|
| 68 |
+
<source_model>sirportly/system_config_source_priority</source_model>
|
| 69 |
+
<comment>Required</comment>
|
| 70 |
+
</priority>
|
| 71 |
+
<team>
|
| 72 |
+
<label>Team</label>
|
| 73 |
+
<frontend_type>select</frontend_type>
|
| 74 |
+
<sort_order>3</sort_order>
|
| 75 |
+
<show_in_default>1</show_in_default>
|
| 76 |
+
<show_in_website>1</show_in_website>
|
| 77 |
+
<show_in_store>1</show_in_store>
|
| 78 |
+
<source_model>sirportly/system_config_source_team</source_model>
|
| 79 |
+
<comment>Required</comment>
|
| 80 |
+
</team>
|
| 81 |
+
<department>
|
| 82 |
+
<label>Department</label>
|
| 83 |
+
<frontend_type>select</frontend_type>
|
| 84 |
+
<sort_order>4</sort_order>
|
| 85 |
+
<show_in_default>1</show_in_default>
|
| 86 |
+
<show_in_website>1</show_in_website>
|
| 87 |
+
<show_in_store>1</show_in_store>
|
| 88 |
+
<source_model>sirportly/system_config_source_department</source_model>
|
| 89 |
+
<comment>Required</comment>
|
| 90 |
+
</department>
|
| 91 |
+
</fields>
|
| 92 |
+
</ticketassign>
|
| 93 |
+
<contact translate="label">
|
| 94 |
+
<label>Contact Form Integration</label>
|
| 95 |
+
<frontend_type>text</frontend_type>
|
| 96 |
+
<sort_order>3</sort_order>
|
| 97 |
+
<show_in_default>1</show_in_default>
|
| 98 |
+
<show_in_website>1</show_in_website>
|
| 99 |
+
<show_in_store>1</show_in_store>
|
| 100 |
+
<fields>
|
| 101 |
+
<enabled>
|
| 102 |
+
<label>Enabled</label>
|
| 103 |
+
<frontend_type>select</frontend_type>
|
| 104 |
+
<sort_order>1</sort_order>
|
| 105 |
+
<show_in_default>1</show_in_default>
|
| 106 |
+
<show_in_website>1</show_in_website>
|
| 107 |
+
<show_in_store>1</show_in_store>
|
| 108 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 109 |
+
<comment>Enable or disable Sirportly contact form integration. When disabled, contact form requests will be processed by Magento as normal.</comment>
|
| 110 |
+
</enabled>
|
| 111 |
+
</fields>
|
| 112 |
+
</contact>
|
| 113 |
+
</groups>
|
| 114 |
+
</sirportly>
|
| 115 |
+
</sections>
|
| 116 |
+
</config>
|
app/design/frontend/base/default/layout/sirportly.xml
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout version="0.1.0">
|
| 3 |
+
<contacts_index_index>
|
| 4 |
+
<reference name="head">
|
| 5 |
+
<action method="addItem">
|
| 6 |
+
<type>skin_js</type>
|
| 7 |
+
<name>js/sirportlysubmit.js</name>
|
| 8 |
+
</action>
|
| 9 |
+
</reference>
|
| 10 |
+
<block type="core/template" name="sirportly_contact" template="sirportly/contact.phtml" after="-" parent="content" />
|
| 11 |
+
</contacts_index_index>
|
| 12 |
+
</layout>
|
app/design/frontend/base/default/template/sirportly/contact.phtml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php if (Mage::getStoreConfig('sirportly/contact/enabled')): ?>
|
| 2 |
+
<script type="text/javascript">
|
| 3 |
+
//<![CDATA[
|
| 4 |
+
var thissirportlysubmit = new sirportlysubmit();
|
| 5 |
+
//]]>
|
| 6 |
+
</script>
|
| 7 |
+
<?php endif; ?>
|
app/etc/modules/HusseyCoding_Common.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<HusseyCoding_Common>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</HusseyCoding_Common>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
app/etc/modules/HusseyCoding_Sirportly.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<HusseyCoding_Sirportly>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</HusseyCoding_Sirportly>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
package.xml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>HusseyCoding_Sirportly</name>
|
| 4 |
+
<version>1.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Magento to Sirportly integration.</summary>
|
| 10 |
+
<description>Create Sirportly helpdesk tickets via the Magento contact form.</description>
|
| 11 |
+
<notes>Initial release</notes>
|
| 12 |
+
<authors><author><name>Hussey Coding</name><user>husseycoding</user><email>info@husseycoding.co.uk</email></author></authors>
|
| 13 |
+
<date>2013-08-08</date>
|
| 14 |
+
<time>16:30:03</time>
|
| 15 |
+
<contents><target name="magecommunity"><dir name="HusseyCoding"><dir name="Sirportly"><dir name="controllers"><file name="TicketController.php" hash="14efda4f1d8f1eebf688df018709323d"/></dir><dir name="etc"><file name="adminhtml.xml" hash="31ce0056778c58c2430b0b2cccb9b1a5"/><file name="config.xml" hash="b81e21675f2495fb45d0305608fb534c"/><file name="system.xml" hash="04052a159deb9b5762cfebda49107eee"/></dir><dir name="Helper"><file name="Data.php" hash="67aaabcb7c8390f6dff0759b91a1106d"/></dir><dir name="Model"><file name="Observer.php" hash="a14e57ea58ba025f62483efd650b55fa"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Department.php" hash="f8a708f2e042365bd892bfd1f392fec3"/><file name="Priority.php" hash="682065ee3cdcab991e5fd252730c8640"/><file name="Status.php" hash="60fd06d1743463ad345afa2cb1827e9d"/><file name="Team.php" hash="1b1fc5cfb6c50a74a57aba2252f43874"/></dir></dir></dir></dir></dir><dir name="Common"><dir name="etc"><file name="system.xml" hash="6c9ba9f227b9adfc9abf97f17b46fdbf"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="HusseyCoding_Sirportly.xml" hash="a92236145783da6931bf04a2028ae285"/><file name="HusseyCoding_Common.xml" hash="31e82d3d9b3179c2fa9e002f9669da47"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="sirportly.xml" hash="60e4095bd8f1dcf51c3ae0c2daa70147"/></dir><dir name="template"><dir name="sirportly"><file name="contact.phtml" hash="4225d9efe951991fb3a21a276be0f6c7"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><file name="sirportlysubmit.js" hash="d6a80d54715f19ff7811a6d9d69daa9a"/></dir></dir></dir></dir></target></contents>
|
| 16 |
+
<compatible/>
|
| 17 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
| 18 |
+
</package>
|
skin/frontend/base/default/js/sirportlysubmit.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var sirportlysubmit = Class.create({
|
| 2 |
+
afterInit: function() {
|
| 3 |
+
this.addSubject();
|
| 4 |
+
this.scrollToTop();
|
| 5 |
+
this.form = $("contactForm");
|
| 6 |
+
this.form.observe("submit", function(e) {
|
| 7 |
+
Event.stop(e);
|
| 8 |
+
if (contactForm.validator && contactForm.validator.validate()) {
|
| 9 |
+
this.disableButton();
|
| 10 |
+
var parameters = this.form.serialize(true);
|
| 11 |
+
new Ajax.Request("/sirportly/ticket/create", {
|
| 12 |
+
parameters: parameters,
|
| 13 |
+
onSuccess: function(response) {
|
| 14 |
+
var contentarray = response.responseText.evalJSON();
|
| 15 |
+
if (typeof(contentarray) == "object") {
|
| 16 |
+
var status = contentarray.status;
|
| 17 |
+
if (status == "success") {
|
| 18 |
+
window.location.reload();
|
| 19 |
+
} else {
|
| 20 |
+
this.enableButton();
|
| 21 |
+
this.failedSubmit();
|
| 22 |
+
}
|
| 23 |
+
} else {
|
| 24 |
+
this.enableButton();
|
| 25 |
+
this.failedSubmit();
|
| 26 |
+
}
|
| 27 |
+
}.bind(this)
|
| 28 |
+
});
|
| 29 |
+
}
|
| 30 |
+
}.bindAsEventListener(this));
|
| 31 |
+
},
|
| 32 |
+
disableButton: function() {
|
| 33 |
+
this.form.down("button").disable();
|
| 34 |
+
this.form.down("button").setStyle({
|
| 35 |
+
opacity: 0.5,
|
| 36 |
+
cursor: "default"
|
| 37 |
+
});
|
| 38 |
+
},
|
| 39 |
+
enableButton: function() {
|
| 40 |
+
this.form.down("button").enable();
|
| 41 |
+
this.form.down("button").setStyle({
|
| 42 |
+
opacity: 1,
|
| 43 |
+
cursor: "pointer"
|
| 44 |
+
});
|
| 45 |
+
},
|
| 46 |
+
scrollToTop: function() {
|
| 47 |
+
if ($$("ul.messages")[0]) {
|
| 48 |
+
$$("body")[0].scrollTo();
|
| 49 |
+
}
|
| 50 |
+
},
|
| 51 |
+
failedSubmit: function() {
|
| 52 |
+
this.form.stopObserving("submit");
|
| 53 |
+
this.form.submit();
|
| 54 |
+
},
|
| 55 |
+
addSubject: function() {
|
| 56 |
+
var el = new Element("li", {"class":"wide"}).update(
|
| 57 |
+
new Element("label", {"for":"subject", "class":"required"}).update("<em>*</em>Subject")
|
| 58 |
+
);
|
| 59 |
+
el.insert({
|
| 60 |
+
bottom:new Element("div", {"class":"input-box"}).update(
|
| 61 |
+
new Element("input", {"class":"input-text required-entry", "type":"text", "value":"", "id":"subject", "name":"subject", "title":"Subject"})
|
| 62 |
+
)
|
| 63 |
+
});
|
| 64 |
+
|
| 65 |
+
$("comment").up("li").insert({
|
| 66 |
+
before:el
|
| 67 |
+
});
|
| 68 |
+
}
|
| 69 |
+
});
|
| 70 |
+
|
| 71 |
+
document.observe("dom:loaded", function() {
|
| 72 |
+
if (typeof(thissirportlysubmit) == "object") {
|
| 73 |
+
thissirportlysubmit.afterInit();
|
| 74 |
+
}
|
| 75 |
+
});
|
