/**
  * Handle actions for both individual items and bulk edit
  *
  * @since 1.0
  */
 public function process_actions()
 {
     // get the current action (if any)
     $action = $this->current_action();
     // get the set of orders to operate on
     $order_ids = isset($_REQUEST['order_id']) ? array_map('absint', $_REQUEST['order_id']) : array();
     $message = $this->get_current_customer_message();
     // no action, or invalid action
     if (isset($_GET['page']) && 'wc_pre_orders' == $_GET['page']) {
         if (false === $action || empty($order_ids)) {
             if (!empty($_REQUEST['_wp_http_referer'])) {
                 // remove _wp_http_referer/_wp_nonce/action params
                 wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce', 'action', 'action2'), stripslashes($_SERVER['REQUEST_URI'])));
                 exit;
             }
             return;
         }
         $success_count = $error_count = 0;
         // process the orders
         foreach ($order_ids as $order_id) {
             $order = new WC_Order($order_id);
             // perform the action
             switch ($action) {
                 case 'cancel':
                     if (WC_Pre_Orders_Manager::can_pre_order_be_changed_to('cancelled', $order)) {
                         $success_count++;
                         WC_Pre_Orders_Manager::cancel_pre_order($order, $message);
                     } else {
                         $error_count++;
                     }
                     break;
                 case 'complete':
                     if (WC_Pre_Orders_Manager::can_pre_order_be_changed_to('completed', $order)) {
                         $success_count++;
                         WC_Pre_Orders_Manager::complete_pre_order($order, $message);
                     } else {
                         $error_count++;
                     }
                     break;
                 case 'message':
                     WC_Pre_Orders_Manager::email_pre_order_customer($order_id, $message);
                     break;
             }
         }
         $messages = array();
         switch ($action) {
             case 'cancel':
                 if ($success_count > 0) {
                     $messages[] = sprintf(_n('%d pre-order cancelled.', '%s pre-orders cancelled.', $success_count, 'wc-pre-orders'), $success_count);
                 }
                 if ($error_count > 0) {
                     $messages[] = sprintf(_n('%d pre-order could not be cancelled.', '%s pre-orders could not be cancelled.', $error_count, 'wc-pre-orders'), $error_count);
                 }
                 break;
             case 'complete':
                 if ($success_count > 0) {
                     $messages[] = sprintf(_n('%d pre-order completed.', '%s pre-orders completed.', $success_count, 'wc-pre-orders'), $success_count);
                 }
                 if ($error_count > 0) {
                     $messages[] = sprintf(_n('%d pre-order could not be completed.', '%s pre-orders could not be completed.', $error_count, 'wc-pre-orders'), $error_count);
                 }
                 break;
             case 'message':
                 $messages[] = sprintf(_n('%d email dispatched.', '%s emails dispatched.', count($order_ids), 'wc-pre-orders'), count($order_ids));
                 break;
         }
         $message_nonce = wp_create_nonce(__FILE__);
         set_transient($this->message_transient_prefix . $message_nonce, array('messages' => implode('  ', $messages)), 60 * 60);
         // get our next destination, stripping out all actions and other unneeded parameters
         if (isset($_REQUEST['_wp_http_referer'])) {
             $redirect_url = $_REQUEST['_wp_http_referer'];
         } else {
             $redirect_url = remove_query_arg(array('_wp_http_referer', '_wpnonce', 'action', 'action2', 'order_id', 'customer_message', 'customer_message2'), stripslashes($_SERVER['REQUEST_URI']));
         }
         wp_redirect(add_query_arg('message', $message_nonce, $redirect_url));
         exit;
     }
 }