From 21ffc90f1cf6d98460891109a789490a6956b1f3 Mon Sep 17 00:00:00 2001 From: josebc Date: Mon, 17 Feb 2014 19:50:21 +0200 Subject: [PATCH] Issue #1684892 patch for the 2.x branch of the project. --- commerce_coupon.info | 3 +- includes/views/commerce_coupon.views.inc | 10 ++ .../commerce_coupon_handler_area_cart_form.inc | 126 ++++++++++++++++++++ 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 includes/views/handlers/commerce_coupon_handler_area_cart_form.inc diff --git a/commerce_coupon.info b/commerce_coupon.info index 393f916..4c89a96 100644 --- a/commerce_coupon.info +++ b/commerce_coupon.info @@ -12,4 +12,5 @@ files[] = includes/views/handlers/commerce_coupon_handler_field_coupon_edit.inc files[] = includes/views/handlers/commerce_coupon_handler_field_coupon_link.inc files[] = includes/views/handlers/commerce_coupon_handler_argument_coupon_id.inc files[] = includes/views/handlers/commerce_coupon_handler_argument_coupon_code.inc -files[] = commerce_coupon.info.inc \ No newline at end of file +files[] = includes/views/handlers/commerce_coupon_handler_area_cart_form.inc +files[] = commerce_coupon.info.inc diff --git a/includes/views/commerce_coupon.views.inc b/includes/views/commerce_coupon.views.inc index 4ad3f1f..ccaeff4 100644 --- a/includes/views/commerce_coupon.views.inc +++ b/includes/views/commerce_coupon.views.inc @@ -75,6 +75,16 @@ function commerce_coupon_views_data_alter(&$data) { 'handler' => 'commerce_coupon_handler_argument_coupon_id' ); } + + // Expose the coupon form item on the form. + $data['commerce_order']['coupon_cart_form'] = array( + 'title' => t('Coupon cart form'), + 'help' => t('Coupon cart form.'), + 'area' => array( + 'handler' => 'commerce_coupon_handler_area_cart_form', + ), + ); + } /** diff --git a/includes/views/handlers/commerce_coupon_handler_area_cart_form.inc b/includes/views/handlers/commerce_coupon_handler_area_cart_form.inc new file mode 100644 index 0000000..69927ea --- /dev/null +++ b/includes/views/handlers/commerce_coupon_handler_area_cart_form.inc @@ -0,0 +1,126 @@ + 'textfield', + '#title' => t('Form item weight'), + '#default_value' => $this->options['weight'], + '#required' => TRUE, + ); + } + + function options_validate($form, &$form_state) { + $weight = $form_state['values']['options']['weight']; + // Weight must be an integer: + if (!is_null($weight )&& (!is_numeric($weight)) || (int) $weight != $weight) { + form_set_error('options][weight', t('!name field must be an integer.', array('!name' => $form['weight']['#title']))); + } + } + + + function render($values) { + // Render a Views form item placeholder. + // This causes Views to wrap the View in a form. + // Render a Views form item placeholder. + return ''; + } + + /** + * This handler never outputs data when the view is empty. + */ + function views_form_empty($empty) { + return $empty; + } + + /** + * Views form + */ + function views_form(&$form, &$form_state) { + + $form[$this->options['id']] = array( + '#type' => 'container', + '#prefix' => '
', + '#suffix' => '
', + '#weight' => $this->options['weight'], + ); + + $form[$this->options['id']]['coupon_code'] = array( + '#type' => 'textfield', + '#title' => t('Coupon code'), + '#description' => t('Enter here your coupon code.'), + ); + + $form[$this->options['id']]['coupon_add'] = array( + '#type' => 'submit', + '#name' => 'coupon_add', + '#value' => t('Add coupon'), + '#validate' => array('commerce_coupon_handler_area_cart_form_validate'), + '#submit' => array('commerce_coupon_handler_area_cart_form_submit'), + ); + + // First look for an order_id argument. + foreach ($this->view->argument as $name => $argument) { + if ($argument instanceof commerce_order_handler_argument_order_order_id) { + // If it is single value... + if (count($argument->value) == 1) { + $order_id = reset($argument->value); + break; + } + } + } + + $order = !empty($order_id) ? commerce_order_load($order_id) : commerce_cart_order_load($GLOBALS['user']->uid); + $coupon_review_view = views_get_view('commerce_coupon_review_pane'); + if (!empty($coupon_review_view) && $coupon_review_view->access('checkout')) { + $form[$this->options['id']]['coupon_list'] = array( + '#markup' => $coupon_review_view->preview('default', array($order->order_id)), + ); + } + } + +} + +/** + * Validate: function commerce_coupon_handler_area_cart_form + */ + +function commerce_coupon_handler_area_cart_form_validate($form, $form_state) { + $code = $form_state['values']['coupon_code']; + $order = $form_state['order']; + + if (empty($code)) { + form_set_error('coupon_code', t('Your coupon code is required.')); + } +} + +/** + * Submit: function commerce_coupon_handler_area_cart_form + */ + +function commerce_coupon_handler_area_cart_form_submit($form, $form_state) { + $code = $form_state['values']['coupon_code']; + $order = $form_state['order']; + + commerce_coupon_redeem_coupon_code($code, $order); +} -- 1.7.9.5