Version Notes
Supports all versions of Magento
Download this release
Release Info
Developer | Magento Core Team |
Extension | Signifyd_Connect |
Version | 3.13.0 |
Comparing to | |
See all releases |
Code changes from version 3.12.3 to 3.13.0
- app/code/community/Signifyd/Connect/Block/Adminhtml/Sales/Order/Grid.php +1 -0
- app/code/community/Signifyd/Connect/Block/Renderer.php +9 -5
- app/code/community/Signifyd/Connect/Helper/.Data.php.swp +0 -0
- app/code/community/Signifyd/Connect/Helper/Data.php +123 -19
- app/code/community/Signifyd/Connect/Model/Observer.php +54 -2
- app/code/community/Signifyd/Connect/Model/Resource/Retries.php +10 -0
- app/code/community/Signifyd/Connect/Model/Resource/Retries/Collection.php +9 -0
- app/code/community/Signifyd/Connect/Model/Retries.php +10 -0
- app/code/community/Signifyd/Connect/controllers/ConnectController.php +39 -39
- app/code/community/Signifyd/Connect/etc/config.xml +12 -1
- app/code/community/Signifyd/Connect/etc/system.xml +1 -0
- app/code/community/Signifyd/Connect/sql/signifyd_connect_setup/mysql4-upgrade-3.12.0-3.13.0.php +15 -0
- package.xml +4 -4
app/code/community/Signifyd/Connect/Block/Adminhtml/Sales/Order/Grid.php
CHANGED
@@ -105,6 +105,7 @@ class Signifyd_Connect_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_B
|
|
105 |
'type' => 'text',
|
106 |
'index' => 'guarantee',
|
107 |
'filter' => false,
|
|
|
108 |
));
|
109 |
|
110 |
$this->addColumn('order_status', array(
|
105 |
'type' => 'text',
|
106 |
'index' => 'guarantee',
|
107 |
'filter' => false,
|
108 |
+
'renderer' => 'signifyd_connect/renderer',
|
109 |
));
|
110 |
|
111 |
$this->addColumn('order_status', array(
|
app/code/community/Signifyd/Connect/Block/Renderer.php
CHANGED
@@ -3,18 +3,22 @@
|
|
3 |
class Signifyd_Connect_Block_Renderer extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
4 |
{
|
5 |
public function render(Varien_Object $row)
|
6 |
-
{
|
7 |
$value = $row->getData($this->getColumn()->getIndex());
|
|
|
8 |
$helper = Mage::helper('signifyd_connect');
|
9 |
|
10 |
$url = $helper->getCaseUrl($row->getIncrementId());
|
11 |
|
12 |
-
if (
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
14 |
}
|
15 |
|
16 |
-
$value = floor($value);
|
17 |
-
|
18 |
if ($url) {
|
19 |
$value = "<a href=\"$url\" target=\"_blank\">$value</a>";
|
20 |
}
|
3 |
class Signifyd_Connect_Block_Renderer extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
4 |
{
|
5 |
public function render(Varien_Object $row)
|
6 |
+
{
|
7 |
$value = $row->getData($this->getColumn()->getIndex());
|
8 |
+
$column = $this->getColumn()->getId();
|
9 |
$helper = Mage::helper('signifyd_connect');
|
10 |
|
11 |
$url = $helper->getCaseUrl($row->getIncrementId());
|
12 |
|
13 |
+
if ($column == "score") {
|
14 |
+
if(!is_numeric($value)) {
|
15 |
+
return $helper->__('N/A');
|
16 |
+
}
|
17 |
+
$value = floor($value);
|
18 |
+
} else if ($column == "guarantee" && $value == "N/A") {
|
19 |
+
return $value;
|
20 |
}
|
21 |
|
|
|
|
|
22 |
if ($url) {
|
23 |
$value = "<a href=\"$url\" target=\"_blank\">$value</a>";
|
24 |
}
|
app/code/community/Signifyd/Connect/Helper/.Data.php.swp
ADDED
Binary file
|
app/code/community/Signifyd/Connect/Helper/Data.php
CHANGED
@@ -3,8 +3,30 @@
|
|
3 |
class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
4 |
{
|
5 |
const UNPROCESSED_STATUS = 0;
|
6 |
-
const
|
7 |
-
const
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
public function getProducts($quote)
|
10 |
{
|
@@ -164,9 +186,24 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
164 |
return null;
|
165 |
}
|
166 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
private function getTransactionId($payment)
|
168 |
{
|
169 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
}
|
171 |
|
172 |
public function getPurchase($order)
|
@@ -357,6 +394,7 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
357 |
$case['recipient'] = $this->getRecipient($order);
|
358 |
$case['card'] = $this->getCard($order, $payment);
|
359 |
$case['userAccount'] = $this->getUserAccount($customer, $order);
|
|
|
360 |
|
361 |
return $case;
|
362 |
}
|
@@ -440,8 +478,18 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
440 |
$orderIds = array_map('intval', explode(',', $orderIds));
|
441 |
}
|
442 |
if (!is_array($orderIds)) {
|
443 |
-
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
|
|
444 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
445 |
$collection = Mage::getModel('sales/order')->getCollection()
|
446 |
->addFieldToSelect('*')
|
447 |
->addFieldToFilter('entity_id', array('in' => $orderIds));
|
@@ -449,21 +497,26 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
449 |
foreach ($collection as $order) {
|
450 |
$result = $this->buildAndSendOrderToSignifyd($order, /*forceSend*/ true);
|
451 |
if($result == "sent") {
|
452 |
-
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')
|
|
|
453 |
} else if ($result == "exists") {
|
454 |
-
Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('adminhtml')
|
|
|
455 |
} else if ($result == "nodata") {
|
456 |
-
|
457 |
-
Mage::log("Request/Update not sent because there is no data", null, 'signifyd_connect.log');
|
458 |
-
}
|
459 |
} else {
|
460 |
-
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
|
|
461 |
}
|
462 |
}
|
|
|
|
|
|
|
463 |
}
|
464 |
} catch(Exception $ex) {
|
465 |
-
|
466 |
-
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
|
|
467 |
}
|
468 |
}
|
469 |
|
@@ -505,17 +558,50 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
505 |
if (substr($response_code, 0, 1) == '2') {
|
506 |
$response_data = json_decode($response->getRawResponse(), true);
|
507 |
|
|
|
508 |
$case_object = Mage::getModel('signifyd_connect/case')->load($case_object->getOrderIncrement());
|
509 |
$case_object->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
510 |
-
$case_object->setCode($
|
511 |
$case_object->setTransactionId($case['purchase']['transactionId']);
|
512 |
$case_object->save();
|
|
|
|
|
|
|
513 |
return "sent";
|
514 |
}
|
515 |
} catch (Exception $e) {
|
516 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
517 |
-
return "error";
|
518 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
519 |
}
|
520 |
}
|
521 |
|
@@ -558,8 +644,6 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
558 |
|
559 |
public function getStoreName()
|
560 |
{
|
561 |
-
$store = Mage::app()->getStore();
|
562 |
-
|
563 |
return Mage::getStoreConfig('trans_email/ident_general/name', 0);
|
564 |
}
|
565 |
|
@@ -581,10 +665,14 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
581 |
{
|
582 |
return self::TRANSACTION_SENT_STATUS;
|
583 |
}
|
584 |
-
else if ($case->
|
585 |
{
|
586 |
return self::CASE_CREATED_STATUS;
|
587 |
}
|
|
|
|
|
|
|
|
|
588 |
|
589 |
return self::UNPROCESSED_STATUS;
|
590 |
}
|
@@ -608,7 +696,23 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
608 |
$case->delete();
|
609 |
}
|
610 |
}
|
611 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
612 |
public function request($url, $data = null, $auth = null, $contenttype = "application/x-www-form-urlencoded",
|
613 |
$accept = null, $is_update = false)
|
614 |
{
|
@@ -640,7 +744,7 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
640 |
}
|
641 |
|
642 |
if ($data) {
|
643 |
-
if($is_update) curl_setopt($
|
644 |
else curl_setopt($curl, CURLOPT_POST, 1);
|
645 |
|
646 |
$headers[] = "Content-Type: $contenttype";
|
3 |
class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
4 |
{
|
5 |
const UNPROCESSED_STATUS = 0;
|
6 |
+
const ENTITY_CREATED_STATUS = 1;
|
7 |
+
const CASE_CREATED_STATUS = 2;
|
8 |
+
const TRANSACTION_SENT_STATUS = 3;
|
9 |
+
|
10 |
+
public function logRequest($message)
|
11 |
+
{
|
12 |
+
if (Mage::getStoreConfig('signifyd_connect/log/request')) {
|
13 |
+
Mage::log($message, null, 'signifyd_connect.log');
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
+
public function logResponse($message)
|
18 |
+
{
|
19 |
+
if (Mage::getStoreConfig('signifyd_connect/log/response')) {
|
20 |
+
Mage::log($message, null, 'signifyd_connect.log');
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
public function logError($message)
|
25 |
+
{
|
26 |
+
if (Mage::getStoreConfig('signifyd_connect/log/error')) {
|
27 |
+
Mage::log($message, null, 'signifyd_connect.log');
|
28 |
+
}
|
29 |
+
}
|
30 |
|
31 |
public function getProducts($quote)
|
32 |
{
|
186 |
return null;
|
187 |
}
|
188 |
|
189 |
+
private function getVersions()
|
190 |
+
{
|
191 |
+
$version = array();
|
192 |
+
$version['platform'] = 'magento';
|
193 |
+
$version['platformVersion'] = Mage::getVersion();
|
194 |
+
$version['pluginVersion'] = (string)(Mage::getConfig()->getNode()->modules->Signifyd_Connect->version);
|
195 |
+
return $version;
|
196 |
+
}
|
197 |
+
|
198 |
private function getTransactionId($payment)
|
199 |
{
|
200 |
+
$transId = $payment->getCcTransId();
|
201 |
+
if(is_array($transId) && is_string($transId[0])) {
|
202 |
+
$transId = $transId[0];
|
203 |
+
} else if(!is_string($transId)) {
|
204 |
+
$transId = null;
|
205 |
+
}
|
206 |
+
return $transId;
|
207 |
}
|
208 |
|
209 |
public function getPurchase($order)
|
394 |
$case['recipient'] = $this->getRecipient($order);
|
395 |
$case['card'] = $this->getCard($order, $payment);
|
396 |
$case['userAccount'] = $this->getUserAccount($customer, $order);
|
397 |
+
$case['clientVersion'] = $this->getVersions();
|
398 |
|
399 |
return $case;
|
400 |
}
|
478 |
$orderIds = array_map('intval', explode(',', $orderIds));
|
479 |
}
|
480 |
if (!is_array($orderIds)) {
|
481 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
482 |
+
->__('Please select order(s)'));
|
483 |
} else {
|
484 |
+
// Reference T2395
|
485 |
+
$user = "Unknown";
|
486 |
+
try {
|
487 |
+
$user = Mage::getSingleton('admin/session')->getUser()->getUsername();
|
488 |
+
} catch (Exception $ex) {
|
489 |
+
$this->logError($ex->__toString());
|
490 |
+
}
|
491 |
+
$this->logRequest("Bulk send initiated by: $user");
|
492 |
+
|
493 |
$collection = Mage::getModel('sales/order')->getCollection()
|
494 |
->addFieldToSelect('*')
|
495 |
->addFieldToFilter('entity_id', array('in' => $orderIds));
|
497 |
foreach ($collection as $order) {
|
498 |
$result = $this->buildAndSendOrderToSignifyd($order, /*forceSend*/ true);
|
499 |
if($result == "sent") {
|
500 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')
|
501 |
+
->__('Successfully sent order ' . $order->getIncrementId() . '.'));
|
502 |
} else if ($result == "exists") {
|
503 |
+
Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('adminhtml')
|
504 |
+
->__('Order ' . $order->getIncrementId() . ' has already been sent to Signifyd.'));
|
505 |
} else if ($result == "nodata") {
|
506 |
+
$this->logRequest("Request/Update not sent because there is no data");
|
|
|
|
|
507 |
} else {
|
508 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
509 |
+
->__('Order ' . $order->getIncrementId() . ' failed to send. See log for details.'));
|
510 |
}
|
511 |
}
|
512 |
+
if (Mage::getStoreConfig('signifyd_connect/log/request')) {
|
513 |
+
$this->logRequest("Bulk send complete");
|
514 |
+
}
|
515 |
}
|
516 |
} catch(Exception $ex) {
|
517 |
+
$this->logError($ex->__toString());
|
518 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
519 |
+
->__('Send failed. See log for details'));
|
520 |
}
|
521 |
}
|
522 |
|
558 |
if (substr($response_code, 0, 1) == '2') {
|
559 |
$response_data = json_decode($response->getRawResponse(), true);
|
560 |
|
561 |
+
$caseId = $response_data['investigationId'];
|
562 |
$case_object = Mage::getModel('signifyd_connect/case')->load($case_object->getOrderIncrement());
|
563 |
$case_object->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
564 |
+
$case_object->setCode($caseId);
|
565 |
$case_object->setTransactionId($case['purchase']['transactionId']);
|
566 |
$case_object->save();
|
567 |
+
|
568 |
+
$order->addStatusHistoryComment("Signifyd: case $caseId created for order");
|
569 |
+
$order->save(); // Note: this will trigger recursion
|
570 |
return "sent";
|
571 |
}
|
572 |
} catch (Exception $e) {
|
573 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
|
|
574 |
}
|
575 |
+
return "error";
|
576 |
+
}
|
577 |
+
}
|
578 |
+
|
579 |
+
/**
|
580 |
+
* Run through up to $max items in the retry queue
|
581 |
+
* @param int $max The maximum numbers of items to process
|
582 |
+
*/
|
583 |
+
public function processRetryQueue($max = 99999)
|
584 |
+
{
|
585 |
+
$failed_orders = Mage::getModel('signifyd_connect/retries')->getCollection();
|
586 |
+
$process_count = 0;
|
587 |
+
try {
|
588 |
+
foreach ($failed_orders as $order_id) {
|
589 |
+
if ($process_count++ >= $max) {
|
590 |
+
return;
|
591 |
+
}
|
592 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($order_id->getOrderIncrement());
|
593 |
+
$result = "unset";
|
594 |
+
if ($order != null && $this->processedStatus($order) < self::CASE_CREATED_STATUS) {
|
595 |
+
$result = $this->buildAndSendOrderToSignifyd($order, true);
|
596 |
+
}
|
597 |
+
if ($result !== "error") {
|
598 |
+
Mage::register('isSecureArea', true);
|
599 |
+
$order_id->delete();
|
600 |
+
Mage::unregister('isSecureArea');
|
601 |
+
}
|
602 |
+
}
|
603 |
+
} catch (Exception $e) {
|
604 |
+
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
605 |
}
|
606 |
}
|
607 |
|
644 |
|
645 |
public function getStoreName()
|
646 |
{
|
|
|
|
|
647 |
return Mage::getStoreConfig('trans_email/ident_general/name', 0);
|
648 |
}
|
649 |
|
665 |
{
|
666 |
return self::TRANSACTION_SENT_STATUS;
|
667 |
}
|
668 |
+
else if ($case->getCode())
|
669 |
{
|
670 |
return self::CASE_CREATED_STATUS;
|
671 |
}
|
672 |
+
else if ($case->getId())
|
673 |
+
{
|
674 |
+
return self::ENTITY_CREATED_STATUS;
|
675 |
+
}
|
676 |
|
677 |
return self::UNPROCESSED_STATUS;
|
678 |
}
|
696 |
$case->delete();
|
697 |
}
|
698 |
}
|
699 |
+
|
700 |
+
public function cancelGuarantee($case)
|
701 |
+
{
|
702 |
+
$caseId = $case->getCode();
|
703 |
+
$url = $this->getUrl() . "/$caseId/guarantee";
|
704 |
+
$body = json_encode(array("guaranteeDisposition" => "CANCELED"));
|
705 |
+
$response = $this->request($url, $body, $this->getAuth(), 'application/json', null, true);
|
706 |
+
$code = $response->getHttpCode();
|
707 |
+
if(substr($code, 0, 1) == '2') {
|
708 |
+
$case->setGuarantee('CANCELED');
|
709 |
+
$case->save();
|
710 |
+
} else {
|
711 |
+
$this->logError("Guarantee cancel failed");
|
712 |
+
}
|
713 |
+
$this->logResponse("Received $code from guarantee cancel");
|
714 |
+
}
|
715 |
+
|
716 |
public function request($url, $data = null, $auth = null, $contenttype = "application/x-www-form-urlencoded",
|
717 |
$accept = null, $is_update = false)
|
718 |
{
|
744 |
}
|
745 |
|
746 |
if ($data) {
|
747 |
+
if($is_update) curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
748 |
else curl_setopt($curl, CURLOPT_POST, 1);
|
749 |
|
750 |
$headers[] = "Content-Type: $contenttype";
|
app/code/community/Signifyd/Connect/Model/Observer.php
CHANGED
@@ -25,11 +25,28 @@ class Signifyd_Connect_Model_Observer extends Varien_Object
|
|
25 |
return;
|
26 |
}
|
27 |
|
28 |
-
Mage::helper('signifyd_connect')->buildAndSendOrderToSignifyd($order);
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
} catch (Exception $e) {
|
31 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
32 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
}
|
34 |
|
35 |
public function logData($order, $payment, $quote)
|
@@ -252,6 +269,7 @@ class Signifyd_Connect_Model_Observer extends Varien_Object
|
|
252 |
'type' => 'text',
|
253 |
'index' => 'guarantee',
|
254 |
'filter' => false,
|
|
|
255 |
'width' => '100px',
|
256 |
),
|
257 |
'status'
|
@@ -261,4 +279,38 @@ class Signifyd_Connect_Model_Observer extends Varien_Object
|
|
261 |
}
|
262 |
}
|
263 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
}
|
25 |
return;
|
26 |
}
|
27 |
|
28 |
+
$result = Mage::helper('signifyd_connect')->buildAndSendOrderToSignifyd($order);
|
29 |
+
if($result !== "error") {
|
30 |
+
if($result !== "notready") {
|
31 |
+
// Handle two of the retry items in queue
|
32 |
+
Mage::helper('signifyd_connect')->processRetryQueue(2);
|
33 |
+
}
|
34 |
+
return;
|
35 |
+
}
|
36 |
} catch (Exception $e) {
|
37 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
38 |
}
|
39 |
+
// If we get here, then we have failed to create the case.
|
40 |
+
$this->addToRetryQueue($order);
|
41 |
+
}
|
42 |
+
|
43 |
+
private function addToRetryQueue($order)
|
44 |
+
{
|
45 |
+
Mage::log("Add to retries", null, 'signifyd_connect.log');
|
46 |
+
$order_tag = Mage::getModel('signifyd_connect/retries');
|
47 |
+
$order_tag->setOrderIncrement($order->getIncrementId());
|
48 |
+
$order_tag->setCreated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
49 |
+
$order_tag->save();
|
50 |
}
|
51 |
|
52 |
public function logData($order, $payment, $quote)
|
269 |
'type' => 'text',
|
270 |
'index' => 'guarantee',
|
271 |
'filter' => false,
|
272 |
+
'renderer' => 'signifyd_connect/renderer',
|
273 |
'width' => '100px',
|
274 |
),
|
275 |
'status'
|
279 |
}
|
280 |
}
|
281 |
}
|
282 |
+
|
283 |
+
public function handleCancel($order)
|
284 |
+
{
|
285 |
+
$helper = Mage::helper('signifyd_connect');
|
286 |
+
$case = Mage::getModel('signifyd_connect/case')->load($order);
|
287 |
+
if($case->isObjectNew()) {
|
288 |
+
$helper->logError("Guarantee cancel: Signifyd case for order $order does not exist in DB");
|
289 |
+
return;
|
290 |
+
}
|
291 |
+
if($case->getGuarantee() == 'N/A') {
|
292 |
+
$helper->logRequest("Guarantee cancel: Skipped. No guarantee active");
|
293 |
+
return;
|
294 |
+
}
|
295 |
+
|
296 |
+
$helper->logRequest("Guarantee cancel for case " . $case->getCode());
|
297 |
+
$helper->cancelGuarantee($case);
|
298 |
+
}
|
299 |
+
|
300 |
+
public function salesOrderPaymentCancel($observer)
|
301 |
+
{
|
302 |
+
$helper = Mage::helper('signifyd_connect');
|
303 |
+
try {
|
304 |
+
$event = $observer->getEvent();
|
305 |
+
if($event->getPayment()->getOrder()) {
|
306 |
+
$order = $event->getPayment()->getOrder()->getIncrementId();
|
307 |
+
} else {
|
308 |
+
$helper->logError("Event salesOrderPaymentCancel has no order");
|
309 |
+
return;
|
310 |
+
}
|
311 |
+
$this->handleCancel($order);
|
312 |
+
} catch(Exception $ex) {
|
313 |
+
$helper->logError("Guarantee cancel: $ex");
|
314 |
+
}
|
315 |
+
}
|
316 |
}
|
app/code/community/Signifyd/Connect/Model/Resource/Retries.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Signifyd_Connect_Model_Resource_Retries extends Mage_Core_Model_Mysql4_Abstract
|
4 |
+
{
|
5 |
+
protected function _construct()
|
6 |
+
{
|
7 |
+
$this->_init('signifyd_connect/retries', 'order_increment');
|
8 |
+
$this->_isPkAutoIncrement = false;
|
9 |
+
}
|
10 |
+
}
|
app/code/community/Signifyd/Connect/Model/Resource/Retries/Collection.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Signifyd_Connect_Model_Resource_Retries_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
4 |
+
{
|
5 |
+
public function _construct()
|
6 |
+
{
|
7 |
+
$this->_init('signifyd_connect/retries');
|
8 |
+
}
|
9 |
+
}
|
app/code/community/Signifyd/Connect/Model/Retries.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Signifyd_Connect_Model_Retries extends Mage_Core_Model_Abstract
|
4 |
+
{
|
5 |
+
protected function _construct()
|
6 |
+
{
|
7 |
+
$this->_init('signifyd_connect/retries');
|
8 |
+
$this->_isPkAutoIncrement = false;
|
9 |
+
}
|
10 |
+
}
|
app/code/community/Signifyd/Connect/controllers/ConnectController.php
CHANGED
@@ -7,6 +7,8 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
7 |
public $_order = false;
|
8 |
public $_store_id = null;
|
9 |
public $_case = false;
|
|
|
|
|
10 |
|
11 |
public function getApiKey()
|
12 |
{
|
@@ -215,6 +217,8 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
215 |
if ($topic == "cases/test") return;
|
216 |
|
217 |
$this->_case = $this->initCase($this->_request['orderId']);
|
|
|
|
|
218 |
|
219 |
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($this->_request['orderId']);
|
220 |
|
@@ -227,10 +231,11 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
227 |
}
|
228 |
}
|
229 |
|
230 |
-
public function holdOrder($order)
|
231 |
{
|
232 |
if ($order && $order->getId() && $order->canHold()) {
|
233 |
$order->hold();
|
|
|
234 |
$order->save();
|
235 |
|
236 |
if ($this->logRequest()) {
|
@@ -239,10 +244,11 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
239 |
}
|
240 |
}
|
241 |
|
242 |
-
public function unholdOrder($order)
|
243 |
{
|
244 |
if ($order && $order->getId() && $order->canUnhold()) {
|
245 |
$order->unhold();
|
|
|
246 |
$order->save();
|
247 |
|
248 |
if ($this->logRequest()) {
|
@@ -251,10 +257,11 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
251 |
}
|
252 |
}
|
253 |
|
254 |
-
public function cancelOrder($order)
|
255 |
{
|
256 |
if ($order && $order->getId() && $order->canCancel()) {
|
257 |
$order->cancel();
|
|
|
258 |
$order->save();
|
259 |
|
260 |
if ($this->logRequest()) {
|
@@ -288,64 +295,52 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
288 |
public function processAdditional($case, $original_status = false)
|
289 |
{
|
290 |
$order = $this->_order;
|
291 |
-
$impeded = false;
|
292 |
|
293 |
if ($order && $order->getId()) {
|
294 |
$threshold = $this->holdThreshold();
|
295 |
|
296 |
$negativeAction = $this->negativeGuaranteeAction();
|
297 |
$positiveAction = $this->positiveGuaranteeAction();
|
|
|
|
|
298 |
|
299 |
-
|
300 |
-
|
|
|
301 |
if ($negativeAction == 'hold') {
|
302 |
-
$this->holdOrder($order);
|
303 |
-
$impeded = true;
|
304 |
} else if ($negativeAction == 'cancel') {
|
305 |
-
$this->cancelOrder($order);
|
306 |
-
$impeded = true;
|
307 |
} else {
|
308 |
Mage::log("Unknown action $negativeAction", null, 'signifyd_connect.log');
|
309 |
}
|
310 |
-
} else if ($
|
311 |
if ($positiveAction == 'unhold') {
|
312 |
-
$this->unholdOrder($order);
|
313 |
} else {
|
314 |
Mage::log("Unknown action $positiveAction", null, 'signifyd_connect.log');
|
315 |
}
|
316 |
}
|
317 |
-
}
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
} else if ($original_status) {
|
325 |
-
if ($this->_request['reviewDisposition'] == 'FRAUDULENT') {
|
326 |
-
if ($order->canHold() && $this->canReviewHold()) {
|
327 |
-
$order->hold();
|
328 |
-
$order->save();
|
329 |
-
|
330 |
-
if ($this->logRequest()) {
|
331 |
-
Mage::log('Order ' . $order->getId() . ' held', null, 'signifyd_connect.log');
|
332 |
-
}
|
333 |
}
|
334 |
-
} else if ($
|
335 |
-
if ($
|
336 |
-
$
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
|
|
341 |
}
|
342 |
}
|
343 |
}
|
344 |
}
|
345 |
-
|
346 |
-
if ($order && $order->getId() && $this->canInvoice() && !$impeded && !$original_status) {
|
347 |
-
$this->invoiceOrder($order);
|
348 |
-
}
|
349 |
}
|
350 |
}
|
351 |
|
@@ -496,6 +491,11 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
496 |
|
497 |
}
|
498 |
|
|
|
|
|
|
|
|
|
|
|
499 |
public function sendAction()
|
500 |
{
|
501 |
try {
|
7 |
public $_order = false;
|
8 |
public $_store_id = null;
|
9 |
public $_case = false;
|
10 |
+
public $_previousGuarantee = false;
|
11 |
+
public $_previousScore = false;
|
12 |
|
13 |
public function getApiKey()
|
14 |
{
|
217 |
if ($topic == "cases/test") return;
|
218 |
|
219 |
$this->_case = $this->initCase($this->_request['orderId']);
|
220 |
+
$this->_previousGuarantee = $this->_case->getGuarantee();
|
221 |
+
$this->_previousScore = $this->_case->getScore();
|
222 |
|
223 |
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($this->_request['orderId']);
|
224 |
|
231 |
}
|
232 |
}
|
233 |
|
234 |
+
public function holdOrder($order, $reason)
|
235 |
{
|
236 |
if ($order && $order->getId() && $order->canHold()) {
|
237 |
$order->hold();
|
238 |
+
$order->addStatusHistoryComment("Signifyd: order held because $reason");
|
239 |
$order->save();
|
240 |
|
241 |
if ($this->logRequest()) {
|
244 |
}
|
245 |
}
|
246 |
|
247 |
+
public function unholdOrder($order, $reason)
|
248 |
{
|
249 |
if ($order && $order->getId() && $order->canUnhold()) {
|
250 |
$order->unhold();
|
251 |
+
$order->addStatusHistoryComment("Signifyd: order unheld because $reason");
|
252 |
$order->save();
|
253 |
|
254 |
if ($this->logRequest()) {
|
257 |
}
|
258 |
}
|
259 |
|
260 |
+
public function cancelOrder($order, $reason)
|
261 |
{
|
262 |
if ($order && $order->getId() && $order->canCancel()) {
|
263 |
$order->cancel();
|
264 |
+
$order->addStatusHistoryComment("Signifyd: order canceled because $reason");
|
265 |
$order->save();
|
266 |
|
267 |
if ($this->logRequest()) {
|
295 |
public function processAdditional($case, $original_status = false)
|
296 |
{
|
297 |
$order = $this->_order;
|
|
|
298 |
|
299 |
if ($order && $order->getId()) {
|
300 |
$threshold = $this->holdThreshold();
|
301 |
|
302 |
$negativeAction = $this->negativeGuaranteeAction();
|
303 |
$positiveAction = $this->positiveGuaranteeAction();
|
304 |
+
$newGuarantee = $this->_request ['guaranteeDisposition'];
|
305 |
+
$newScore = $case->getScore();
|
306 |
|
307 |
+
// If a guarantee has been set, we no longer care about other actions
|
308 |
+
if (isset($newGuarantee) && $newGuarantee != $this->_previousGuarantee) {
|
309 |
+
if ($newGuarantee == 'DECLINED' && $negativeAction != 'nothing') {
|
310 |
if ($negativeAction == 'hold') {
|
311 |
+
$this->holdOrder($order, "guarantee declined");
|
|
|
312 |
} else if ($negativeAction == 'cancel') {
|
313 |
+
$this->cancelOrder($order, "guarantee declined");
|
|
|
314 |
} else {
|
315 |
Mage::log("Unknown action $negativeAction", null, 'signifyd_connect.log');
|
316 |
}
|
317 |
+
} else if ($newGuarantee == 'APPROVED' && $positiveAction != 'nothing') {
|
318 |
if ($positiveAction == 'unhold') {
|
319 |
+
$this->unholdOrder($order, "guarantee approved");
|
320 |
} else {
|
321 |
Mage::log("Unknown action $positiveAction", null, 'signifyd_connect.log');
|
322 |
}
|
323 |
}
|
324 |
+
} else if($this->_previousGuarantee == "N/A") {
|
325 |
+
if (!$original_status || $original_status == 'PENDING') {
|
326 |
+
if ($threshold && $this->_previousScore != $newScore
|
327 |
+
&& $newScore <= $threshold
|
328 |
+
&& $this->canReviewHold())
|
329 |
+
{
|
330 |
+
$this->holdOrder($order, "score below threshold");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
}
|
332 |
+
} else if ($original_status) {
|
333 |
+
if ($this->_request['reviewDisposition'] == 'FRAUDULENT') {
|
334 |
+
if ($this->canReviewHold()) {
|
335 |
+
$this->holdOrder($order, "case review fraudulent");
|
336 |
+
}
|
337 |
+
} else if ($this->_request['reviewDisposition'] == 'GOOD') {
|
338 |
+
if ($this->canReviewHold()) {
|
339 |
+
$this->unholdOrder($order, "case review good");
|
340 |
}
|
341 |
}
|
342 |
}
|
343 |
}
|
|
|
|
|
|
|
|
|
344 |
}
|
345 |
}
|
346 |
|
491 |
|
492 |
}
|
493 |
|
494 |
+
public function retriesAction()
|
495 |
+
{
|
496 |
+
Mage::helper('signifyd_connect')->processRetryQueue();
|
497 |
+
}
|
498 |
+
|
499 |
public function sendAction()
|
500 |
{
|
501 |
try {
|
app/code/community/Signifyd/Connect/etc/config.xml
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<config>
|
4 |
<modules>
|
5 |
<Signifyd_Connect>
|
6 |
-
<version>3.
|
7 |
</Signifyd_Connect>
|
8 |
</modules>
|
9 |
<global>
|
@@ -23,6 +23,9 @@
|
|
23 |
<case>
|
24 |
<table>signifyd_connect_case</table>
|
25 |
</case>
|
|
|
|
|
|
|
26 |
</entities>
|
27 |
</signifyd_connect_resource>
|
28 |
</models>
|
@@ -167,6 +170,14 @@
|
|
167 |
</signifyd_connect>
|
168 |
</observers>
|
169 |
</sales_order_grid_collection_load_before>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
<core_block_abstract_to_html_before>
|
171 |
<observers>
|
172 |
<signifyd_connect>
|
3 |
<config>
|
4 |
<modules>
|
5 |
<Signifyd_Connect>
|
6 |
+
<version>3.13.0</version>
|
7 |
</Signifyd_Connect>
|
8 |
</modules>
|
9 |
<global>
|
23 |
<case>
|
24 |
<table>signifyd_connect_case</table>
|
25 |
</case>
|
26 |
+
<retries>
|
27 |
+
<table>signifyd_connect_retries</table>
|
28 |
+
</retries>
|
29 |
</entities>
|
30 |
</signifyd_connect_resource>
|
31 |
</models>
|
170 |
</signifyd_connect>
|
171 |
</observers>
|
172 |
</sales_order_grid_collection_load_before>
|
173 |
+
<sales_order_payment_cancel>
|
174 |
+
<observers>
|
175 |
+
<signifyd_connect>
|
176 |
+
<model>signifyd_connect/observer</model>
|
177 |
+
<method>salesOrderPaymentCancel</method>
|
178 |
+
</signifyd_connect>
|
179 |
+
</observers>
|
180 |
+
</sales_order_payment_cancel>
|
181 |
<core_block_abstract_to_html_before>
|
182 |
<observers>
|
183 |
<signifyd_connect>
|
app/code/community/Signifyd/Connect/etc/system.xml
CHANGED
@@ -185,6 +185,7 @@
|
|
185 |
<show_in_default>1</show_in_default>
|
186 |
<show_in_website>1</show_in_website>
|
187 |
<show_in_store>1</show_in_store>
|
|
|
188 |
<fields>
|
189 |
<request>
|
190 |
<label>Log requests</label>
|
185 |
<show_in_default>1</show_in_default>
|
186 |
<show_in_website>1</show_in_website>
|
187 |
<show_in_store>1</show_in_store>
|
188 |
+
<comment><![CDATA[Note: You must also enable logging for the site. You can find the setting in Configuration->Advanced->Developer->Log Settings]]></comment>
|
189 |
<fields>
|
190 |
<request>
|
191 |
<label>Log requests</label>
|
app/code/community/Signifyd/Connect/sql/signifyd_connect_setup/mysql4-upgrade-3.12.0-3.13.0.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
try {
|
4 |
+
$this->startSetup();
|
5 |
+
$this->run("
|
6 |
+
CREATE TABLE IF NOT EXISTS `{$this->getTable('signifyd_connect_retries')}` (
|
7 |
+
`order_increment` varchar(255) NOT NULL,
|
8 |
+
`created` timestamp NULL DEFAULT NULL,
|
9 |
+
PRIMARY KEY (`order_increment`)
|
10 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
|
11 |
+
");
|
12 |
+
$this->endSetup();
|
13 |
+
} catch (Exception $e) {
|
14 |
+
Mage::log('Signifyd_Connect upgrade: ' . $e->__toString(), null, 'signifyd_connect.log');
|
15 |
+
}
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Signifyd_Connect</name>
|
4 |
-
<version>3.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
|
7 |
<channel>community</channel>
|
@@ -10,9 +10,9 @@
|
|
10 |
<description>Supports all versions of Magento</description>
|
11 |
<notes>Supports all versions of Magento</notes>
|
12 |
<authors><author><name>signifyd</name><user>auto-converted</user><email>manelis@signifyd.com</email></author></authors>
|
13 |
-
<date>
|
14 |
-
<time>
|
15 |
-
<contents><target name="mageetc"><dir name="modules"><file name="Signifyd_Connect.xml" hash="bcd998a24567eba8a20423c40fba2adf"/></dir></target><target name="magecommunity"><dir name="Signifyd"><dir name="Connect"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="
|
16 |
<compatible/>
|
17 |
<dependencies/>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Signifyd_Connect</name>
|
4 |
+
<version>3.13.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
|
7 |
<channel>community</channel>
|
10 |
<description>Supports all versions of Magento</description>
|
11 |
<notes>Supports all versions of Magento</notes>
|
12 |
<authors><author><name>signifyd</name><user>auto-converted</user><email>manelis@signifyd.com</email></author></authors>
|
13 |
+
<date>2016-04-03</date>
|
14 |
+
<time>03:48:47</time>
|
15 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Signifyd_Connect.xml" hash="bcd998a24567eba8a20423c40fba2adf"/></dir></target><target name="magecommunity"><dir name="Signifyd"><dir name="Connect"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="2c2e8af2c67a09c041d5015c26eff587"/></dir><file name="Order.php" hash="e49f869c0aa5fb3ab6b70fb5752049ac"/></dir></dir><file name="Renderer.php" hash="b16dfa77aad966640705f55f09304fc2"/></dir><dir name="Helper"><file name="Data.php" hash="e726228b65072e4b4510d0f0daf405ed"/><file name=".Data.php.swp" hash="5dee45005f944dfb764936be7296b6f8"/></dir><dir name="Model"><dir name="Resource"><dir name="Case"><file name="Collection.php" hash="b7dac9979a0c81db56294d1548570fc2"/></dir><dir name="Retries"><file name="Collection.php" hash="bd94e095c3a6367d20f5ebdd756740c8"/></dir><file name="Case.php" hash="60d14407c9c90148aad543ce6868f343"/><file name="Retries.php" hash="8027995f79188f624b6a681e4868d2e6"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Options"><file name="Negative.php" hash="098488fbb0ea84945fdd1e1fe8449b4b"/><file name="Positive.php" hash="80b4cdd2bae6e2a2f3a273fa49d32331"/></dir></dir></dir></dir><file name="Authnet.php" hash="0387e631fb232778cdc82c0c72c16781"/><file name="Case.php" hash="2a28a63f02df1b9103b89a562c0abe1b"/><file name="Cron.php" hash="51665978bd2bcf67b493f2a2b450d1b8"/><file name="Link.php" hash="ecaf4c403a586b4b5c8b67c77f6ac433"/><file name="Observer.php" hash="d5f2fef416e1c5c43ed98c2cfc8f4cd8"/><file name="Retries.php" hash="28780c04867b083b1d51878e59fa380b"/><file name="Setup.php" hash="e803ffb4b86c7d8ec1d149e665d65877"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="SignifydController.php" hash="5787eb1c3ad32d7f2fc1b909f332a50f"/></dir><file name="ConnectController.php" hash="5f18dc693fd69a4d94030500cc61eacb"/></dir><dir name="etc"><file name="adminhtml.xml" hash="894bd3f5ac76e9f602ab6ab592648b03"/><file name="config.xml" hash="47d92b84d47ea6021db2988192248f4b"/><file name="system.xml" hash="3bf253bc739ef6b213add6a77114fe93"/></dir><dir name="sql"><dir name="signifyd_connect_setup"><file name="mysql4-install-3.1.1.php" hash="7fb2ccaf8352eea26e626ace6de53d80"/><file name="mysql4-install-3.12.0.php" hash="e4ec4d7445fbbc13a7008bcd69c529c4"/><file name="mysql4-install-3.3.0.php" hash="f61d0c018b28ae04d8d14b38556d18ad"/><file name="mysql4-install-3.4.0.php" hash="109cc5ca60974d0c4755dcb0f5ade3e7"/><file name="mysql4-install-3.4.5.php" hash="401b92235c0e534c941a64c60d24b851"/><file name="mysql4-install-3.7.0.php" hash="48a9d427944a4e63a000343ab329f517"/><file name="mysql4-install-3.8.0.php" hash="0fb3583eb4481c21b84ea674abc200f0"/><file name="mysql4-upgrade-3.10.0-3.10.1.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.10.1-3.11.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.11.0-3.11.1.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.11.1-3.12.0.php" hash="df5447c6223f66c03ddeacefc64322b8"/><file name="mysql4-upgrade-3.12.0-3.13.0.php" hash="f2e8ccb1fd199a0a678b3e34181aac18"/><file name="mysql4-upgrade-3.2.0-3.2.1.php" hash="9e36c608afd6e30e3052334e085eeff4"/><file name="mysql4-upgrade-3.2.1-3.2.2.php" hash="efcc5d46a41e549e508a693f1e77bf44"/><file name="mysql4-upgrade-3.2.2-3.2.3.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.2.3-3.3.0.php" hash="94b907c2cacde5fb9831408ce9a06190"/><file name="mysql4-upgrade-3.3.0-3.4.0.php" hash="6eb18705081483bb8d9c14adcdefd095"/><file name="mysql4-upgrade-3.4.0-3.4.1.php" hash="79f2064f1fa20d646e66aa3e7912d2a0"/><file name="mysql4-upgrade-3.4.1-3.4.2.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.2-3.4.3.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.3-3.4.4.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.4-3.4.5.php" hash="5b7507d6bb97bf44d27b7a89c56924bb"/><file name="mysql4-upgrade-3.4.5-3.4.6.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.6-3.4.7.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.7-3.4.8.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.8-3.5.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.0-3.5.1.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.1-3.5.2.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.2-3.5.3.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.3-3.6.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.6.0-3.7.0.php" hash="1456a6d0ddf091be9c87b3bbc91263ba"/><file name="mysql4-upgrade-3.7.0-3.8.0.php" hash="e6fc207541cacc5079e8ea8e4d55f356"/><file name="mysql4-upgrade-3.8.0-3.9.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.9.0-3.10.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies/>
|
18 |
</package>
|