You are here

function commerce_coupon_form_attach_coupons_validate in Commerce Coupon 7.2

Form validate callback: validate a new coupon from the discount UI.

1 string reference to 'commerce_coupon_form_attach_coupons_validate'
commerce_coupon_form_commerce_discount_form_alter in ./commerce_coupon.module
Implements hook_form_FORM_ID_alter().

File

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

Code

function commerce_coupon_form_attach_coupons_validate(&$form, &$form_state) {
  $trigger = end($form_state['triggering_element']['#array_parents']);
  if (isset($form_state['edit_coupon'])) {
    $coupon = $form_state['edit_coupon'];
  }

  // Determine whether it is the "add new" form or an edit form.
  if (isset($coupon)) {
    if (isset($coupon->delta)) {
      $coupon_fields_form =& $form['coupons']['manage_coupons'][$coupon->delta]['coupon_form']['commerce_coupon_fields'];
      $coupon_values = $form_state['values']['coupons']['manage_coupons'][$coupon->delta]['coupon_form'];
    }
    else {
      $coupon_fields_form =& $form['coupons']['coupon_form']['commerce_coupon_fields'];
      $coupon_values = $form_state['values']['coupons']['coupon_form'];
    }
  }
  if (isset($coupon_fields_form) && $trigger != 'cancel_coupon' && $trigger != 'add_existing') {

    // Validate fields.
    field_attach_form_validate('commerce_coupon', $coupon, $coupon_fields_form, $form_state);
  }
  switch ($trigger) {
    case 'add_coupon':
    case 'save_coupon':

      // If the form has passed validation, prepare the coupon for submission.
      if (!form_get_errors()) {
        if (!empty($coupon_values['generate'])) {

          // Generate a code.
          $code = commerce_coupon_generate_coupon_code('discount_coupon');

          // Make sure the code is not already staged.
          if (!empty($form_state['coupons'])) {
            foreach ($form_state['coupons'] as $staged_coupon) {
              $coupon_codes[] = $staged_coupon->code;
            }
            $n = 0;
            while (in_array($code, $coupon_codes) && $n < 10) {
              $code = commerce_coupon_generate_coupon_code('discount_coupon');
              $n++;
            }
          }
        }
        else {
          $code = $coupon_values['code'];
        }
        $coupon->code = $code;
        $coupon->status = $coupon_values['status'];
        $coupon->uid = $coupon_values['uid'];
        field_attach_submit('commerce_coupon', $coupon, $coupon_fields_form, $form_state);

        // Add it to the list of coupons that we save.
        if (isset($coupon->delta)) {
          $form_state['coupons'][$coupon->delta] = $coupon;

          // If the coupon is already in the database, we must save it
          // immediately. This is to take care of cases where a user could
          // switch the codes of two coupons. If we allow the database to get
          // out of sync with what is in the form, it becomes prohibitively
          // difficult to enforce uniqueness.
          if (isset($coupon->coupon_id)) {
            commerce_coupon_save($coupon);
          }
        }
        else {
          $form_state['coupons'][] = $coupon;
        }

        // Reset the edit coupon tracker.
        unset($form_state['edit_coupon']);
      }
      break;
    case 'cancel_coupon':
    case 'add_existing':
      unset($form_state['edit_coupon']);
      break;
    case 'add_existing_coupon':
      $code = $form_state['values']['coupons']['find_coupon_code'];
      $coupon = commerce_coupon_load_by_code($code, 'discount_coupon');
      if (!$coupon) {
        form_set_error('coupons][find_coupon_code', t('Please enter a valid coupon code'));
      }
      elseif (commerce_coupon_coupon_list_has_code($coupon->code, $form_state['coupons'])) {
        form_set_error('coupons][find_coupon_code', t('The coupon code you entered has already been added to this discount.'));
      }
      else {
        $form_state['coupons'][] = $coupon;
      }
      break;
  }
}