You are here

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();
}