public function append_actions($order, $order_page = false)
 {
     global $woocommerce;
     $authors = WCV_Vendors::get_vendors_from_order($order);
     $authors = $authors ? array_keys($authors) : array();
     if (empty($authors)) {
         return false;
     }
     $shipped = (array) get_post_meta($order->id, 'wc_pv_shipped', true);
     $string = '</br></br>';
     foreach ($authors as $author) {
         $string .= in_array($author, $shipped) ? '&#10004; ' : '&#10005; ';
         $string .= WCV_Vendors::get_vendor_shop_name($author);
         $string .= '</br>';
     }
     $response = array('url' => '#', 'name' => __('Vendors Shipped', 'wcvendors') . $string, 'action' => 'wc_pv_shipped', 'image_url' => wcv_assets_url . '/images/icons/truck.png');
     if (!$order_page) {
         printf('<a class="button tips %s" href="%s" data-tip="%s"><img style="width:16px;height:16px;" src="%s"></a>', $response['action'], $response['url'], $response['name'], $response['image_url']);
     } else {
         echo $response['name'];
     }
     return $response;
 }
 public function save_vendor_settings()
 {
     global $woocommerce;
     $user_id = get_current_user_id();
     if (!empty($_GET['wc_pv_mark_shipped'])) {
         $order_id = $_GET['wc_pv_mark_shipped'];
         $order = wc_get_order($order_id);
         $vendors = WCV_Vendors::get_vendors_from_order($order);
         $vendor_ids = array_keys($vendors);
         if (!in_array($user_id, $vendor_ids)) {
             wc_add_notice(__('You are not allowed to modify this order.', 'wcvendors'));
             return null;
         }
         $shippers = (array) get_post_meta($order_id, 'wc_pv_shipped', true);
         // If not in the shippers array mark as shipped otherwise do nothing.
         if (!in_array($user_id, $shippers)) {
             $shippers[] = $user_id;
             $mails = $woocommerce->mailer()->get_emails();
             if (!empty($mails)) {
                 $mails['WC_Email_Notify_Shipped']->trigger($order_id, $user_id);
             }
             do_action('wcvendors_vendor_ship', $order_id, $user_id);
             wc_add_notice(__('Order marked shipped.', 'wcvendors'), 'success');
             $shop_name = WCV_Vendors::get_vendor_shop_name($user_id);
             $order->add_order_note(apply_filters('wcvendors_vendor_shipped_note', __($shop_name . ' has marked as shipped. ', 'wcvendors')), $user_id);
         } elseif (false != ($key = array_search($user_id, $shippers))) {
             unset($shippers[$key]);
             // Remove user from the shippers array
         }
         update_post_meta($order_id, 'wc_pv_shipped', $shippers);
         return;
     }
     if (isset($_POST['update_tracking'])) {
         $order_id = (int) $_POST['order_id'];
         $product_id = (int) $_POST['product_id'];
         $tracking_provider = woocommerce_clean($_POST['tracking_provider']);
         $custom_tracking_provider = woocommerce_clean($_POST['custom_tracking_provider_name']);
         $custom_tracking_link = woocommerce_clean($_POST['custom_tracking_url']);
         $tracking_number = woocommerce_clean($_POST['tracking_number']);
         $date_shipped = woocommerce_clean(strtotime($_POST['date_shipped']));
         $order = new WC_Order($order_id);
         $products = $order->get_items();
         foreach ($products as $key => $value) {
             if ($value['product_id'] == $product_id || $value['variation_id'] == $product_id) {
                 $order_item_id = $key;
                 break;
             }
         }
         if ($order_item_id) {
             woocommerce_delete_order_item_meta($order_item_id, __('Tracking number', 'wcvendors'));
             woocommerce_add_order_item_meta($order_item_id, __('Tracking number', 'wcvendors'), $tracking_number);
             $message = __('Success. Your tracking number has been updated.', 'wcvendors');
             wc_add_notice($message, 'success');
             // Update order data
             update_post_meta($order_id, '_tracking_provider', $tracking_provider);
             update_post_meta($order_id, '_custom_tracking_provider', $custom_tracking_provider);
             update_post_meta($order_id, '_tracking_number', $tracking_number);
             update_post_meta($order_id, '_custom_tracking_link', $custom_tracking_link);
             update_post_meta($order_id, '_date_shipped', $date_shipped);
         }
     }
     if (empty($_POST['vendor_application_submit'])) {
         return false;
     }
     if (isset($_POST['wc-product-vendor-nonce'])) {
         if (!wp_verify_nonce($_POST['wc-product-vendor-nonce'], 'save-shop-settings')) {
             return false;
         }
         if (isset($_POST['pv_paypal'])) {
             if (!is_email($_POST['pv_paypal'])) {
                 wc_add_notice(__('Your PayPal address is not a valid email address.', 'wcvendors'), 'error');
             } else {
                 update_user_meta($user_id, 'pv_paypal', $_POST['pv_paypal']);
             }
         }
         if (!empty($_POST['pv_shop_name'])) {
             $users = get_users(array('meta_key' => 'pv_shop_slug', 'meta_value' => sanitize_title($_POST['pv_shop_name'])));
             if (!empty($users) && $users[0]->ID != $user_id) {
                 wc_add_notice(__('That shop name is already taken. Your shop name must be unique.', 'wcvendors'), 'error');
             } else {
                 update_user_meta($user_id, 'pv_shop_name', $_POST['pv_shop_name']);
                 update_user_meta($user_id, 'pv_shop_slug', sanitize_title($_POST['pv_shop_name']));
             }
         }
         if (isset($_POST['pv_shop_description'])) {
             update_user_meta($user_id, 'pv_shop_description', $_POST['pv_shop_description']);
         }
         if (isset($_POST['pv_seller_info'])) {
             update_user_meta($user_id, 'pv_seller_info', $_POST['pv_seller_info']);
         }
         do_action('wcvendors_shop_settings_saved', $user_id);
         if (!wc_notice_count()) {
             wc_add_notice(__('Settings saved.', 'wcvendors'), 'success');
         }
     }
 }
 /**
  *  Mark orders as shipped 
  *
  * @param unknown $ids (optional)
  *
  * @return unknown
  */
 public function mark_shipped($ids = array())
 {
     global $woocommerce;
     $user_id = get_current_user_id();
     if (!empty($ids)) {
         foreach ($ids as $order_id) {
             $order = wc_get_order($order_id);
             $vendors = WCV_Vendors::get_vendors_from_order($order);
             $vendor_ids = array_keys($vendors);
             if (!in_array($user_id, $vendor_ids)) {
                 wp_die(__('You are not allowed to modify this order.', 'wcvendors'));
             }
             $shippers = (array) get_post_meta($order_id, 'wc_pv_shipped', true);
             if (!in_array($user_id, $shippers)) {
                 $shippers[] = $user_id;
                 $mails = $woocommerce->mailer()->get_emails();
                 if (!empty($mails)) {
                     $mails['WC_Email_Notify_Shipped']->trigger($order_id, $user_id);
                 }
                 do_action('wcvendors_vendor_ship', $order_id, $user_id);
             }
             update_post_meta($order_id, 'wc_pv_shipped', $shippers);
         }
         return true;
     }
     return false;
 }