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'
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;
}
}