args[0]) && !empty($form_state['build_info']['args'][0]->args[0])) { $order_id = $form_state['build_info']['args'][0]->args[0]; $order = commerce_order_load($order_id); $form['coupon'] = array( '#type' => 'container', '#weight' => 51, '#prefix' => '
', '#suffix' => '
', ); // If there's an active coupon if (isset($order->commerce_coupons) && !empty($order->commerce_coupons)) { $order_wrapper = entity_metadata_wrapper('commerce_order', $order); foreach ($order_wrapper->commerce_coupons as $delta => $coupon_wrapper) { $coupon = $coupon_wrapper->value(); } $form['coupon']['coupon_code'] = array( '#type' => 'markup', '#markup' => 'Your voucher code: ' . $coupon->code .'', '#prefix' => '
', '#suffix' => '
', ); $form['coupon']['coupon_remove'] = array( '#type' => 'submit', '#value' => t('Remove'), '#prefix' => '
', '#suffix' => '
', '#submit' => array('maze_shop_basket_coupon_remove_form_submit'), ); $form['coupon']['coupon_id'] = array( '#type' => 'hidden', '#value' => $coupon->coupon_id, ); // Else, if there isn't any active coupon } else{ $form['coupon']['coupon_code_label'] = array( '#type' => 'markup', '#markup' => '
Enter voucher code
', ); $form['coupon']['coupon_code'] = array( '#type' => 'textfield', '#required' => FALSE, '#title' => '', ); $form['coupon']['coupon_add'] = array( '#type' => 'submit', '#value' => t('Apply'), '#submit' => array('maze_shop_basket_coupon_form_submit'), ); } } break; } } /** * Custom submit action for the basket's coupon form */ function maze_shop_basket_coupon_form_submit($form, &$form_state) { $order = $form_state['order']; $error = ''; if ($code = $form_state['values']['coupon_code']) { $coupon = commerce_coupon_redeem_coupon_code($code, $order, $error); if ($commerce_coupon = commerce_coupon_redeem_coupon_code($code, $order, $error)) { drupal_set_message('Successfully added voucher code ' . $commerce_coupon->code . '.'); } else { drupal_set_message($error, 'error'); return; } } $form_state['no_redirect'] = FALSE; return ; } /** * Custom submit action for the basket's remove coupon form */ function maze_shop_basket_coupon_remove_form_submit($form, &$form_state) { $order = $form_state['order']; $coupon = commerce_coupon_load($form_state['values']['coupon_id']); maze_shop_coupon_remove_coupon_from_order($order, $coupon); drupal_set_message('Voucher ' . $coupon->code .' removed from order.'); return ; } function maze_shop_coupon_remove_coupon_from_order($order, $coupon) { $order_wrapper = entity_metadata_wrapper('commerce_order', $order); //Remove the coupons from the order relationship. foreach ($order_wrapper->commerce_coupons as $delta => $coupon_wrapper) { if ($coupon_wrapper->value() == $coupon) { $order_wrapper->commerce_coupons->offsetUnset($delta); } } commerce_order_save($order); /* // Make a EFQ to get coupon line items in that order that match to the coupon. $query = new EntityFieldQuery(); $result = $query->entityCondition('entity_type', 'commerce_line_item') ->propertyCondition('order_id', $order->order_id) ->propertyCondition('type', 'commerce_coupon') ->fieldCondition('commerce_coupon_reference', 'target_id', $coupon->coupon_id, '=') ->execute(); if (empty($result)) { return; } $line_item_ids = array_keys($result['commerce_line_item']); if (!empty($line_item_ids)) { // First remove the line items from the order and save it to avoid // conflicts. foreach ($order_wrapper->commerce_line_items as $delta => $line_item_wrapper) { if (in_array($line_item_wrapper->line_item_id->value(), $line_item_ids)) { $order_wrapper->commerce_line_items->offsetUnset($delta); } } commerce_line_item_delete_multiple($line_item_ids); } */ }