You are here

function uc_shipping_package_load in Ubercart 7.3

Same name and namespace in other branches
  1. 5 shipping/uc_shipping/uc_shipping.module \uc_shipping_package_load()
  2. 6.2 shipping/uc_shipping/uc_shipping.module \uc_shipping_package_load()

Loads a package and its products.

9 calls to uc_shipping_package_load()
uc_shipping_handler_field_package_weight::render in shipping/uc_shipping/views/uc_shipping_handler_field_package_weight.inc
Overrides uc_product_handler_field_weight::render().
uc_shipping_make_shipment in shipping/uc_shipping/uc_shipping.admin.inc
Default method to send packages on a shipment.
uc_shipping_package_cancel_confirm_submit in shipping/uc_shipping/uc_shipping.admin.inc
Form submission handler for uc_shipping_package_cancel_confirm().
uc_shipping_package_delete in shipping/uc_shipping/uc_shipping.module
Deletes a package.
uc_shipping_package_edit_submit in shipping/uc_shipping/uc_shipping.admin.inc
Submit handler for uc_shipping_package_edit().

... See full list

File

shipping/uc_shipping/uc_shipping.module, line 395
Organizes ordered products into packages and sets them up for shipment. Shipping method modules may add functionality to generate shipping labels and tracking numbers.

Code

function uc_shipping_package_load($package_id) {
  static $packages = array();
  if (!isset($packages[$package_id])) {
    $result = db_query("SELECT * FROM {uc_packages} WHERE package_id = :id", array(
      ':id' => $package_id,
    ));
    if ($package = $result
      ->fetchObject()) {
      $products = array();
      $description = '';
      $weight = 0;
      $units = variable_get('uc_weight_unit', 'lb');
      $addresses = array();
      $result = db_query("SELECT op.order_product_id, pp.qty, pp.qty * op.weight AS weight, op.weight_units, op.nid, op.title, op.model, op.price, op.data FROM {uc_packaged_products} pp LEFT JOIN {uc_order_products} op ON op.order_product_id = pp.order_product_id WHERE pp.package_id = :id ORDER BY op.order_product_id", array(
        ':id' => $package_id,
      ));
      foreach ($result as $product) {
        $address = uc_quote_get_default_shipping_address($product->nid);

        // TODO: Lodge complaint that array_unique() compares as strings.
        if (!in_array($address, $addresses)) {
          $addresses[] = $address;
        }
        $description .= ', ' . $product->qty . ' x ' . $product->model;

        // Normalize all weights to default units.
        $weight += $product->weight * uc_weight_conversion($product->weight_units, $units);
        $product->data = unserialize($product->data);
        $products[$product->order_product_id] = $product;
      }
      $package->addresses = $addresses;
      $package->description = substr($description, 2);
      $package->weight = $weight;
      $package->weight_units = $units;
      $package->products = $products;
      if ($package->label_image && ($image = file_load($package->label_image))) {
        $package->label_image = $image;
      }
      else {
        unset($package->label_image);
      }
      $packages[$package_id] = $package;
    }
    else {
      return FALSE;
    }
  }
  return $packages[$package_id];
}