Skip to content

Commit 317652d

Browse files
floretanbojanz
floretan
authored andcommitted
Issue #2844178 by floretan: Add data to order items
1 parent 4489511 commit 317652d

File tree

5 files changed

+78
-2
lines changed

5 files changed

+78
-2
lines changed

modules/order/commerce_order.install

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
/**
4+
* @file
5+
* Install, update and uninstall functions for the Order module.
6+
*/
7+
8+
use Drupal\Core\Field\BaseFieldDefinition;
9+
10+
/**
11+
* Add the 'data' field to 'commerce_order_item' entities.
12+
*/
13+
function commerce_order_update_8201() {
14+
$storage_definition = BaseFieldDefinition::create('map')
15+
->setLabel(t('Data'))
16+
->setDescription(t('A serialized array of additional data.'));
17+
18+
$update_manager = \Drupal::entityDefinitionUpdateManager();
19+
$update_manager->installFieldStorageDefinition('data', 'commerce_order_item', 'commerce_order', $storage_definition);
20+
}

modules/order/src/Entity/OrderInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,8 @@ public function setRefreshState($refresh_state);
294294
* @param mixed $default
295295
* The default value.
296296
*
297-
* @return array
298-
* The order data.
297+
* @return mixed
298+
* The value.
299299
*/
300300
public function getData($key, $default = NULL);
301301

modules/order/src/Entity/OrderItem.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,25 @@ public function getTotalPrice() {
166166
}
167167
}
168168

169+
/**
170+
* {@inheritdoc}
171+
*/
172+
public function getData($key, $default = NULL) {
173+
$data = [];
174+
if (!$this->get('data')->isEmpty()) {
175+
$data = $this->get('data')->first()->getValue();
176+
}
177+
return isset($data[$key]) ? $data[$key] : $default;
178+
}
179+
180+
/**
181+
* {@inheritdoc}
182+
*/
183+
public function setData($key, $value) {
184+
$this->get('data')->__set($key, $value);
185+
return $this;
186+
}
187+
169188
/**
170189
* {@inheritdoc}
171190
*/
@@ -275,6 +294,10 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
275294
->setDisplayConfigurable('form', FALSE)
276295
->setDisplayConfigurable('view', TRUE);
277296

297+
$fields['data'] = BaseFieldDefinition::create('map')
298+
->setLabel(t('Data'))
299+
->setDescription(t('A serialized array of additional data.'));
300+
278301
$fields['created'] = BaseFieldDefinition::create('created')
279302
->setLabel(t('Created'))
280303
->setDescription(t('The time when the order item was created.'))

modules/order/src/Entity/OrderItemInterface.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,33 @@ public function setUnitPrice(Price $unit_price);
106106
*/
107107
public function getTotalPrice();
108108

109+
/**
110+
* Gets an order item data value with the given key.
111+
*
112+
* Used to store temporary data during order processing (i.e. checkout).
113+
*
114+
* @param string $key
115+
* The key.
116+
* @param mixed $default
117+
* The default value.
118+
*
119+
* @return mixed
120+
* The value.
121+
*/
122+
public function getData($key, $default = NULL);
123+
124+
/**
125+
* Sets an order item data value with the given key.
126+
*
127+
* @param string $key
128+
* The key.
129+
* @param mixed $value
130+
* The value.
131+
*
132+
* @return $this
133+
*/
134+
public function setData($key, $value);
135+
109136
/**
110137
* Gets the order item creation timestamp.
111138
*

modules/order/tests/src/Kernel/Entity/OrderItemTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ protected function setUp() {
6464
* @covers ::removeAdjustment
6565
* @covers ::recalculateTotalPrice
6666
* @covers ::getTotalPrice
67+
* @covers ::getData
68+
* @covers ::setData
6769
* @covers ::getCreatedTime
6870
* @covers ::setCreatedTime
6971
*/
@@ -106,6 +108,10 @@ public function testOrderItem() {
106108
$order_item->setAdjustments($adjustments);
107109
$this->assertEquals($adjustments, $order_item->getAdjustments());
108110

111+
$this->assertEquals('default', $order_item->getData('test', 'default'));
112+
$order_item->setData('test', 'value');
113+
$this->assertEquals('value', $order_item->getData('test', 'default'));
114+
109115
$order_item->setCreatedTime(635879700);
110116
$this->assertEquals(635879700, $order_item->getCreatedTime());
111117
}

0 commit comments

Comments
 (0)