You are here

function commerce_coupon_evaluate_inline_conditions in Commerce Coupon 7.2

Evaluate the inline conditions found on a coupon.

If there are no inline conditions, this function returns TRUE. The idea is to build and evaluate a condition set dynamically based on the inline conditions for a given coupon.

Parameters

\EntityDrupalWrapper $coupon_wrapper: A wrapped coupon entity.

Return value

array|bool|void Whether or not the conditions evaluate as true, or true if no evaluation is needed.

1 call to commerce_coupon_evaluate_inline_conditions()
commerce_coupon_evaluate_coupon_inline_conditions_rule in ./commerce_coupon.rules.inc
Rules condition callback: evaluate a coupon's inline conditions.

File

./commerce_coupon.module, line 578
Provides coupon functionality for Drupal Commerce.

Code

function commerce_coupon_evaluate_inline_conditions(EntityDrupalWrapper $coupon_wrapper) {
  $wrapper_properties = $coupon_wrapper
    ->getPropertyInfo();
  if (!module_exists('inline_conditions') || empty($wrapper_properties['commerce_coupon_conditions']) || !$coupon_wrapper->commerce_coupon_conditions
    ->value()) {
    return TRUE;
  }
  $execute = FALSE;

  // Add an input parameter for a Coupon entity.
  $component_parameter = array(
    'commerce_coupon' => array(
      'type' => 'commerce_coupon',
      'label' => t('Coupon'),
      'description' => t('The coupon entity whose inline conditions are being evaluated.'),
    ),
  );
  $rule = rules_and($component_parameter);

  // Build the inline conditions for this phase.
  foreach ($coupon_wrapper->commerce_coupon_conditions
    ->value() as $value) {

    // Get the condition info.
    $condition = inline_conditions_get_info($value['condition_name']);

    // Check for a valid condition. Also we are running only continuous inline
    // conditions, make sure the current condition is continuous.
    if (!$condition || empty($value['condition_settings'])) {
      continue;
    }
    $execute = TRUE;

    // Give a chance to others module to alter the current field value.
    drupal_alter('inline_conditions_build', $value);

    // Build the condition parameters and add the condition.
    $parameters = array(
      'entity:select' => $condition['entity type'],
    ) + $value['condition_settings'];
    $rule
      ->condition($value['condition_name'], $parameters);
  }

  // Run this method to manually to prepare the variables as Rules normally
  // would.
  $rule
    ->processSettings(TRUE);

  // Evaluate the condition set if necessary. Feed the coupon wrapper in as the
  // first argument. All other arguments are part of the condition settings.
  return $execute ? $rule
    ->executeByArgs(array(
    $coupon_wrapper
      ->value(),
  )) : TRUE;
}