-
Notifications
You must be signed in to change notification settings - Fork 2
/
aaa_cybersource.install
152 lines (130 loc) · 4.63 KB
/
aaa_cybersource.install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
/**
* @file
* Install/uninstall module hooks for aaa_cybersource module.
*/
use Drupal\aaa_cybersource\Entity\Payment;
use Drupal\Core\Field\BaseFieldDefinition;
/**
* Implements hook_uninstall().
*/
function aaa_cybersource_uninstall() {
Drupal::configFactory()->getEditable('aaa_cybersource.settings')->delete();
$webform_ids = ['template_donation', 'template_gala'];
foreach ($webform_ids as $webform_id) {
$webform_entity = \Drupal::entityTypeManager()->getStorage('webform')->load($webform_id);
if (!is_null($webform_entity)) {
$webform_entity->delete();
}
}
}
/**
* Add reconciliation information.
*/
function aaa_cybersource_update_9001() {
$securePaymentId = BaseFieldDefinition::create('string')
->setLabel(t('Secure Payment ID'))
->setDescription(t('The ID returned by Cybersource after a payment is secured.'))
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'above',
'weight' => 2,
'settings' => [
'link_to_entity' => FALSE,
],
])
->setDisplayConfigurable('view', TRUE);
$transactionId = BaseFieldDefinition::create('string')
->setLabel(t('Transaction Reference Number'))
->setDescription(t('The reference ID of the credit card settlement. Also refered to as the reconciliation ID.'))
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'above',
'weight' => 2,
'settings' => [
'link_to_entity' => FALSE,
],
])
->setDisplayConfigurable('view', TRUE);
$edum = \Drupal::entityDefinitionUpdateManager();
$edum->installFieldStorageDefinition('secure_payment_id', 'payment', 'payment', $securePaymentId);
$edum->installFieldStorageDefinition('transaction_id', 'payment', 'payment', $transactionId);
}
/**
* Secure past authorizations.
*/
function aaa_cybersource_update_9002() {
$authorized_payments = \Drupal::entityQuery('payment')
->condition('status', 'AUTHORIZED')
->condition('secure_payment_id', NULL, 'IS NULL')
->condition('transaction_id', NULL, 'IS NULL')
->condition('recurring_active', FALSE)
->sort('changed', 'DESC')
->range(0, 10)
->execute();
$payments = Payment::loadMultiple($authorized_payments);
$cybersourceClient = \Drupal::service('aaa_cybersource.cybersource_client');
foreach ($payments as $payment) {
$environment = $payment->get('environment')->value;
$id = $payment->get('payment_id')->value;
$code = $payment->get('code')->value;
$amount = $payment->get('authorized_amount')->value;
$cybersourceClient->setEnvironment($environment);
// Don't run this again.
// $captureResponse = $cybersourceClient->capturePayment($id, $code, $amount);
$captureResponse = NULL;
if (!empty($captureResponse)) {
$payment->set('secure_payment_id', $captureResponse->getId());
$payment->set('transaction_id', $captureResponse->getReconciliationId());
$payment->set('status', $captureResponse->getStatus());
$payment->save();
}
}
}
/**
* Add purchase information field.
*/
function aaa_cybersource_update_9004() {
$orderDetails = BaseFieldDefinition::create('string')
->setLabel(t('Order details'))
->setDescription(t('Specific details regarding the order. Important for Gala tickets.'))
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'above',
'weight' => 2,
'settings' => [
'link_to_entity' => FALSE,
],
])
->setDisplayConfigurable('view', TRUE);
$edum = \Drupal::entityDefinitionUpdateManager();
$edum->installFieldStorageDefinition('order_details', 'payment', 'payment', $orderDetails);
}
/**
* Order details needs a different field type.
*/
function aaa_cybersource_update_9006() {
// Install new field.
$orderDetails = BaseFieldDefinition::create('string_long')
->setLabel(t('Order details'))
->setDescription(t('Specific details regarding the order.'))
->setDisplayOptions('view', [
'type' => 'string',
'label' => 'above',
'weight' => 2,
])
->setDisplayConfigurable('view', TRUE);
$edum = \Drupal::entityDefinitionUpdateManager();
$edum->installFieldStorageDefinition('order_details_long', 'payment', 'payment', $orderDetails);
// Collect existing data and add it to new field.
$payments_with_data = \Drupal::entityQuery('payment')
->condition('order_details', NULL, 'IS NOT NULL')
->sort('changed', 'DESC')
->execute();
$payments = Payment::loadMultiple($payments_with_data);
foreach ($payments as $payment) {
$currentOrderDetailsValue = $payment->get('order_details')->value;
$payment->set('order_details_long', $currentOrderDetailsValue);
$payment->save();
}
}