Version Notes
Revamp of order feed and product to rely on parameters from the SwiftERM system.
Download this release
Release Info
Developer | Simon Cooper |
Extension | Swift_Swiftplugin |
Version | 1.6.0 |
Comparing to | |
See all releases |
Code changes from version 1.5.0 to 1.6.0
- app/code/community/Swift/Swiftplugin/Helper/Data.php +17 -1
- app/code/community/Swift/Swiftplugin/Model/XmlProduct.php +10 -2
- app/code/community/Swift/Swiftplugin/controllers/OrdersController.php +44 -33
- app/code/community/Swift/Swiftplugin/controllers/XmlController.php +1 -0
- app/code/community/Swift/Swiftplugin/etc/config.xml +1 -1
- lib/SwiftAPI/SwiftAPI.php +15 -13
- lib/SwiftAPI/SwiftAPI_Request.php +11 -1
- lib/SwiftAPI/SwiftAPI_Request_Order.php +0 -1
- lib/SwiftAPI/SwiftAPI_Request_OrderPackage.php +2 -2
- lib/SwiftAPI/SwiftAPI_Request_Version.php +47 -0
- lib/SwiftAPI/doc/SwiftAPI-Specification.html +1 -70
- lib/SwiftAPI/doc/SwiftAPI-Specification_v3.html +326 -0
- package.xml +5 -5
app/code/community/Swift/Swiftplugin/Helper/Data.php
CHANGED
@@ -62,8 +62,24 @@ class Swift_Swiftplugin_Helper_Data extends Mage_Core_Helper_Abstract {
|
|
62 |
$arr['plugin_version'] = (string)Mage::getConfig()->getNode()->modules->Swift_Swiftplugin->version;
|
63 |
$arr['host'] = $_SERVER['HTTP_HOST'];
|
64 |
$arr['magento_version'] = Mage::getVersion();
|
|
|
65 |
|
66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
}
|
68 |
}
|
69 |
|
62 |
$arr['plugin_version'] = (string)Mage::getConfig()->getNode()->modules->Swift_Swiftplugin->version;
|
63 |
$arr['host'] = $_SERVER['HTTP_HOST'];
|
64 |
$arr['magento_version'] = Mage::getVersion();
|
65 |
+
$arr['php'] = phpversion();
|
66 |
|
67 |
+
$modules = Mage::getConfig()->getNode('modules')->children();
|
68 |
+
$modulesArray = (array)$modules;
|
69 |
+
$module_output = array();
|
70 |
+
foreach($modulesArray as $module_name => $module) {
|
71 |
+
$module_output[$module_name] = $module->is('active');
|
72 |
+
}
|
73 |
+
$arr['modules'] = $module_output;
|
74 |
+
|
75 |
+
$api_version = new SwiftAPI_Request_Version($_SERVER['HTTP_HOST'],$arr);
|
76 |
+
$key = hex2bin(Mage::helper('swift/Data')->getSwiftPrivateKey());
|
77 |
+
if (!is_bool($key) && !is_null($key)) {
|
78 |
+
echo SwiftAPI::Encode($api_version, hex2bin(Mage::helper('swift/Data')->getSwiftPrivateKey()));
|
79 |
+
}
|
80 |
+
else {
|
81 |
+
json_encode($arr);
|
82 |
+
}
|
83 |
}
|
84 |
}
|
85 |
|
app/code/community/Swift/Swiftplugin/Model/XmlProduct.php
CHANGED
@@ -12,8 +12,11 @@ class Swift_Swiftplugin_Model_XmlProduct {
|
|
12 |
|
13 |
protected $offset;
|
14 |
|
|
|
|
|
15 |
public function __construct() {
|
16 |
$this->offset = 1;
|
|
|
17 |
}
|
18 |
|
19 |
public function setOffset($offset = 1) {
|
@@ -22,18 +25,23 @@ class Swift_Swiftplugin_Model_XmlProduct {
|
|
22 |
}
|
23 |
}
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
/**
|
26 |
* Retrieves product details and generates the appropriate response to the request
|
27 |
*
|
28 |
*/
|
29 |
public function generate_xml() {
|
30 |
//limit the data parsed
|
31 |
-
$limit = 100;
|
32 |
$productCollection = Mage::getModel('catalog/product')->getCollection()
|
33 |
->addAttributeToSelect(array('product_id','name','description', 'short_description','price','url_path','image','thumbnail', 'small_image','special_price','sku','special_to_date', 'special_from_date'))
|
34 |
->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
|
35 |
->setCurPage($this->offset)
|
36 |
-
->setPageSize($limit);
|
37 |
|
38 |
$xmlRow = array();
|
39 |
$xml = new xml();
|
12 |
|
13 |
protected $offset;
|
14 |
|
15 |
+
protected $limit;
|
16 |
+
|
17 |
public function __construct() {
|
18 |
$this->offset = 1;
|
19 |
+
$this->limit = 100;
|
20 |
}
|
21 |
|
22 |
public function setOffset($offset = 1) {
|
25 |
}
|
26 |
}
|
27 |
|
28 |
+
public function setLimit($limit = 100) {
|
29 |
+
if (is_numeric($limit)) {
|
30 |
+
$this->limit = $limit;
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
/**
|
35 |
* Retrieves product details and generates the appropriate response to the request
|
36 |
*
|
37 |
*/
|
38 |
public function generate_xml() {
|
39 |
//limit the data parsed
|
|
|
40 |
$productCollection = Mage::getModel('catalog/product')->getCollection()
|
41 |
->addAttributeToSelect(array('product_id','name','description', 'short_description','price','url_path','image','thumbnail', 'small_image','special_price','sku','special_to_date', 'special_from_date'))
|
42 |
->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
|
43 |
->setCurPage($this->offset)
|
44 |
+
->setPageSize($this->limit);
|
45 |
|
46 |
$xmlRow = array();
|
47 |
$xml = new xml();
|
app/code/community/Swift/Swiftplugin/controllers/OrdersController.php
CHANGED
@@ -18,7 +18,9 @@ class Swift_Swiftplugin_OrdersController extends Mage_Core_Controller_Front_Acti
|
|
18 |
$domain = $_SERVER['HTTP_HOST'];
|
19 |
$user = Mage::helper('swift/Data')->generateUserId();
|
20 |
$url = 'http:'.SwiftApi::SWIFTAPI_CRM_URL;
|
21 |
-
$limit =
|
|
|
|
|
22 |
|
23 |
$orderCollection = Mage::getModel('sales/order')->getCollection()
|
24 |
->addFieldToSelect(array(
|
@@ -28,51 +30,60 @@ class Swift_Swiftplugin_OrdersController extends Mage_Core_Controller_Front_Acti
|
|
28 |
'customer_lastName',
|
29 |
'created_at'
|
30 |
))
|
31 |
-
->addAttributeToFilter('created_at' , array('gt' => date('Y-m-d
|
32 |
-
->setCurPage($
|
33 |
-
->setPageSize($limit)
|
|
|
34 |
|
35 |
-
$
|
36 |
-
foreach($orderCollection as $order) {
|
37 |
|
38 |
-
$
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
45 |
-
$request = new SwiftAPI_Request_PastOrder($domain, $user, $order->getCustomerEmail(), $order->getCustomerFirstname(), $order->getCustomerLastname(), $products, $order->getId(), null, null, $order->getCreatedAt());
|
46 |
-
|
47 |
-
$options = array (
|
48 |
-
'http' => array(
|
49 |
-
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
|
50 |
-
'method' => 'POST',
|
51 |
-
'content' => SwiftAPI::Query($request, $key)
|
52 |
-
)
|
53 |
-
);
|
54 |
-
|
55 |
-
$context = stream_context_create($options);
|
56 |
-
file_get_contents($url, false, $context);
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
64 |
}
|
65 |
else {
|
66 |
$response = array();
|
67 |
-
$response['status'] =
|
68 |
-
$response['message'] =
|
69 |
}
|
70 |
}
|
71 |
else {
|
72 |
$response = array();
|
73 |
$response['status'] = 0;
|
74 |
$response['message'] = 'You cannot perform this operation as you have not registered your private key with swift';
|
75 |
-
}
|
|
|
76 |
echo json_encode($response);
|
77 |
|
78 |
}
|
18 |
$domain = $_SERVER['HTTP_HOST'];
|
19 |
$user = Mage::helper('swift/Data')->generateUserId();
|
20 |
$url = 'http:'.SwiftApi::SWIFTAPI_CRM_URL;
|
21 |
+
$limit = is_numeric($this->getRequest()->getParam('limit')) ? $this->getRequest()->getParam('limit') : 500;
|
22 |
+
$offset = is_numeric($this->getRequest()->getParam('offset')) ? $this->getRequest()->getParam('offset') : 1;
|
23 |
+
$date = $this->getRequest()->getParam('date') ? $this->getRequest()->getParam('date') : date('Y-m-d');
|
24 |
|
25 |
$orderCollection = Mage::getModel('sales/order')->getCollection()
|
26 |
->addFieldToSelect(array(
|
30 |
'customer_lastName',
|
31 |
'created_at'
|
32 |
))
|
33 |
+
->addAttributeToFilter('created_at' , array('gt' => date('Y-m-d', strtotime($date.'-2 years'))))
|
34 |
+
->setCurPage($offset)
|
35 |
+
->setPageSize($limit)
|
36 |
+
->setOrder('created_at', 'ASC');
|
37 |
|
38 |
+
if ($offset <= $orderCollection->getLastPageNumber()) {
|
|
|
39 |
|
40 |
+
foreach($orderCollection as $order) {
|
41 |
+
|
42 |
+
$visibleItems = $order->getAllVisibleItems();
|
43 |
+
$products = array();
|
44 |
+
|
45 |
+
foreach($visibleItems as $order_item_key => $orderItem) {
|
46 |
+
$products[] = array('product' => $orderItem->getId(), 'price' => $orderItem->getPrice(), 'quantity' => $orderItem->getData('qty_ordered'));
|
47 |
+
}
|
48 |
+
|
49 |
+
$request = new SwiftAPI_Request_PastOrder($domain, $user, $order->getCustomerEmail(), $order->getCustomerFirstname(), $order->getCustomerLastname(), $products, $order->getId(), null, null, $order->getCreatedAt());
|
50 |
+
|
51 |
+
$options = array (
|
52 |
+
'http' => array(
|
53 |
+
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
|
54 |
+
'method' => 'POST',
|
55 |
+
'content' => SwiftAPI::Query($request, $key)
|
56 |
+
)
|
57 |
+
);
|
58 |
+
|
59 |
+
$context = stream_context_create($options);
|
60 |
+
file_get_contents($url, false, $context);
|
61 |
+
|
62 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
64 |
+
if ($limit > $orderCollection->count()) {
|
65 |
+
$response = array();
|
66 |
+
$response['status'] = 3;
|
67 |
+
$response['message'] = 'No more orders to send at this time, but has not fetched a full '. $limit;
|
68 |
+
}
|
69 |
+
else {
|
70 |
+
$response = array();
|
71 |
+
$response['status'] = 1;
|
72 |
+
$response['message'] = 'Past orders successfully sent to swift';
|
73 |
+
}
|
74 |
}
|
75 |
else {
|
76 |
$response = array();
|
77 |
+
$response['status'] = 2;
|
78 |
+
$response['message'] = 'No more orders to send at this time';
|
79 |
}
|
80 |
}
|
81 |
else {
|
82 |
$response = array();
|
83 |
$response['status'] = 0;
|
84 |
$response['message'] = 'You cannot perform this operation as you have not registered your private key with swift';
|
85 |
+
}
|
86 |
+
|
87 |
echo json_encode($response);
|
88 |
|
89 |
}
|
app/code/community/Swift/Swiftplugin/controllers/XmlController.php
CHANGED
@@ -5,6 +5,7 @@ class Swift_Swiftplugin_XmlController extends Mage_Core_Controller_Front_Action
|
|
5 |
public function feedAction() {
|
6 |
$obj = new Swift_Swiftplugin_Model_XmlProduct();
|
7 |
$obj->setOffset($this->getRequest()->getParam('offset'));
|
|
|
8 |
$obj->generate_xml();
|
9 |
}
|
10 |
}
|
5 |
public function feedAction() {
|
6 |
$obj = new Swift_Swiftplugin_Model_XmlProduct();
|
7 |
$obj->setOffset($this->getRequest()->getParam('offset'));
|
8 |
+
$obj->setLimit($this->getRequest()->getParam('limit'));
|
9 |
$obj->generate_xml();
|
10 |
}
|
11 |
}
|
app/code/community/Swift/Swiftplugin/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Swift_Swiftplugin>
|
5 |
-
<version>1.
|
6 |
</Swift_Swiftplugin>
|
7 |
</modules>
|
8 |
<frontend>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Swift_Swiftplugin>
|
5 |
+
<version>1.6.0</version>
|
6 |
</Swift_Swiftplugin>
|
7 |
</modules>
|
8 |
<frontend>
|
lib/SwiftAPI/SwiftAPI.php
CHANGED
@@ -13,20 +13,21 @@ class SwiftAPI
|
|
13 |
|
14 |
const VERSION = 3;
|
15 |
|
16 |
-
const OPERATION_HOME
|
17 |
-
const OPERATION_PRODUCT
|
18 |
-
const OPERATION_CART
|
19 |
-
const OPERATION_ORDER
|
20 |
-
const OPERATION_PASTORDER
|
21 |
-
const OPERATION_SUBSCRIPTION= 'subscription';
|
22 |
-
const OPERATION_VIEWMAIL
|
23 |
-
const OPERATION_SENDMAIL
|
24 |
-
const OPERATION_UNSUBSCRIBE
|
|
|
25 |
const OPERATION_PING = 'ping';
|
26 |
-
const
|
27 |
-
const
|
28 |
|
29 |
-
const SWIFTAPI_CRM_URL
|
30 |
|
31 |
|
32 |
//////////////////////////////////////////////////////////////////////////////
|
@@ -79,8 +80,9 @@ class SwiftAPI
|
|
79 |
$json = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv), "\0");
|
80 |
|
81 |
// Decode json object.
|
82 |
-
if(!($fields = json_decode($json)))
|
83 |
throw new SwiftAPI_Exception('SwiftAPI::Decode(): ' . json_last_error_msg());
|
|
|
84 |
|
85 |
// Create a SwiftAPI_Request object.
|
86 |
$request = SwiftAPI_Request::Create($fields);
|
13 |
|
14 |
const VERSION = 3;
|
15 |
|
16 |
+
const OPERATION_HOME = 'home';
|
17 |
+
const OPERATION_PRODUCT = 'product';
|
18 |
+
const OPERATION_CART = 'cart';
|
19 |
+
const OPERATION_ORDER = 'order';
|
20 |
+
const OPERATION_PASTORDER = 'pastorder';
|
21 |
+
const OPERATION_SUBSCRIPTION = 'subscription';
|
22 |
+
const OPERATION_VIEWMAIL = 'viewmail';
|
23 |
+
const OPERATION_SENDMAIL = 'sendmail';
|
24 |
+
const OPERATION_UNSUBSCRIBE = 'unsubscribe';
|
25 |
+
const OPERATION_EMAILPACKAGE = 'emailpackage';
|
26 |
const OPERATION_PING = 'ping';
|
27 |
+
const OPERATION_ORDERPACKAGE = 'orderpackage';
|
28 |
+
const OPERATION_VERSION = 'version';
|
29 |
|
30 |
+
const SWIFTAPI_CRM_URL = '//api.swiftcrm.net';
|
31 |
|
32 |
|
33 |
//////////////////////////////////////////////////////////////////////////////
|
80 |
$json = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv), "\0");
|
81 |
|
82 |
// Decode json object.
|
83 |
+
if(!($fields = json_decode($json))) {
|
84 |
throw new SwiftAPI_Exception('SwiftAPI::Decode(): ' . json_last_error_msg());
|
85 |
+
}
|
86 |
|
87 |
// Create a SwiftAPI_Request object.
|
88 |
$request = SwiftAPI_Request::Create($fields);
|
lib/SwiftAPI/SwiftAPI_Request.php
CHANGED
@@ -14,6 +14,7 @@ require_once('SwiftAPI_Request_ViewMail.php');
|
|
14 |
require_once('SwiftAPI_Request_SendMail.php');
|
15 |
require_once('SwiftAPI_Request_EmailPackage.php');
|
16 |
require_once('SwiftAPI_Request_OrderPackage.php');
|
|
|
17 |
|
18 |
|
19 |
abstract class SwiftAPI_Request
|
@@ -44,7 +45,14 @@ abstract class SwiftAPI_Request
|
|
44 |
$this -> operation = $operation;
|
45 |
$this -> user = $user;
|
46 |
$this -> version = $version ? $version : SwiftAPI::VERSION;
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}
|
49 |
|
50 |
|
@@ -88,6 +96,8 @@ abstract class SwiftAPI_Request
|
|
88 |
return SwiftAPI_Request_EmailPackage::Create($fields);
|
89 |
case SwiftAPI::OPERATION_ORDERPACKAGE:
|
90 |
return SwiftAPI_Request_OrderPackage::Create($fields);
|
|
|
|
|
91 |
default:
|
92 |
throw new SwiftAPI_Exception('SwiftAPI_Request::Create(): Invalid operation: "' . $fields -> operation . '".');
|
93 |
}
|
14 |
require_once('SwiftAPI_Request_SendMail.php');
|
15 |
require_once('SwiftAPI_Request_EmailPackage.php');
|
16 |
require_once('SwiftAPI_Request_OrderPackage.php');
|
17 |
+
require_once('SwiftAPI_Request_Version.php');
|
18 |
|
19 |
|
20 |
abstract class SwiftAPI_Request
|
45 |
$this -> operation = $operation;
|
46 |
$this -> user = $user;
|
47 |
$this -> version = $version ? $version : SwiftAPI::VERSION;
|
48 |
+
try {
|
49 |
+
$dateTime = new DateTime();
|
50 |
+
}
|
51 |
+
catch(Exception $ex) {
|
52 |
+
$dateTime = new DateTime('UTC');
|
53 |
+
}
|
54 |
+
|
55 |
+
$this -> date = $date ? $date : $dateTime->format('Y-m-d H:i:s');
|
56 |
}
|
57 |
|
58 |
|
96 |
return SwiftAPI_Request_EmailPackage::Create($fields);
|
97 |
case SwiftAPI::OPERATION_ORDERPACKAGE:
|
98 |
return SwiftAPI_Request_OrderPackage::Create($fields);
|
99 |
+
case SwiftAPI::OPERATION_VERSION:
|
100 |
+
return SwiftAPI_Request_Version::Create($fields);
|
101 |
default:
|
102 |
throw new SwiftAPI_Exception('SwiftAPI_Request::Create(): Invalid operation: "' . $fields -> operation . '".');
|
103 |
}
|
lib/SwiftAPI/SwiftAPI_Request_Order.php
CHANGED
@@ -36,7 +36,6 @@ class SwiftAPI_Request_Order extends SwiftAPI_Request
|
|
36 |
$this -> orderId = $orderId;
|
37 |
$this -> orderStatus = $orderStatus;
|
38 |
|
39 |
-
|
40 |
parent::__construct($domain, SwiftAPI::OPERATION_ORDER, $user, $version, $date);
|
41 |
}
|
42 |
|
36 |
$this -> orderId = $orderId;
|
37 |
$this -> orderStatus = $orderStatus;
|
38 |
|
|
|
39 |
parent::__construct($domain, SwiftAPI::OPERATION_ORDER, $user, $version, $date);
|
40 |
}
|
41 |
|
lib/SwiftAPI/SwiftAPI_Request_OrderPackage.php
CHANGED
@@ -32,11 +32,11 @@ class SwiftAPI_Request_OrderPackage extends SwiftAPI_Request {
|
|
32 |
parent::Validate($fields);
|
33 |
|
34 |
if(!is_array($fields -> orderPackage))
|
35 |
-
throw new SwiftAPI_Exception('SwiftAPI_Request_OrderPackage::Create(): "
|
36 |
|
37 |
foreach ($fields -> orderPackage as $email_content) {
|
38 |
if (!(is_object($email_content))) {
|
39 |
-
throw new SwiftAPI_Exception('SwiftAPI_Request_OrderPackage::Create(): "
|
40 |
}
|
41 |
}
|
42 |
|
32 |
parent::Validate($fields);
|
33 |
|
34 |
if(!is_array($fields -> orderPackage))
|
35 |
+
throw new SwiftAPI_Exception('SwiftAPI_Request_OrderPackage::Create(): "orderPackage" field is missing.');
|
36 |
|
37 |
foreach ($fields -> orderPackage as $email_content) {
|
38 |
if (!(is_object($email_content))) {
|
39 |
+
throw new SwiftAPI_Exception('SwiftAPI_Request_OrderPackage::Create(): "orderPackage" does not contain the class SwiftAPI_Request_Order.');
|
40 |
}
|
41 |
}
|
42 |
|
lib/SwiftAPI/SwiftAPI_Request_Version.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
////////////////////////////////////////////////////////////////////////////////
|
4 |
+
// Class: SwiftAPI_Request_Version
|
5 |
+
////////////////////////////////////////////////////////////////////////////////
|
6 |
+
|
7 |
+
|
8 |
+
class SwiftAPI_Request_Version extends SwiftAPI_Request
|
9 |
+
{
|
10 |
+
|
11 |
+
//////////////////////////////////////////////////////////////////////////////
|
12 |
+
// Public properties.
|
13 |
+
//////////////////////////////////////////////////////////////////////////////
|
14 |
+
|
15 |
+
public $data;
|
16 |
+
|
17 |
+
//////////////////////////////////////////////////////////////////////////////
|
18 |
+
// Public functions
|
19 |
+
//////////////////////////////////////////////////////////////////////////////
|
20 |
+
|
21 |
+
////////////////////////
|
22 |
+
// Public: __construct()
|
23 |
+
////////////////////////
|
24 |
+
|
25 |
+
public function __construct($domain, $data) {
|
26 |
+
$this -> data = $data;
|
27 |
+
parent::__construct($domain, SwiftAPI::OPERATION_VERSION, null, null, null);
|
28 |
+
}
|
29 |
+
|
30 |
+
///////////////////
|
31 |
+
// Public: Create()
|
32 |
+
///////////////////
|
33 |
+
|
34 |
+
public static function Create(stdClass $fields) {
|
35 |
+
|
36 |
+
if(empty($fields -> data))
|
37 |
+
throw new SwiftAPI_Exception('SwiftAPI_Request_Version::Create(): "data" field is missing or empty.');
|
38 |
+
|
39 |
+
return new self
|
40 |
+
(
|
41 |
+
$fields -> domain,
|
42 |
+
$fields -> data
|
43 |
+
);
|
44 |
+
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
lib/SwiftAPI/doc/SwiftAPI-Specification.html
CHANGED
@@ -79,20 +79,12 @@
|
|
79 |
</tr>
|
80 |
<tr>
|
81 |
<td>sendmail</td>
|
82 |
-
<td>The Swift system has generated an email to be sent by a clients site
|
83 |
</tr>
|
84 |
<tr>
|
85 |
<td>unsubscribe</td>
|
86 |
<td>A user unsubscribes from the Swift system.</td>
|
87 |
</tr>
|
88 |
-
<tr>
|
89 |
-
<td>ping</td>
|
90 |
-
<td>To confirm to the Swift system the plugin is sending data.</td>
|
91 |
-
</tr>
|
92 |
-
<tr>
|
93 |
-
<td>emailpackage</td>
|
94 |
-
<td>Packages a group of emails to send to the clients website. <strong>Not</strong> for sending to the swift system, this is what is sent to the clients website.</td>
|
95 |
-
</tr>
|
96 |
</tbody>
|
97 |
</table>
|
98 |
|
@@ -222,34 +214,6 @@
|
|
222 |
<td></td>
|
223 |
<td>Message content for a swift email.</td>
|
224 |
</tr>
|
225 |
-
<tr>
|
226 |
-
<td>key</td>
|
227 |
-
<td>String</td>
|
228 |
-
<td>ping</td>
|
229 |
-
<td></td>
|
230 |
-
<td>The Swift system key recieved upon registration.</td>
|
231 |
-
</tr>
|
232 |
-
<tr>
|
233 |
-
<td>monitor</td>
|
234 |
-
<td>Boolean</td>
|
235 |
-
<td>sendmail</td>
|
236 |
-
<td></td>
|
237 |
-
<td>A flag to indicate an email is being monitored.</td>
|
238 |
-
</tr>
|
239 |
-
<tr>
|
240 |
-
<td>emailId</td>
|
241 |
-
<td>String</td>
|
242 |
-
<td>sendmail, viewmail</td>
|
243 |
-
<td></td>
|
244 |
-
<td>A unique identifier from Swift system for logging.</td>
|
245 |
-
</tr>
|
246 |
-
<tr>
|
247 |
-
<td>emailPackage</td>
|
248 |
-
<td>Array</td>
|
249 |
-
<td>emailpackage</td>
|
250 |
-
<td></td>
|
251 |
-
<td>An array of JSON objects containing the fields sendmail required fields</td>
|
252 |
-
</tr>
|
253 |
</tbody>
|
254 |
</table>
|
255 |
|
@@ -280,39 +244,6 @@
|
|
280 |
</tr>
|
281 |
</tbody>
|
282 |
</table>
|
283 |
-
|
284 |
-
<h2>Transfer Methods</h2>
|
285 |
-
<p>You can send the data string across different transfer methods such as SOAP. Here is an example request via JS:</p>
|
286 |
-
<pre><script language="javascript" type="text/javascript">
|
287 |
-
window.onload = function()
|
288 |
-
{
|
289 |
-
// notice the version, domain and data attributes in the request
|
290 |
-
var query = "version=3&domain=test_magento.clients.netready.biz&data=ypyiyeQE8Ve3FGNySm9YQ2t%2BGFOnwzPrs3Eh%2Bo9bAu9BgnNVqEPSU%2FGt1CwwvV6WdezRSm%2FKp2OK7nt95A1oYLkIt7LPdA0mX%2F2pucHHoiriBtdL%2F4lAk%2BdE4T0i7VcXb4OKZWMczv7n2%2FMygvBD03w%2F1kVNFHWAlQGhDYP5fDg16%2FhKGHB6jUdRTfUavWR7GG8jIv2obzLZs%2FXVoO%2BSFyB6Q%2FGNJ1hNZBgkqb6Zq7%2ByyjpcVc20s%2FB1%2BmUPOqHPTklu6GINtwsxq4tFANU7OHL10nS8fcYVUuDAOfav98o%3D";
|
291 |
-
var http;
|
292 |
-
|
293 |
-
// IE7+, Firefox, Chrome, Opera, Safari.
|
294 |
-
if(window.XMLHttpRequest)
|
295 |
-
http=new XMLHttpRequest();
|
296 |
-
|
297 |
-
// IE6, IE5.
|
298 |
-
else
|
299 |
-
http=new ActiveXObject("Microsoft.XMLHTTP");
|
300 |
-
|
301 |
-
http.open("POST","//api.swiftcrm.net", true);
|
302 |
-
|
303 |
-
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
304 |
-
http.setRequestHeader("Content-length", query.length);
|
305 |
-
http.setRequestHeader("Connection", "close");
|
306 |
-
|
307 |
-
http.onreadystatechange= function()
|
308 |
-
{
|
309 |
-
if (http.readyState==4 && http.status==200)
|
310 |
-
console.log("success");
|
311 |
-
}
|
312 |
-
|
313 |
-
http.send(query);
|
314 |
-
}
|
315 |
-
</script></pre>
|
316 |
|
317 |
</body>
|
318 |
|
79 |
</tr>
|
80 |
<tr>
|
81 |
<td>sendmail</td>
|
82 |
+
<td>The Swift system has generated an email to be sent by a clients site.</td>
|
83 |
</tr>
|
84 |
<tr>
|
85 |
<td>unsubscribe</td>
|
86 |
<td>A user unsubscribes from the Swift system.</td>
|
87 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
</tbody>
|
89 |
</table>
|
90 |
|
214 |
<td></td>
|
215 |
<td>Message content for a swift email.</td>
|
216 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
</tbody>
|
218 |
</table>
|
219 |
|
244 |
</tr>
|
245 |
</tbody>
|
246 |
</table>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247 |
|
248 |
</body>
|
249 |
|
lib/SwiftAPI/doc/SwiftAPI-Specification_v3.html
ADDED
@@ -0,0 +1,326 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<html>
|
2 |
+
|
3 |
+
<head>
|
4 |
+
<title>SwiftAPI Specification</title>
|
5 |
+
|
6 |
+
<style>
|
7 |
+
body
|
8 |
+
{
|
9 |
+
font-family: sans-serif;
|
10 |
+
color: #333;
|
11 |
+
}
|
12 |
+
|
13 |
+
table
|
14 |
+
{
|
15 |
+
border-collapse: collapse;
|
16 |
+
}
|
17 |
+
|
18 |
+
thead
|
19 |
+
{
|
20 |
+
background-color: LightSteelBlue;
|
21 |
+
border-bottom: 3px double Gray;
|
22 |
+
}
|
23 |
+
|
24 |
+
td, th
|
25 |
+
{
|
26 |
+
border:1px solid Gray;
|
27 |
+
padding: 0.2em;
|
28 |
+
}
|
29 |
+
</style>
|
30 |
+
|
31 |
+
</head>
|
32 |
+
|
33 |
+
<body>
|
34 |
+
|
35 |
+
<h1>SwiftAPI Specification</h1>
|
36 |
+
|
37 |
+
<h2>Version</h2>
|
38 |
+
<p>3</p>
|
39 |
+
|
40 |
+
<h2>Overview</h2>
|
41 |
+
<p>This document details the operations, transfer method, fields, and encryption scheme used to implement the SwiftAPI.</p>
|
42 |
+
|
43 |
+
<h2 id="Operations">Operations</h2>
|
44 |
+
<table>
|
45 |
+
<thead>
|
46 |
+
<tr>
|
47 |
+
<th>Operation</th>
|
48 |
+
<th>Incoming / Outgoing to Plugin Operation</th>
|
49 |
+
<th>Description</th>
|
50 |
+
</tr>
|
51 |
+
</thead>
|
52 |
+
<tbody>
|
53 |
+
<tr>
|
54 |
+
<td>home</td>
|
55 |
+
<td>outgoing</td>
|
56 |
+
<td>A user visits the website's homepage.</td>
|
57 |
+
</tr>
|
58 |
+
<tr>
|
59 |
+
<td>product</td>
|
60 |
+
<td>outgoing</td>
|
61 |
+
<td>A user visits a product details page - a page that lists all information about a single product.</td>
|
62 |
+
</tr>
|
63 |
+
<tr>
|
64 |
+
<td>cart</td>
|
65 |
+
<td>outgoing</td>
|
66 |
+
<td>A user adds products to the shopping cart.</td>
|
67 |
+
</tr>
|
68 |
+
<tr>
|
69 |
+
<td>order</td>
|
70 |
+
<td>outgoing</td>
|
71 |
+
<td>A user successfully places an order on the website.</td>
|
72 |
+
</tr>
|
73 |
+
<tr>
|
74 |
+
<td>pastorder</td>
|
75 |
+
<td>outgoing</td>
|
76 |
+
<td>When a client first sets up the plugin on their website it will send all historical order data to the Swift system, unless the client decides to opt out.</td>
|
77 |
+
</tr>
|
78 |
+
<tr>
|
79 |
+
<td>subscription</td>
|
80 |
+
<td>outgoing</td>
|
81 |
+
<td>A user submits their email address to join a newsletter using Magento's standard newsletter subscription feature.</td>
|
82 |
+
</tr>
|
83 |
+
<tr>
|
84 |
+
<td>viewmail</td>
|
85 |
+
<td>n/a</td>
|
86 |
+
<td>A user accesses the website via a link in one of the SwiftERM system's emails.</td>
|
87 |
+
</tr>
|
88 |
+
<tr>
|
89 |
+
<td>unsubscribe</td>
|
90 |
+
<td>n/a</td>
|
91 |
+
<td>A user unsubscribes from the SwiftERM system the system will not send them anymore emails.</td>
|
92 |
+
</tr>
|
93 |
+
<tr>
|
94 |
+
<td>emailpackage</td>
|
95 |
+
<td>incoming</td>
|
96 |
+
<td>The SwiftERM system has generated a series of emails to be sent by a client's site.</td>
|
97 |
+
</tr>
|
98 |
+
<tr>
|
99 |
+
<td>sendmail</td>
|
100 |
+
<td>incoming via emailpackage</td>
|
101 |
+
<td>The Swift system has generated an email to be sent by a client's site.</td>
|
102 |
+
</tr>
|
103 |
+
<tr>
|
104 |
+
<td>ping</td>
|
105 |
+
<td>outgoing</td>
|
106 |
+
<td>Upon registration, it tells SwiftERM that the plugin is ready to send data.</td>
|
107 |
+
</tr>
|
108 |
+
</tbody>
|
109 |
+
</table>
|
110 |
+
|
111 |
+
<h2>Transfer Method</h2>
|
112 |
+
<p>Requests to the API will be send via <strong>HTTPS POST</strong>.</p>
|
113 |
+
|
114 |
+
<h2>POST Format</h2>
|
115 |
+
<table>
|
116 |
+
<thead>
|
117 |
+
<tr>
|
118 |
+
<th>Key</th>
|
119 |
+
<th>Data Type</th>
|
120 |
+
<th>Description</th>
|
121 |
+
</tr>
|
122 |
+
</thead>
|
123 |
+
<tbody>
|
124 |
+
<tr>
|
125 |
+
<td>version</td>
|
126 |
+
<td>Integer</td>
|
127 |
+
<td>The API version number.</td>
|
128 |
+
</tr>
|
129 |
+
<tr>
|
130 |
+
<td>domain</td>
|
131 |
+
<td>String</td>
|
132 |
+
<td>The domain name of the SwiftERM clients site.</td>
|
133 |
+
</tr>
|
134 |
+
<tr>
|
135 |
+
<td>data</td>
|
136 |
+
<td>String</td>
|
137 |
+
<td>A <strong>base64</strong> encoded string containing an <strong>AES-256</strong> initialization vector followed by a <strong>AES-256</strong> encrypted <strong>JSON</strong> object comprised of the <a href="#DataFields">Data Fields</a> listed below.</td>
|
138 |
+
</tr>
|
139 |
+
</tbody>
|
140 |
+
</table>
|
141 |
+
|
142 |
+
<h2 id="DataFields">Data Fields</h2>
|
143 |
+
<table>
|
144 |
+
<thead>
|
145 |
+
<tr>
|
146 |
+
<th>Field</th>
|
147 |
+
<th>Data Type</th>
|
148 |
+
<th>Required for Operations</th>
|
149 |
+
<th>Optional for Operations</th>
|
150 |
+
<th>Description</th>
|
151 |
+
</tr>
|
152 |
+
</thead>
|
153 |
+
<tbody>
|
154 |
+
<tr>
|
155 |
+
<td>domain</td>
|
156 |
+
<td>String</td>
|
157 |
+
<td>ALL</td>
|
158 |
+
<td></td>
|
159 |
+
<td>The domain name of the SwiftERM clients site. (This is required to be duplicated in the data section to prevent forged requests.)</td>
|
160 |
+
</tr>
|
161 |
+
<tr>
|
162 |
+
<td>date</td>
|
163 |
+
<td>String - <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO 8601 Date</a></td>
|
164 |
+
<td>ALL</td>
|
165 |
+
<td></td>
|
166 |
+
<td>An ISO Date when the request was generated in the format YYYY-MM-DDThh:mm e.g. 2007-04-05T14:30</td>
|
167 |
+
</tr>
|
168 |
+
<tr>
|
169 |
+
<td>operation</td>
|
170 |
+
<td>String - <a href="#Operations">SwiftAPI Operation ID</a></td>
|
171 |
+
<td>ALL</td>
|
172 |
+
<td></td>
|
173 |
+
<td>One of the <a href="#Operations">SwiftAPI operation ID's</a></td>
|
174 |
+
</tr>
|
175 |
+
<tr>
|
176 |
+
<td>user</td>
|
177 |
+
<td>String - <a href="http://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a></td>
|
178 |
+
<td>ALL</td>
|
179 |
+
<td></td>
|
180 |
+
<td>A universally unique identifier generated by the SwiftERM client site/plugin used to identify a user over the duration of their visit to a site.</td>
|
181 |
+
</tr>
|
182 |
+
<tr>
|
183 |
+
<td>url</td>
|
184 |
+
<td>String</td>
|
185 |
+
<td>home</td>
|
186 |
+
<td></td>
|
187 |
+
<td>The URL of the page where the API request was triggered.</td>
|
188 |
+
</tr>
|
189 |
+
<tr>
|
190 |
+
<td>email</td>
|
191 |
+
<td>String</td>
|
192 |
+
<td>order, pastorder, subscription, viewmail, sendmail, unsubscribe</td>
|
193 |
+
<td>home, product, cart</td>
|
194 |
+
<td>The users email address.</td>
|
195 |
+
</tr>
|
196 |
+
<tr>
|
197 |
+
<td>forename</td>
|
198 |
+
<td>String</td>
|
199 |
+
<td>order, pastorder</td>
|
200 |
+
<td></td>
|
201 |
+
<td>The users forename.</td>
|
202 |
+
</tr>
|
203 |
+
<tr>
|
204 |
+
<td>surname</td>
|
205 |
+
<td>String</td>
|
206 |
+
<td>order, pastorder</td>
|
207 |
+
<td></td>
|
208 |
+
<td>The users surname.</td>
|
209 |
+
<tr>
|
210 |
+
<td>product</td>
|
211 |
+
<td>String</td>
|
212 |
+
<td>product, viewmail</td>
|
213 |
+
<td></td>
|
214 |
+
<td>A site specific product identifier (Should correspond to ID's provided in the sites 'product XML file').</td>
|
215 |
+
</tr>
|
216 |
+
<tr>
|
217 |
+
<td>products</td>
|
218 |
+
<td>Array</td>
|
219 |
+
<td>cart, order, pastorder</td>
|
220 |
+
<td></td>
|
221 |
+
<td>An array of JSON objects containing <a href="#ProductFields">Product Fields</a>.</td>
|
222 |
+
</tr>
|
223 |
+
<tr>
|
224 |
+
<td>subject</td>
|
225 |
+
<td>String</td>
|
226 |
+
<td>sendmail</td>
|
227 |
+
<td></td>
|
228 |
+
<td>Message subject for a swift email.</td>
|
229 |
+
</tr>
|
230 |
+
<tr>
|
231 |
+
<td>body</td>
|
232 |
+
<td>String</td>
|
233 |
+
<td>sendmail</td>
|
234 |
+
<td></td>
|
235 |
+
<td>Message content for a swift email.</td>
|
236 |
+
</tr>
|
237 |
+
<tr>
|
238 |
+
<td>orderId</td>
|
239 |
+
<td>String</td>
|
240 |
+
<td>order, pastorder</td>
|
241 |
+
<td></td>
|
242 |
+
<td>The client system's unique order identifier, typically an order Id</td>
|
243 |
+
</tr>
|
244 |
+
<tr>
|
245 |
+
<td>orderStatus</td>
|
246 |
+
<td>String</td>
|
247 |
+
<td>order, pastorder</td>
|
248 |
+
<td></td>
|
249 |
+
<td>The client system order's current status of an order</td>
|
250 |
+
</tr>
|
251 |
+
<tr>
|
252 |
+
<td>emailId</td>
|
253 |
+
<td>String</td>
|
254 |
+
<td>viewmail, sendmail</td>
|
255 |
+
<td></td>
|
256 |
+
<td>The system identifier to identify what email was clicked on.</td>
|
257 |
+
</tr>
|
258 |
+
<tr>
|
259 |
+
<td>monitor</td>
|
260 |
+
<td>String</td>
|
261 |
+
<td>sendmail</td>
|
262 |
+
<td></td>
|
263 |
+
<td>If present, the client site shall also send an email to the email address specified in the field.</td>
|
264 |
+
</tr>
|
265 |
+
<tr>
|
266 |
+
<td>key</td>
|
267 |
+
<td>String</td>
|
268 |
+
<td>ping</td>
|
269 |
+
<td></td>
|
270 |
+
<td>The Site Key that the SwiftERM has generated.</td>
|
271 |
+
</tr>
|
272 |
+
<tr>
|
273 |
+
<td>emailPackage</td>
|
274 |
+
<td>String</td>
|
275 |
+
<td>emailpackage</td>
|
276 |
+
<td></td>
|
277 |
+
<td>Contains a collection of sendmail packages that were sent from the SwiftERM system.</td>
|
278 |
+
</tr>
|
279 |
+
<tr>
|
280 |
+
<td>site</td>
|
281 |
+
<td>String</td>
|
282 |
+
<td>emailpackage</td>
|
283 |
+
<td></td>
|
284 |
+
<td>Contains a site unique identifier in the SwiftERM system.</td>
|
285 |
+
</tr>
|
286 |
+
<tr>
|
287 |
+
<td>is_mail_function</td>
|
288 |
+
<td>String</td>
|
289 |
+
<td>emailpackage</td>
|
290 |
+
<td></td>
|
291 |
+
<td>Tells the plugin to use mail function rather than smtp, if present.</td>
|
292 |
+
</tr>
|
293 |
+
</tbody>
|
294 |
+
</table>
|
295 |
+
|
296 |
+
<h2 id="ProductFields">Product Fields</h2>
|
297 |
+
<table>
|
298 |
+
<thead>
|
299 |
+
<tr>
|
300 |
+
<th>Field</th>
|
301 |
+
<th>Data Type</th>
|
302 |
+
<th>Description</th>
|
303 |
+
</tr>
|
304 |
+
</thead>
|
305 |
+
<tbody>
|
306 |
+
<tr>
|
307 |
+
<td>product</td>
|
308 |
+
<td>String</td>
|
309 |
+
<td>A site specific product identifier (Should correspond to ID's provided in the sites 'product XML file').</td>
|
310 |
+
</tr>
|
311 |
+
<tr>
|
312 |
+
<td>quantity</td>
|
313 |
+
<td>Integer</td>
|
314 |
+
<td>The number of products in the order.</td>
|
315 |
+
</tr>
|
316 |
+
<tr>
|
317 |
+
<td>price</td>
|
318 |
+
<td>String</td>
|
319 |
+
<td>The product price (May potentially differ from the value specified in the sites 'product XML file').</td>
|
320 |
+
</tr>
|
321 |
+
</tbody>
|
322 |
+
</table>
|
323 |
+
|
324 |
+
</body>
|
325 |
+
|
326 |
+
</html>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Swift_Swiftplugin</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/LGPL-3.0">LGPL</license>
|
7 |
<channel>community</channel>
|
@@ -18,11 +18,11 @@ The extension uses background JavaScript calls to collect and store the customer
|
|
18 |
<p>
|
19 |
The extension is easy to set up and uses Magento’s built in features to collect information and send emails to the customers. Visit swiftcrm.net for prices and free trails.
|
20 |
</p></description>
|
21 |
-
<notes>
|
22 |
<authors><author><name>Simon Cooper</name><user>Netready</user><email>simon@netready.biz</email></author></authors>
|
23 |
-
<date>2016-
|
24 |
-
<time>
|
25 |
-
<contents><target name="magelib"><dir name="libXML"><file name="xml.php" hash="c20ca4a39971acf4605247712186b9ec"/></dir><dir name="SwiftAPI"><file name="SwiftAPI.php" hash="
|
26 |
<compatible/>
|
27 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>mcrypt</name><min/><max/></extension></required></dependencies>
|
28 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Swift_Swiftplugin</name>
|
4 |
+
<version>1.6.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/LGPL-3.0">LGPL</license>
|
7 |
<channel>community</channel>
|
18 |
<p>
|
19 |
The extension is easy to set up and uses Magento’s built in features to collect information and send emails to the customers. Visit swiftcrm.net for prices and free trails.
|
20 |
</p></description>
|
21 |
+
<notes>Revamp of order feed and product to rely on parameters from the SwiftERM system.</notes>
|
22 |
<authors><author><name>Simon Cooper</name><user>Netready</user><email>simon@netready.biz</email></author></authors>
|
23 |
+
<date>2016-09-07</date>
|
24 |
+
<time>11:13:36</time>
|
25 |
+
<contents><target name="magelib"><dir name="libXML"><file name="xml.php" hash="c20ca4a39971acf4605247712186b9ec"/></dir><dir name="SwiftAPI"><file name="SwiftAPI.php" hash="8bb2f97586dbd62da6fd0d6781b67ae6"/><file name="SwiftAPI_Exception.php" hash="879b899a7961f4de1212b7296ccafb16"/><file name="SwiftAPI_Product.php" hash="063922cccb485d81c6022de5c4e8e044"/><file name="SwiftAPI_Request.php" hash="f072a4c42fe3767d769f8e9f9c824ecd"/><file name="SwiftAPI_Request_Cart.php" hash="f8955c78200ddb0512adb5214fd64bb2"/><file name="SwiftAPI_Request_EmailPackage.php" hash="1574f461582500a524160d3db8371d37"/><file name="SwiftAPI_Request_Home.php" hash="9268da121dd10db50d5c2675afd1c65e"/><file name="SwiftAPI_Request_Order.php" hash="49ff0d4c501b075f11ef94727d729a75"/><file name="SwiftAPI_Request_OrderPackage.php" hash="45ad4af3b24bfab66f96b493c830ceab"/><file name="SwiftAPI_Request_PastOrder.php" hash="90ac5fb44bd1ad61f39d277d268e3575"/><file name="SwiftAPI_Request_Ping.php" hash="e5e13b71682f8230711d5d2f28f9a534"/><file name="SwiftAPI_Request_Product.php" hash="e5fab27bb2dd45946ed8c143a18fe3c4"/><file name="SwiftAPI_Request_SendMail.php" hash="ba04382a3df6b3e179aed5fe3e809de7"/><file name="SwiftAPI_Request_Subscription.php" hash="5545738b941d8ca4dca69b6059a0cce4"/><file name="SwiftAPI_Request_Unsubscribe.php" hash="78aa37cc0ecb98d501674350a4a409c9"/><file name="SwiftAPI_Request_Version.php" hash="21cebd7eb59698bb0aae55bdeaa23660"/><file name="SwiftAPI_Request_ViewMail.php" hash="f0eb0236c7f6e1fa194d8f05f865a7d8"/><dir name="doc"><file name="SwiftAPI-Specification.html" hash="a31d6c9f13198d017f9f50ac787bea23"/><file name="SwiftAPI-Specification_v3.html" hash="17f8207291313730a72286901c61e44f"/></dir><file name="index.php" hash="82886bb98883bd5868ea04c7d8c88ba5"/><file name="php.ini" hash="ef29c923925a1d1bbc8879c22297daa4"/></dir></target><target name="magecommunity"><dir name="Swift"><dir name="Swiftplugin"><dir name="Block"><dir name="Adminhtml"><dir name="Swift"><dir name="Edit"><file name="Form.php" hash="bd80ab8170f7f2286f13ac579e5249d9"/><dir name="Tab"><file name="Form.php" hash="3d15c45cb2205acabc20376f41a9bd5b"/><file name="Instruct.php" hash="9f34075cc9cdfa92b7876c33fda514de"/></dir><file name="Tabs.php" hash="993769f682fad7d28df79ff3acea97cc"/></dir><file name="Edit.php" hash="d93f75dbaaa7266d91e828b3208fbf2d"/></dir></dir><file name="Swiftblock.php" hash="8b4f72297c8af67374c695b44003867d"/></dir><dir name="Helper"><file name="Data.php" hash="08be234d9cbc17ed98f67a5fd0ca9002"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Swift"><file name="Collection.php" hash="82de0fe56cd875d3e78c8fc690424ee1"/></dir><file name="Swift.php" hash="252d5f2ecb1119804b415758d2db6800"/></dir><file name="Observer.php" hash="8bb4dd498a57f1166ed1c85a2b8ab0e0"/><file name="Swift.php" hash="1f9e49d4db7f8987cfd8858061fedc6a"/><file name="XmlProduct.php" hash="f48e73024a4f1774f0f565d8c480534f"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="92604a30880c89fbe7885780520096cc"/></dir><file name="MailController.php" hash="af10fe5d485b1742ba5095510f2deea4"/><file name="OrdersController.php" hash="834b71ae87da73b7485535677c337620"/><file name="VersionController.php" hash="b9bebb51f946430a2dc7bfc82f96bf36"/><file name="XmlController.php" hash="e78cc03f619a75d43752e8bde42b0798"/></dir><dir name="etc"><file name="config.xml" hash="059d19d08acabd3d2af72295afa4247c"/></dir><dir name="sql"><dir name="swift_setup"><file name="install-1.1.13.php" hash="2447b5645fc36738373678473cec88dc"/><file name="install-1.1.2.php" hash="00832a00c34cb4c997a96330cb28cbfb"/><file name="upgrade-1.1.2-1.1.12.php" hash="cbe3c3fa07facb7b720d7dd518acbeca"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="swift.xml" hash="d80a5229e30cf4b76f5a5150ac1c27c3"/></dir><dir name="template"><dir name="swift"><file name="swiftplugin.phtml" hash="d4d25148e09529e457b6436d7655627b"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Swift_all.xml" hash="0ae5a788c805a9fc79b402fe7a02e54d"/></dir></target></contents>
|
26 |
<compatible/>
|
27 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>mcrypt</name><min/><max/></extension></required></dependencies>
|
28 |
</package>
|