You are here

function commerce_order_post_update_9 in Commerce Core 8.2

Grants the "manage order items" permission to roles that can update orders.

File

modules/order/commerce_order.post_update.php, line 137
Post update functions for Order.

Code

function commerce_order_post_update_9() {
  $entity_type_manager = \Drupal::entityTypeManager();

  /** @var \Drupal\commerce_order\Entity\OrderItemTypeInterface[] $order_item_types */
  $order_item_types = $entity_type_manager
    ->getStorage('commerce_order_item_type')
    ->loadMultiple();

  /** @var \Drupal\user\RoleInterface[] $roles */
  $roles = $entity_type_manager
    ->getStorage('user_role')
    ->loadMultiple();
  $order_type_storage = $entity_type_manager
    ->getStorage('commerce_order_type');
  foreach ($roles as $role) {
    foreach ($order_item_types as $order_item_type) {
      $order_type = $order_type_storage
        ->load($order_item_type
        ->getOrderTypeId());

      // If the role can update the order type, then it can also manage the
      // order items of this bundle.
      if ($order_type && $role
        ->hasPermission("update {$order_type->id()} commerce_order")) {
        $role
          ->grantPermission("manage {$order_item_type->id()} commerce_order_item");
      }
    }
    $role
      ->save();
  }
}