diff --git a/commerce_price_table.module b/commerce_price_table.module index d4ab244..448b26f 100644 --- a/commerce_price_table.module +++ b/commerce_price_table.module @@ -570,3 +570,76 @@ function commerce_price_table_display_quantity_headers($item) { } return $quantity_text; } + +/** + * Initializes a new price table field with cardinality "unlimited" + * and creates an individual price rule using this field. + */ +function commerce_price_table_field_create_field($field) { + if ($field['type'] == 'commerce_price_table') { + // The field cardinality *must* be > 1 for this module to make sense + // (and for the rule to work). + $field['cardinality'] = FIELD_CARDINALITY_UNLIMITED; + field_update_field($field); + + $fieldname = $field['field_name']; + $rulename = "commerce_price_table_{$fieldname}_override_price"; + // Ensure that no rule with the desired name exists. + if (rules_config_load($rulename)) { + return; + } + + if ($fieldname == 'field_price_table') { + // Check whether there is a legacy rule. + if ($rule = rules_config_load('commerce_price_table_override_price')) { + foreach ($rule->actions() as $action) { + if ($action->getElementName() == 'commerce_price_table_set_price') { + if (isset($action->settings['price_table:select'])) { + if (str_replace('_', '-', $action->settings['price_table:select']) == 'commerce-line-item:commerce-product:field-price-table') { + return; + } + } + } + } + } + } + + $rule = rules_reaction_rule(); + + $rule->label = t('Override price with price table (!fieldname)', array('!fieldname' => $fieldname)); + $rule->active = TRUE; + + $rule + ->event('commerce_product_calculate_sell_price') + ->condition('entity_has_field', array( + 'entity:select' => 'commerce-line-item', + 'field' => 'commerce_product', + )) + ->condition('entity_has_field', array( + 'entity:select' => 'commerce-line-item:commerce-product', + 'field' => $fieldname, + )) + ->action('commerce_price_table_set_price', array( + 'commerce_line_item:select' => 'commerce-line-item', + 'quantity:select' => 'commerce-line-item:quantity', + 'price_table:select' => 'commerce-line-item:commerce-product:'.str_replace('_', '-', $fieldname), + )); + + $rule->weight = -10; + + $rule->save($rulename); + drupal_set_message(t('Created new rule: !label', array('!label' => $rule->label))); + } +} + +/** + * Removes the price rule for this field. + */ +function commerce_price_table_field_delete_field($field) { + if ($field['type'] == 'commerce_price_table') { + $rulename = "commerce_price_table_{$field['field_name']}_override_price"; + if ($rule = rules_config_load($rulename)) { + $rule->delete(); + } + } +}