function uc_discounts_get_product_ids_for_discount in Ubercart Discounts (Alternative) 7.2
Returns product IDs to which a discount applies.
Note: this function correctly returns all products for term-based discounts.
Parameters
object $discount:
const $grouping:
bool $exclude_all_products:
Return value
array Array of product IDs.
2 calls to uc_discounts_get_product_ids_for_discount()
- uc_discounts_get_discounts_for_order in uc_discounts/
uc_discounts.module - Returns discounts for order.
- uc_discounts_init in uc_discounts/
uc_discounts.module - Implements hook_init().
File
- uc_discounts/
uc_discounts.module, line 935
Code
function uc_discounts_get_product_ids_for_discount($discount, $grouping = UC_DISCOUNTS_GROUPING_APPLICATION, $exclude_all_products = FALSE) {
$filter = $grouping == UC_DISCOUNTS_GROUPING_APPLICATION ? $discount->filter_type : $discount->required_product_type;
switch ($filter) {
case UC_DISCOUNTS_FILTER_TYPE_PRODUCTS:
return uc_discounts_get_product_ids_for_discount_id($discount->discount_id, $grouping, $exclude_all_products);
case UC_DISCOUNTS_FILTER_TYPE_TERMS:
$product_ids = array();
// Get products for terms.
$terms = uc_discounts_get_term_ids_for_discount_id($discount->discount_id, $grouping, $exclude_all_products);
$query = 'SELECT DISTINCT p.nid FROM {uc_products} p';
if (!empty($terms)) {
$query .= ' INNER JOIN { taxonomy_index} tn ON p.nid=tn.nid
INNER JOIN {uc_discounts_terms} dt ON tn.tid=dt.term_id
WHERE dt.discount_id=:discount_id';
}
$result = db_query($query, array(
':discount_id' => $discount->discount_id,
));
foreach ($result as $row) {
$product_ids[] = $row->nid;
}
return $product_ids;
case UC_DISCOUNTS_FILTER_TYPE_SKUS:
$skus = uc_discounts_get_skus_for_discount_id($discount->discount_id, $grouping, $exclude_all_products);
$query = 'SELECT DISTINCT p.nid FROM {uc_products} p';
if (!empty($skus)) {
$query .= ' INNER JOIN {uc_discounts_skus} ds ON p.model=ds.sku
WHERE ds.discount_id=:discount_id';
}
$result = db_query($query, array(
':discount_id' => $discount->discount_id,
));
foreach ($result as $row) {
$product_ids[] = $row->nid;
}
return $product_ids;
case UC_DISCOUNTS_FILTER_TYPE_CLASS:
$classes = uc_discounts_get_classes_for_discount_id($discount->discount_id, $grouping, $exclude_all_products);
$query = 'SELECT DISTINCT n.nid FROM {node} n';
if (!empty($classes)) {
$query .= ' INNER JOIN {uc_discounts_classes} dcl ON n.type=dcl.class
WHERE dcl.discount_id=:discount_id';
}
$result = db_query($query, array(
':discount_id' => $discount->discount_id,
));
foreach ($result as $row) {
$product_ids[] = $row->nid;
}
return $product_ids;
case UC_DISCOUNTS_FILTER_TYPE_AUTHORS:
$authors = uc_discounts_get_author_ids_for_discount_id($discount->discount_id, $grouping, $exclude_all_products);
$query = 'SELECT DISTINCT n.nid FROM {node} n';
if (!empty($authors)) {
$query .= ' INNER JOIN {uc_discounts_authors} dau ON n.uid=dau.author_id
WHERE dau.discount_id=:discount_id';
}
$result = db_query($query, array(
':discount_id' => $discount->discount_id,
));
foreach ($result as $row) {
$product_ids[] = $row->nid;
}
return $product_ids;
}
return array();
}