-
Notifications
You must be signed in to change notification settings - Fork 0
/
commerce_pickup.install
116 lines (102 loc) · 3.67 KB
/
commerce_pickup.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
<?php
/**
* @file
* Install and uninstall functions for the commerce_marketplace module.
*/
/**
* Implements hook_install().
*/
function commerce_pickup_install() {
$manager = \Drupal::entityTypeManager();
$action = $manager->getStorage('action');
$action->load('profile_publish_action')
->set('label', t('Set active'))->save();
$action->load('profile_unpublish_action')
->set('label', t('Set inactive'))->save();
$storage = $manager->getStorage('entity_view_display');
$view_display = $storage->load("profile.customer.default");
if ($address = $view_display->getComponent('address')) {
$address['type'] = 'pickup_address_default';
$view_display->setComponent('address', $address)->save();
}
$current_user = \Drupal::currentUser();
if (!$current_user->isAnonymous() && ($id = $current_user->id())) {
$current_user = $manager->getStorage('user')->load($id);
$current_user->addRole('pickup_vendor');
$current_user->save();
}
}
/**
* Implements hook_uninstall().
*/
function commerce_pickup_uninstall() {
// Do it only when you have a problem.
// commerce_pickup_shipments_cleanup();
$manager = \Drupal::entityTypeManager();
foreach ($manager->getStorage('commerce_shipping_method')->loadMultiple() as $method) {
if ($method->plugin->target_plugin_id == 'commerce_pickup_shipping_rate') {
$method->delete();
}
}
foreach ($manager->getStorage('profile')->loadByProperties(['type' => 'pickup']) as $profile) {
$profile->delete();
}
if ($pickup = $manager->getStorage('profile_type')->load('pickup')) {
$pickup->delete();
}
if ($pickup_checkout = $manager->getStorage('entity_view_mode')->load('profile.pickup_checkout')) {
$pickup_checkout->delete();
}
if ($pickup_vendor = $manager->getStorage('user_role')->load('pickup_vendor')) {
$pickup_vendor->delete();
}
foreach (['pickup_stores', 'pickup_points'] as $name) {
if ($view = $manager->getStorage('view')->load($name)) {
$view->delete();
}
}
$action = $manager->getStorage('action');
$action->load('profile_publish_action')
->set('label', t('Publish selected profile'))->save();
$action->load('profile_unpublish_action')
->set('label', t('Unpublish selected profile'))->save();
$storage = $manager->getStorage('entity_view_display');
$view_display = $storage->load("profile.customer.default");
if ($address = $view_display->getComponent('address')) {
$address['type'] = 'address_default';
$view_display->setComponent('address', $address)->save();
}
}
/**
* Cleanup broken shipments.
*
* @see https://www.drupal.org/node/3124399
*/
function commerce_pickup_shipments_cleanup($cart = 1, $offset = 2678400) {
$method_storage = \Drupal::entityTypeManager()->getStorage('commerce_shipping_method');
$order_storage = \Drupal::entityTypeManager()->getStorage('commerce_order');
$ids = $order_storage->getQuery()
// Default: one month.
->condition('changed', time() - $offset, '>')
// Default: only carts cleanup.
->condition('cart', $cart, '=')
->execute();
$orders = $order_storage->loadMultiple($ids);
$methods = [];
$pickup_plugin = 'commerce_pickup_shipping_rate';
foreach ($orders as $order) {
foreach ($order->shipments as $index => $shipment) {
$id = $shipment->target_id;
if (!isset($methods[$id])) {
$methods[$id] = $method_storage->load($id);
}
if ($pickup = $methods[$id]) {
$pickup = $methods[$id]->plugin->target_plugin_id == 'commerce_pickup_shipping_rate';
}
if ($pickup || !$methods[$id]) {
$order->shipments->removeItem($index);
$order->set('shipments', $order->shipments->get($index))->save();
}
}
}
}