Gene_Braintree - Version 2.0.4

Version Notes

Connect your Magento store to Braintree to accept Credit Cards & PayPal using V.Zero SDK

Download this release

Release Info

Developer Dave Macaulay
Extension Gene_Braintree
Version 2.0.4
Comparing to
See all releases


Code changes from version 2.0.3 to 2.0.4

Files changed (36) hide show
  1. app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Config.php +1 -1
  2. app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Currency.php +1 -1
  3. app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Migration.php +49 -0
  4. app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Moduleversion.php +1 -1
  5. app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Version.php +1 -1
  6. app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Migration.php +1 -1
  7. app/code/community/Gene/Braintree/Block/Cart/Totals.php +1 -1
  8. app/code/community/Gene/Braintree/Block/Creditcard/Info.php +3 -3
  9. app/code/community/Gene/Braintree/Block/Express/Button.php +16 -6
  10. app/code/community/Gene/Braintree/Block/Info.php +11 -13
  11. app/code/community/Gene/Braintree/Block/Paypal/Info.php +29 -12
  12. app/code/community/Gene/Braintree/Helper/Data.php +12 -2
  13. app/code/community/Gene/Braintree/Model/Migration.php +38 -0
  14. app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php +126 -41
  15. app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php +54 -90
  16. app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Creditcard.php +1 -1
  17. app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Paypal.php +1 -1
  18. app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php +22 -18
  19. app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php +0 -1
  20. app/code/community/Gene/Braintree/controllers/Adminhtml/Braintree/MigrationController.php +4 -1
  21. app/code/community/Gene/Braintree/etc/config.xml +11 -1
  22. app/code/community/Gene/Braintree/etc/system.xml +9 -0
  23. app/design/adminhtml/default/default/layout/gene/braintree.xml +7 -0
  24. app/design/adminhtml/default/default/template/gene/braintree/creditcard/info.phtml +9 -1
  25. app/design/adminhtml/default/default/template/gene/braintree/paypal/info.phtml +8 -0
  26. app/design/adminhtml/default/default/template/gene/braintree/system/config/migration.phtml +40 -5
  27. app/design/frontend/base/default/template/gene/braintree/js/firecheckout.phtml +8 -0
  28. app/design/frontend/base/default/template/gene/braintree/js/idev.phtml +9 -1
  29. js/gene/braintree/config.codekit +1 -1
  30. package.xml +4 -4
  31. skin/adminhtml/default/default/css/gene/braintree/adminhtml.css +7 -0
  32. skin/adminhtml/default/default/css/gene/braintree/adminhtml.less +9 -0
  33. skin/adminhtml/default/default/css/gene/braintree/config.codekit +2 -2
  34. skin/adminhtml/default/default/css/gene/braintree/migration.css +10 -6
  35. skin/adminhtml/default/default/css/gene/braintree/migration.less +10 -6
  36. skin/frontend/base/default/css/gene/braintree/config.codekit +1 -1
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Config.php CHANGED
@@ -32,7 +32,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Config
32
  * Inform the user there version will not work
33
  * @return string
34
  */
35
- private function getValidConfigHtml()
36
  {
37
  $response = Mage::getModel('gene_braintree/wrapper_braintree')->validateCredentials(true);
38
  $response.= '
32
  * Inform the user there version will not work
33
  * @return string
34
  */
35
+ protected function getValidConfigHtml()
36
  {
37
  $response = Mage::getModel('gene_braintree/wrapper_braintree')->validateCredentials(true);
38
  $response.= '
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Currency.php CHANGED
@@ -23,7 +23,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Currency
23
  * Inform the user there version will not work
24
  * @return string
25
  */
26
- private function getCurrencyTableHtml(Varien_Data_Form_Element_Abstract $element)
27
  {
28
  $currencies = array();
29
 
23
  * Inform the user there version will not work
24
  * @return string
25
  */
26
+ protected function getCurrencyTableHtml(Varien_Data_Form_Element_Abstract $element)
27
  {
28
  $currencies = array();
29
 
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Migration.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Migration
5
+ *
6
+ * @author Dave Macaulay <dave@gene.co.uk>
7
+ */
8
+ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Migration
9
+ extends Mage_Adminhtml_Block_Abstract implements Varien_Data_Form_Element_Renderer_Interface
10
+ {
11
+ /**
12
+ * Render element html
13
+ *
14
+ * @param Varien_Data_Form_Element_Abstract $element
15
+ * @return string
16
+ */
17
+ public function render(Varien_Data_Form_Element_Abstract $element)
18
+ {
19
+ // This option is only available if the migration can be ran
20
+ if (!Mage::helper('gene_braintree')->canRunMigration()) {
21
+ return '';
22
+ }
23
+
24
+ $useContainerId = $element->getData('use_container_id');
25
+ return sprintf('<tr id="row_%s">
26
+ <td class="label">
27
+ <strong id="%s">%s</strong>
28
+ </td>
29
+ <td class="value">
30
+ %s
31
+ <p class="note">
32
+ <span>'. $this->__('The migration tool allows you to import various settings, import customers and remove the legacy files from the Braintree_Payments extension.') . '</span>
33
+ </p>
34
+ </td>
35
+ </tr>',
36
+ $element->getHtmlId(), $element->getHtmlId(), $element->getLabel(), $this->getMigrationHtml()
37
+ );
38
+ }
39
+
40
+ /**
41
+ * Return HTML to run the migration
42
+ *
43
+ * @return string
44
+ */
45
+ protected function getMigrationHtml()
46
+ {
47
+ return '<button type="button" class="scalable" onclick="return showMigration();">Run Migration Tool</button>';
48
+ }
49
+ }
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Moduleversion.php CHANGED
@@ -38,7 +38,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Moduleversion
38
  * Inform the user there version will not work
39
  * @return string
40
  */
41
- private function getVersionHtml()
42
  {
43
  $response = Mage::getConfig()->getModuleConfig('Gene_Braintree')->version;
44
  $response.= '
38
  * Inform the user there version will not work
39
  * @return string
40
  */
41
+ protected function getVersionHtml()
42
  {
43
  $response = Mage::getConfig()->getModuleConfig('Gene_Braintree')->version;
44
  $response.= '
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Braintree/Version.php CHANGED
@@ -33,7 +33,7 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Braintree_Version
33
  * Inform the user there version will not work
34
  * @return string
35
  */
36
- private function getVersionHtml()
37
  {
38
  if(@class_exists('Braintree_Version')) {
39
  $version = Braintree_Version::get();
33
  * Inform the user there version will not work
34
  * @return string
35
  */
36
+ protected function getVersionHtml()
37
  {
38
  if(@class_exists('Braintree_Version')) {
39
  $version = Braintree_Version::get();
app/code/community/Gene/Braintree/Block/Adminhtml/System/Config/Migration.php CHANGED
@@ -32,6 +32,6 @@ class Gene_Braintree_Block_Adminhtml_System_Config_Migration extends Mage_Core_B
32
  protected function _runMigration()
33
  {
34
  return Mage::app()->getRequest()->getParam('section') == 'payment'
35
- && Mage::helper('gene_braintree')->shouldRunMigration();
36
  }
37
  }
32
  protected function _runMigration()
33
  {
34
  return Mage::app()->getRequest()->getParam('section') == 'payment'
35
+ && Mage::helper('gene_braintree')->canRunMigration();
36
  }
37
  }
app/code/community/Gene/Braintree/Block/Cart/Totals.php CHANGED
@@ -16,7 +16,7 @@ class Gene_Braintree_Block_Cart_Totals extends Mage_Checkout_Block_Cart_Totals
16
  public function needDisplayBaseGrandtotal()
17
  {
18
  // If we have a mapped currency code never display base grand total
19
- if(Mage::getSingleton('gene_braintree/wrapper_braintree')->hasMappedCurrencyCode()) {
20
  return false;
21
  }
22
 
16
  public function needDisplayBaseGrandtotal()
17
  {
18
  // If we have a mapped currency code never display base grand total
19
+ if (Mage::getSingleton('gene_braintree/wrapper_braintree')->hasMappedCurrencyCode()) {
20
  return false;
21
  }
22
 
app/code/community/Gene/Braintree/Block/Creditcard/Info.php CHANGED
@@ -30,7 +30,7 @@ class Gene_Braintree_Block_Creditcard_Info extends Gene_Braintree_Block_Info
30
  $transport = parent::_prepareSpecificInformation($transport);
31
 
32
  // Only display this information if it's a single invoice
33
- if($this->isSingleInvoice() || ($this->getInfo()->getCcLast4() && $this->getInfo()->getCcType())) {
34
 
35
  // Build up the data we wish to pass through
36
  $data = array(
@@ -45,13 +45,13 @@ class Gene_Braintree_Block_Creditcard_Info extends Gene_Braintree_Block_Info
45
  }
46
 
47
  // Check we're in the admin area
48
- if(Mage::app()->getStore()->isAdmin()) {
49
 
50
  // Include the transaction statuses
51
  $this->includeLiveDetails($data);
52
 
53
  // Only include extra information when viewing a single invoice
54
- if($this->isSingleInvoice()) {
55
 
56
  // What additional information should we show
57
  $additionalInfoHeadings = array(
30
  $transport = parent::_prepareSpecificInformation($transport);
31
 
32
  // Only display this information if it's a single invoice
33
+ if ($this->isSingleInvoice() || ($this->getInfo()->getCcLast4() && $this->getInfo()->getCcType())) {
34
 
35
  // Build up the data we wish to pass through
36
  $data = array(
45
  }
46
 
47
  // Check we're in the admin area
48
+ if (Mage::app()->getStore()->isAdmin()) {
49
 
50
  // Include the transaction statuses
51
  $this->includeLiveDetails($data);
52
 
53
  // Only include extra information when viewing a single invoice
54
+ if ($this->isSingleInvoice()) {
55
 
56
  // What additional information should we show
57
  $additionalInfoHeadings = array(
app/code/community/Gene/Braintree/Block/Express/Button.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  /**
3
  * Class Gene_Braintree_Block_Express_Button
4
  *
@@ -8,6 +9,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
8
  {
9
  /**
10
  * Braintree token
 
11
  * @var string
12
  */
13
  protected $_token = null;
@@ -23,6 +25,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
23
 
24
  /**
25
  * Get braintree token
 
26
  * @return string
27
  */
28
  public function getToken()
@@ -32,11 +35,12 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
32
 
33
  /**
34
  * Is the express mode enabled
 
35
  * @return bool
36
  */
37
  public function isEnabled()
38
  {
39
- if( Mage::getStoreConfig('payment/gene_braintree_paypal/express_active') ) {
40
  return true;
41
  }
42
 
@@ -45,7 +49,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
45
 
46
  public function isEnabledPdp()
47
  {
48
- if( Mage::getStoreConfig('payment/gene_braintree_paypal/express_pdp') ) {
49
  return true;
50
  }
51
 
@@ -54,7 +58,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
54
 
55
  public function isEnabledCart()
56
  {
57
- if( Mage::getStoreConfig('payment/gene_braintree_paypal/express_cart') ) {
58
  return true;
59
  }
60
 
@@ -62,9 +66,9 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
62
  }
63
 
64
 
65
-
66
  /**
67
  * Get store currency code.
 
68
  * @return string
69
  */
70
  public function getStoreCurrency()
@@ -74,6 +78,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
74
 
75
  /**
76
  * Get the store locale.
 
77
  * @return string
78
  */
79
  public function getStoreLocale()
@@ -83,6 +88,7 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
83
 
84
  /**
85
  * Get the current product
 
86
  * @return mixed
87
  */
88
  public function getProduct()
@@ -92,24 +98,28 @@ class Gene_Braintree_Block_Express_Button extends Mage_Core_Block_Template
92
 
93
  /**
94
  * Registry entry to determine if block has been instantiated yet
 
95
  * @return bool
96
  */
97
  public function hasBeenSetup()
98
  {
99
- if( Mage::registry('gene_braintree_btn_loaded') ) {
100
  return true;
101
  }
 
102
  return false;
103
  }
104
 
105
  /**
106
  * Registry entry to mark this block as instantiated
 
107
  * @param string $html
 
108
  * @return string
109
  */
110
  public function _afterToHtml($html)
111
  {
112
- if( !$this->hasBeenSetup() ) {
113
  Mage::register('gene_braintree_btn_loaded', true);
114
  }
115
 
1
  <?php
2
+
3
  /**
4
  * Class Gene_Braintree_Block_Express_Button
5
  *
9
  {
10
  /**
11
  * Braintree token
12
+ *
13
  * @var string
14
  */
15
  protected $_token = null;
25
 
26
  /**
27
  * Get braintree token
28
+ *
29
  * @return string
30
  */
31
  public function getToken()
35
 
36
  /**
37
  * Is the express mode enabled
38
+ *
39
  * @return bool
40
  */
41
  public function isEnabled()
42
  {
43
+ if (Mage::getStoreConfig('payment/gene_braintree_paypal/express_active')) {
44
  return true;
45
  }
46
 
49
 
50
  public function isEnabledPdp()
51
  {
52
+ if (Mage::getStoreConfig('payment/gene_braintree_paypal/express_pdp')) {
53
  return true;
54
  }
55
 
58
 
59
  public function isEnabledCart()
60
  {
61
+ if (Mage::getStoreConfig('payment/gene_braintree_paypal/express_cart')) {
62
  return true;
63
  }
64
 
66
  }
67
 
68
 
 
69
  /**
70
  * Get store currency code.
71
+ *
72
  * @return string
73
  */
74
  public function getStoreCurrency()
78
 
79
  /**
80
  * Get the store locale.
81
+ *
82
  * @return string
83
  */
84
  public function getStoreLocale()
88
 
89
  /**
90
  * Get the current product
91
+ *
92
  * @return mixed
93
  */
94
  public function getProduct()
98
 
99
  /**
100
  * Registry entry to determine if block has been instantiated yet
101
+ *
102
  * @return bool
103
  */
104
  public function hasBeenSetup()
105
  {
106
+ if (Mage::registry('gene_braintree_btn_loaded')) {
107
  return true;
108
  }
109
+
110
  return false;
111
  }
112
 
113
  /**
114
  * Registry entry to mark this block as instantiated
115
+ *
116
  * @param string $html
117
+ *
118
  * @return string
119
  */
120
  public function _afterToHtml($html)
121
  {
122
+ if (!$this->hasBeenSetup()) {
123
  Mage::register('gene_braintree_btn_loaded', true);
124
  }
125
 
app/code/community/Gene/Braintree/Block/Info.php CHANGED
@@ -20,13 +20,13 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
20
  protected function getViewedObject()
21
  {
22
  // Return the invoice first
23
- if(Mage::registry('current_invoice')) {
24
  return Mage::registry('current_invoice');
25
- } else if(Mage::registry('current_creditmemo')) {
26
  return Mage::registry('current_creditmemo');
27
- } else if(Mage::registry('current_order')) {
28
  return Mage::registry('current_order');
29
- } else if(Mage::registry('current_shipment')) {
30
  return Mage::registry('current_shipment')->getOrder();
31
  }
32
 
@@ -47,27 +47,23 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
47
  $transactionIds = array();
48
 
49
  // If we're viewing a single invoice change the response
50
- if($this->isSingleInvoice()) {
51
-
52
  // Transaction ID won't matter for customers
53
  $data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
54
 
55
  // Build an array of transaction ID's
56
  $transactionIds = array($this->getTransactionId());
57
 
58
- } else if($order) {
59
 
60
  /* @var $invoices Mage_Sales_Model_Resource_Order_Invoice_Collection */
61
  $invoices = $order->getInvoiceCollection();
62
  if($invoices->getSize() > 1) {
63
-
64
  // Build up our array
65
  foreach($invoices as $invoice) {
66
  $transactionIds[] = $invoice->getTransactionId();
67
  }
68
-
69
  } else {
70
-
71
  // Transaction ID won't matter for customers
72
  $data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
73
  }
@@ -76,13 +72,11 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
76
 
77
  // Do we have any transaction ID's
78
  if(!empty($transactionIds)) {
79
-
80
  // Start a count
81
  $count = 1;
82
 
83
  // Iterate through transaction ID's
84
  foreach ($transactionIds as $transactionId) {
85
-
86
  // Add in another label
87
  if(count($transactionIds) > 1) {
88
  $data[$this->__('Braintree Transaction #%d', $count)] = '';
@@ -104,10 +98,14 @@ class Gene_Braintree_Block_Info extends Mage_Payment_Block_Info
104
  }
105
 
106
  ++$count;
107
-
108
  }
109
  }
110
 
 
 
 
 
 
111
  }
112
 
113
  /**
20
  protected function getViewedObject()
21
  {
22
  // Return the invoice first
23
+ if (Mage::registry('current_invoice')) {
24
  return Mage::registry('current_invoice');
25
+ } else if (Mage::registry('current_creditmemo')) {
26
  return Mage::registry('current_creditmemo');
27
+ } else if (Mage::registry('current_order')) {
28
  return Mage::registry('current_order');
29
+ } else if (Mage::registry('current_shipment')) {
30
  return Mage::registry('current_shipment')->getOrder();
31
  }
32
 
47
  $transactionIds = array();
48
 
49
  // If we're viewing a single invoice change the response
50
+ if ($this->isSingleInvoice()) {
 
51
  // Transaction ID won't matter for customers
52
  $data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
53
 
54
  // Build an array of transaction ID's
55
  $transactionIds = array($this->getTransactionId());
56
 
57
+ } elseif ($order) {
58
 
59
  /* @var $invoices Mage_Sales_Model_Resource_Order_Invoice_Collection */
60
  $invoices = $order->getInvoiceCollection();
61
  if($invoices->getSize() > 1) {
 
62
  // Build up our array
63
  foreach($invoices as $invoice) {
64
  $transactionIds[] = $invoice->getTransactionId();
65
  }
 
66
  } else {
 
67
  // Transaction ID won't matter for customers
68
  $data[$this->__('Braintree Transaction ID')] = $this->getTransactionId();
69
  }
72
 
73
  // Do we have any transaction ID's
74
  if(!empty($transactionIds)) {
 
75
  // Start a count
76
  $count = 1;
77
 
78
  // Iterate through transaction ID's
79
  foreach ($transactionIds as $transactionId) {
 
80
  // Add in another label
81
  if(count($transactionIds) > 1) {
82
  $data[$this->__('Braintree Transaction #%d', $count)] = '';
98
  }
99
 
100
  ++$count;
 
101
  }
102
  }
103
 
104
+ if(count($transactionIds) == 1 && isset($transaction)) {
105
+ return $transaction;
106
+ }
107
+
108
+ return null;
109
  }
110
 
111
  /**
app/code/community/Gene/Braintree/Block/Paypal/Info.php CHANGED
@@ -29,25 +29,42 @@ class Gene_Braintree_Block_Paypal_Info extends Gene_Braintree_Block_Info
29
  // Get the original transport data
30
  $transport = parent::_prepareSpecificInformation($transport);
31
 
 
 
 
32
  // Build up the data we wish to pass through
33
- $data = array(
34
- $this->__('PayPal Email') => $this->getInfo()->getAdditionalInformation('paypal_email')
35
- );
36
 
37
  // Check we're in the admin area
38
- if(Mage::app()->getStore()->isAdmin()) {
39
 
40
  // Include live details for this transaction
41
- $this->includeLiveDetails($data);
42
 
43
- // Show these details to the admin only
44
- $data = array_merge(
45
- $data, array(
46
- $this->__('Payment ID') => $this->getInfo()->getAdditionalInformation('payment_id'),
47
- $this->__('Authorization ID') => $this->getInfo()->getAdditionalInformation('authorization_id')
48
- )
49
- );
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
 
53
  // Add the data to the class variable
29
  // Get the original transport data
30
  $transport = parent::_prepareSpecificInformation($transport);
31
 
32
+ // Start out data array
33
+ $data = array();
34
+
35
  // Build up the data we wish to pass through
36
+ if ($this->getInfo()->getAdditionalInformation('paypal_email')) {
37
+ $data[$this->__('PayPal Email')] = $this->getInfo()->getAdditionalInformation('paypal_email');
38
+ }
39
 
40
  // Check we're in the admin area
41
+ if (Mage::app()->getStore()->isAdmin()) {
42
 
43
  // Include live details for this transaction
44
+ $transaction = $this->includeLiveDetails($data);
45
 
46
+ // Insert these values if they're present
47
+ if ($this->getInfo()->getAdditionalInformation('payment_id')) {
48
+ $data[$this->__('Payment ID')] = $this->getInfo()->getAdditionalInformation('payment_id');
49
+ }
50
+ if ($this->getInfo()->getAdditionalInformation('authorization_id')) {
51
+ $data[$this->__('Authorization ID')] = $this->getInfo()->getAdditionalInformation('authorization_id');
52
+ }
53
 
54
+ // If the additional information doens't contain certain data, than retrieve it from Braintree
55
+ if ($transaction && $transaction instanceof Braintree_Transaction) {
56
+ if (!isset($data[$this->__('PayPal Email')]) && isset($transaction->paypalDetails->payerEmail)) {
57
+ $data[$this->__('PayPal Email')] = $transaction->paypalDetails->payerEmail;
58
+ }
59
+ if (!isset($data[$this->__('Payment ID')]) && isset($transaction->paypalDetails->paymentId)) {
60
+ $data[$this->__('Payment ID')] = $transaction->paypalDetails->paymentId;
61
+ }
62
+ if (!isset($data[$this->__('Authorization ID')])
63
+ && isset($transaction->paypalDetails->authorizationId)
64
+ ) {
65
+ $data[$this->__('Authorization ID')] = $transaction->paypalDetails->authorizationId;
66
+ }
67
+ }
68
  }
69
 
70
  // Add the data to the class variable
app/code/community/Gene/Braintree/Helper/Data.php CHANGED
@@ -136,13 +136,23 @@ class Gene_Braintree_Helper_Data extends Mage_Core_Helper_Abstract
136
  }
137
 
138
  /**
139
- * Should the system run the migration tool?
 
 
 
 
 
 
 
 
 
 
140
  *
141
  * @return bool
142
  */
143
  public function shouldRunMigration()
144
  {
145
- return Mage::helper('core')->isModuleEnabled('Braintree_Payments')
146
  && !Mage::getStoreConfigFlag(self::MIGRATION_COMPLETE)
147
  && !Mage::getStoreConfig('payment/gene_braintree/merchant_id')
148
  && !Mage::getStoreConfig('payment/gene_braintree/sandbox_merchant_id');
136
  }
137
 
138
  /**
139
+ * Can we run the migration? Requires the Braintree_Payments module to be installed
140
+ *
141
+ * @return bool
142
+ */
143
+ public function canRunMigration()
144
+ {
145
+ return Mage::helper('core')->isModuleEnabled('Braintree_Payments');
146
+ }
147
+
148
+ /**
149
+ * Should the system run the migration tool automatically
150
  *
151
  * @return bool
152
  */
153
  public function shouldRunMigration()
154
  {
155
+ return $this->canRunMigration()
156
  && !Mage::getStoreConfigFlag(self::MIGRATION_COMPLETE)
157
  && !Mage::getStoreConfig('payment/gene_braintree/merchant_id')
158
  && !Mage::getStoreConfig('payment/gene_braintree/sandbox_merchant_id');
app/code/community/Gene/Braintree/Model/Migration.php CHANGED
@@ -31,6 +31,18 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
31
  return $this->setData('run_customer_data', $bool);
32
  }
33
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  /**
35
  * Should we disable the legacy module?
36
  *
@@ -43,6 +55,11 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
43
  {
44
  $this->setData('disable_legacy', $bool);
45
  $this->setData('delete_legacy', $deleteLegacy);
 
 
 
 
 
46
  }
47
 
48
  /**
@@ -62,6 +79,10 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
62
  $result->setCustomerData($this->_runCustomerData());
63
  }
64
 
 
 
 
 
65
  if ($this->getData('disable_legacy')) {
66
  if ($this->getData('delete_legacy')) {
67
  $result->setDeleteLegacy($this->_deleteLegacy());
@@ -265,6 +286,23 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
265
  return false;
266
  }
267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  /**
269
  * Delete the legacy module from the merchants store
270
  *
31
  return $this->setData('run_customer_data', $bool);
32
  }
33
 
34
+ /**
35
+ * Should we update legacy orders with a new payment method?
36
+ *
37
+ * @param $bool
38
+ *
39
+ * @return \Varien_Object
40
+ */
41
+ public function setRunOrderTransactionInfo($bool)
42
+ {
43
+ return $this->setData('run_order_transaction_info', $bool);
44
+ }
45
+
46
  /**
47
  * Should we disable the legacy module?
48
  *
55
  {
56
  $this->setData('disable_legacy', $bool);
57
  $this->setData('delete_legacy', $deleteLegacy);
58
+
59
+ // We have to update the orders if they're removing the legacy RocketWeb extension
60
+ if ($deleteLegacy) {
61
+ $this->setRunOrderTransactionInfo(true);
62
+ }
63
  }
64
 
65
  /**
79
  $result->setCustomerData($this->_runCustomerData());
80
  }
81
 
82
+ if ($this->getData('run_order_transaction_info')) {
83
+ $result->setOrderTransactionInfo($this->_runOrderTransactionInfo());
84
+ }
85
+
86
  if ($this->getData('disable_legacy')) {
87
  if ($this->getData('delete_legacy')) {
88
  $result->setDeleteLegacy($this->_deleteLegacy());
286
  return false;
287
  }
288
 
289
+ /**
290
+ * Update legacy orders with new payment method codes to ensure info screen behaves
291
+ *
292
+ * @return bool
293
+ */
294
+ public function _runOrderTransactionInfo()
295
+ {
296
+ /* @var $resource Mage_Core_Model_Resource */
297
+ $resource = Mage::getModel('core/resource');
298
+ $dbWrite = $resource->getConnection('core_write');
299
+
300
+ $dbWrite->update($resource->getTableName('sales/order_payment'), array('method' => 'braintree_legacy'), "method = 'braintree'");
301
+ $dbWrite->update($resource->getTableName('sales/order_payment'), array('method' => 'braintree_paypal_legacy'), "method = 'braintree_paypal'");
302
+
303
+ return true;
304
+ }
305
+
306
  /**
307
  * Delete the legacy module from the merchants store
308
  *
app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php CHANGED
@@ -25,13 +25,10 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
25
  public function isAvailable($quote = null)
26
  {
27
  // Check Magento's internal methods allow us to run
28
- if(parent::isAvailable($quote)) {
29
-
30
  // Validate the configuration is okay
31
  return $this->_getWrapper()->validateCredentialsOnce();
32
-
33
  } else {
34
-
35
  // Otherwise it's a no
36
  return false;
37
  }
@@ -80,19 +77,21 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
80
  protected function handleFraud($result, Varien_Object $payment)
81
  {
82
  // Verify we have risk data
83
- if (isset($result->transaction) && isset($result->transaction->riskData) && isset($result->transaction->riskData->decision)) {
84
-
 
 
85
  // If the merchant has specified the merchant and website ID we can update the payments status
86
  if (Mage::helper('gene_braintree')->canUpdateKount() && isset($result->transaction->riskData->id)) {
87
-
88
  // Update the payment with the require information
89
  $payment->setAdditionalInformation('kount_id', $result->transaction->riskData->id);
90
  $payment->save();
91
  }
92
 
93
  // If the decision is to review the payment mark the payment as such
94
- if ($result->transaction->riskData->decision == self::ADVANCED_FRAUD_REVIEW || $result->transaction->riskData->decision == self::ADVANCED_FRAUD_DECLINE) {
95
-
 
96
  // Mark the payment as pending
97
  $payment->setIsTransactionPending(true);
98
 
@@ -122,7 +121,7 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
122
  // Attempt to load the invoice
123
  /* @var $invoice Mage_Sales_Model_Order_Invoice */
124
  $invoice = $payment->getCreditmemo()->getInvoice();
125
- if(!$invoice) {
126
  Mage::throwException('Unable to load invoice from credit memo.');
127
  }
128
 
@@ -140,27 +139,35 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
140
 
141
  // If the transaction hasn't yet settled we can't do partial refunds
142
  if ($transaction->status === Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
143
-
144
  // If we're doing a partial refund and it's not settled it's a no go
145
  if ($transaction->amount != $refundAmount) {
146
- Mage::throwException($this->_getHelper()->__('This transaction has not yet settled, please wait until the transaction has settled to process a partial refund.'));
 
 
 
147
  }
148
  }
149
 
150
- // Swap between refund and void
151
- $result = ($transaction->status === Braintree_Transaction::SETTLED || $transaction->status == Braintree_Transaction::SETTLING || (isset($transaction->paypal) && isset($transaction->paypal['paymentId']) && !empty($transaction->paypal['paymentId'])))
152
- ? Braintree_Transaction::refund($transactionId, $refundAmount)
153
- : Braintree_Transaction::void($transactionId);
 
 
 
 
 
 
 
 
154
 
155
  // If it's a success close the transaction
156
  if ($result->success) {
157
-
158
  // Pass over the transaction ID
159
  $payment->getCreditmemo()->setRefundTransactionId($result->transaction->id);
160
 
161
  // Only close the transaction once the transaction amount meets the refund amount
162
- if($transaction->amount == $refundAmount) {
163
-
164
  $payment->setIsTransactionClosed(1);
165
 
166
  // Mark the invoice as canceled if the invoice was completely refunded
@@ -171,7 +178,7 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
171
  }
172
 
173
  } else {
174
- if($result->errors->deepSize() > 0) {
175
  Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
176
  } else {
177
  Mage::throwException('An unknown error has occurred whilst trying to process the transaction');
@@ -179,7 +186,72 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
179
  }
180
 
181
  } catch (Exception $e) {
182
- Mage::throwException($this->_getHelper()->__('An error occurred whilst trying to process the refund: ') . $e->getMessage());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  }
184
 
185
  return $this;
@@ -211,7 +283,6 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
211
  {
212
  // Has the payment already been authorized?
213
  if ($payment->getCcTransId()) {
214
-
215
  // Convert the capture amount to the correct currency
216
  $captureAmount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
217
 
@@ -223,12 +294,20 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
223
  $transaction = Braintree_Transaction::find($lastTransactionId);
224
 
225
  // Has the transaction already been settled? or submitted for the settlement?
226
- if (isset($transaction->id) && ($transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT || $transaction->status == Braintree_Transaction::SETTLED)) {
 
 
 
 
 
 
 
227
  // Do the capture amounts match?
228
  if ($captureAmount == $transaction->amount) {
229
  // We can just approve the invoice
230
  $this->_updateKountStatus($payment, 'A');
231
  $payment->setStatus(self::STATUS_APPROVED);
 
232
  return $this;
233
  }
234
  }
@@ -239,13 +318,11 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
239
 
240
  // Has the authorization already been settled? Partial invoicing
241
  if ($this->authorizationUsed($payment)) {
242
-
243
  // Set the token as false
244
  $token = false;
245
 
246
  // Was the original payment created with a token?
247
- if($additionalInfoToken = $payment->getAdditionalInformation('token')) {
248
-
249
  try {
250
  // Init the environment
251
  $this->_getWrapper()->init($payment->getOrder()->getStoreId());
@@ -264,42 +341,44 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
264
 
265
  // If we managed to find a token use that for the capture
266
  if ($token) {
267
-
268
  // Stop processing the rest of the method
269
  // We pass $amount instead of $captureAmount as the authorize function contains the conversion
270
  $this->_authorize($payment, $amount, true, $token);
271
  return $this;
272
 
273
  } else {
274
-
275
  // Attempt to clone the transaction
276
- $result = $this->_getWrapper()->init($payment->getOrder()->getStoreId())->cloneTransaction($lastTransactionId, $captureAmount);
 
 
277
  }
278
 
279
  } else {
280
-
281
  // Init the environment
282
- $result = $this->_getWrapper()->init($payment->getOrder()->getStoreId())->submitForSettlement($payment->getCcTransId(), $captureAmount);
 
 
283
 
284
  // Log the result
285
  Gene_Braintree_Model_Debug::log(array('capture:submitForSettlement' => $result));
286
  }
287
 
288
- if($result->success) {
289
  $this->_updateKountStatus($payment, 'A');
290
  $this->_processSuccessResult($payment, $result, $amount);
291
- } else if($result->errors->deepSize() > 0) {
292
-
293
  // Clean up
294
  Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
295
 
296
  Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
297
  } else {
298
-
299
  // Clean up
300
  Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
301
 
302
- Mage::throwException($result->transaction->processorSettlementResponseCode.': '.$result->transaction->processorSettlementResponseText);
 
 
 
303
  }
304
 
305
  } else {
@@ -347,10 +426,10 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
347
  if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_PAID) {
348
  // Invoice is already paid and captured, just move the order into processing
349
  return false;
350
- } else if ($invoice->canCapture()) {
351
  return $invoice->capture();
352
  }
353
- } else if ($order->getPayment()->canCapture()) {
354
  // We don't currently have an invoice for this order, let's create one whilst capturing
355
  $order->getPayment()->capture(null);
356
  /* @var $invoice Mage_Sales_Model_Order_Invoice */
@@ -360,7 +439,9 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
360
  return true;
361
  }
362
 
363
- Mage::throwException(Mage::helper('payment')->__('Unable to load invoice to accept the payment for this order.'));
 
 
364
  }
365
 
366
  /**
@@ -412,7 +493,9 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
412
  */
413
  protected function _updateKountStatus(Varien_Object $payment, $status = 'A')
414
  {
415
- if (Mage::helper('gene_braintree')->canUpdateKount() && ($kountId = $payment->getAdditionalInformation('kount_id'))) {
 
 
416
  $kountRest = Mage::getModel('gene_braintree/kount_rest');
417
  $kountRest->updateOrderStatus($payment->getOrder(), $status);
418
  }
@@ -429,7 +512,9 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
429
  */
430
  protected function _updateKountRefund(Varien_Object $payment)
431
  {
432
- if (Mage::helper('gene_braintree')->canUpdateKount() && ($kountId = $payment->getAdditionalInformation('kount_id'))) {
 
 
433
  $kountRest = Mage::getModel('gene_braintree/kount_rest');
434
  $kountRest->updateOrderRefund($payment->getOrder());
435
  }
25
  public function isAvailable($quote = null)
26
  {
27
  // Check Magento's internal methods allow us to run
28
+ if (parent::isAvailable($quote)) {
 
29
  // Validate the configuration is okay
30
  return $this->_getWrapper()->validateCredentialsOnce();
 
31
  } else {
 
32
  // Otherwise it's a no
33
  return false;
34
  }
77
  protected function handleFraud($result, Varien_Object $payment)
78
  {
79
  // Verify we have risk data
80
+ if (isset($result->transaction) &&
81
+ isset($result->transaction->riskData) &&
82
+ isset($result->transaction->riskData->decision)
83
+ ) {
84
  // If the merchant has specified the merchant and website ID we can update the payments status
85
  if (Mage::helper('gene_braintree')->canUpdateKount() && isset($result->transaction->riskData->id)) {
 
86
  // Update the payment with the require information
87
  $payment->setAdditionalInformation('kount_id', $result->transaction->riskData->id);
88
  $payment->save();
89
  }
90
 
91
  // If the decision is to review the payment mark the payment as such
92
+ if ($result->transaction->riskData->decision == self::ADVANCED_FRAUD_REVIEW ||
93
+ $result->transaction->riskData->decision == self::ADVANCED_FRAUD_DECLINE
94
+ ) {
95
  // Mark the payment as pending
96
  $payment->setIsTransactionPending(true);
97
 
121
  // Attempt to load the invoice
122
  /* @var $invoice Mage_Sales_Model_Order_Invoice */
123
  $invoice = $payment->getCreditmemo()->getInvoice();
124
+ if (!$invoice) {
125
  Mage::throwException('Unable to load invoice from credit memo.');
126
  }
127
 
139
 
140
  // If the transaction hasn't yet settled we can't do partial refunds
141
  if ($transaction->status === Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
 
142
  // If we're doing a partial refund and it's not settled it's a no go
143
  if ($transaction->amount != $refundAmount) {
144
+ Mage::throwException(
145
+ $this->_getHelper()->__('This transaction has not yet settled, please wait until the ' .
146
+ 'transaction has settled to process a partial refund.')
147
+ );
148
  }
149
  }
150
 
151
+ // Determine if the transaction is settled, or settling
152
+ if (($transaction->status == Braintree_Transaction::SETTLED ||
153
+ $transaction->status == Braintree_Transaction::SETTLING) ||
154
+ (isset($transaction->paypal) &&
155
+ isset($transaction->paypal['paymentId']) &&
156
+ !empty($transaction->paypal['paymentId'])
157
+ )
158
+ ) {
159
+ $result = Braintree_Transaction::refund($transactionId, $refundAmount);
160
+ } else {
161
+ $result = Braintree_Transaction::void($transactionId);
162
+ }
163
 
164
  // If it's a success close the transaction
165
  if ($result->success) {
 
166
  // Pass over the transaction ID
167
  $payment->getCreditmemo()->setRefundTransactionId($result->transaction->id);
168
 
169
  // Only close the transaction once the transaction amount meets the refund amount
170
+ if ($transaction->amount == $refundAmount) {
 
171
  $payment->setIsTransactionClosed(1);
172
 
173
  // Mark the invoice as canceled if the invoice was completely refunded
178
  }
179
 
180
  } else {
181
+ if ($result->errors->deepSize() > 0) {
182
  Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
183
  } else {
184
  Mage::throwException('An unknown error has occurred whilst trying to process the transaction');
186
  }
187
 
188
  } catch (Exception $e) {
189
+ Mage::throwException(
190
+ $this->_getHelper()->__('An error occurred whilst trying to process the refund: ') . $e->getMessage()
191
+ );
192
+ }
193
+
194
+ return $this;
195
+ }
196
+
197
+ /**
198
+ * Cancel a payment, refunding the order
199
+ *
200
+ * @param \Varien_Object $payment
201
+ *
202
+ * @return $this
203
+ */
204
+ public function cancel(Varien_Object $payment)
205
+ {
206
+ $this->void($payment);
207
+
208
+ return $this;
209
+ }
210
+
211
+ /**
212
+ * Void payment abstract method
213
+ *
214
+ * @param Varien_Object $payment
215
+ *
216
+ * @return Mage_Payment_Model_Abstract
217
+ */
218
+ public function void(Varien_Object $payment)
219
+ {
220
+ try {
221
+ // Init the environment
222
+ $this->_getWrapper()->init($payment->getOrder()->getStoreId());
223
+
224
+ // Retrieve the transaction ID
225
+ $transactionId = $this->_getWrapper()->getCleanTransactionId($payment->getLastTransId());
226
+
227
+ // Load the transaction from Braintree
228
+ $transaction = Braintree_Transaction::find($transactionId);
229
+
230
+ // We can only void authorized and submitted for settlement transactions
231
+ if ($transaction->status == Braintree_Transaction::AUTHORIZED ||
232
+ $transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT
233
+ ) {
234
+ $result = Braintree_Transaction::void($transactionId);
235
+ } else {
236
+ // If the transaction isn't voidable, refund it
237
+ $result = Braintree_Transaction::refund($transactionId);
238
+ }
239
+
240
+ // If it's a success close the transaction
241
+ if ($result->success) {
242
+ $payment->setIsTransactionClosed(1);
243
+ } else {
244
+ if ($result->errors->deepSize() > 0) {
245
+ Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
246
+ } else {
247
+ Mage::throwException('Unknown');
248
+ }
249
+ }
250
+
251
+ } catch (Exception $e) {
252
+ Mage::throwException(
253
+ $this->_getHelper()->__('An error occurred whilst trying to void the transaction: %s', $e->getMessage())
254
+ );
255
  }
256
 
257
  return $this;
283
  {
284
  // Has the payment already been authorized?
285
  if ($payment->getCcTransId()) {
 
286
  // Convert the capture amount to the correct currency
287
  $captureAmount = $this->_getWrapper()->getCaptureAmount($payment->getOrder(), $amount);
288
 
294
  $transaction = Braintree_Transaction::find($lastTransactionId);
295
 
296
  // Has the transaction already been settled? or submitted for the settlement?
297
+ // Also treat settling transaction as being process. Case #828048
298
+ if (isset($transaction->id) &&
299
+ (
300
+ $transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT ||
301
+ $transaction->status == Braintree_Transaction::SETTLED ||
302
+ $transaction->status == Braintree_Transaction::SETTLING
303
+ )
304
+ ) {
305
  // Do the capture amounts match?
306
  if ($captureAmount == $transaction->amount) {
307
  // We can just approve the invoice
308
  $this->_updateKountStatus($payment, 'A');
309
  $payment->setStatus(self::STATUS_APPROVED);
310
+
311
  return $this;
312
  }
313
  }
318
 
319
  // Has the authorization already been settled? Partial invoicing
320
  if ($this->authorizationUsed($payment)) {
 
321
  // Set the token as false
322
  $token = false;
323
 
324
  // Was the original payment created with a token?
325
+ if ($additionalInfoToken = $payment->getAdditionalInformation('token')) {
 
326
  try {
327
  // Init the environment
328
  $this->_getWrapper()->init($payment->getOrder()->getStoreId());
341
 
342
  // If we managed to find a token use that for the capture
343
  if ($token) {
 
344
  // Stop processing the rest of the method
345
  // We pass $amount instead of $captureAmount as the authorize function contains the conversion
346
  $this->_authorize($payment, $amount, true, $token);
347
  return $this;
348
 
349
  } else {
 
350
  // Attempt to clone the transaction
351
+ $result = $this->_getWrapper()->init(
352
+ $payment->getOrder()->getStoreId()
353
+ )->cloneTransaction($lastTransactionId, $captureAmount);
354
  }
355
 
356
  } else {
 
357
  // Init the environment
358
+ $result = $this->_getWrapper()->init(
359
+ $payment->getOrder()->getStoreId()
360
+ )->submitForSettlement($payment->getCcTransId(), $captureAmount);
361
 
362
  // Log the result
363
  Gene_Braintree_Model_Debug::log(array('capture:submitForSettlement' => $result));
364
  }
365
 
366
+ if ($result->success) {
367
  $this->_updateKountStatus($payment, 'A');
368
  $this->_processSuccessResult($payment, $result, $amount);
369
+ } elseif ($result->errors->deepSize() > 0) {
 
370
  // Clean up
371
  Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
372
 
373
  Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
374
  } else {
 
375
  // Clean up
376
  Gene_Braintree_Model_Wrapper_Braintree::cleanUp();
377
 
378
+ Mage::throwException(
379
+ $result->transaction->processorSettlementResponseCode.':
380
+ '.$result->transaction->processorSettlementResponseText
381
+ );
382
  }
383
 
384
  } else {
426
  if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_PAID) {
427
  // Invoice is already paid and captured, just move the order into processing
428
  return false;
429
+ } elseif ($invoice->canCapture()) {
430
  return $invoice->capture();
431
  }
432
+ } elseif ($order->getPayment()->canCapture()) {
433
  // We don't currently have an invoice for this order, let's create one whilst capturing
434
  $order->getPayment()->capture(null);
435
  /* @var $invoice Mage_Sales_Model_Order_Invoice */
439
  return true;
440
  }
441
 
442
+ Mage::throwException(
443
+ Mage::helper('payment')->__('Unable to load invoice to accept the payment for this order.')
444
+ );
445
  }
446
 
447
  /**
493
  */
494
  protected function _updateKountStatus(Varien_Object $payment, $status = 'A')
495
  {
496
+ if (Mage::helper('gene_braintree')->canUpdateKount() &&
497
+ ($kountId = $payment->getAdditionalInformation('kount_id'))
498
+ ) {
499
  $kountRest = Mage::getModel('gene_braintree/kount_rest');
500
  $kountRest->updateOrderStatus($payment->getOrder(), $status);
501
  }
512
  */
513
  protected function _updateKountRefund(Varien_Object $payment)
514
  {
515
+ if (Mage::helper('gene_braintree')->canUpdateKount()
516
+ && ($kountId = $payment->getAdditionalInformation('kount_id'))
517
+ ) {
518
  $kountRest = Mage::getModel('gene_braintree/kount_rest');
519
  $kountRest->updateOrderRefund($payment->getOrder());
520
  }
app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php CHANGED
@@ -55,6 +55,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
55
  * Place Braintree specific data into the additional information of the payment instance object
56
  *
57
  * @param mixed $data
 
58
  * @return Mage_Payment_Model_Info
59
  */
60
  public function assignData($data)
@@ -115,18 +116,18 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
115
  public function is3DEnabled()
116
  {
117
  // 3D secure can never be enabled for the admin
118
- if(Mage::app()->getStore()->isAdmin()) {
119
  return false;
120
  }
121
 
122
  // Is 3Ds enabled within the configuration?
123
- if($this->_getConfig('threedsecure')) {
124
-
125
  // Do we have a requirement on the threshold
126
- if($this->_getConfig('threedsecure_threshold') > 0) {
127
-
128
  // Check to see if the base grand total is bigger then the threshold
129
- if(Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getBaseGrandTotal() > $this->_getConfig('threedsecure_threshold')) {
 
 
130
  return true;
131
  }
132
 
@@ -143,7 +144,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
143
  * Should we save this method in the database?
144
  *
145
  * @param \Varien_Object $payment
146
- * @param $skipMultishipping
147
  *
148
  * @return mixed
149
  */
@@ -153,7 +154,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
153
  // We must always save the method for multi shipping requests
154
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
155
  return true;
156
- } else if ($this->_getOriginalToken()) {
157
  // If we have an original token, there is no need to save the same payment method again
158
  return false;
159
  }
@@ -166,7 +167,10 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
166
  $object->setResponse(($this->isVaultEnabled() && $saveCard == 1));
167
 
168
  // Specific event for this method
169
- Mage::dispatchEvent('gene_braintree_creditcard_should_save_method', array('object' => $object, 'payment' => $payment));
 
 
 
170
 
171
  // General event if we want to enforce saving of all payment methods
172
  Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
@@ -210,8 +214,9 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
210
  }
211
 
212
  // Confirm that we have a nonce from Braintree
213
- if (!$this->getPaymentMethodToken() || ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure')) {
214
-
 
215
  if (!$this->getPaymentMethodNonce()) {
216
  Gene_Braintree_Model_Debug::log('Card payment has failed, missing token/nonce');
217
  Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
@@ -220,8 +225,7 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
220
  $this->_getHelper()->__('Your card payment has failed, please try again.')
221
  );
222
  }
223
- } else if (!$this->getPaymentMethodToken()) {
224
-
225
  Gene_Braintree_Model_Debug::log('No saved card token present');
226
  Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
227
 
@@ -254,7 +258,6 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
254
 
255
  // Attempt to create the sale
256
  try {
257
-
258
  // Build up the sale array
259
  $saleArray = $this->_getWrapper()->buildSale(
260
  $amount,
@@ -272,44 +275,48 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
272
  );
273
 
274
  } catch (Exception $e) {
275
-
276
  // Handle an exception being thrown
277
- Mage::dispatchEvent('gene_braintree_creditcard_failed_exception', array('payment' => $payment, 'exception' => $e));
 
 
 
278
 
279
  return $this->_processFailedResult($this->_getHelper()->__('There was an issue whilst trying to process your card payment, please try again or another method.'), $e);
280
-
281
  }
282
 
283
  // Log the initial sale array, no protected data is included
284
  Gene_Braintree_Model_Debug::log(array('_authorize:result' => $result));
285
 
286
  // If the transaction was 3Ds but doesn't contain a 3Ds response
287
- if (($this->is3DEnabled() && isset($saleArray['options']['three_d_secure']['required']) && $saleArray['options']['three_d_secure']['required'] == true) && (!isset($result->transaction->threeDSecureInfo) || (isset($result->transaction->threeDSecureInfo) && is_null($result->transaction->threeDSecureInfo)))) {
288
-
 
 
 
289
  return $this->_processFailedResult($this->_getHelper()->__('This transaction must be passed through 3D secure, please try again or consider using an alternate payment method.'), false, $result);
290
 
291
  }
292
 
293
  // If the sale has failed
294
  if ($result->success != true) {
295
-
296
  // Dispatch an event for when a payment fails
297
  Mage::dispatchEvent('gene_braintree_creditcard_failed', array('payment' => $payment, 'result' => $result));
298
 
299
  // Return a different message for declined cards
300
- if(isset($result->transaction->status)) {
301
-
302
  // Return a custom response for processor declined messages
303
- if($result->transaction->status == Braintree_Transaction::PROCESSOR_DECLINED) {
304
-
305
  return $this->_processFailedResult($this->_getHelper()->__('Your transaction has been declined, please try another payment method or contacting your issuing bank.'), false, $result);
306
 
307
- } else if($result->transaction->status == Braintree_Transaction::GATEWAY_REJECTED
308
  && isset($result->transaction->gatewayRejectionReason)
309
- && $result->transaction->gatewayRejectionReason == Braintree_Transaction::THREE_D_SECURE)
310
- {
311
  // An event for when 3D secure fails
312
- Mage::dispatchEvent('gene_braintree_creditcard_failed_threed', array('payment' => $payment, 'result' => $result));
 
 
 
313
 
314
  return $this->_processFailedResult($this->_getHelper()->__('Your card has failed 3D secure validation, please try again or consider using an alternate payment method.'), 'Transaction failed with 3D secure', false, $result);
315
  }
@@ -337,34 +344,30 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
337
  // If we have an original token use that for the subsequent requests
338
  if ($originalToken = $this->_getOriginalToken()) {
339
  $paymentArray['paymentMethodToken'] = $originalToken;
 
340
  return $paymentArray;
341
  }
342
 
343
  // Check to see whether we're using a payment method token?
344
- if($this->getPaymentMethodToken() && !in_array($this->getPaymentMethodToken(), array('other', 'threedsecure'))) {
345
-
 
346
  // Build our payment array
347
  $paymentArray['paymentMethodToken'] = $this->getPaymentMethodToken();
348
  unset($paymentArray['cvv']);
349
-
350
  } else {
351
-
352
  // Build our payment array with a nonce
353
  $paymentArray['paymentMethodNonce'] = $this->getPaymentMethodNonce();
354
-
355
  }
356
 
357
  // If the user is using a stored card with 3D secure, enable it in the request and remove CVV
358
  if ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure') {
359
-
360
  // If we're using 3D secure token card don't send CVV
361
  unset($paymentArray['cvv']);
362
-
363
  }
364
 
365
  // If a token is present in the request use that
366
  if ($token) {
367
-
368
  // Remove this unneeded data
369
  unset($paymentArray['paymentMethodNonce'], $paymentArray['cvv']);
370
 
@@ -422,65 +425,23 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
422
  return $this->_captureAuthorized($payment, $amount);
423
  }
424
 
425
- /**
426
- * Void payment abstract method
427
- *
428
- * @param Varien_Object $payment
429
- *
430
- * @return Mage_Payment_Model_Abstract
431
- */
432
- public function void(Varien_Object $payment)
433
- {
434
- try {
435
- // Init the environment
436
- $this->_getWrapper()->init($payment->getOrder()->getStoreId());
437
-
438
- // Retrieve the transaction ID
439
- $transactionId = $this->_getWrapper()->getCleanTransactionId($payment->getLastTransId());
440
-
441
- // Load the transaction from Braintree
442
- $transaction = Braintree_Transaction::find($transactionId);
443
-
444
- // We can only void authorized and submitted for settlement transactions
445
- if ($transaction->status == Braintree_Transaction::AUTHORIZED || $transaction->status == Braintree_Transaction::SUBMITTED_FOR_SETTLEMENT) {
446
-
447
- // Swap between refund and void
448
- $result = Braintree_Transaction::void($transactionId);
449
-
450
- // If it's a success close the transaction
451
- if ($result->success) {
452
- $payment->setIsTransactionClosed(1);
453
- } else {
454
- if ($result->errors->deepSize() > 0) {
455
- Mage::throwException($this->_getWrapper()->parseErrors($result->errors->deepAll()));
456
- } else {
457
- Mage::throwException('Unknown');
458
- }
459
- }
460
-
461
- } else {
462
- Mage::throwException($this->_getHelper()->__('You can only void authorized/submitted for settlement payments, please setup a credit memo if you wish to refund this order.'));
463
- }
464
-
465
- } catch (Exception $e) {
466
- Mage::throwException($this->_getHelper()->__('An error occurred whilst trying to void the transaction: ') . $e->getMessage());
467
- }
468
-
469
- return $this;
470
- }
471
-
472
  /**
473
  * Processes successful authorize/clone result
474
  *
475
- * @param Varien_Object $payment
476
  * @param Braintree_Result_Successful $result
477
- * @param float $amount
 
478
  * @return Varien_Object
479
  */
480
  protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
481
  {
482
  // Pass an event if the payment was a success
483
- Mage::dispatchEvent('gene_braintree_creditcard_success', array('payment' => $payment, 'result' => $result, 'amount' => $amount));
 
 
 
 
484
 
485
  // Set some basic information about the payment
486
  $payment->setStatus(self::STATUS_APPROVED)
@@ -527,13 +488,13 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
527
  foreach ($storeFields as $storeField) {
528
  if (isset($result->transaction->{$storeField}) && !empty($result->transaction->{$storeField})) {
529
  $additionalInfo[$storeField] = $result->transaction->{$storeField};
530
- } else if ($value = $payment->getAdditionalInformation($storeField)) {
531
  $additionalInfo[$storeField] = $value;
532
  }
533
  }
534
 
535
  // Check it's not empty and store it
536
- if(!empty($additionalInfo)) {
537
  $payment->setAdditionalInformation($additionalInfo);
538
  }
539
 
@@ -544,9 +505,12 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
544
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
545
  $this->_setOriginalToken($result->transaction->creditCard['token']);
546
 
547
- // If we shouldn't have this method saved, add it into the session to be removed once the request is complete
 
548
  if (!$this->shouldSaveMethod($payment, true)) {
549
- Mage::getSingleton('checkout/session')->setTemporaryPaymentToken($result->transaction->creditCard['token']);
 
 
550
  }
551
  }
552
  }
55
  * Place Braintree specific data into the additional information of the payment instance object
56
  *
57
  * @param mixed $data
58
+ *
59
  * @return Mage_Payment_Model_Info
60
  */
61
  public function assignData($data)
116
  public function is3DEnabled()
117
  {
118
  // 3D secure can never be enabled for the admin
119
+ if (Mage::app()->getStore()->isAdmin()) {
120
  return false;
121
  }
122
 
123
  // Is 3Ds enabled within the configuration?
124
+ if ($this->_getConfig('threedsecure')) {
 
125
  // Do we have a requirement on the threshold
126
+ if ($this->_getConfig('threedsecure_threshold') > 0) {
 
127
  // Check to see if the base grand total is bigger then the threshold
128
+ if (Mage::getSingleton('checkout/cart')->getQuote()->collectTotals()->getBaseGrandTotal() >
129
+ $this->_getConfig('threedsecure_threshold')
130
+ ) {
131
  return true;
132
  }
133
 
144
  * Should we save this method in the database?
145
  *
146
  * @param \Varien_Object $payment
147
+ * @param $skipMultishipping
148
  *
149
  * @return mixed
150
  */
154
  // We must always save the method for multi shipping requests
155
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
156
  return true;
157
+ } elseif ($this->_getOriginalToken()) {
158
  // If we have an original token, there is no need to save the same payment method again
159
  return false;
160
  }
167
  $object->setResponse(($this->isVaultEnabled() && $saveCard == 1));
168
 
169
  // Specific event for this method
170
+ Mage::dispatchEvent('gene_braintree_creditcard_should_save_method', array(
171
+ 'object' => $object,
172
+ 'payment' => $payment
173
+ ));
174
 
175
  // General event if we want to enforce saving of all payment methods
176
  Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
214
  }
215
 
216
  // Confirm that we have a nonce from Braintree
217
+ if (!$this->getPaymentMethodToken() ||
218
+ ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure')
219
+ ) {
220
  if (!$this->getPaymentMethodNonce()) {
221
  Gene_Braintree_Model_Debug::log('Card payment has failed, missing token/nonce');
222
  Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
225
  $this->_getHelper()->__('Your card payment has failed, please try again.')
226
  );
227
  }
228
+ } elseif (!$this->getPaymentMethodToken()) {
 
229
  Gene_Braintree_Model_Debug::log('No saved card token present');
230
  Gene_Braintree_Model_Debug::log($_SERVER['HTTP_USER_AGENT']);
231
 
258
 
259
  // Attempt to create the sale
260
  try {
 
261
  // Build up the sale array
262
  $saleArray = $this->_getWrapper()->buildSale(
263
  $amount,
275
  );
276
 
277
  } catch (Exception $e) {
 
278
  // Handle an exception being thrown
279
+ Mage::dispatchEvent('gene_braintree_creditcard_failed_exception', array(
280
+ 'payment' => $payment,
281
+ 'exception' => $e
282
+ ));
283
 
284
  return $this->_processFailedResult($this->_getHelper()->__('There was an issue whilst trying to process your card payment, please try again or another method.'), $e);
 
285
  }
286
 
287
  // Log the initial sale array, no protected data is included
288
  Gene_Braintree_Model_Debug::log(array('_authorize:result' => $result));
289
 
290
  // If the transaction was 3Ds but doesn't contain a 3Ds response
291
+ if (($this->is3DEnabled() && isset($saleArray['options']['three_d_secure']['required']) &&
292
+ $saleArray['options']['three_d_secure']['required'] == true) &&
293
+ (!isset($result->transaction->threeDSecureInfo) || (isset($result->transaction->threeDSecureInfo) &&
294
+ is_null($result->transaction->threeDSecureInfo)))
295
+ ) {
296
  return $this->_processFailedResult($this->_getHelper()->__('This transaction must be passed through 3D secure, please try again or consider using an alternate payment method.'), false, $result);
297
 
298
  }
299
 
300
  // If the sale has failed
301
  if ($result->success != true) {
 
302
  // Dispatch an event for when a payment fails
303
  Mage::dispatchEvent('gene_braintree_creditcard_failed', array('payment' => $payment, 'result' => $result));
304
 
305
  // Return a different message for declined cards
306
+ if (isset($result->transaction->status)) {
 
307
  // Return a custom response for processor declined messages
308
+ if ($result->transaction->status == Braintree_Transaction::PROCESSOR_DECLINED) {
 
309
  return $this->_processFailedResult($this->_getHelper()->__('Your transaction has been declined, please try another payment method or contacting your issuing bank.'), false, $result);
310
 
311
+ } elseif ($result->transaction->status == Braintree_Transaction::GATEWAY_REJECTED
312
  && isset($result->transaction->gatewayRejectionReason)
313
+ && $result->transaction->gatewayRejectionReason == Braintree_Transaction::THREE_D_SECURE
314
+ ) {
315
  // An event for when 3D secure fails
316
+ Mage::dispatchEvent('gene_braintree_creditcard_failed_threed', array(
317
+ 'payment' => $payment,
318
+ 'result' => $result
319
+ ));
320
 
321
  return $this->_processFailedResult($this->_getHelper()->__('Your card has failed 3D secure validation, please try again or consider using an alternate payment method.'), 'Transaction failed with 3D secure', false, $result);
322
  }
344
  // If we have an original token use that for the subsequent requests
345
  if ($originalToken = $this->_getOriginalToken()) {
346
  $paymentArray['paymentMethodToken'] = $originalToken;
347
+
348
  return $paymentArray;
349
  }
350
 
351
  // Check to see whether we're using a payment method token?
352
+ if ($this->getPaymentMethodToken() &&
353
+ !in_array($this->getPaymentMethodToken(), array('other', 'threedsecure'))
354
+ ) {
355
  // Build our payment array
356
  $paymentArray['paymentMethodToken'] = $this->getPaymentMethodToken();
357
  unset($paymentArray['cvv']);
 
358
  } else {
 
359
  // Build our payment array with a nonce
360
  $paymentArray['paymentMethodNonce'] = $this->getPaymentMethodNonce();
 
361
  }
362
 
363
  // If the user is using a stored card with 3D secure, enable it in the request and remove CVV
364
  if ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure') {
 
365
  // If we're using 3D secure token card don't send CVV
366
  unset($paymentArray['cvv']);
 
367
  }
368
 
369
  // If a token is present in the request use that
370
  if ($token) {
 
371
  // Remove this unneeded data
372
  unset($paymentArray['paymentMethodNonce'], $paymentArray['cvv']);
373
 
425
  return $this->_captureAuthorized($payment, $amount);
426
  }
427
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
428
  /**
429
  * Processes successful authorize/clone result
430
  *
431
+ * @param Varien_Object $payment
432
  * @param Braintree_Result_Successful $result
433
+ * @param float $amount
434
+ *
435
  * @return Varien_Object
436
  */
437
  protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
438
  {
439
  // Pass an event if the payment was a success
440
+ Mage::dispatchEvent('gene_braintree_creditcard_success', array(
441
+ 'payment' => $payment,
442
+ 'result' => $result,
443
+ 'amount' => $amount
444
+ ));
445
 
446
  // Set some basic information about the payment
447
  $payment->setStatus(self::STATUS_APPROVED)
488
  foreach ($storeFields as $storeField) {
489
  if (isset($result->transaction->{$storeField}) && !empty($result->transaction->{$storeField})) {
490
  $additionalInfo[$storeField] = $result->transaction->{$storeField};
491
+ } elseif ($value = $payment->getAdditionalInformation($storeField)) {
492
  $additionalInfo[$storeField] = $value;
493
  }
494
  }
495
 
496
  // Check it's not empty and store it
497
+ if (!empty($additionalInfo)) {
498
  $payment->setAdditionalInformation($additionalInfo);
499
  }
500
 
505
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
506
  $this->_setOriginalToken($result->transaction->creditCard['token']);
507
 
508
+ // If we shouldn't have this method saved, add it into the session to be removed once the request is
509
+ // complete
510
  if (!$this->shouldSaveMethod($payment, true)) {
511
+ Mage::getSingleton('checkout/session')->setTemporaryPaymentToken(
512
+ $result->transaction->creditCard['token']
513
+ );
514
  }
515
  }
516
  }
app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Creditcard.php CHANGED
@@ -12,7 +12,7 @@ class Gene_Braintree_Model_Paymentmethod_Legacy_Creditcard extends Gene_Braintre
12
  *
13
  * @var string
14
  */
15
- protected $_code = 'braintree';
16
 
17
  /**
18
  * This method is never available and only used by the RocketWeb orders
12
  *
13
  * @var string
14
  */
15
+ protected $_code = 'braintree_legacy';
16
 
17
  /**
18
  * This method is never available and only used by the RocketWeb orders
app/code/community/Gene/Braintree/Model/Paymentmethod/Legacy/Paypal.php CHANGED
@@ -12,7 +12,7 @@ class Gene_Braintree_Model_Paymentmethod_Legacy_Paypal extends Gene_Braintree_Mo
12
  *
13
  * @var string
14
  */
15
- protected $_code = 'braintree_paypal';
16
 
17
  /**
18
  * This method is never available and only used by the RocketWeb orders
12
  *
13
  * @var string
14
  */
15
+ protected $_code = 'braintree_paypal_legacy';
16
 
17
  /**
18
  * This method is never available and only used by the RocketWeb orders
app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php CHANGED
@@ -34,7 +34,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
34
  protected $_canCapturePartial = false;
35
  protected $_canRefund = true;
36
  protected $_canRefundInvoicePartial = true;
37
- protected $_canVoid = false;
38
  protected $_canUseInternal = true;
39
  protected $_canUseCheckout = true;
40
  protected $_canUseForMultishipping = true;
@@ -54,23 +54,19 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
54
  public function isAvailable($quote = null)
55
  {
56
  // Check Magento's internal methods allow us to run
57
- if(parent::isAvailable($quote)) {
58
-
59
  // Validate the configuration is okay
60
  if ($this->_getWrapper()->validateCredentialsOnce()) {
61
-
62
  // This method is only active in the admin if the vault is enabled
63
  if (Mage::app()->getStore()->isAdmin() && $this->isVaultEnabled()) {
64
  return true;
65
- } else if (Mage::app()->getStore()->isAdmin()) {
66
  return false;
67
  }
68
 
69
  return true;
70
  }
71
-
72
  } else {
73
-
74
  // Otherwise it's a no
75
  return false;
76
  }
@@ -80,6 +76,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
80
  * Place Braintree specific data into the additional information of the payment instance object
81
  *
82
  * @param mixed $data
 
83
  * @return Mage_Payment_Model_Info
84
  */
85
  public function assignData($data)
@@ -135,7 +132,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
135
  * Should we save this method in the database?
136
  *
137
  * @param \Varien_Object $payment
138
- * @param $skipMultishipping
139
  *
140
  * @return mixed
141
  */
@@ -145,7 +142,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
145
  // We must always save the method for multi shipping requests
146
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
147
  return true;
148
- } else if ($this->_getOriginalToken()) {
149
  // If we have an original token, there is no need to save the same payment method again
150
  return false;
151
  }
@@ -158,7 +155,10 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
158
  $object->setResponse(($this->isVaultEnabled() && $savePaypal == 1));
159
 
160
  // Specific event for this method
161
- Mage::dispatchEvent('gene_braintree_paypal_should_save_method', array('object' => $object, 'payment' => $payment));
 
 
 
162
 
163
  // General event if we want to enforce saving of all payment methods
164
  Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
@@ -207,7 +207,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
207
  $this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
208
  );
209
  }
210
- } else if (!$this->getPaymentMethodNonce()) {
211
  Mage::throwException(
212
  $this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
213
  );
@@ -221,7 +221,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
221
 
222
  // Attempt to create the sale
223
  try {
224
-
225
  // Build up the sale array
226
  $saleArray = $this->_getWrapper()->buildSale(
227
  $amount,
@@ -238,7 +237,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
238
  );
239
 
240
  } catch (Exception $e) {
241
-
242
  // Dispatch an event for when a payment fails
243
  Mage::dispatchEvent('gene_braintree_paypal_failed_exception', array('payment' => $payment, 'exception' => $e));
244
 
@@ -250,7 +248,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
250
 
251
  // If the sale has failed
252
  if ($result->success != true) {
253
-
254
  // Dispatch an event for when a payment fails
255
  Mage::dispatchEvent('gene_braintree_paypal_failed', array('payment' => $payment, 'result' => $result));
256
 
@@ -277,6 +274,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
277
  // If we have an original token use that for the subsequent requests
278
  if ($originalToken = $this->_getOriginalToken()) {
279
  $paymentArray['paymentMethodToken'] = $originalToken;
 
280
  return $paymentArray;
281
  }
282
 
@@ -288,7 +286,6 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
288
 
289
  // If a token is present in the request use that
290
  if ($token) {
291
-
292
  // Remove this unneeded data
293
  unset($paymentArray['paymentMethodNonce']);
294
 
@@ -337,7 +334,11 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
337
  protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
338
  {
339
  // Pass an event if the payment was a success
340
- Mage::dispatchEvent('gene_braintree_paypal_success', array('payment' => $payment, 'result' => $result, 'amount' => $amount));
 
 
 
 
341
 
342
  // Set some basic things
343
  $payment->setStatus(self::STATUS_APPROVED)
@@ -368,9 +369,12 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
368
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
369
  $this->_setOriginalToken($result->transaction->paypal['token']);
370
 
371
- // If we shouldn't have this method saved, add it into the session to be removed once the request is complete
 
372
  if (!$this->shouldSaveMethod($payment, true)) {
373
- Mage::getSingleton('checkout/session')->setTemporaryPaymentToken($result->transaction->paypal['token']);
 
 
374
  }
375
  }
376
  }
34
  protected $_canCapturePartial = false;
35
  protected $_canRefund = true;
36
  protected $_canRefundInvoicePartial = true;
37
+ protected $_canVoid = true;
38
  protected $_canUseInternal = true;
39
  protected $_canUseCheckout = true;
40
  protected $_canUseForMultishipping = true;
54
  public function isAvailable($quote = null)
55
  {
56
  // Check Magento's internal methods allow us to run
57
+ if (parent::isAvailable($quote)) {
 
58
  // Validate the configuration is okay
59
  if ($this->_getWrapper()->validateCredentialsOnce()) {
 
60
  // This method is only active in the admin if the vault is enabled
61
  if (Mage::app()->getStore()->isAdmin() && $this->isVaultEnabled()) {
62
  return true;
63
+ } elseif (Mage::app()->getStore()->isAdmin()) {
64
  return false;
65
  }
66
 
67
  return true;
68
  }
 
69
  } else {
 
70
  // Otherwise it's a no
71
  return false;
72
  }
76
  * Place Braintree specific data into the additional information of the payment instance object
77
  *
78
  * @param mixed $data
79
+ *
80
  * @return Mage_Payment_Model_Info
81
  */
82
  public function assignData($data)
132
  * Should we save this method in the database?
133
  *
134
  * @param \Varien_Object $payment
135
+ * @param $skipMultishipping
136
  *
137
  * @return mixed
138
  */
142
  // We must always save the method for multi shipping requests
143
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
144
  return true;
145
+ } elseif ($this->_getOriginalToken()) {
146
  // If we have an original token, there is no need to save the same payment method again
147
  return false;
148
  }
155
  $object->setResponse(($this->isVaultEnabled() && $savePaypal == 1));
156
 
157
  // Specific event for this method
158
+ Mage::dispatchEvent('gene_braintree_paypal_should_save_method', array(
159
+ 'object' => $object,
160
+ 'payment' => $payment
161
+ ));
162
 
163
  // General event if we want to enforce saving of all payment methods
164
  Mage::dispatchEvent('gene_braintree_save_method', array('object' => $object, 'payment' => $payment));
207
  $this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
208
  );
209
  }
210
+ } elseif (!$this->getPaymentMethodNonce()) {
211
  Mage::throwException(
212
  $this->_getHelper()->__('There has been an issue processing your PayPal payment, please try again.')
213
  );
221
 
222
  // Attempt to create the sale
223
  try {
 
224
  // Build up the sale array
225
  $saleArray = $this->_getWrapper()->buildSale(
226
  $amount,
237
  );
238
 
239
  } catch (Exception $e) {
 
240
  // Dispatch an event for when a payment fails
241
  Mage::dispatchEvent('gene_braintree_paypal_failed_exception', array('payment' => $payment, 'exception' => $e));
242
 
248
 
249
  // If the sale has failed
250
  if ($result->success != true) {
 
251
  // Dispatch an event for when a payment fails
252
  Mage::dispatchEvent('gene_braintree_paypal_failed', array('payment' => $payment, 'result' => $result));
253
 
274
  // If we have an original token use that for the subsequent requests
275
  if ($originalToken = $this->_getOriginalToken()) {
276
  $paymentArray['paymentMethodToken'] = $originalToken;
277
+
278
  return $paymentArray;
279
  }
280
 
286
 
287
  // If a token is present in the request use that
288
  if ($token) {
 
289
  // Remove this unneeded data
290
  unset($paymentArray['paymentMethodNonce']);
291
 
334
  protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
335
  {
336
  // Pass an event if the payment was a success
337
+ Mage::dispatchEvent('gene_braintree_paypal_success', array(
338
+ 'payment' => $payment,
339
+ 'result' => $result,
340
+ 'amount' => $amount
341
+ ));
342
 
343
  // Set some basic things
344
  $payment->setStatus(self::STATUS_APPROVED)
369
  if ($payment->getMultiShipping() && !$this->_getOriginalToken()) {
370
  $this->_setOriginalToken($result->transaction->paypal['token']);
371
 
372
+ // If we shouldn't have this method saved, add it into the session to be removed once the request is
373
+ // complete
374
  if (!$this->shouldSaveMethod($payment, true)) {
375
+ Mage::getSingleton('checkout/session')->setTemporaryPaymentToken(
376
+ $result->transaction->paypal['token']
377
+ );
378
  }
379
  }
380
  }
app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php CHANGED
@@ -464,7 +464,6 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
464
  {
465
  // Create the payment method with this data
466
  $paymentMethodCreate = array(
467
- 'customerId' => $this->getBraintreeId(),
468
  'paymentMethodNonce' => $nonce,
469
  'options' => array(
470
  'verifyCard' => true,
464
  {
465
  // Create the payment method with this data
466
  $paymentMethodCreate = array(
 
467
  'paymentMethodNonce' => $nonce,
468
  'options' => array(
469
  'verifyCard' => true,
app/code/community/Gene/Braintree/controllers/Adminhtml/Braintree/MigrationController.php CHANGED
@@ -15,7 +15,7 @@ class Gene_Braintree_Adminhtml_Braintree_MigrationController extends Mage_Adminh
15
  public function runAction()
16
  {
17
  // If the system shouldn't run the migration don't allow this controller to initialize
18
- if (!Mage::helper('gene_braintree')->shouldRunMigration()) {
19
  $this->norouteAction();
20
  return $this;
21
  }
@@ -36,6 +36,9 @@ class Gene_Braintree_Adminhtml_Braintree_MigrationController extends Mage_Adminh
36
  (isset($actions['disable-legacy']) && $actions['disable-legacy'] == 'on'),
37
  (isset($actions['remove-legacy']) && $actions['remove-legacy'] == 'on')
38
  );
 
 
 
39
 
40
  // Run the migration process
41
  $result = $migration->process();
15
  public function runAction()
16
  {
17
  // If the system shouldn't run the migration don't allow this controller to initialize
18
+ if (!Mage::helper('gene_braintree')->canRunMigration()) {
19
  $this->norouteAction();
20
  return $this;
21
  }
36
  (isset($actions['disable-legacy']) && $actions['disable-legacy'] == 'on'),
37
  (isset($actions['remove-legacy']) && $actions['remove-legacy'] == 'on')
38
  );
39
+ $migration->setRunOrderTransactionInfo(
40
+ (isset($actions['order-transaction-info']) && $actions['order-transaction-info'] == 'on')
41
+ );
42
 
43
  // Run the migration process
44
  $result = $migration->process();
app/code/community/Gene/Braintree/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Gene_Braintree>
5
- <version>2.0.3</version>
6
  </Gene_Braintree>
7
  </modules>
8
  <global>
@@ -109,6 +109,16 @@
109
  <kount_ens_ips>209.81.12.0/24,64.128.91.0/24,64.128.87.0/24</kount_ens_ips>
110
  </gene_braintree_creditcard>
111
 
 
 
 
 
 
 
 
 
 
 
112
  </payment>
113
 
114
  </default>
2
  <config>
3
  <modules>
4
  <Gene_Braintree>
5
+ <version>2.0.4</version>
6
  </Gene_Braintree>
7
  </modules>
8
  <global>
109
  <kount_ens_ips>209.81.12.0/24,64.128.91.0/24,64.128.87.0/24</kount_ens_ips>
110
  </gene_braintree_creditcard>
111
 
112
+ <!-- Legacy methods used by the migration tool -->
113
+ <braintree_legacy>
114
+ <active>0</active>
115
+ <model>gene_braintree/paymentmethod_legacy_creditcard</model>
116
+ </braintree_legacy>
117
+ <braintree_paypal_legacy>
118
+ <active>0</active>
119
+ <model>gene_braintree/paymentmethod_legacy_paypal</model>
120
+ </braintree_paypal_legacy>
121
+
122
  </payment>
123
 
124
  </default>
app/code/community/Gene/Braintree/etc/system.xml CHANGED
@@ -30,6 +30,15 @@
30
  <show_in_store>1</show_in_store>
31
  </lib_version>
32
 
 
 
 
 
 
 
 
 
 
33
  <braintree_details translate="label">
34
  <label>Braintree Account Details</label>
35
  <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
30
  <show_in_store>1</show_in_store>
31
  </lib_version>
32
 
33
+ <migration translate="label">
34
+ <label>Migrate from Legacy Braintree</label>
35
+ <frontend_model>gene_braintree/adminhtml_system_config_braintree_migration</frontend_model>
36
+ <sort_order>25</sort_order>
37
+ <show_in_default>1</show_in_default>
38
+ <show_in_website>1</show_in_website>
39
+ <show_in_store>1</show_in_store>
40
+ </migration>
41
+
42
  <braintree_details translate="label">
43
  <label>Braintree Account Details</label>
44
  <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
app/design/adminhtml/default/default/layout/gene/braintree.xml CHANGED
@@ -32,6 +32,13 @@
32
  </reference>
33
  </adminhtml_sales_order_create_index>
34
 
 
 
 
 
 
 
 
35
  <!-- Include our migration wizard on the system config page -->
36
  <adminhtml_system_config_edit>
37
  <reference name="head">
32
  </reference>
33
  </adminhtml_sales_order_create_index>
34
 
35
+ <!-- Include styling for the order view page -->
36
+ <adminhtml_sales_order_view>
37
+ <reference name="head">
38
+ <action method="addCss"><file>css/gene/braintree/adminhtml.css</file></action>
39
+ </reference>
40
+ </adminhtml_sales_order_view>
41
+
42
  <!-- Include our migration wizard on the system config page -->
43
  <adminhtml_system_config_edit>
44
  <reference name="head">
app/design/adminhtml/default/default/template/gene/braintree/creditcard/info.phtml CHANGED
@@ -3,6 +3,14 @@
3
  <img src="//i.imgur.com/JR1BJTr.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
4
  </div>
5
 
 
 
 
 
 
 
 
 
6
  <?php if ($_specificInfo = $this->getSpecificInformation()):?>
7
  <table>
8
  <?php foreach ($_specificInfo as $_label => $_value):?>
@@ -14,7 +22,7 @@
14
  </table>
15
  <?php endif;?>
16
 
17
- <?php if(!$this->isSingleInvoice()): ?>
18
  <p><?php echo $this->__('This order contains multiple Braintree transactions, to view more information on each transaction please view their corresponding invoice.'); ?></p>
19
  <?php endif; ?>
20
 
3
  <img src="//i.imgur.com/JR1BJTr.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
4
  </div>
5
 
6
+ <?php if (Mage::app()->getStore()->isAdmin() && $this->getMethod()->getCode() == 'braintree_legacy'): ?>
7
+ <div class="braintree_legacy_order">
8
+ <h4><?php echo $this->__('Legacy Payment'); ?></h4>
9
+ <p><?php echo $this->__('This order was imported from the legacy Braintree extension. The information displayed below maybe incomplete due to information not being provided by the original extension.'); ?></p>
10
+ <p><?php echo $this->__('Certain operations such as credit memos & voiding may not work with this order.'); ?></p>
11
+ </div>
12
+ <?php endif; ?>
13
+
14
  <?php if ($_specificInfo = $this->getSpecificInformation()):?>
15
  <table>
16
  <?php foreach ($_specificInfo as $_label => $_value):?>
22
  </table>
23
  <?php endif;?>
24
 
25
+ <?php if (!$this->isSingleInvoice()): ?>
26
  <p><?php echo $this->__('This order contains multiple Braintree transactions, to view more information on each transaction please view their corresponding invoice.'); ?></p>
27
  <?php endif; ?>
28
 
app/design/adminhtml/default/default/template/gene/braintree/paypal/info.phtml CHANGED
@@ -3,6 +3,14 @@
3
  <img src="//i.imgur.com/sitDbHA.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
4
  </div>
5
 
 
 
 
 
 
 
 
 
6
  <?php if ($_specificInfo = $this->getSpecificInformation()):?>
7
  <table>
8
  <?php foreach ($_specificInfo as $_label => $_value):?>
3
  <img src="//i.imgur.com/sitDbHA.png" alt="<?php echo $this->__('PayPal - Braintree'); ?>" /> by <a href="http://gene.co.uk" target="_blank" style="text-decoration: none;">Gene Commerce</a>
4
  </div>
5
 
6
+ <?php if (Mage::app()->getStore()->isAdmin() && $this->getMethod()->getCode() == 'braintree_paypal_legacy'): ?>
7
+ <div class="braintree_legacy_order">
8
+ <h4><?php echo $this->__('Legacy Payment'); ?></h4>
9
+ <p><?php echo $this->__('This order was imported from the legacy Braintree extension. The information displayed below maybe incomplete due to information not being provided by the original extension.'); ?></p>
10
+ <p><?php echo $this->__('Certain operations such as credit memos & voiding may not work with this order.'); ?></p>
11
+ </div>
12
+ <?php endif; ?>
13
+
14
  <?php if ($_specificInfo = $this->getSpecificInformation()):?>
15
  <table>
16
  <?php foreach ($_specificInfo as $_label => $_value):?>
app/design/adminhtml/default/default/template/gene/braintree/system/config/migration.phtml CHANGED
@@ -35,11 +35,18 @@
35
  <span><?php echo $this->__('This will ensure that any customer data previously saved by customers will be displayed with the new module.'); ?></span>
36
  </label>
37
  </li>
 
 
 
 
 
 
 
38
  <li>
39
  <input type="checkbox" id="disable-legacy" name="migration[disable-legacy]" checked="checked">
40
  <label for="disable-legacy">
41
  <?php echo $this->__('Disable Legacy Braintree Module'); ?>
42
- <span><input type="checkbox" id="remove-legacy" name="migration[remove-legacy]"> <?php echo $this->__('Remove all legacy module files. <strong>This step is not reversible, it will remove all legacy files and config settings.</strong>'); ?></span>
43
  </label>
44
  </li>
45
  </ul>
@@ -52,12 +59,40 @@
52
  </div>
53
  </div>
54
 
 
55
  <script type="text/javascript">
56
- // On load add our active classes
57
  document.observe("dom:loaded", function() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  $('braintree-migration-overlay').addClassName('active');
59
  $('braintree-migration').addClassName('active');
60
- });
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
  // Migration submit action
63
  Element.observe($$('.braintree-migration-content').first(), 'submit', function (event) {
@@ -105,8 +140,8 @@
105
  onSuccess: function (transport) {
106
  if (transport && transport.responseJSON) {
107
  if (transport.responseJSON.success == true) {
108
- $('braintree-migration-overlay').hide();
109
- $('braintree-migration').hide();
110
  }
111
  }
112
  },
35
  <span><?php echo $this->__('This will ensure that any customer data previously saved by customers will be displayed with the new module.'); ?></span>
36
  </label>
37
  </li>
38
+ <li>
39
+ <input type="checkbox" id="order-transaction-info" name="migration[order-transaction-info]" checked="checked">
40
+ <label for="order-transaction-info">
41
+ <?php echo $this->__('Import Order Transaction Information'); ?>
42
+ <span><?php echo $this->__('Ensure any orders created with the old extension can still be viewed with only the new extension installed. <strong>This is required if you remove all legacy files.</strong>'); ?></span>
43
+ </label>
44
+ </li>
45
  <li>
46
  <input type="checkbox" id="disable-legacy" name="migration[disable-legacy]" checked="checked">
47
  <label for="disable-legacy">
48
  <?php echo $this->__('Disable Legacy Braintree Module'); ?>
49
+ <span><input type="checkbox" id="remove-legacy" name="migration[remove-legacy]" onclick="checkTransactionIsChecked();"> <?php echo $this->__('Remove all legacy module files. <strong>This step is not reversible, it will remove all legacy files and config settings. Removing the original Braintree_Payments module will also disable this migration tool from being ran again.</strong>'); ?></span>
50
  </label>
51
  </li>
52
  </ul>
59
  </div>
60
  </div>
61
 
62
+ <?php if (Mage::helper('gene_braintree')->shouldRunMigration()): ?>
63
  <script type="text/javascript">
 
64
  document.observe("dom:loaded", function() {
65
+ showMigration();
66
+ });
67
+ </script>
68
+ <?php endif; ?>
69
+
70
+ <script type="text/javascript">
71
+ /**
72
+ * Show the migration
73
+ *
74
+ * @returns {boolean}
75
+ */
76
+ function showMigration() {
77
+ $$('.braintree-migration-loading h3').first().show();
78
+ $$('.braintree-migration-loading p').first().show();
79
+ $('braintree-migration').removeClassName('loading');
80
+
81
  $('braintree-migration-overlay').addClassName('active');
82
  $('braintree-migration').addClassName('active');
83
+ return false;
84
+ }
85
+
86
+ /**
87
+ * Automatically check the order transaction info box if they opt to remove the legacy module
88
+ *
89
+ * @returns {boolean}
90
+ */
91
+ function checkTransactionIsChecked() {
92
+ if ($('remove-legacy').checked) {
93
+ $('order-transaction-info').checked = true;
94
+ }
95
+ }
96
 
97
  // Migration submit action
98
  Element.observe($$('.braintree-migration-content').first(), 'submit', function (event) {
140
  onSuccess: function (transport) {
141
  if (transport && transport.responseJSON) {
142
  if (transport.responseJSON.success == true) {
143
+ $('braintree-migration-overlay').removeClassName('active');
144
+ $('braintree-migration').removeClassName('active');
145
  }
146
  }
147
  },
app/design/frontend/base/default/template/gene/braintree/js/firecheckout.phtml CHANGED
@@ -59,6 +59,14 @@
59
  return checkout.save();
60
  },
61
 
 
 
 
 
 
 
 
 
62
  /**
63
  * Override the loading function to set the counter to 0 so the loader actually gets hidden
64
  */
59
  return checkout.save();
60
  },
61
 
62
+ /**
63
+ * Ensure the load counter only reaches 1 from Braintree
64
+ */
65
+ setLoading: function () {
66
+ checkout.setLoadWaiting(true);
67
+ checkout.loadCounter = 1;
68
+ },
69
+
70
  /**
71
  * Override the loading function to set the counter to 0 so the loader actually gets hidden
72
  */
app/design/frontend/base/default/template/gene/braintree/js/idev.phtml CHANGED
@@ -32,6 +32,11 @@
32
  // Add in our loader event
33
  if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
34
  $$('.onestepcheckout-place-order-loading').first().show();
 
 
 
 
 
35
  }
36
  },
37
 
@@ -39,6 +44,9 @@
39
  * Reset the loading state of the checkout
40
  */
41
  resetLoading: function() {
 
 
 
42
  // Grab the submit button
43
  var submitElement = $('onestepcheckout-place-order');
44
 
@@ -48,7 +56,7 @@
48
 
49
  // Remove the loader element
50
  if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
51
- $$('.onestepcheckout-place-order-loading').first().hide();
52
  }
53
  },
54
 
32
  // Add in our loader event
33
  if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
34
  $$('.onestepcheckout-place-order-loading').first().show();
35
+ } else {
36
+ var loaderElement = new Element('span').
37
+ addClassName('onestepcheckout-place-order-loading').
38
+ update('<?php echo $this->__('Please wait, processing your order...'); ?>');
39
+ submitElement.parentNode.appendChild(loaderElement);
40
  }
41
  },
42
 
44
  * Reset the loading state of the checkout
45
  */
46
  resetLoading: function() {
47
+ // Reset the placing order flag
48
+ already_placing_order = false;
49
+
50
  // Grab the submit button
51
  var submitElement = $('onestepcheckout-place-order');
52
 
56
 
57
  // Remove the loader element
58
  if ($$('.onestepcheckout-place-order-loading').first() !== undefined) {
59
+ $$('.onestepcheckout-place-order-loading').first().remove();
60
  }
61
  },
62
 
js/gene/braintree/config.codekit CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
- "creatorBuild": "19115",
4
  "files": {
5
  "\/braintree-0.1.js": {
6
  "fileType": 64,
1
  {
2
  "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
+ "creatorBuild": "19127",
4
  "files": {
5
  "\/braintree-0.1.js": {
6
  "fileType": 64,
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Gene_Braintree</name>
4
- <version>2.0.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
7
  <channel>community</channel>
@@ -36,9 +36,9 @@
36
  &lt;/ul&gt;</description>
37
  <notes>Connect your Magento store to Braintree to accept Credit Cards &amp;amp; PayPal using V.Zero SDK</notes>
38
  <authors><author><name>Dave Macaulay</name><user>dave</user><email>support@gene.co.uk</email></author></authors>
39
- <date>2016-07-27</date>
40
- <time>09:15:33</time>
41
- <contents><target name="magecommunity"><dir name="Gene"><dir name="Braintree"><dir name="Block"><dir name="Adminhtml"><dir name="Report"><dir name="Transactions"><file name="Grid.php" hash="32b32086548f62ae4aca4baf456b9ed2"/><file name="Search.php" hash="81d57c3744530f36c37782ce9d0f3a70"/></dir><file name="Transactions.php" hash="7afe45b49353e52b432aa0392d76a08e"/></dir><dir name="System"><dir name="Config"><dir name="Braintree"><file name="Config.php" hash="40a2eb78ee6c004b749ec62aaa690bf4"/><file name="Currency.php" hash="9976cc7d6ff80c3ea351ddff9b10b9d8"/><dir name="Kount"><file name="Ens.php" hash="56ef3f1e4da9d09b6bc8d0814a882358"/></dir><file name="Moduleversion.php" hash="eed1f9bcb139b6062e7972d3f98e13c8"/><file name="Version.php" hash="ce58278a4faf965301cc2d8b2da4483c"/></dir><file name="Migration.php" hash="e57911ecb5fb301147cd4940b3f1e4f4"/></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="a03c441e8143896f92d02931a809f666"/></dir><dir name="Creditcard"><file name="Info.php" hash="6faf4be87ad62f13373a6b2e852a478b"/><file name="Saved.php" hash="2d0a3c3543d8eecc7c94a50cea7810d9"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="7871f210f4009cfe53ecfaf5164e43ca"/><dir name="Express"><file name="Button.php" hash="b7bb6fa7e6f80aa4809d1d1dc7dc6950"/><file name="Checkout.php" hash="d0c9bc6f656e93031189e7d6bb1c8533"/></dir><file name="Info.php" hash="4d9513f53e20bf7752c1f826bbd63b0e"/><file name="Js.php" hash="35e604171e4a5d1250732c4a5ad33d9b"/><dir name="Paypal"><file name="Info.php" hash="0874c0839a27c14ec9be47fed152e880"/><file name="Saved.php" hash="6a99ef8a384d7ab8f4537e995867ec85"/></dir><file name="Paypal.php" hash="10cbb40f8801153ac0c04725843f4eee"/><dir name="Saved"><file name="Edit.php" hash="ae2d80ecab7cdda39b18054b057f2dc5"/></dir><file name="Saved.php" hash="782f17589219da087e57035a1c0b9a4a"/></dir><dir name="Helper"><file name="Data.php" hash="b3e5025957b496d3be5cdb865a20e5be"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><dir name="Entity"><file name="Setup.php" hash="c580e73ec53ac455698ee6b0ff005e39"/></dir><dir name="Kount"><file name="Ens.php" hash="3f672b000d43363406b1df7e2b52f620"/><file name="Rest.php" hash="5dfb5265a431da0210cb87dba023b7b6"/></dir><file name="Migration.php" hash="cb9cec0c7d57c406e9bad66efe68b07d"/><file name="Observer.php" hash="e1ac13f65517ef889cc41fc8b421cafb"/><dir name="Paymentmethod"><file name="Abstract.php" hash="5a950bf2273b99ceae0eaf8482d67052"/><file name="Creditcard.php" hash="c336f9e0a43459beb57a907cae7f436c"/><dir name="Legacy"><file name="Creditcard.php" hash="cfc791157f3a173ff8ed838e69c96f51"/><file name="Paypal.php" hash="59ef3cfb64f4c4c878015147412c78a7"/></dir><file name="Paypal.php" hash="363575d74739bda8f2446f0f6d87c284"/></dir><file name="Saved.php" hash="3c9318122fbe56bdb915c837d834f392"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="d39ff81be4b54620410ceeda7f960f0f"/><file name="FormIntegration.php" hash="9788f349430e0d48c9e13c262da3fe06"/><file name="PaymentAction.php" hash="d6e997ae4f6ed57129bf4d5da06a0a82"/></dir><file name="Environment.php" hash="5c2f5ce4d6d9f6f178102b90ec15aa2c"/><dir name="Paypal"><file name="CaptureAction.php" hash="0dd0c6da578aee4b7508f78cab982176"/><file name="Locale.php" hash="adc0ab30619eb3a34d8f5fe1087b07b0"/><file name="PaymentAction.php" hash="ab430eaf7ced39e9d6fd80ad0a7f6b3c"/><file name="Paymenttype.php" hash="48225fa7b3f5e54d81711397dd5bd96b"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Currency.php" hash="73cb15b1de303e88c487db4c585ef94e"/></dir></dir></dir><dir name="Wrapper"><file name="Braintree.php" hash="dd319741658ff63fd96495772df213a9"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Braintree"><file name="MigrationController.php" hash="cb9ffed24551fb7fff6ccd871a589101"/></dir><file name="BraintreeController.php" hash="d7ece21342a7b4b37ee41ea0e7ff20ad"/></dir><file name="CheckoutController.php" hash="223de3639574a686a68e9210f39c1fad"/><file name="ExpressController.php" hash="89aaef3ec80d0793e918a3674139b4f6"/><dir name="Kount"><file name="EnsController.php" hash="1db795afa1df901c37bbe48a3f01db2f"/></dir><file name="SavedController.php" hash="083777b1536e8dda604107af9f0081a9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="9b386b32741f91d490021aefdaf3fee5"/><file name="system.xml" hash="de3781d5454488230602588b69aac3d2"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="503f428384f687d3f55a19ea57450212"/><file name="upgrade-1.0.5.4-2.0.0.php" hash="62d37c35ba39a77ea14cad842f143393"/><file name="upgrade-2.0.0-2.0.1.php" hash="a08927707bb43a5c22b3b6ce3dd7a3c7"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="97cf1ff702b5fe0697bcb0d725f37e6b"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="bfa98d63527cba0990c5cd793325a013"/><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="saved.phtml" hash="579ec8ca726de3b5bea8600663d1e61f"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="2cf07e28ebd141ea73e6e9082096304e"/><dir name="customer"><file name="edit.phtml" hash="ed8a9533f07fbfa36ec78623afd1a04d"/><file name="methods.phtml" hash="794ad8cb20314d1657a746b365c82540"/><file name="saved.phtml" hash="0457b0fa38f9db788133e54f359baa63"/></dir><dir name="express"><file name="cart.phtml" hash="dc6546baaa5c0c37fe3a6221ed978e87"/><file name="catalog.phtml" hash="e24ee8a37661e4cc82c19aaae3b669c3"/><file name="error.phtml" hash="0ec2ea2f9b909d9f0543e5df83eea055"/><file name="shipping_details.phtml" hash="0bb6ceafaac0ba522278df310d6136e2"/></dir><dir name="js"><file name="aheadworks.phtml" hash="533ba9aebbba6768649668386a74a1c2"/><file name="amasty.phtml" hash="2bfc5623dd9a98721b53a4d8cd13c0c3"/><file name="awesomecheckout.phtml" hash="ee42abb3b9211a31b3d4454ba1e92fe9"/><file name="data.phtml" hash="f8b04e3d0d7154cc75332eb5bec3e54e"/><file name="default.phtml" hash="fdcfb27a06ebab20268ef4ed820625c1"/><file name="fancycheckout.phtml" hash="f603bcd50dea98dbb45c1ec8b692314c"/><file name="firecheckout.phtml" hash="7d5df6424093021b06c9c5882b378be5"/><file name="fme.phtml" hash="263fb201b77696cf21cc677696c53fdd"/><file name="idev.phtml" hash="3b586cd9dbef7b5d0be7b2999be356b6"/><file name="iwd.phtml" hash="d7e12c84b629306529d3d8beb0c4814d"/><file name="magestore.phtml" hash="ff6a622a4048b8e533f3e672a40e6296"/><file name="multishipping.phtml" hash="a1e777e99df26d81f7c4b9e7b4a7c109"/><file name="oye.phtml" hash="51ef48f818e79acb6d1e8b9eb7889cc9"/><file name="setup.phtml" hash="804d63a30f8d6c985644b545a768da97"/><file name="unicode.phtml" hash="dd07e924a01b0a28ef46c9a62f22e3b5"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/><file name="saved.phtml" hash="3dd56f96bcdd14be594d355ae8fff329"/></dir><file name="paypal.phtml" hash="d12c20e5fb76f31270a5d47061e42715"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="9d57a85acb47d23341af91f4143b4f5e"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="152e09ed938c47ffc056a7c11247375a"/><file name="info.phtml" hash="24c67bab482ea7383ce57d9a06bb9d6f"/><file name="saved.phtml" hash="ca27adb601aebf97cd25a892082a8663"/></dir><file name="creditcard.phtml" hash="2d77487c6b7e9e6c77b2ddb25597bd8b"/><file name="js.phtml" hash="7253799710792ed1f8611e21c2b100bf"/><dir name="paypal"><file name="info.phtml" hash="a8f92f312f8aa5a9463f1d5c2a38cd1b"/><file name="saved.phtml" hash="779ca8e907d7d463eafce58dfaf94f0c"/></dir><file name="paypal.phtml" hash="f81578f64c8a30560299bd993d8e996d"/><dir name="system"><dir name="config"><file name="migration.phtml" hash="4cfe0ffb6a9e03d1297eb66a51f77429"/></dir></dir><dir name="transactions"><file name="index.phtml" hash="1791b6393f319616dd79c0b46e391847"/><file name="search.phtml" hash="1682ce6200681681f0ce3c848e2e6694"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gene_Braintree.xml" hash="8c0ffda8566dca2f0b98a999921e3e55"/></dir></target><target name="mageweb"><dir name="js"><dir name="gene"><dir name="braintree"><file name="braintree-0.1.js" hash="a72cc4545d0d01dd0947dae1474516dd"/><file name="config.codekit" hash="ac2da34ea9ef3ca9c6dd616a0ae830d6"/><file name="express.js" hash="a32735940fb8313c150e6567a59a1f0e"/><file name="vzero-0.7-min.js" hash="67f02f3f52819c5af8db913d7780dc33"/><file name="vzero-0.7-min.js.map" hash="1fc5d50c5cdcb138131930ac92362053"/><file name="vzero-0.7.js" hash="9df7e368f0ba3d900940cec112f56dc1"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><file name="paypal-loading.gif" hash="078a2daf55245b227c09a7bed86750c6"/><file name="paypal.png" hash="40d5f74305e565bd14aef19bcf696541"/></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="loader-white.gif" hash="1fc0e911558e8dfe77cfdfafa0d38f88"/></dir></dir><dir name="css"><dir name="gene"><dir name="braintree"><dir name="account"><file name="account.less" hash="ddf6bf208f290316300ab20682f34473"/></dir><file name="account.css" hash="73bb46f85320b2f2b4de9beb6c0e0bd6"/><file name="aheadworks.css" hash="f5a06971e4dbac94df48fb0ff1912f98"/><file name="amasty.css" hash="5a4a845ea4a16cca2195cb836e25571e"/><file name="awesomecheckout.css" hash="5f858ec9549f6b04b0c2885fbf193e7b"/><file name="config.codekit" hash="845cf6e31d4c2b88906908d7fb65b249"/><dir name="core"><file name="_general.less" hash="5848708373d8ed5eda5e5b23c3e4e05c"/><file name="_hostedfields.less" hash="555bd4655d78a3b379c4b86a3e2d86e5"/><file name="_paypal.less" hash="e7e55d959247956253a0af1df0c9e899"/><file name="_saved.less" hash="66ec8d894e336f9934a1e54972c4b220"/></dir><file name="default.css" hash="229df9c1e39496d64a96c1b17e7a1823"/><file name="express.css" hash="23fdeca7804baa026615f4e54eeaf66b"/><file name="express.less" hash="0d752abca5f300beadc5a2948b5565ae"/><file name="fancycheckout.css" hash="69b7d8ce592bffde444edf77234109bd"/><file name="firecheckout.css" hash="6605fd097c6b509fd8ef758a5a2ea236"/><file name="fme.css" hash="5809c809abc0cc6dde9ff2accebe4f38"/><file name="idev.css" hash="89104fad2a084ec8ed229d119d9c276c"/><dir name="integrations"><file name="aheadworks.less" hash="09b0304383e198885f030119c15641f7"/><file name="amasty.less" hash="4cdf236e1d44112205750cefa11448b4"/><file name="awesomecheckout.less" hash="e774da637a5c6bbdb2e5decc998afae1"/><file name="default.less" hash="d366d4560ed1ce3e9e120309e56bec2f"/><file name="fancycheckout.less" hash="18281c460bb32da164964abe585b092b"/><file name="firecheckout.less" hash="459704b8b6efca52fcee7c335b3ad625"/><file name="fme.less" hash="580ed66608560fcd1195246c22e3559c"/><file name="idev.less" hash="47485cc963e16d12e673c06cd9efe4b1"/><file name="iwd.less" hash="5081477c7946e0f5cf8cc4198895ca11"/><file name="magestore.less" hash="0af5cd105be3995dc2044d33f990bbb5"/><file name="oye.less" hash="06a0f79190b16dfbce3aec6d14f07461"/><file name="unicode.less" hash="1416abe9a38965d9aead022b238f7d4f"/></dir><file name="iwd.css" hash="651ba890cc76d1f9fdaa7d6137b2a106"/><file name="magestore.css" hash="fdeca676628bd2e1c732a15640a42ff3"/><file name="oye.css" hash="ec24b4a2541dd3d01540d1f065025d7b"/><file name="unicode.css" hash="82acd70dca47bb484a17296c2ca11e81"/><file name=".DS_Store" hash="1405352d803d5c88cf3ec19a82f173d0"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="gene"><dir name="braintree"><file name="adminhtml.css" hash="2847eb017b959db61659562d1e8cfaea"/><file name="adminhtml.less" hash="6456950844fcd86471cf78400f922915"/><file name="config.codekit" hash="a41f2e0e0faacce3bd7f194f03bdd365"/><file name="migration.css" hash="c67c92df36fe23fecaa1db9f1f1cd996"/><file name="migration.less" hash="2f76dd2f55cc5268bd70197bfe344b20"/><file name=".DS_Store" hash="63617e9dd9988a3d3773937a3f7e2f9a"/></dir></dir></dir><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><dir name="migration"><file name="braintree.png" hash="396d721824a86b169ce0055090ce9766"/><file name="gene-logo.png" hash="16efb1b148acc59c46c84a21d726b6e9"/><file name="loader.gif" hash="66b9100930b8e58d46acf2e13d41f7ea"/></dir></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Gene"><dir name="Braintree"><file name="AddOn.php" hash="e8bbb6db343ba99192346b1dcbf45677"/><file name="AddOnGateway.php" hash="d8698ffe89c01fba78a8a06a2fc68122"/><file name="Address.php" hash="004d3d36d39fc6fcc3d510f4b15b1fca"/><file name="AddressGateway.php" hash="41b5a3be7bdb2fe326a49a1554e1b0c3"/><file name="AndroidPayCard.php" hash="bb4a81807fefc76db286e615128c5d8c"/><file name="ApplePayCard.php" hash="b895256bcb867854bcaaffc1ce833fbd"/><file name="Base.php" hash="60d52fd1bef5655bcb607fba45bb4c1c"/><file name="ClientToken.php" hash="358c0a1dba687baf635db818cb7d1dac"/><file name="ClientTokenGateway.php" hash="9c24bb9de2c419c7e377c046da2a1ffa"/><file name="CoinbaseAccount.php" hash="ee5cb6963f675a9a71293c453b128866"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="2a416a1eae0c22329d9bef88b25039b2"/><file name="CredentialsParser.php" hash="c4bb2248a33129d8523a6120ce44108b"/><file name="CreditCard.php" hash="d32b8d8e64b2d046d3d9e4f00c67f1ed"/><file name="CreditCardGateway.php" hash="0d120ed06f06fd614468d6e3f0ad22d2"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="6a07430c9437f6e6c1516d5b4572a749"/><file name="CreditCardVerificationSearch.php" hash="18efe7d508c2bd5fea1c0e68fc26182f"/><file name="Customer.php" hash="62d0937de86f7a14a512ad66edba7569"/><file name="CustomerGateway.php" hash="5367d9d8a878572106e3a94c60132b1b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="ad122f0f33b27dfd98bcdd38ea138ae4"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="47796edb8ac2fa68e9af8fb8a13aacb1"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="c3a4e93fa2b3b0e20ddcb593dcdc7b2b"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="a7f98ff690e725b7fcd198b4b22d0637"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><file name="EuropeBankAccount.php" hash="82ae4f4d1c45ce2c421305bf9397c866"/><dir name="Exception"><file name="Authentication.php" hash="f9e13654988452cca2ac5228a80adae4"/><file name="Authorization.php" hash="5f8c017c6e9fd79a556dade8e15a72e8"/><file name="Configuration.php" hash="b50f67e8ea36cff0d9f6ad718126c6fc"/><file name="DownForMaintenance.php" hash="7fd30b1f8976ed7e38b7e9fae5c20f03"/><file name="ForgedQueryString.php" hash="6884dbae1e86767834b77c821df2db62"/><file name="InvalidChallenge.php" hash="1c283a1c9dac65feb137594d0dcf0e35"/><file name="InvalidSignature.php" hash="b83f5b16735cb3a8e0a8111c4f32711e"/><file name="NotFound.php" hash="f832f771d20b381c2780eb2a572b9f44"/><file name="SSLCaFileNotFound.php" hash="e927c7307bf1761814dc8a755238070d"/><file name="SSLCertificate.php" hash="d509b6a6206bd7c5563ac142dfe3801f"/><file name="ServerError.php" hash="b4645290229ab228a257047d08ef63d7"/><file name="TestOperationPerformedInProduction.php" hash="fde4c6a8b708420b26785fb67a2548ef"/><file name="Unexpected.php" hash="01ea2800fb91995ec2a15aee5024611e"/><file name="UpgradeRequired.php" hash="7f40b174df891cc3b3e206d1be884a58"/><file name="ValidationsFailed.php" hash="cd2d30c69911f81b55279c3d6bf88c61"/></dir><file name="Exception.php" hash="f14c94bf67206184eb3e4e7aeb4a608a"/><file name="Gateway.php" hash="d2fac69479243ef4cea7d7a8add798f7"/><file name="Http.php" hash="1baa32e0efcae13c4d6294d1233512a1"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><file name="Merchant.php" hash="5053ebe889c854d11f2686bffdeb58be"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="3e80148bac9fda676844aa19d5b2dc28"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="777b6f28f643e78616c7ed753a39c0cd"/></dir><file name="MerchantAccount.php" hash="496c93182d824bb2967cc9366dec1ac3"/><file name="MerchantAccountGateway.php" hash="e2073aff6f8b3c5f2e64b23b210c44f7"/><file name="MerchantGateway.php" hash="e0a2e3a28c68dac8bd082973b269ed1b"/><file name="Modification.php" hash="0abe992d4f821327f617ca883c4eb2d1"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="OAuthCredentials.php" hash="e992dca9dfedb27e3d050af55971a968"/><file name="OAuthGateway.php" hash="9a0b2b692eaf8fb5f337922044b20cc1"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="bdb69ebdc75d67009710be9703a47e80"/><file name="PayPalAccount.php" hash="672a7d424f94e590c5e66a21e62d7bc2"/><file name="PayPalAccountGateway.php" hash="d73f5744ebaca6cc882c42d0e9c1a05e"/><file name="PaymentInstrumentType.php" hash="be97a30c7d8fbbb180864dc4efea71f2"/><file name="PaymentMethod.php" hash="5bc31d3e97610e7218c95aba2422cc9a"/><file name="PaymentMethodGateway.php" hash="4c93b070cb79c86ec9384e069fbae777"/><file name="PaymentMethodNonce.php" hash="e99302e2468f55c8fb4b2ceeb1bce68e"/><file name="PaymentMethodNonceGateway.php" hash="22a0d89eee071a28b530c6be477dcc6e"/><file name="Plan.php" hash="22ab0117d462352aecb9531d4a26619e"/><file name="PlanGateway.php" hash="95e093b55ad20f8b652ee5f2fc2a0fcf"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="7c41787025ec7cffb269f53e3ce479e2"/><file name="Error.php" hash="0e0460f1eea017bc7591e05351f51eb0"/><file name="Successful.php" hash="03f1c379fcedaef499296ab7778d1e36"/></dir><file name="RiskData.php" hash="8bef1074f9f1c50c841a7c7cf627c9cf"/><file name="SettlementBatchSummary.php" hash="388d88e8cea7bec61ee78f388fb78c2c"/><file name="SettlementBatchSummaryGateway.php" hash="bc54658b75fa0505e072331799c2d9ad"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="cde05aa61192d5b930b57330db308835"/><file name="SubscriptionGateway.php" hash="bd1b2aa2d4d41a595463bead64ed34e0"/><file name="SubscriptionSearch.php" hash="1874ebe5cb42d7d2836617810cced1af"/><dir name="Test"><file name="CreditCardNumbers.php" hash="676a9100354eb679e7ca1e0f0d67293f"/><file name="MerchantAccount.php" hash="612e7e30cca364c0d14cbff3b54ebf3f"/><file name="Nonces.php" hash="d39c75e07c12c005c837c33003cb9ec2"/><file name="Transaction.php" hash="f7ef8730ede38eda778679c7056ae7c7"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TestingGateway.php" hash="ccb1126142799ac3dc9f8d6f1a1f48d4"/><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><file name="ThreeDSecureInfo.php" hash="542550c4e03a24551d00e8aad5493035"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="AndroidPayCardDetails.php" hash="0d7716a3c992dfb0833e7ecd437ef346"/><file name="ApplePayCardDetails.php" hash="23f7ba70521889585fa40f4f0388524d"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="EuropeBankAccountDetails.php" hash="afe4fdc3ab3714ef2995f514ce2be2a6"/><file name="PayPalDetails.php" hash="06903d1ee21879f7329b920138df9ac6"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="afe5d8ef7fc73633424d26b942c4e5a1"/><file name="TransactionGateway.php" hash="39684956db79fe58891876e5c7845413"/><file name="TransactionSearch.php" hash="aa58846182b909fb8747e165ec7e9b92"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="5ead181bf0d5484db5eb305efa13bec4"/><file name="UnknownPaymentMethod.php" hash="9107498774ab5bc2b25de98838736b47"/><file name="Util.php" hash="9832a44da18b97a55248cadc4bb9a4ad"/><file name="Version.php" hash="43e074bc53780cb92af4a9ef4887c63e"/><file name="WebhookNotification.php" hash="4097fb57d46368d903c42bb20fbd49ca"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="19f9c9b9b61d4f97f65775f527ac408d"/><file name="Parser.php" hash="c06b1ae155ac7687eaa856fac472656d"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><file name="Braintree.php" hash="2c75cf27b3c9a6e1bc557e6b239d2594"/><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="b0c520cbdf0f42b11c8c6dfafbe999bd"/></dir></dir></target></contents>
42
  <compatible/>
43
  <dependencies><required><php><min>5.4.0</min><max>6.0.0</max></php><package><name></name><channel>connect.magentocommerce.com/core</channel><min></min><max></max></package></required></dependencies>
44
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Gene_Braintree</name>
4
+ <version>2.0.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
7
  <channel>community</channel>
36
  &lt;/ul&gt;</description>
37
  <notes>Connect your Magento store to Braintree to accept Credit Cards &amp;amp; PayPal using V.Zero SDK</notes>
38
  <authors><author><name>Dave Macaulay</name><user>dave</user><email>support@gene.co.uk</email></author></authors>
39
+ <date>2016-08-19</date>
40
+ <time>08:44:57</time>
41
+ <contents><target name="magecommunity"><dir name="Gene"><dir name="Braintree"><dir name="Block"><dir name="Adminhtml"><dir name="Report"><dir name="Transactions"><file name="Grid.php" hash="32b32086548f62ae4aca4baf456b9ed2"/><file name="Search.php" hash="81d57c3744530f36c37782ce9d0f3a70"/></dir><file name="Transactions.php" hash="7afe45b49353e52b432aa0392d76a08e"/></dir><dir name="System"><dir name="Config"><dir name="Braintree"><file name="Config.php" hash="9a7b4dac33799961712b98094e4fd6ff"/><file name="Currency.php" hash="5855bb4e1eff5c095b07666baaa9e0e0"/><dir name="Kount"><file name="Ens.php" hash="56ef3f1e4da9d09b6bc8d0814a882358"/></dir><file name="Migration.php" hash="e967c3a0e07d510c6aac12c88a27a098"/><file name="Moduleversion.php" hash="b74179be6853486ad2801c29c0ea830d"/><file name="Version.php" hash="9b12af242a8e96018554b35cd3a51a4d"/></dir><file name="Migration.php" hash="e3c31756ea93ed40322583b5afb10cc1"/></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="55d1ce06bc84c9229f4f245e5aee8edd"/></dir><dir name="Creditcard"><file name="Info.php" hash="1d069fc769a1478532634978ce550aa6"/><file name="Saved.php" hash="2d0a3c3543d8eecc7c94a50cea7810d9"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="7871f210f4009cfe53ecfaf5164e43ca"/><dir name="Express"><file name="Button.php" hash="a2bad201e114d02164c21c726ca93d7e"/><file name="Checkout.php" hash="d0c9bc6f656e93031189e7d6bb1c8533"/></dir><file name="Info.php" hash="8891038708e60a3e1974e007c2a32de1"/><file name="Js.php" hash="35e604171e4a5d1250732c4a5ad33d9b"/><dir name="Paypal"><file name="Info.php" hash="be437bd72ca057fc641ce8ce79f475cc"/><file name="Saved.php" hash="6a99ef8a384d7ab8f4537e995867ec85"/></dir><file name="Paypal.php" hash="10cbb40f8801153ac0c04725843f4eee"/><dir name="Saved"><file name="Edit.php" hash="ae2d80ecab7cdda39b18054b057f2dc5"/></dir><file name="Saved.php" hash="782f17589219da087e57035a1c0b9a4a"/></dir><dir name="Helper"><file name="Data.php" hash="afd45e51f380acb08e2027348c3a2375"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><dir name="Entity"><file name="Setup.php" hash="c580e73ec53ac455698ee6b0ff005e39"/></dir><dir name="Kount"><file name="Ens.php" hash="3f672b000d43363406b1df7e2b52f620"/><file name="Rest.php" hash="5dfb5265a431da0210cb87dba023b7b6"/></dir><file name="Migration.php" hash="595f2f2d03b78ab057436609c8a73261"/><file name="Observer.php" hash="e1ac13f65517ef889cc41fc8b421cafb"/><dir name="Paymentmethod"><file name="Abstract.php" hash="d6c2a980770c401b5f311329198e2050"/><file name="Creditcard.php" hash="7d3f7f9660fd34453bbafeeb32918839"/><dir name="Legacy"><file name="Creditcard.php" hash="d31335cd41e72c54eccbe608e7257e02"/><file name="Paypal.php" hash="f929b4917e09007b226e6387bf4e1a22"/></dir><file name="Paypal.php" hash="08662de034dea524c2bb08a2493627b9"/></dir><file name="Saved.php" hash="3c9318122fbe56bdb915c837d834f392"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="d39ff81be4b54620410ceeda7f960f0f"/><file name="FormIntegration.php" hash="9788f349430e0d48c9e13c262da3fe06"/><file name="PaymentAction.php" hash="d6e997ae4f6ed57129bf4d5da06a0a82"/></dir><file name="Environment.php" hash="5c2f5ce4d6d9f6f178102b90ec15aa2c"/><dir name="Paypal"><file name="CaptureAction.php" hash="0dd0c6da578aee4b7508f78cab982176"/><file name="Locale.php" hash="adc0ab30619eb3a34d8f5fe1087b07b0"/><file name="PaymentAction.php" hash="ab430eaf7ced39e9d6fd80ad0a7f6b3c"/><file name="Paymenttype.php" hash="48225fa7b3f5e54d81711397dd5bd96b"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Currency.php" hash="73cb15b1de303e88c487db4c585ef94e"/></dir></dir></dir><dir name="Wrapper"><file name="Braintree.php" hash="34aa7eaa4f3c26dbafae27679e7349ad"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Braintree"><file name="MigrationController.php" hash="84323fa4665ece605f6b8e906d0edd40"/></dir><file name="BraintreeController.php" hash="d7ece21342a7b4b37ee41ea0e7ff20ad"/></dir><file name="CheckoutController.php" hash="223de3639574a686a68e9210f39c1fad"/><file name="ExpressController.php" hash="89aaef3ec80d0793e918a3674139b4f6"/><dir name="Kount"><file name="EnsController.php" hash="1db795afa1df901c37bbe48a3f01db2f"/></dir><file name="SavedController.php" hash="083777b1536e8dda604107af9f0081a9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="7e86e8f0f9d1c02bf791fa4745d1d0be"/><file name="system.xml" hash="736a1ab8d3ab8f462fe9d93ed3dee386"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="503f428384f687d3f55a19ea57450212"/><file name="upgrade-1.0.5.4-2.0.0.php" hash="62d37c35ba39a77ea14cad842f143393"/><file name="upgrade-2.0.0-2.0.1.php" hash="a08927707bb43a5c22b3b6ce3dd7a3c7"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="97cf1ff702b5fe0697bcb0d725f37e6b"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="bfa98d63527cba0990c5cd793325a013"/><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="saved.phtml" hash="579ec8ca726de3b5bea8600663d1e61f"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="2cf07e28ebd141ea73e6e9082096304e"/><dir name="customer"><file name="edit.phtml" hash="ed8a9533f07fbfa36ec78623afd1a04d"/><file name="methods.phtml" hash="794ad8cb20314d1657a746b365c82540"/><file name="saved.phtml" hash="0457b0fa38f9db788133e54f359baa63"/></dir><dir name="express"><file name="cart.phtml" hash="dc6546baaa5c0c37fe3a6221ed978e87"/><file name="catalog.phtml" hash="e24ee8a37661e4cc82c19aaae3b669c3"/><file name="error.phtml" hash="0ec2ea2f9b909d9f0543e5df83eea055"/><file name="shipping_details.phtml" hash="0bb6ceafaac0ba522278df310d6136e2"/></dir><dir name="js"><file name="aheadworks.phtml" hash="533ba9aebbba6768649668386a74a1c2"/><file name="amasty.phtml" hash="2bfc5623dd9a98721b53a4d8cd13c0c3"/><file name="awesomecheckout.phtml" hash="ee42abb3b9211a31b3d4454ba1e92fe9"/><file name="data.phtml" hash="f8b04e3d0d7154cc75332eb5bec3e54e"/><file name="default.phtml" hash="fdcfb27a06ebab20268ef4ed820625c1"/><file name="fancycheckout.phtml" hash="f603bcd50dea98dbb45c1ec8b692314c"/><file name="firecheckout.phtml" hash="6186cba208f62227be17bb9ade5fa8f5"/><file name="fme.phtml" hash="263fb201b77696cf21cc677696c53fdd"/><file name="idev.phtml" hash="89d7effae80ca1a02f15b4326fd7e433"/><file name="iwd.phtml" hash="d7e12c84b629306529d3d8beb0c4814d"/><file name="magestore.phtml" hash="ff6a622a4048b8e533f3e672a40e6296"/><file name="multishipping.phtml" hash="a1e777e99df26d81f7c4b9e7b4a7c109"/><file name="oye.phtml" hash="51ef48f818e79acb6d1e8b9eb7889cc9"/><file name="setup.phtml" hash="804d63a30f8d6c985644b545a768da97"/><file name="unicode.phtml" hash="dd07e924a01b0a28ef46c9a62f22e3b5"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/><file name="saved.phtml" hash="3dd56f96bcdd14be594d355ae8fff329"/></dir><file name="paypal.phtml" hash="d12c20e5fb76f31270a5d47061e42715"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="7f7616030d3c67f20fccd618a1459d56"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="152e09ed938c47ffc056a7c11247375a"/><file name="info.phtml" hash="958d514582e3de1f91f5e0f7a7169b47"/><file name="saved.phtml" hash="ca27adb601aebf97cd25a892082a8663"/></dir><file name="creditcard.phtml" hash="2d77487c6b7e9e6c77b2ddb25597bd8b"/><file name="js.phtml" hash="7253799710792ed1f8611e21c2b100bf"/><dir name="paypal"><file name="info.phtml" hash="0485ea82dc9cc8ebea092b378672f1cd"/><file name="saved.phtml" hash="779ca8e907d7d463eafce58dfaf94f0c"/></dir><file name="paypal.phtml" hash="f81578f64c8a30560299bd993d8e996d"/><dir name="system"><dir name="config"><file name="migration.phtml" hash="8ef2a5e5561d7909d065c987ded5e592"/></dir></dir><dir name="transactions"><file name="index.phtml" hash="1791b6393f319616dd79c0b46e391847"/><file name="search.phtml" hash="1682ce6200681681f0ce3c848e2e6694"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gene_Braintree.xml" hash="8c0ffda8566dca2f0b98a999921e3e55"/></dir></target><target name="mageweb"><dir name="js"><dir name="gene"><dir name="braintree"><file name="braintree-0.1.js" hash="a72cc4545d0d01dd0947dae1474516dd"/><file name="config.codekit" hash="8c25da6033637f712e9b84926ce496a6"/><file name="express.js" hash="a32735940fb8313c150e6567a59a1f0e"/><file name="vzero-0.7-min.js" hash="67f02f3f52819c5af8db913d7780dc33"/><file name="vzero-0.7-min.js.map" hash="1fc5d50c5cdcb138131930ac92362053"/><file name="vzero-0.7.js" hash="9df7e368f0ba3d900940cec112f56dc1"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><file name="paypal-loading.gif" hash="078a2daf55245b227c09a7bed86750c6"/><file name="paypal.png" hash="40d5f74305e565bd14aef19bcf696541"/></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="loader-white.gif" hash="1fc0e911558e8dfe77cfdfafa0d38f88"/></dir></dir><dir name="css"><dir name="gene"><dir name="braintree"><dir name="account"><file name="account.less" hash="ddf6bf208f290316300ab20682f34473"/></dir><file name="account.css" hash="73bb46f85320b2f2b4de9beb6c0e0bd6"/><file name="aheadworks.css" hash="f5a06971e4dbac94df48fb0ff1912f98"/><file name="amasty.css" hash="5a4a845ea4a16cca2195cb836e25571e"/><file name="awesomecheckout.css" hash="5f858ec9549f6b04b0c2885fbf193e7b"/><file name="config.codekit" hash="84437b4cfe51c10615b8f58c083e36dd"/><dir name="core"><file name="_general.less" hash="5848708373d8ed5eda5e5b23c3e4e05c"/><file name="_hostedfields.less" hash="555bd4655d78a3b379c4b86a3e2d86e5"/><file name="_paypal.less" hash="e7e55d959247956253a0af1df0c9e899"/><file name="_saved.less" hash="66ec8d894e336f9934a1e54972c4b220"/></dir><file name="default.css" hash="229df9c1e39496d64a96c1b17e7a1823"/><file name="express.css" hash="23fdeca7804baa026615f4e54eeaf66b"/><file name="express.less" hash="0d752abca5f300beadc5a2948b5565ae"/><file name="fancycheckout.css" hash="69b7d8ce592bffde444edf77234109bd"/><file name="firecheckout.css" hash="6605fd097c6b509fd8ef758a5a2ea236"/><file name="fme.css" hash="5809c809abc0cc6dde9ff2accebe4f38"/><file name="idev.css" hash="89104fad2a084ec8ed229d119d9c276c"/><dir name="integrations"><file name="aheadworks.less" hash="09b0304383e198885f030119c15641f7"/><file name="amasty.less" hash="4cdf236e1d44112205750cefa11448b4"/><file name="awesomecheckout.less" hash="e774da637a5c6bbdb2e5decc998afae1"/><file name="default.less" hash="d366d4560ed1ce3e9e120309e56bec2f"/><file name="fancycheckout.less" hash="18281c460bb32da164964abe585b092b"/><file name="firecheckout.less" hash="459704b8b6efca52fcee7c335b3ad625"/><file name="fme.less" hash="580ed66608560fcd1195246c22e3559c"/><file name="idev.less" hash="47485cc963e16d12e673c06cd9efe4b1"/><file name="iwd.less" hash="5081477c7946e0f5cf8cc4198895ca11"/><file name="magestore.less" hash="0af5cd105be3995dc2044d33f990bbb5"/><file name="oye.less" hash="06a0f79190b16dfbce3aec6d14f07461"/><file name="unicode.less" hash="1416abe9a38965d9aead022b238f7d4f"/></dir><file name="iwd.css" hash="651ba890cc76d1f9fdaa7d6137b2a106"/><file name="magestore.css" hash="fdeca676628bd2e1c732a15640a42ff3"/><file name="oye.css" hash="ec24b4a2541dd3d01540d1f065025d7b"/><file name="unicode.css" hash="82acd70dca47bb484a17296c2ca11e81"/><file name=".DS_Store" hash="1405352d803d5c88cf3ec19a82f173d0"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="gene"><dir name="braintree"><file name="adminhtml.css" hash="affb40183f3620e4ee157daf613dc2a9"/><file name="adminhtml.less" hash="b3a4d504055c85d872c5b9544d192840"/><file name="config.codekit" hash="ddde6e8364c5adb1b88c7104c873eb01"/><file name="migration.css" hash="158e143a99028313d6ad6f6612112dd4"/><file name="migration.less" hash="bbf09530cf530f78f4a7c3229194c5ff"/><file name=".DS_Store" hash="63617e9dd9988a3d3773937a3f7e2f9a"/></dir></dir></dir><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><dir name="migration"><file name="braintree.png" hash="396d721824a86b169ce0055090ce9766"/><file name="gene-logo.png" hash="16efb1b148acc59c46c84a21d726b6e9"/><file name="loader.gif" hash="66b9100930b8e58d46acf2e13d41f7ea"/></dir></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Gene"><dir name="Braintree"><file name="AddOn.php" hash="e8bbb6db343ba99192346b1dcbf45677"/><file name="AddOnGateway.php" hash="d8698ffe89c01fba78a8a06a2fc68122"/><file name="Address.php" hash="004d3d36d39fc6fcc3d510f4b15b1fca"/><file name="AddressGateway.php" hash="41b5a3be7bdb2fe326a49a1554e1b0c3"/><file name="AndroidPayCard.php" hash="bb4a81807fefc76db286e615128c5d8c"/><file name="ApplePayCard.php" hash="b895256bcb867854bcaaffc1ce833fbd"/><file name="Base.php" hash="60d52fd1bef5655bcb607fba45bb4c1c"/><file name="ClientToken.php" hash="358c0a1dba687baf635db818cb7d1dac"/><file name="ClientTokenGateway.php" hash="9c24bb9de2c419c7e377c046da2a1ffa"/><file name="CoinbaseAccount.php" hash="ee5cb6963f675a9a71293c453b128866"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="2a416a1eae0c22329d9bef88b25039b2"/><file name="CredentialsParser.php" hash="c4bb2248a33129d8523a6120ce44108b"/><file name="CreditCard.php" hash="d32b8d8e64b2d046d3d9e4f00c67f1ed"/><file name="CreditCardGateway.php" hash="0d120ed06f06fd614468d6e3f0ad22d2"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="6a07430c9437f6e6c1516d5b4572a749"/><file name="CreditCardVerificationSearch.php" hash="18efe7d508c2bd5fea1c0e68fc26182f"/><file name="Customer.php" hash="62d0937de86f7a14a512ad66edba7569"/><file name="CustomerGateway.php" hash="5367d9d8a878572106e3a94c60132b1b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="ad122f0f33b27dfd98bcdd38ea138ae4"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="47796edb8ac2fa68e9af8fb8a13aacb1"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="c3a4e93fa2b3b0e20ddcb593dcdc7b2b"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="a7f98ff690e725b7fcd198b4b22d0637"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><file name="EuropeBankAccount.php" hash="82ae4f4d1c45ce2c421305bf9397c866"/><dir name="Exception"><file name="Authentication.php" hash="f9e13654988452cca2ac5228a80adae4"/><file name="Authorization.php" hash="5f8c017c6e9fd79a556dade8e15a72e8"/><file name="Configuration.php" hash="b50f67e8ea36cff0d9f6ad718126c6fc"/><file name="DownForMaintenance.php" hash="7fd30b1f8976ed7e38b7e9fae5c20f03"/><file name="ForgedQueryString.php" hash="6884dbae1e86767834b77c821df2db62"/><file name="InvalidChallenge.php" hash="1c283a1c9dac65feb137594d0dcf0e35"/><file name="InvalidSignature.php" hash="b83f5b16735cb3a8e0a8111c4f32711e"/><file name="NotFound.php" hash="f832f771d20b381c2780eb2a572b9f44"/><file name="SSLCaFileNotFound.php" hash="e927c7307bf1761814dc8a755238070d"/><file name="SSLCertificate.php" hash="d509b6a6206bd7c5563ac142dfe3801f"/><file name="ServerError.php" hash="b4645290229ab228a257047d08ef63d7"/><file name="TestOperationPerformedInProduction.php" hash="fde4c6a8b708420b26785fb67a2548ef"/><file name="Unexpected.php" hash="01ea2800fb91995ec2a15aee5024611e"/><file name="UpgradeRequired.php" hash="7f40b174df891cc3b3e206d1be884a58"/><file name="ValidationsFailed.php" hash="cd2d30c69911f81b55279c3d6bf88c61"/></dir><file name="Exception.php" hash="f14c94bf67206184eb3e4e7aeb4a608a"/><file name="Gateway.php" hash="d2fac69479243ef4cea7d7a8add798f7"/><file name="Http.php" hash="1baa32e0efcae13c4d6294d1233512a1"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><file name="Merchant.php" hash="5053ebe889c854d11f2686bffdeb58be"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="3e80148bac9fda676844aa19d5b2dc28"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="777b6f28f643e78616c7ed753a39c0cd"/></dir><file name="MerchantAccount.php" hash="496c93182d824bb2967cc9366dec1ac3"/><file name="MerchantAccountGateway.php" hash="e2073aff6f8b3c5f2e64b23b210c44f7"/><file name="MerchantGateway.php" hash="e0a2e3a28c68dac8bd082973b269ed1b"/><file name="Modification.php" hash="0abe992d4f821327f617ca883c4eb2d1"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="OAuthCredentials.php" hash="e992dca9dfedb27e3d050af55971a968"/><file name="OAuthGateway.php" hash="9a0b2b692eaf8fb5f337922044b20cc1"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="bdb69ebdc75d67009710be9703a47e80"/><file name="PayPalAccount.php" hash="672a7d424f94e590c5e66a21e62d7bc2"/><file name="PayPalAccountGateway.php" hash="d73f5744ebaca6cc882c42d0e9c1a05e"/><file name="PaymentInstrumentType.php" hash="be97a30c7d8fbbb180864dc4efea71f2"/><file name="PaymentMethod.php" hash="5bc31d3e97610e7218c95aba2422cc9a"/><file name="PaymentMethodGateway.php" hash="4c93b070cb79c86ec9384e069fbae777"/><file name="PaymentMethodNonce.php" hash="e99302e2468f55c8fb4b2ceeb1bce68e"/><file name="PaymentMethodNonceGateway.php" hash="22a0d89eee071a28b530c6be477dcc6e"/><file name="Plan.php" hash="22ab0117d462352aecb9531d4a26619e"/><file name="PlanGateway.php" hash="95e093b55ad20f8b652ee5f2fc2a0fcf"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="7c41787025ec7cffb269f53e3ce479e2"/><file name="Error.php" hash="0e0460f1eea017bc7591e05351f51eb0"/><file name="Successful.php" hash="03f1c379fcedaef499296ab7778d1e36"/></dir><file name="RiskData.php" hash="8bef1074f9f1c50c841a7c7cf627c9cf"/><file name="SettlementBatchSummary.php" hash="388d88e8cea7bec61ee78f388fb78c2c"/><file name="SettlementBatchSummaryGateway.php" hash="bc54658b75fa0505e072331799c2d9ad"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="cde05aa61192d5b930b57330db308835"/><file name="SubscriptionGateway.php" hash="bd1b2aa2d4d41a595463bead64ed34e0"/><file name="SubscriptionSearch.php" hash="1874ebe5cb42d7d2836617810cced1af"/><dir name="Test"><file name="CreditCardNumbers.php" hash="676a9100354eb679e7ca1e0f0d67293f"/><file name="MerchantAccount.php" hash="612e7e30cca364c0d14cbff3b54ebf3f"/><file name="Nonces.php" hash="d39c75e07c12c005c837c33003cb9ec2"/><file name="Transaction.php" hash="f7ef8730ede38eda778679c7056ae7c7"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TestingGateway.php" hash="ccb1126142799ac3dc9f8d6f1a1f48d4"/><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><file name="ThreeDSecureInfo.php" hash="542550c4e03a24551d00e8aad5493035"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="AndroidPayCardDetails.php" hash="0d7716a3c992dfb0833e7ecd437ef346"/><file name="ApplePayCardDetails.php" hash="23f7ba70521889585fa40f4f0388524d"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="EuropeBankAccountDetails.php" hash="afe4fdc3ab3714ef2995f514ce2be2a6"/><file name="PayPalDetails.php" hash="06903d1ee21879f7329b920138df9ac6"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="afe5d8ef7fc73633424d26b942c4e5a1"/><file name="TransactionGateway.php" hash="39684956db79fe58891876e5c7845413"/><file name="TransactionSearch.php" hash="aa58846182b909fb8747e165ec7e9b92"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="5ead181bf0d5484db5eb305efa13bec4"/><file name="UnknownPaymentMethod.php" hash="9107498774ab5bc2b25de98838736b47"/><file name="Util.php" hash="9832a44da18b97a55248cadc4bb9a4ad"/><file name="Version.php" hash="43e074bc53780cb92af4a9ef4887c63e"/><file name="WebhookNotification.php" hash="4097fb57d46368d903c42bb20fbd49ca"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="19f9c9b9b61d4f97f65775f527ac408d"/><file name="Parser.php" hash="c06b1ae155ac7687eaa856fac472656d"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><file name="Braintree.php" hash="2c75cf27b3c9a6e1bc557e6b239d2594"/><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="b0c520cbdf0f42b11c8c6dfafbe999bd"/></dir></dir></target></contents>
42
  <compatible/>
43
  <dependencies><required><php><min>5.4.0</min><max>6.0.0</max></php><package><name></name><channel>connect.magentocommerce.com/core</channel><min></min><max></max></package></required></dependencies>
44
  </package>
skin/adminhtml/default/default/css/gene/braintree/adminhtml.css CHANGED
@@ -128,3 +128,10 @@
128
  label[for="gene_braintree_paypal_store_in_vault"] {
129
  width: auto!important;
130
  }
 
 
 
 
 
 
 
128
  label[for="gene_braintree_paypal_store_in_vault"] {
129
  width: auto!important;
130
  }
131
+ .braintree_legacy_order {
132
+ background: #dddddd;
133
+ padding: 16px 15px 10px 15px;
134
+ margin: 12px -15px;
135
+ border-top: 1px solid #c7c7c7;
136
+ border-bottom: 1px solid #c7c7c7;
137
+ }
skin/adminhtml/default/default/css/gene/braintree/adminhtml.less CHANGED
@@ -128,4 +128,13 @@
128
  }
129
  label[for="gene_braintree_paypal_store_in_vault"] {
130
  width: auto!important;
 
 
 
 
 
 
 
 
 
131
  }
128
  }
129
  label[for="gene_braintree_paypal_store_in_vault"] {
130
  width: auto!important;
131
+ }
132
+
133
+ .braintree_legacy_order {
134
+ background: #dddddd;
135
+ padding: 16px 15px 10px 15px;
136
+ margin: 12px -15px;
137
+ border-top: 1px solid #c7c7c7;
138
+ border-bottom: 1px solid #c7c7c7;
139
+
140
  }
skin/adminhtml/default/default/css/gene/braintree/config.codekit CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
- "creatorBuild": "19115",
4
  "files": {
5
  "\/adminhtml.css": {
6
  "fileType": 16,
@@ -227,7 +227,7 @@
227
  "coffeeMinifyOutput": 1,
228
  "coffeeOutputStyle": 0,
229
  "coffeeSyntaxCheckerStyle": 1,
230
- "externalServerAddress": "http:\/\/default.braintree.dave.gene.co.uk\/",
231
  "externalServerPreviewPathAddition": "",
232
  "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
233
  "hamlAutoOutputPathEnabled": 1,
1
  {
2
  "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
+ "creatorBuild": "19127",
4
  "files": {
5
  "\/adminhtml.css": {
6
  "fileType": 16,
227
  "coffeeMinifyOutput": 1,
228
  "coffeeOutputStyle": 0,
229
  "coffeeSyntaxCheckerStyle": 1,
230
+ "externalServerAddress": "http:\/\/migration.braintree.dave.gene.co.uk\/",
231
  "externalServerPreviewPathAddition": "",
232
  "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
233
  "hamlAutoOutputPathEnabled": 1,
skin/adminhtml/default/default/css/gene/braintree/migration.css CHANGED
@@ -7,12 +7,14 @@
7
  background: black;
8
  z-index: 10001;
9
  opacity: 0;
 
10
  -moz-transition: opacity 0.4s ease-in-out;
11
  -o-transition: opacity 0.4s ease-in-out;
12
  -webkit-transition: opacity 0.4s ease-in-out;
13
  transition: opacity 0.4s ease-in-out;
14
  }
15
  #braintree-migration-overlay.active {
 
16
  opacity: 0.4;
17
  }
18
  #braintree-migration {
@@ -20,11 +22,12 @@
20
  left: 50%;
21
  top: 50%;
22
  width: 850px;
23
- margin-top: -220px;
24
  margin-left: -425px;
25
  background: #303032;
26
  z-index: 10002;
27
  opacity: 0;
 
28
  -webkit-border-radius: 10px;
29
  -webkit-border-bottom-right-radius: 3px;
30
  -webkit-border-bottom-left-radius: 3px;
@@ -34,14 +37,15 @@
34
  border-radius: 10px;
35
  border-bottom-right-radius: 3px;
36
  border-bottom-left-radius: 3px;
37
- transform: translateY(80px);
38
- -moz-transition: opacity 1s ease-in-out, transform 1s ease-in-out;
39
- -o-transition: opacity 1s ease-in-out, transform 1s ease-in-out;
40
- -webkit-transition: opacity 1s ease-in-out, transform 1s ease-in-out;
41
- transition: opacity 1s ease-in-out, transform 1s ease-in-out;
42
  box-shadow: 0 0 18px rgba(0, 0, 0, 0.1);
43
  }
44
  #braintree-migration.active {
 
45
  opacity: 1;
46
  transform: translateY(0px);
47
  }
7
  background: black;
8
  z-index: 10001;
9
  opacity: 0;
10
+ visibility: hidden;
11
  -moz-transition: opacity 0.4s ease-in-out;
12
  -o-transition: opacity 0.4s ease-in-out;
13
  -webkit-transition: opacity 0.4s ease-in-out;
14
  transition: opacity 0.4s ease-in-out;
15
  }
16
  #braintree-migration-overlay.active {
17
+ visibility: visible;
18
  opacity: 0.4;
19
  }
20
  #braintree-migration {
22
  left: 50%;
23
  top: 50%;
24
  width: 850px;
25
+ margin-top: -270px;
26
  margin-left: -425px;
27
  background: #303032;
28
  z-index: 10002;
29
  opacity: 0;
30
+ visibility: hidden;
31
  -webkit-border-radius: 10px;
32
  -webkit-border-bottom-right-radius: 3px;
33
  -webkit-border-bottom-left-radius: 3px;
37
  border-radius: 10px;
38
  border-bottom-right-radius: 3px;
39
  border-bottom-left-radius: 3px;
40
+ transform: translateY(20%);
41
+ -moz-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
42
+ -o-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
43
+ -webkit-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
44
+ transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
45
  box-shadow: 0 0 18px rgba(0, 0, 0, 0.1);
46
  }
47
  #braintree-migration.active {
48
+ visibility: visible;
49
  opacity: 1;
50
  transform: translateY(0px);
51
  }
skin/adminhtml/default/default/css/gene/braintree/migration.less CHANGED
@@ -7,6 +7,7 @@
7
  background: black;
8
  z-index: 10001;
9
  opacity: 0;
 
10
 
11
  -moz-transition: opacity 0.4s ease-in-out;
12
  -o-transition: opacity 0.4s ease-in-out;
@@ -14,6 +15,7 @@
14
  transition: opacity 0.4s ease-in-out;
15
 
16
  &.active {
 
17
  opacity: 0.4;
18
  }
19
  }
@@ -23,11 +25,12 @@
23
  left: 50%;
24
  top: 50%;
25
  width: 850px;
26
- margin-top: -220px;
27
  margin-left: -425px;
28
  background: #303032;
29
  z-index: 10002;
30
  opacity: 0;
 
31
 
32
  -webkit-border-radius: 10px;
33
  -webkit-border-bottom-right-radius: 3px;
@@ -39,16 +42,17 @@
39
  border-bottom-right-radius: 3px;
40
  border-bottom-left-radius: 3px;
41
 
42
- transform: translateY(80px);
43
 
44
- -moz-transition: opacity 1s ease-in-out, transform 1s ease-in-out;
45
- -o-transition: opacity 1s ease-in-out, transform 1s ease-in-out;
46
- -webkit-transition: opacity 1s ease-in-out, transform 1s ease-in-out;
47
- transition: opacity 1s ease-in-out, transform 1s ease-in-out;
48
 
49
  box-shadow: 0 0 18px rgba(0,0,0,0.1);
50
 
51
  &.active {
 
52
  opacity: 1;
53
  transform: translateY(0px);
54
  }
7
  background: black;
8
  z-index: 10001;
9
  opacity: 0;
10
+ visibility: hidden;
11
 
12
  -moz-transition: opacity 0.4s ease-in-out;
13
  -o-transition: opacity 0.4s ease-in-out;
15
  transition: opacity 0.4s ease-in-out;
16
 
17
  &.active {
18
+ visibility: visible;
19
  opacity: 0.4;
20
  }
21
  }
25
  left: 50%;
26
  top: 50%;
27
  width: 850px;
28
+ margin-top: -270px;
29
  margin-left: -425px;
30
  background: #303032;
31
  z-index: 10002;
32
  opacity: 0;
33
+ visibility: hidden;
34
 
35
  -webkit-border-radius: 10px;
36
  -webkit-border-bottom-right-radius: 3px;
42
  border-bottom-right-radius: 3px;
43
  border-bottom-left-radius: 3px;
44
 
45
+ transform: translateY(20%);
46
 
47
+ -moz-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
48
+ -o-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
49
+ -webkit-transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
50
+ transition: opacity 0.6s ease-in-out, transform 0.6s ease-in-out;
51
 
52
  box-shadow: 0 0 18px rgba(0,0,0,0.1);
53
 
54
  &.active {
55
+ visibility: visible;
56
  opacity: 1;
57
  transform: translateY(0px);
58
  }
skin/frontend/base/default/css/gene/braintree/config.codekit CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
- "creatorBuild": "19115",
4
  "files": {
5
  "\/account.css": {
6
  "fileType": 16,
1
  {
2
  "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
+ "creatorBuild": "19127",
4
  "files": {
5
  "\/account.css": {
6
  "fileType": 16,