function uc_attribute_condition_ordered_product_option in Ubercart 6.2
Same name and namespace in other branches
- 5 uc_attribute/uc_attribute_workflow.inc \uc_attribute_condition_ordered_product_option()
- 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;
}