function commerce_coupon_form_attach_coupons in Commerce Coupon 7.2
Form submit callback: save a coupon from the discount UI.
1 string reference to 'commerce_coupon_form_attach_coupons'
File
- ./
commerce_coupon.module, line 1659 - Provides coupon functionality for Drupal Commerce.
Code
function commerce_coupon_form_attach_coupons(&$form, &$form_state) {
// By default don't rebuild rules config.
$rebuild_rules = FALSE;
if (!empty($form_state['coupons']) && !empty($form_state['commerce_discount']->discount_id)) {
// Save coupons.
foreach ($form_state['coupons'] as $coupon) {
if ($coupon->coupon_id || !commerce_coupon_load_by_code($coupon->code)) {
// Add a reference to this discount if it is not referenced already.
$coupon_wrapper = entity_metadata_wrapper('commerce_coupon', $coupon);
if (!commerce_coupon_coupon_has_discount($coupon_wrapper, $form_state['commerce_discount']->name)) {
$delta = !$coupon_wrapper->commerce_discount_reference
->value() ? 0 : $coupon_wrapper->commerce_discount_reference
->count();
$language = field_language('commerce_coupon', $coupon, 'commerce_discount_reference');
$coupon->commerce_discount_reference[$language][$delta]['target_id'] = $form_state['commerce_discount']->discount_id;
}
// Save coupon.
commerce_coupon_save($coupon);
// Force rules rebuild.
$rebuild_rules = TRUE;
}
}
}
// Remove coupons.
if (!empty($form_state['original_coupons'])) {
foreach ($form_state['original_coupons'] as $original_coupon) {
if (!commerce_coupon_coupon_list_has_code($original_coupon->code, $form_state['coupons'])) {
// If the coupon code is no longer attached to this discount and it is
// attached to no other discounts, delete it completely.
$remove_coupon = commerce_coupon_load_by_code($original_coupon->code);
$wrapper = entity_metadata_wrapper('commerce_coupon', $remove_coupon);
if (!empty($form_state['commerce_discount']->discount_id)) {
foreach ($wrapper->commerce_discount_reference
->value() as $delta => $discount) {
if ($discount->discount_id == $form_state['commerce_discount']->discount_id) {
// Break the reference from this coupon to the discount currently
// being edited in the form. @TODO: why is the wrapper not working
// here?
$language = field_language('commerce_coupon', $remove_coupon, 'commerce_discount_reference');
unset($remove_coupon->commerce_discount_reference[$language][$delta]);
}
}
}
// If no discounts remain, delete the coupon.
if (empty($remove_coupon->commerce_discount_reference[$language])) {
commerce_coupon_delete($original_coupon->coupon_id);
}
else {
// If we are not deleting, save the coupon since we eliminated one or
// more of its discount references.
$wrapper
->save();
}
// Force rules rebuild.
$rebuild_rules = TRUE;
}
}
}
// Rebuild the rules again if coupon added or deleted.
if ($rebuild_rules && !empty($form_state['commerce_discount']->discount_id)) {
if ($discount = entity_load_single('commerce_discount', $form_state['commerce_discount']->discount_id)) {
_commerce_discount_rebuild_rules_config(array(
$discount,
));
}
}
}