function commerce_promotion_post_update_6 in Commerce Core 8.2
Update offers and conditions.
File
- modules/
promotion/ commerce_promotion.post_update.php, line 92 - Post update functions for Promotion.
Code
function commerce_promotion_post_update_6(&$sandbox = NULL) {
$promotion_storage = \Drupal::entityTypeManager()
->getStorage('commerce_promotion');
if (!isset($sandbox['current_count'])) {
$query = $promotion_storage
->getQuery();
$sandbox['total_count'] = $query
->count()
->execute();
$sandbox['current_count'] = 0;
if (empty($sandbox['total_count'])) {
$sandbox['#finished'] = 1;
return;
}
}
$query = $promotion_storage
->getQuery();
$query
->range($sandbox['current_count'], 25);
$result = $query
->execute();
if (empty($result)) {
$sandbox['#finished'] = 1;
return;
}
/** @var \Drupal\commerce_promotion\Entity\PromotionInterface[] $promotions */
$promotions = $promotion_storage
->loadMultiple($result);
foreach ($promotions as $promotion) {
$needs_save = FALSE;
$conditions = $promotion
->get('conditions')
->getValue();
foreach ($conditions as &$condition_item) {
if ($condition_item['target_plugin_id'] == 'commerce_promotion_order_total_price') {
$condition_item['target_plugin_id'] = 'order_total_price';
// Remove data added by the old conditions API.
unset($condition_item['target_plugin_configuration']['id']);
unset($condition_item['target_plugin_configuration']['negate']);
$needs_save = TRUE;
}
}
$offer = $promotion
->get('offer')
->first()
->getValue();
if ($offer['target_plugin_id'] == 'commerce_promotion_order_percentage_off') {
$offer['target_plugin_id'] = 'order_percentage_off';
$needs_save = TRUE;
}
elseif ($offer['target_plugin_id'] = 'commerce_promotion_product_percentage_off') {
$offer['target_plugin_id'] = 'order_item_percentage_off';
// The product_id setting has been removed and needs to be migrated to a condition.
$product_id = $offer['target_plugin_configuration']['product_id'];
unset($offer['target_plugin_configuration']['product_id']);
$has_existing_condition = FALSE;
foreach ($conditions as &$condition_item) {
if ($condition_item['target_plugin_id'] == 'order_item_product') {
$condition_item['target_plugin_configuration']['products'][] = [
'product_id' => $product_id,
];
$condition_item['target_plugin_configuration']['products'] = array_unique($condition_item['target_plugin_configuration']['products']);
$has_existing_condition = TRUE;
}
}
if (!$has_existing_condition) {
$conditions[] = [
'target_plugin_id' => 'order_item_product',
'target_plugin_configuration' => [
'products' => [
[
'product_id' => $product_id,
],
],
],
];
}
$needs_save = TRUE;
}
if ($needs_save) {
$promotion
->set('offer', $offer);
$promotion
->set('conditions', $conditions);
$promotion
->save();
}
}
$sandbox['current_count'] += 25;
if ($sandbox['current_count'] >= $sandbox['total_count']) {
$sandbox['#finished'] = 1;
}
else {
$sandbox['#finished'] = ($sandbox['total_count'] - $sandbox['current_count']) / $sandbox['total_count'];
}
}