You are here

function uc_attribute_condition_ordered_product_option in Ubercart 6.2

Same name and namespace in other branches
  1. 5 uc_attribute/uc_attribute_workflow.inc \uc_attribute_condition_ordered_product_option()
  2. 7.3 uc_attribute/uc_attribute.rules.inc \uc_attribute_condition_ordered_product_option()

Return TRUE if a product in the given order has the selected option.

See also

uc_attribute_condition_ordered_product_option_form()

1 string reference to 'uc_attribute_condition_ordered_product_option'
uc_attribute_ca_condition in uc_attribute/uc_attribute.ca.inc
Implements hook_ca_condition().

File

uc_attribute/uc_attribute.ca.inc, line 32
Conditional Actions file for Ubercart attributes.

Code

function uc_attribute_condition_ordered_product_option($order, $settings) {
  foreach ($order->products as $product) {
    if (empty($product->data['attributes'])) {
      continue;
    }
    $attributes = $product->data['attributes'];

    // Once the order is made, the attribute data is changed to just the names.
    // If we can't find it by ID, check the names.
    $keys = array_keys($attributes);
    if (is_int(array_shift($keys))) {
      foreach ($attributes as $options) {

        // Only checkboxes are stored in an array, so fix up other option types.
        if (!is_array($options)) {
          $options = array(
            $options,
          );
        }
        if (in_array($settings['attribute_option'], $options)) {
          return TRUE;
        }
      }
    }
    else {

      // Load the attribute data once, only if we need it.
      if (!isset($option)) {
        if ($option = uc_attribute_option_load($settings['attribute_option'])) {
          $attribute = uc_attribute_load($option->aid);
        }
      }
      if (isset($attribute) && isset($attributes[$attribute->name])) {
        $options = $attributes[$attribute->name];

        // Orders created before checkbox options were introduced are not stored in an array.
        if (!is_array($options)) {
          $options = array(
            $options,
          );
        }
        if (in_array($option->name, $options)) {
          return TRUE;
        }
      }
    }
  }
  return FALSE;
}