function get_codeless_discounts_for_product_and_quantity in Ubercart Discounts (Alternative) 6.2
Returns all codeless discounts for product when specified quantity is purchased.
Parameters
$product_id Node ID for product:
2 calls to get_codeless_discounts_for_product_and_quantity()
- get_codeless_discounts_for_product in uc_discounts/
uc_discounts.module - Returns all codeless discounts for product.
- uc_discounts_get_discounted_price_for_product in uc_discounts/
uc_discounts.module - Helper function that gets the codeless discounted price of a product
File
- uc_discounts/
uc_discounts.module, line 1851
Code
function get_codeless_discounts_for_product_and_quantity($product, $quantity = NULL, $sort_column = "weight", $is_ascending_sort = TRUE) {
if (is_null($product) || !$product) {
return array();
}
//If quantity was specified
if (!is_null($quantity)) {
global $user;
//Create phony order and get discounts for order
$product->price = $product->sell_price;
$product->qty = $quantity;
$order = new stdClass();
$order->uid = $user->uid;
$order->products = array(
$product,
);
return get_discounts_for_order($order);
}
//Otherwise make special query
//Get terms for product
$term_ids = array();
$term_ids[] = ALL_TERMS;
$result = db_query("SELECT DISTINCT tid FROM {term_node} WHERE nid=%d", $product->nid);
while ($row = db_fetch_array($result)) {
$term_ids[] = $row["tid"];
}
//Get SKUs for product
$skus = array();
$skus[] = "'" . db_escape_string(ALL_SKUS) . "'";
$result = db_query("SELECT DISTINCT model FROM {uc_products} WHERE nid=%d", $product->nid);
while ($row = db_fetch_array($result)) {
$skus[] = "'" . db_escape_string($row["model"]) . "'";
}
//Get classes for product
$classes = array();
$classes[] = "'" . db_escape_string(ALL_CLASSES) . "'";
$result = db_query("SELECT DISTINCT type FROM {node} WHERE nid=%d", $product->nid);
while ($row = db_fetch_array($result)) {
$classes[] = "'" . db_escape_string($row["type"]) . "'";
}
//Get uids for product
$authors = array();
$authors[] = "'" . db_escape_string(ALL_AUTHORS) . "'";
$result = db_query("SELECT DISTINCT uid FROM {node} WHERE nid=%d", $product->nid);
while ($row = db_fetch_array($result)) {
$authors[] = "'" . db_escape_string($row["uid"]) . "'";
}
//Create roles clause
global $user;
$auth_rid = $user->uid != 0 ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID;
$roles_clause = sprintf(" OR d.discount_id IN(SELECT dr.discount_id FROM {uc_discounts_roles} dr" . ", {users_roles} ur WHERE (dr.role_id=ur.rid AND ur.uid=%d) OR dr.role_id=%d OR dr.role_id=%d)", $user->uid, ALL_ROLES, $auth_rid);
$product_ids = array(
ALL_PRODUCTS,
$product->nid,
);
$product_ids_clause = sprintf("d.filter_type<>%d OR dp.product_id IN(%s)", FILTER_TYPE_PRODUCTS, join(",", $product_ids));
$term_ids_clause = sprintf("d.filter_type<>%d OR dt.term_id IN(%s)", FILTER_TYPE_TERMS, join(",", $term_ids));
$skus_clause = sprintf("d.filter_type<>%d OR ds.sku IN(%s)", FILTER_TYPE_SKUS, join(",", $skus));
$classes_clause = sprintf("d.filter_type<>%d OR dcl.class IN(%s)", FILTER_TYPE_CLASS, join(",", $classes));
$authors_clause = sprintf("d.filter_type<>%d OR dau.author_id IN(%s)", FILTER_TYPE_AUTHORS, join(",", $authors));
$sort_order_string = is_ascending_sort ? "ASC" : "DESC";
$grouping = DISCOUNT_FILTER_GROUPING_APPLICATION;
$query = sprintf("SELECT d.* FROM {uc_discounts} d\n LEFT JOIN {uc_discounts_products} dp ON d.discount_id = dp.discount_id AND dp.grouping = {$grouping}\n LEFT JOIN {uc_discounts_terms} dt ON d.discount_id = dt.discount_id AND dt.grouping = {$grouping}\n LEFT JOIN {uc_discounts_skus} ds ON d.discount_id = ds.discount_id AND ds.grouping = {$grouping}\n LEFT JOIN {uc_discounts_classes} dcl ON d.discount_id = dcl.discount_id AND dcl.grouping = {$grouping}\n LEFT JOIN {uc_discounts_authors} dau ON d.discount_id = dau.discount_id AND dau.grouping = {$grouping}\n WHERE d.requires_code = 0\n AND (d.has_role_filter = 0%s)\n AND (%s)\n AND (%s)\n AND (%s)\n AND (%s)\n AND (%s)\n AND (d.has_activation = 0 OR d.activates_on < %d)\n AND (d.has_expiration = 0 OR d.expiration > %d)\n AND (d.is_active = %d)\n ORDER BY d.%s %s", $roles_clause, $product_ids_clause, $term_ids_clause, $skus_clause, $classes_clause, $authors_clause, time(), time(), IS_ACTIVE, $sort_column, $sort_order_string);
$result = db_query($query);
$discounts = array();
while ($discount = db_fetch_object($result)) {
$discounts[] = $discount;
}
return $discounts;
}