You are here

function get_product_ids_for_discount_object in Ubercart Discounts (Alternative) 6.2

Returns product_ids for discount object. Note: this function correctly returns all products for term-based discounts.

Parameters

$discount object:

$exclude_all_products bool:

$grouping const:

Return value

array of product ids (nids)

2 calls to get_product_ids_for_discount_object()
get_discounts_for_order in uc_discounts/uc_discounts.module
Returns discounts for order. Note: $order->uc_discounts_codes must be set
uc_discounts_init in uc_discounts/uc_discounts.module
Implementation of hook_init().

File

uc_discounts/uc_discounts.module, line 910

Code

function get_product_ids_for_discount_object($discount, $grouping = DISCOUNT_FILTER_GROUPING_APPLICATION, $exclude_all_products = FALSE) {
  $filter = $grouping == DISCOUNT_FILTER_GROUPING_APPLICATION ? $discount->filter_type : $discount->required_product_type;
  switch ($filter) {
    case FILTER_TYPE_PRODUCTS:
      return get_product_ids_for_discount($discount->discount_id, $grouping, $exclude_all_products);
    case FILTER_TYPE_TERMS:
      $product_ids = array();

      //Get products for terms
      $terms = get_term_ids_for_discount($discount->discount_id, $grouping, $exclude_all_products);
      $query = 'SELECT DISTINCT p.nid FROM {uc_products} p';
      if (!empty($terms)) {
        $query .= ' INNER JOIN {term_node} tn ON p.nid=tn.nid
                    INNER JOIN {uc_discounts_terms} dt ON tn.tid=dt.term_id
                    WHERE dt.discount_id=%d';
      }
      $result = db_query($query, $discount->discount_id);
      while ($row = db_fetch_object($result)) {
        $product_ids[] = $row->nid;
      }
      return $product_ids;
    case FILTER_TYPE_SKUS:
      $skus = get_skus_for_discount($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=%d';
      }
      $result = db_query($query, $discount->discount_id);
      while ($row = db_fetch_object($result)) {
        $product_ids[] = $row->nid;
      }
      return $product_ids;
    case FILTER_TYPE_CLASS:
      $classes = get_classes_for_discount($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=%d';
      }
      $result = db_query($query, $discount->discount_id);
      while ($row = db_fetch_object($result)) {
        $product_ids[] = $row->nid;
      }
      return $product_ids;
    case FILTER_TYPE_AUTHORS:
      $authors = get_author_ids_for_discount($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=%d';
      }
      $result = db_query($query, $discount->discount_id);
      while ($row = db_fetch_object($result)) {
        $product_ids[] = $row->nid;
      }
      return $product_ids;
  }
  return array();
}