function update_cart()
 {
     global $tc_cart_errors;
     $cart_error_number = 0;
     $required_fields_error_count = 0;
     if (isset($_POST['cart_action']) && $_POST['cart_action'] == 'update_cart' || isset($_POST['cart_action']) && $_POST['cart_action'] == 'apply_coupon' || isset($_POST['cart_action']) && $_POST['cart_action'] == 'proceed_to_checkout') {
         $discount = new TC_Discounts();
         $discount->discounted_cart_total($_SESSION['cart_subtotal_pre']);
         $cart = array();
         $ticket_type_count = 0;
         $ticket_quantity = $_POST['ticket_quantity'];
         if (isset($_POST['cart_action'])) {
             if ($_POST['cart_action'] == 'update_cart' || $_POST['cart_action'] == 'proceed_to_checkout') {
                 $tc_cart_errors .= '<ul>';
                 foreach ($_POST['ticket_cart_id'] as $ticket_id) {
                     $ticket = new TC_Ticket($ticket_id);
                     if ($ticket_quantity[$ticket_type_count] <= 0) {
                         unset($cart[$ticket_id]);
                         //remove from cart
                     } else {
                         if ($ticket->details->min_tickets_per_order != 0 && $ticket->details->min_tickets_per_order !== '') {
                             if ($ticket_quantity[$ticket_type_count] < $ticket->details->min_tickets_per_order) {
                                 $cart[$ticket_id] = (int) $ticket->details->min_tickets_per_order;
                                 $ticket_quantity[$ticket_type_count] = (int) $ticket->details->min_tickets_per_order;
                                 $tc_cart_errors .= '<li>' . sprintf(__('Minimum order quantity for "%s" is %d', 'tc'), $ticket->details->post_title, $ticket->details->min_tickets_per_order) . '</li>';
                                 $cart_error_number++;
                             }
                         }
                         if ($ticket->details->max_tickets_per_order != 0 && $ticket->details->max_tickets_per_order !== '') {
                             if ($ticket_quantity[$ticket_type_count] > $ticket->details->max_tickets_per_order) {
                                 $cart[$ticket_id] = (int) $ticket->details->max_tickets_per_order;
                                 $ticket_quantity[$ticket_type_count] = (int) $ticket->details->max_tickets_per_order;
                                 $tc_cart_errors .= '<li>' . sprintf(__('Maximum order quantity for "%s" is %d', 'tc'), $ticket->details->post_title, $ticket->details->max_tickets_per_order) . '</li>';
                                 $cart_error_number++;
                             }
                         }
                         $quantity_left = $ticket->get_tickets_quantity_left();
                         if ($quantity_left >= $ticket_quantity[$ticket_type_count]) {
                             $cart[$ticket_id] = (int) $ticket_quantity[$ticket_type_count];
                         } else {
                             if ($quantity_left > 0) {
                                 $tc_cart_errors .= '<li>' . sprintf(__('Only %d "%s" %s left', 'tc'), $quantity_left, $ticket->details->post_title, $quantity_left > 1 ? __('tickets', 'tc') : __('ticket', 'tc')) . '</li>';
                                 $cart_error_number++;
                             } else {
                                 $tc_cart_errors .= '<li>' . sprintf(__('"%s" tickets are sold out', 'tc'), $ticket->details->post_title) . '</li>';
                                 $cart_error_number++;
                             }
                             $cart[$ticket_id] = (int) $quantity_left;
                         }
                     }
                     $ticket_type_count++;
                 }
                 $tc_cart_errors .= '</ul>';
                 add_filter('tc_cart_errors', array(&$this, 'tc_cart_errors'), 10, 1);
                 $this->update_discount_code_cookie($_POST['coupon_code']);
                 $this->update_cart_cookie($cart);
                 $cart_contents = $this->get_cart_cookie();
                 $discount = new TC_Discounts();
                 $discount->discounted_cart_total();
                 if (empty($cart)) {
                     $this->remove_order_session_data(false);
                 }
             }
             if ($_POST['cart_action'] == 'apply_coupon') {
                 $discount = new TC_Discounts();
                 $discount->discounted_cart_total();
                 add_filter('tc_discount_code_message', array('TC_Discounts', 'discount_code_message'), 11, 1);
             }
             if ($_POST['cart_action'] == 'proceed_to_checkout') {
                 $required_fields = $_POST['tc_cart_required'];
                 //array of required field names
                 foreach ($_POST as $key => $value) {
                     if ($key !== 'tc_cart_required') {
                         if (in_array($key, $required_fields)) {
                             if (!is_array($value)) {
                                 if (trim($value) == '') {
                                     $required_fields_error_count++;
                                 }
                             } else {
                                 foreach ($_POST[$key] as $val) {
                                     if (!is_array($val)) {
                                         if (trim($val) == '') {
                                             $required_fields_error_count++;
                                         }
                                     } else {
                                         foreach ($val as $val_str) {
                                             if (trim($val_str) == '') {
                                                 $required_fields_error_count++;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if ($required_fields_error_count > 0) {
                     $tc_cart_errors .= '<li>' . __('All fields marked with * are required.', 'tc') . '</li>';
                 }
                 if ($cart_error_number == 0 && $required_fields_error_count == 0) {
                     $this->save_cart_post_data();
                     do_action('tc_cart_passed_successfully');
                     wp_redirect($this->get_payment_slug(true));
                     exit;
                 }
             }
         }
     }
 }