You are here

function uc_product_kit_node_load in Ubercart 8.4

Implements hook_node_load().

File

uc_product_kit/uc_product_kit.module, line 453
The product kit module for Ubercart.

Code

function uc_product_kit_node_load($nodes) {
  $vids = [];
  foreach ($nodes as $nid => $node) {
    if ($node
      ->getType() == 'product_kit') {
      $vids[$nid] = $node
        ->getRevisionId();
    }
  }
  $connection = \Drupal::database();
  if (!empty($vids)) {
    $result = $connection
      ->query('SELECT nid, product_id, mutable, qty, discount, ordering, synchronized FROM {uc_product_kits} WHERE vid IN (:vids[]) ORDER BY nid, ordering', [
      ':vids[]' => $vids,
    ]);
    while ($prod = $result
      ->fetchObject()) {
      $nodes[$prod->nid]->mutable = $prod->mutable;
      $nodes[$prod->nid]->synchronized = $prod->synchronized;

      // Add the component information.
      $data = [];
      if ($prod->mutable != UC_PRODUCT_KIT_MUTABLE) {
        $data = [
          'kit_id' => $prod->nid,
          'kit_discount' => $prod->discount,
        ];
      }
      $product = uc_product_load_variant($prod->product_id, $data);
      $product->qty = $prod->qty;
      $product->discount = $prod->discount;
      $product->ordering = $prod->ordering;

      // Add product to the kit.
      $nodes[$prod->nid]->products[$product
        ->id()] = $product;
    }

    // Add product data to kits.
    $result = $connection
      ->query('SELECT nid, model, cost, price, weight, weight_units, length, width, height, length_units, pkg_qty, default_qty, shippable FROM {uc_products} WHERE vid IN (:vids[])', [
      ':vids[]' => $vids,
    ]);
    foreach ($result as $node) {
      foreach ($node as $field => $value) {
        if (is_object($nodes[$node->nid]->{$field})) {
          $nodes[$node->nid]->{$field}->value = $value;
        }
        else {

          // @todo remove when all properties are converted to base fields
          $nodes[$node->nid]->{$field} = $value;
        }
      }
    }
  }
}