--- uc_product_quote/uc_product_quote.module	2009-08-28 18:14:53.000000000 -0400
+++ uc_product_quote/uc_product_quote.module	2010-07-09 15:47:04.000000000 -0400
@@ -138,6 +138,41 @@ function uc_product_quote_fedex_filter($
 }
 
 /******************************************************************************
+ * UPS Hooks                                                                *
+ ******************************************************************************/
+
+/**
+ * Return an array containing only the services allowed for the particular
+ */
+function uc_product_quote_ups_filter($products, $details) {
+  // Loop through the products
+  foreach ($products as $product) {
+    $args[] = $product->nid;
+  }
+
+  // Filter out duplicate products
+  $args = array_unique($args);
+
+  // Build conditions based on unique products
+  foreach ($args as $arg) {
+    $conditions .= 'nid = %d OR ';
+  }
+  // Truncate last 'OR'
+  $conditions = substr($conditions, 0, strlen($conditions) - 4);
+
+  // Get a list of the default allowed UPS services
+  $services = array_filter(variable_get('uc_ups_services', _uc_ups_service_list()));
+  
+  // Get a list of allowed services for each product
+  $result = db_query("SELECT services FROM {uc_product_quotes} WHERE ($conditions) AND method = 'ups'", $args);
+  while ($product_services = unserialize(db_result($result))) {
+    $services = array_intersect($services, $product_services);
+  }
+  
+  return array('uc_product_quote' => $services);
+}
+
+/******************************************************************************
  * Module Functions                                                           *
  ******************************************************************************/
 
