function bepro_listings_status()
{
    global $wpdb;
    $data = get_option("bepro_listings");
    //setup google api check
    $_POST["address_line1"] = "220 e university blvd";
    $_POST["postcode"] = "32901";
    $lat_lon = @get_bepro_lat_lon();
    //setup database table checks
    $table_name = $wpdb->prefix . BEPRO_LISTINGS_TABLE_BASE;
    //setup filepath check
    $plugin_url = @Bepro_listings::get_bpl_plugin_url();
    echo "\n\t\t\t<h1>" . __("BePro Listings Status", "bepro-listings") . "</h1>\n\t\t\t<p>" . __("This page shows how the plugin is performing. This is the first place to look when trying to diagnose issues.", "bepro-listings") . "</p>\n\t\t\t<table class='bpl_status_display_table'>\n\t\t\t\t<thead><tr><td colspan='2'>" . __("BePro Listings", "bepro-listings") . "</td></tr></thead>\n\t\t\t\t<tr><td>" . __("Database Tables", "bepro-listings") . "</td><td>" . ($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name ? "<span class='bpl_error'>" . __("ERROR", "bepro-listings") . "</span>" : "OK") . "</td></tr>\n\t\t\t\t<tr><td>" . __("File Path", "bepro-listings") . "</td><td>" . $plugin_url . "</td></tr>\n\t\t\t\t<tr><td>" . __("Google API", "bepro-listings") . "</td><td>" . $lat_lon["status"] . "</td></tr>\n\t\t\t\t<tr><td>" . __("Result Templates", "bepro-listings") . "</td><td>" . (empty($data["bepro_listings_list_template_1"]) ? "<span class='bpl_error'>" . __("ERROR", "bepro-listings") . "</span>" : "OK") . "</td></tr>\n\t\t\t</table>\n\t\t\t<table class='bpl_status_display_table'>\n\t\t\t\t<thead><tr><td colspan='2'>" . __("PHP", "bepro-listings") . "</td></tr></thead>\n\t\t\t\t<tr><td>" . __("CURL", "bepro-listings") . "</td><td>" . (function_exists('curl_version') ? "OK" : "<span class='bpl_error'>" . __("ERROR", "bepro-listings") . "</span>") . "</td></tr>\n\t\t\t\t<tr><td>" . __("File Get Contents", "bepro-listings") . "</td><td>" . (function_exists('file_get_contents') ? "OK" : "<span class='bpl_error'>" . __("ERROR", "bepro-listings") . "</span>") . "</td></tr>\n\t\t\t\t<tr><td>" . __("Memory Limit", "bepro-listings") . "</td><td>" . ini_get("memory_limit") . "</td></tr>\n\t\t\t\t<tr><td>" . __("Max Upload Size", "bepro-listings") . "</td><td>" . ini_get("upload_max_filesize") . "</td></tr>\n\t\t\t\t<tr><td>" . __("PHP Time Limit", "bepro-listings") . "</td><td>" . ini_get("max_execution_time") . "</td></tr>\n\t\t\t\t<tr><td>" . __("ASP Tags", "bepro-listings") . "</td><td>" . (ini_get("asp_tags") ? "ON" : "OFF") . "</td></tr>\n\t\t\t</table>\n\t\t\t<table class='bpl_status_display_table'>\n\t\t\t\t<thead><tr><td colspan='2'>" . __("SERVER", "bepro-listings") . "</td></tr></thead>\n\t\t\t\t<tr><td>" . __("Type", "bepro-listings") . "</td><td>" . $_SERVER["SERVER_SOFTWARE"] . "</td></tr>\n\t\t\t\t<tr><td>" . __("IP Address", "bepro-listings") . "</td><td>" . $_SERVER["SERVER_ADDR"] . "</td></tr>\n\t\t\t\t<tr><td>" . __("Protocol", "bepro-listings") . "</td><td>" . (empty($_SERVER["HTTPS"]) ? "HTTP" : "HTTPS") . "</td></tr>\n\t\t\t</table>\n\t\t";
    do_action("bpl_admin_status_page");
}
function bepro_listings_save($post_id = false, $return_post_id = false)
{
    global $wpdb;
    if (!empty($_POST["save_bepro_listing"])) {
        //get settings
        $wp_upload_dir = wp_upload_dir();
        $data = get_option("bepro_listings");
        $user_data = wp_get_current_user();
        $default_user_id = $data["default_user_id"];
        $success_message = $data["success_message"];
        $num_images = $data["num_images"];
        $query_type = $data["map_query_type"];
        $default_status = empty($data["default_status"]) ? "pending" : $data["default_status"];
        $return_message = false;
        $item_name = $wpdb->escape($_POST["item_name"]);
        $content = $wpdb->escape(strip_tags($_POST["content"]));
        $categories = $wpdb->escape($_POST["categories"]);
        $username = $wpdb->escape(strip_tags($_POST["username"]));
        $password = $wpdb->escape(strip_tags($_POST["password"]));
        $post_id = empty($post_id) ? $wpdb->escape($_POST["bepro_post_id"]) : $post_id;
        $cost = trim(addslashes(strip_tags($_POST["cost"])));
        $cost = str_replace(array("\$", ","), array("", ""), $cost);
        $cost = !is_numeric($cost) || $cost < 0 ? "NULL" : $cost;
        //Figure out user_id
        if (is_user_logged_in()) {
            $user_id = $user_data->ID;
        } elseif (isset($username) && !empty($password)) {
            $user_id = wp_create_user($username, $password, $email);
        }
        if (empty($user_id)) {
            $user_id = $default_user_id;
        }
        $user_id = apply_filters("bl_save_listing_user_id_overide", $user_id);
        if (!empty($user_id) && $user_id != 0) {
            if (empty($post_id)) {
                $post = array('post_author' => $user_id, 'post_content' => $content, 'post_status' => $default_status, 'post_title' => $item_name, 'post_type' => "bepro_listings");
                //Create post
                $post_id = wp_insert_post($post, $wp_error);
            } else {
                if (!is_admin()) {
                    $wpdb->query("UPDATE " . $wpdb->prefix . "posts SET post_content = '" . $content . "' WHERE ID=" . $post_id);
                }
            }
            if (empty($wp_error)) {
                $post_data = get_post($post_id);
                //setup custom bepro listing post categories
                if (!empty($categories)) {
                    wp_set_post_terms($post_id, $categories, 'bepro_listing_types');
                }
                //setup post images
                if ($num_images) {
                    //delete images
                    $counter = 0;
                    while ($counter < $num_images) {
                        if (is_numeric($_POST["delete_image_" . $counter]) && $post_data->post_author == $user_data->ID) {
                            wp_delete_attachment($_POST["delete_image_" . $counter], true);
                        }
                        $counter++;
                    }
                    $counter = 1;
                    $attachments = get_children(array('post_parent' => $post_id));
                    if (!function_exists("wp_generate_attachment_metadata")) {
                        require ABSPATH . 'wp-admin/includes/image.php';
                    }
                    if (!function_exists("media_upload_tabs")) {
                        require ABSPATH . 'wp-admin/includes/media.php';
                    }
                    while ($counter <= $num_images && count($attachments) <= $num_images) {
                        if (!empty($_FILES["bepro_form_image_" . $counter]) && !$_FILES["bepro_form_image_" . $counter]["error"]) {
                            $full_filename = $wp_upload_dir['path'] . "/" . $_FILES["bepro_form_image_" . $counter]["name"];
                            $check_move = @move_uploaded_file($_FILES["bepro_form_image_" . $counter]["tmp_name"], $full_filename);
                            if ($check_move) {
                                $filename = basename($_FILES["bepro_form_image_" . $counter]["name"]);
                                $filename = preg_replace('/\\.[^.]+$/', '', $filename);
                                $wp_filetype = wp_check_filetype(basename($full_filename), null);
                                $attachment = array('post_mime_type' => $wp_filetype['type'], 'post_title' => $filename, 'post_content' => '', 'post_status' => 'inherit');
                                $attach_id = wp_insert_attachment($attachment, $full_filename, $post_id);
                                $attach_data = wp_generate_attachment_metadata($attach_id, $full_filename);
                                wp_update_attachment_metadata($attach_id, $attach_data);
                                if ($counter == 1) {
                                    update_post_meta($post_id, '_thumbnail_id', $attach_id);
                                }
                            }
                        }
                        $counter++;
                    }
                }
                //manage lat/lon
                if (is_numeric($_POST['lat']) && is_numeric($_POST['lon'])) {
                    $lat = $_POST['lat'];
                    $lon = $_POST['lon'];
                } else {
                    $latlon = get_bepro_lat_lon();
                    $lat = $latlon["lat"];
                    $lon = $latlon["lon"];
                }
                $post_data = $_POST;
                $post_data["post_id"] = $post_id;
                $post_data["lat"] = $lat;
                $post_data["lon"] = $lon;
                $post_data["cost"] = $cost;
                $listing = $wpdb->get_row("SELECT id FROM " . $wpdb->prefix . BEPRO_LISTINGS_TABLE_NAME . " WHERE post_id =" . $post_id);
                if ($listing) {
                    $result = bepro_update_post($post_data);
                } else {
                    $result = bepro_add_post($post_data);
                }
                if (!$wp_error) {
                    $return_message = true;
                } else {
                    $return_message = false;
                }
            }
        } else {
            $return_message = false;
        }
    }
    if ($return_post_id) {
        return $post_id;
    }
    return $return_message;
}
function bepro_listings_save($post_id = false, $return_post_id = false)
{
    global $wpdb;
    if (!empty($_POST["save_bepro_listing"])) {
        //tie in for custom and addon error checking
        $check = apply_filters("scan_incoming_bl_listing", array());
        if (@$check && !empty($check)) {
            return false;
        }
        //get settings
        $wp_upload_dir = wp_upload_dir();
        $data = get_option("bepro_listings");
        $user_data = wp_get_current_user();
        $default_user_id = $data["default_user_id"];
        $success_message = $data["success_message"];
        $num_images = $data["num_images"];
        $query_type = $data["map_query_type"];
        $default_status = empty($data["default_status"]) ? "pending" : $data["default_status"];
        $return_message = false;
        //retrieve variables
        $item_name = addslashes(strip_tags($_POST["item_name"]));
        $content = is_admin() && is_user_logged_in() ? $_POST["content"] : addslashes(strip_tags(strip_shortcodes($_POST["content"])));
        $categories = $wpdb->escape($_POST["categories"]);
        $username = $wpdb->escape(strip_tags($_POST["username"]));
        $password = $wpdb->escape(strip_tags($_POST["password"]));
        $email = $wpdb->escape(strip_tags($_POST["email"]));
        $post_id = empty($post_id) ? $wpdb->escape($_POST["bepro_post_id"]) : $post_id;
        $cost = trim(addslashes(strip_tags($_POST["cost"])));
        $cost = str_replace(array("\$", ","), array("", ""), $cost);
        $cost = !is_numeric($cost) || $cost < 0 ? "NULL" : $cost;
        $duration = 0;
        $fee = 0;
        //Figure out user_id
        if (is_user_logged_in()) {
            $user_id = $user_data->ID;
        } elseif (isset($username) && !empty($password)) {
            $user_id = wp_create_user($username, $password, $email);
            if (is_numeric($user_id)) {
                wp_set_current_user($user_id);
            }
        }
        if (empty($user_id)) {
            $user_id = $default_user_id;
        }
        $user_id = apply_filters("bl_save_listing_user_id_overide", $user_id);
        //create listing in wordpress
        if (!empty($user_id) && $user_id != 0) {
            //Check for the post_id and create one if we don't have a valid one
            $new_post = false;
            if (empty($post_id)) {
                $new_post = true;
            }
            if (get_post($post_id)) {
                $wpdb->query("UPDATE " . $wpdb->prefix . "posts SET post_content = '" . $content . "' WHERE ID=" . $post_id);
            } else {
                $new_post = true;
            }
            //if post_id is empty or wasn't found then create a new one
            if ($new_post) {
                $post = array('post_author' => $user_id, 'post_content' => $content, 'post_status' => $default_status, 'post_title' => $item_name, 'post_type' => "bepro_listings");
                //Create post
                $post_id = wp_insert_post($post, $wp_error);
            }
            //once we figured out a post_id then proceed
            if (empty($wp_error) && is_numeric($post_id)) {
                $post_data = get_post($post_id);
                /*
                	//setup custom bepro listing post categories
                	1. If we get category names instead of ID's then we need to find the id's or create them
                	2. Once we have an array of category ID's, we can assign them to the current listing
                */
                if (!is_array($categories) && !empty($categories)) {
                    $categories = explode(",", $categories);
                    if (!is_numeric($categories[0])) {
                        $cat_array = array();
                        foreach ($categories as $category) {
                            $check_cat = wp_insert_term($category, "bepro_listing_types");
                            if (is_array($check_cat) && !isset($check_cat["errors"])) {
                                $cat_array[] = $check_cat["term_id"];
                            } elseif (is_wp_error($check_cat)) {
                                $cat = get_term_by("name", $category, "bepro_listing_types");
                                $cat_array[] = $cat->term_id;
                            }
                        }
                        $categories = $cat_array;
                    }
                }
                if (!empty($categories)) {
                    wp_set_post_terms($post_id, $categories, 'bepro_listing_types');
                }
                //setup post images
                if ($num_images) {
                    //delete images
                    $counter = 0;
                    while ($counter < $num_images) {
                        if (is_numeric($_POST["delete_image_" . $counter]) && $post_data->post_author == $user_data->ID) {
                            wp_delete_attachment($_POST["delete_image_" . $counter], true);
                        }
                        $counter++;
                    }
                    $counter = 1;
                    $attachments = get_children(array('post_parent' => $post_id));
                    if (!function_exists("wp_generate_attachment_metadata")) {
                        require ABSPATH . 'wp-admin/includes/image.php';
                    }
                    if (!function_exists("media_upload_tabs")) {
                        require ABSPATH . 'wp-admin/includes/media.php';
                    }
                    while ($counter <= $num_images && count($attachments) <= $num_images) {
                        if (!empty($_FILES["bepro_form_image_" . $counter]) && !$_FILES["bepro_form_image_" . $counter]["error"]) {
                            $full_filename = $wp_upload_dir['path'] . "/" . $_FILES["bepro_form_image_" . $counter]["name"];
                            $check_move = @move_uploaded_file($_FILES["bepro_form_image_" . $counter]["tmp_name"], $full_filename);
                            if ($check_move) {
                                $filename = basename($_FILES["bepro_form_image_" . $counter]["name"]);
                                $filename = preg_replace('/\\.[^.]+$/', '', $filename);
                                $wp_filetype = wp_check_filetype(basename($full_filename), null);
                                $attachment = array('post_mime_type' => $wp_filetype['type'], 'post_title' => $filename, 'post_content' => '', 'post_status' => 'inherit');
                                $attach_id = wp_insert_attachment($attachment, $full_filename, $post_id);
                                $attach_data = wp_generate_attachment_metadata($attach_id, $full_filename);
                                wp_update_attachment_metadata($attach_id, $attach_data);
                                if ($counter == 1) {
                                    update_post_meta($post_id, '_thumbnail_id', $attach_id);
                                }
                            }
                        }
                        $counter++;
                    }
                    if (!empty($data["show_imgs"])) {
                        BL_Meta_Box_Listing_Images::save($post_id, $post_after);
                    }
                }
                //manage lat/lon
                if (is_numeric($_POST['lat']) && is_numeric($_POST['lon'])) {
                    $lat = $_POST['lat'];
                    $lon = $_POST['lon'];
                } else {
                    $latlon = get_bepro_lat_lon();
                    if (sizeof($latlon) > 0) {
                        $lat = $latlon["lat"];
                        $lon = $latlon["lon"];
                    }
                }
                //prepare for save to BePro Listings tables
                $listing = bpl_get_listing_by_post_id($post_id);
                $post_status = $post_data->post_status;
                $post_data = $_POST;
                $post_data["post_id"] = $post_id;
                $post_data["lat"] = @$lat;
                $post_data["lon"] = @$lon;
                $post_data["cost"] = $cost;
                $package_id = is_numeric($_POST["bpl_package"]) ? $_POST["bpl_package"] : "";
                $bl_order_id = "";
                /*
                	Figuring out payment stuff if applicable to this listing.
                */
                //calculate cost and duration
                if (is_numeric($data["require_payment"]) && $data["require_payment"] > 0) {
                    //Get package cost and duration
                    if (!empty($data["require_payment"]) && $data["require_payment"] == 1) {
                        //if category already has an order ID then reuse it
                        if (@$listing && $listing->bl_order_id) {
                            $bl_order_id = $listing->bl_order_id;
                        } else {
                            $bl_order_id = bl_get_vacant_order_id($user_id, $data["require_payment"]);
                        }
                        //calculate for categories
                        $fee = bepro_get_total_cat_cost($post_id);
                        $duration = $data["cat_fee_duration"];
                        //If there is no cost but there is a duration set, then set the duration
                        if (@is_numeric($duration) && $duration != 0 && (!$fee || $fee == 0)) {
                            $expires = date('Y-m-d H:i:s', strtotime("+" . $duration . " days"));
                        }
                        bl_create_payment_order(array("bl_order_id" => $bl_order_id, "feature_id" => $post_id, "cust_user_id" => $user_id, "feature_type" => 1, "status" => 2, "expires" => $expires));
                    } else {
                        if (is_numeric($package_id) && !empty($data["require_payment"]) && $data["require_payment"] == 2) {
                            $pay_fee = true;
                            $status = 2;
                            // post status
                            //if we already created an order ID lets make some checks
                            if (@$listing && $listing->bl_order_id) {
                                $order = bl_get_payment_order($listing->bl_order_id);
                                //check order to see if its the same package selected
                                if (@$order->feature_id == $package_id) {
                                    $bl_order_id = $listing->bl_order_id;
                                    //set this listng as published since its paid
                                    if ($order->status == 1 && !empty($data["publish_after_payment"])) {
                                        remove_action('post_updated', "bepro_admin_save_details");
                                        wp_update_post(array("ID" => $post_id, "post_status" => "publish"));
                                        remove_action('post_updated', "bepro_admin_save_details");
                                        $pay_fee = false;
                                    }
                                } else {
                                    //go find/create a new order ID capable of accomodating this request
                                    $bl_order_id = bl_get_vacant_order_id($user_id, $data["require_payment"], $package_id);
                                }
                            } else {
                                $bl_order_id = bl_get_vacant_order_id($user_id, $data["require_payment"], $package_id);
                                $order = bl_get_payment_order($bl_order_id);
                                if ($order->status == 1 && !empty($data["publish_after_payment"])) {
                                    remove_action('post_updated', "bepro_admin_save_details");
                                    wp_update_post(array("ID" => $post_id, "post_status" => "publish"));
                                    remove_action('post_updated', "bepro_admin_save_details");
                                    $pay_fee = false;
                                }
                            }
                            if ($pay_fee) {
                                $fee = get_post_meta($package_id, "package_cost", true);
                            } else {
                                //this is paid so active status
                                $status = 1;
                            }
                            //Calculate expiration
                            $duration = get_post_meta($package_id, "package_duration", true);
                            if (@is_numeric($duration) && $duration != 0 && (!$fee || $fee == 0)) {
                                $expires = date('Y-m-d H:i:s', strtotime("+" . $duration . " days"));
                            }
                            //add info to order table
                            bl_create_payment_order(array("bl_order_id" => $bl_order_id, "feature_id" => $package_id, "cust_user_id" => $user_id, "feature_type" => 2, "status" => $status, "expires" => $expires));
                        }
                    }
                    //save purchase association info to bepro listing
                    $post_data["bl_order_id"] = $bl_order_id;
                }
                if ($listing) {
                    $result = bepro_update_post($post_data);
                } else {
                    $result = bepro_add_post($post_data);
                }
                if ($result === false) {
                    $return_message = false;
                } else {
                    $return_message = true;
                    //everything updated ok
                }
            }
        } else {
            $return_message = false;
        }
    }
    if ($return_post_id) {
        return $post_id;
    }
    return $return_message;
}