Пример #1
0
/**
 * AJAX Function renders payment form in [adverts_add] third step.
 * 
 * This function renders a proper payment form based on $_REQUEST['gateway'] value
 * and echos it to the browser as a JSON code.
 * 
 * @since 0.1
 * @return void 
 */
function adext_payments_ajax_render()
{
    $gateway_name = adverts_request('gateway');
    $gateway = adext_payment_gateway_get($gateway_name);
    $listing_id = adverts_request("listing_id");
    $response = null;
    $data = array();
    $data["page_id"] = adverts_request("page_id");
    $data["listing_id"] = adverts_request("listing_id");
    $data["object_id"] = adverts_request("object_id");
    $data["payment_for"] = "post";
    $data["gateway_name"] = $gateway_name;
    $data["bind"] = array();
    foreach (adverts_request('form', array()) as $item) {
        $data["bind"][$item["name"]] = $item["value"];
    }
    $form = new Adverts_Form();
    $form->load($gateway["form"]["payment_form"]);
    $form->bind($data["bind"]);
    if (isset($data["bind"]) && !empty($data["bind"])) {
        $isValid = $form->validate();
        if ($isValid) {
            $pricing = get_post($data["listing_id"]);
            $price = get_post_meta($listing_id, "adverts_price", true);
            $payment_data = array('post_title' => $form->get_value("adverts_person"), 'post_content' => '', 'post_status' => 'pending', 'post_type' => 'adverts-payment');
            $meta = array("pricing" => array("post_title" => $pricing->post_title, "visible" => get_post_meta($pricing->ID, "adverts_visible", true)));
            $payment_id = wp_insert_post($payment_data);
            update_post_meta($payment_id, 'adverts_person', $form->get_value('adverts_person'));
            update_post_meta($payment_id, 'adverts_email', $form->get_value('adverts_email'));
            update_post_meta($payment_id, '_adverts_user_ip', adverts_get_ip());
            update_post_meta($payment_id, '_adverts_user_id', wp_get_current_user()->ID);
            update_post_meta($payment_id, '_adverts_object_id', $data["object_id"]);
            update_post_meta($payment_id, '_adverts_pricing_id', $data["listing_id"]);
            update_post_meta($payment_id, '_adverts_payment_gateway', $data["gateway_name"]);
            update_post_meta($payment_id, '_adverts_payment_for', $data["payment_for"]);
            update_post_meta($payment_id, '_adverts_payment_paid', "0");
            update_post_meta($payment_id, '_adverts_payment_total', $price);
            update_post_meta($payment_id, '_adverts_payment_meta', $meta);
            $data["price"] = $price;
            $data["form"] = $form->get_values();
            $data["payment_id"] = $payment_id;
            $data = apply_filters("adverts_payments_order_create", $data);
            $response = call_user_func($gateway["callback"]["render"], $data);
        }
    }
    if ($response === null) {
        ob_start();
        include ADVERTS_PATH . 'templates/form.php';
        $html_form = ob_get_clean();
        $response = array("result" => 0, "html" => $html_form, "execute" => null);
    }
    echo json_encode($response);
    exit;
}
Пример #2
0
/**
 * Generates HTML for [adverts_add] shortcode
 * 
 * @param array $atts Shortcode attributes
 * @since 0.1
 * @return string Fully formatted HTML for "post ad" form.
 */
function shortcode_adverts_add($atts)
{
    wp_enqueue_style('adverts-frontend');
    wp_enqueue_style('adverts-icons');
    wp_enqueue_style('adverts-icons-animate');
    wp_enqueue_script('adverts-frontend');
    wp_enqueue_script('adverts-auto-numeric');
    extract(shortcode_atts(array('name' => 'default', 'moderate' => false), $atts));
    include_once ADVERTS_PATH . 'includes/class-html.php';
    include_once ADVERTS_PATH . 'includes/class-form.php';
    $form = new Adverts_Form(Adverts::instance()->get("form"));
    $valid = null;
    $error = array();
    $info = array();
    $bind = array();
    $content = "";
    $adverts_flash = array("error" => array(), "info" => array());
    $action = apply_filters('adverts_action', adverts_request("_adverts_action", ""), __FUNCTION__);
    $post_id = adverts_request("_post_id", null);
    $post_id = $post_id > 0 ? $post_id : null;
    // $post_id hijack attempt protection here!
    if ($post_id > 0 && get_post($post_id)->post_author == get_current_user_id()) {
        // if post was already saved in DB (for example for preview) then load it.
        $post = get_post($post_id);
        // bind data by field name
        foreach ($form->get_fields() as $f) {
            $bind[$f["name"]] = get_post_meta($post_id, $f["name"], true);
        }
        $bind["post_title"] = $post->post_title;
        $bind["post_content"] = $post->post_content;
        $bind["advert_category"] = array();
        $terms = get_the_terms($post_id, 'advert_category');
        if (is_array($terms)) {
            foreach ($terms as $term) {
                $bind["advert_category"][] = $term->term_id;
            }
        }
    } elseif (is_user_logged_in()) {
        $bind["adverts_person"] = wp_get_current_user()->display_name;
        $bind["adverts_email"] = wp_get_current_user()->user_email;
    }
    if ($action == "") {
        // show post ad form page
        wp_enqueue_style('adverts-frontend-add');
        $bind["_post_id"] = $post_id;
        $bind["_adverts_action"] = "preview";
        $form->bind($bind);
        // adverts/templates/add.php
        ob_start();
        include apply_filters("adverts_template_load", ADVERTS_PATH . 'templates/add.php');
        $content = ob_get_clean();
    } elseif ($action == "preview") {
        // show preview page
        wp_enqueue_style('adverts-frontend-add');
        $form->bind((array) stripslashes_deep($_POST));
        $valid = $form->validate();
        $adverts_flash = array("error" => $error, "info" => $info);
        // Allow to preview only if data in the form is valid.
        if ($valid) {
            $init = array("post" => array("ID" => $post_id, "post_name" => sanitize_title($form->get_value("post_title")), "post_type" => "advert", "post_author" => get_current_user_id(), "post_date" => current_time('mysql'), "post_date_gmt" => current_time('mysql', 1), "post_status" => adverts_tmp_post_status(), "guid" => ""), "meta" => array());
            if (adverts_config("config.visibility") > 0) {
                $init["meta"]["_expiration_date"] = array("value" => strtotime(current_time('mysql') . " +" . adverts_config("config.visibility") . " DAYS"), "field" => array("type" => "adverts_field_hidden"));
            }
            // Save post as temporary in DB
            $post_id = Adverts_Post::save($form, $post_id, $init);
            if (is_wp_error($post_id)) {
                $error[] = $post_id->get_error_message();
                $valid = false;
            }
            $adverts_flash = array("error" => $error, "info" => $info);
            // adverts/templates/add-preview.php
            ob_start();
            include apply_filters("adverts_template_load", ADVERTS_PATH . 'templates/add-preview.php');
            $content = ob_get_clean();
        } else {
            $error[] = __("There are errors in your form. Please correct them before proceeding.", "adverts");
            $adverts_flash = array("error" => $error, "info" => $info);
            // adverts/templates/add.php
            ob_start();
            include apply_filters("adverts_template_load", ADVERTS_PATH . 'templates/add.php');
            $content = ob_get_clean();
        }
        // endif $valid
    } elseif ($action == "save") {
        // Save form in the database
        $post_id = wp_update_post(array("ID" => $post_id, "post_status" => $moderate == "1" ? 'pending' : 'publish'));
        $info[] = __("Thank you for submitting your ad!", "adverts");
        $adverts_flash = array("error" => $error, "info" => $info);
        if (!is_user_logged_in() && get_post_meta($post_id, "_adverts_account", true) == 1) {
            adverts_create_user_from_post_id($post_id, true);
        }
        // adverts/templates/add-save.php
        ob_start();
        include apply_filters("adverts_template_load", ADVERTS_PATH . 'templates/add-save.php');
        $content = ob_get_clean();
    }
    return apply_filters("adverts_action_{$action}", $content, $form);
}
Пример #3
0
/**
 * Renders Payments History List and Edit Page.
 * 
 * The page is rendered in wp-admin / Classifieds / Payments History panel
 * 
 * @global wpdb $wpdb
 * @global wp_locale $wp_locale
 * 
 * @since 0.1
 * @return void
 */
function adext_payments_page_history()
{
    global $wpdb, $wp_locale;
    wp_enqueue_style('adverts-admin');
    $flash = Adverts_Flash::instance();
    if (adverts_request("add")) {
        // Do nothing currently users cannot add pricing manually.
    } elseif (adverts_request("edit")) {
        // Display payment edit page.
        $payment = get_post(adverts_request("edit"));
        $form = new Adverts_Form();
        $form->load(Adverts::instance()->get("form_payments_history"));
        $form->bind(Adverts_Post::to_array($payment));
        $gateway_name = get_post_meta($payment->ID, '_adverts_payment_gateway', true);
        $gateway = adext_payment_gateway_get($gateway_name);
        if (!$gateway) {
            $msg = sprintf(__("Payment Method [%s] assigned to this Payment does not exist or was disabled.", "adverts"), $gateway_name);
            $flash->add_error($msg);
        }
        if (isset($_POST) && !empty($_POST)) {
            $form->bind(stripslashes_deep($_POST));
            $valid = $form->validate();
            if ($valid) {
                $status_new = $form->get_value("post_status");
                $status_old = $payment->post_status;
                $post_id = Adverts_Post::save($form, $payment);
                if (is_numeric($post_id) && $post_id > 0 && $status_old != $status_new) {
                    do_action("adverts_payment_" . $status_new, $payment);
                    $text = __('<strong>%1$s</strong> changed payment status to <strong>%2$s</strong>', 'adverts');
                    $message = sprintf($text, wp_get_current_user()->user_login, $status_new);
                    adext_payments_log($post_id, $message);
                    $payment = get_post($post_id);
                }
                if (is_wp_error($post_id)) {
                    $flash->add_error($post_id->get_error_message());
                } elseif ($post_id === 0) {
                    $flash->add_error(__("There was an error while saving pricing in database.", "adverts"));
                } else {
                    $flash->add_info(__("Payment updated.", "adverts"));
                }
            } else {
                $flash->add_error(__("There are errors in your form.", "adverts"));
            }
        }
        include ADVERTS_PATH . 'addons/payments/admin/payment-history-edit.php';
    } elseif (adverts_request('delete')) {
        // Delete Payment
        $post = get_post(adverts_request('delete'));
        $i = 0;
        if (!$post || $post->post_type != 'adverts-payment') {
            wp_die(__('Adverts Payment with given ID does not exist.', 'adverts'));
        }
        foreach (get_children($post) as $child) {
            wp_delete_attachment($child->ID, true);
            $i++;
        }
        $flash->add_info(sprintf(_n("1 Payment deleted.", "%s Payments deleted.", $i, "adverts"), $i));
        wp_delete_post($post->ID, true);
        wp_redirect(remove_query_arg(array('delete', 'noheader', 'pg')));
        exit;
    } elseif (adverts_request('filter_action')) {
        // Apply filters and return to payments history list
        $url = remove_query_arg(array('delete', 'noheader', 'pg'));
        $url = add_query_arg(array('month' => adverts_request('month')), $url);
        wp_redirect($url);
        exit;
    } elseif (adverts_request('action') || adverts_request('action2')) {
        // Apply bulk actions and return to payments history list
        $action = adverts_request('action');
        if (empty($action)) {
            $action = adverts_request('action2');
        }
        $item = adverts_request('item');
        foreach ($item as $id) {
            if ($action == "delete") {
                foreach (get_children($id) as $child) {
                    wp_delete_attachment($child->ID, true);
                }
                wp_delete_post($id, true);
                $flash->add_info(__("Payments deleted.", "adverts"));
            } elseif (stripos($action, "set-status-") === 0) {
                $status_old = get_post_status($id);
                $status_new = str_replace("set-status-", "", $action);
                $status_obj = get_post_status_object($status_new);
                if ($status_old != $status_new) {
                    wp_update_post(array("ID" => $id, "post_status" => $status_new));
                    do_action("adverts_payment_" . $status_new, $payment);
                }
                $flash->add_info(sprintf(__("Status for selected Payments was changed to: %s"), $status_obj->label));
            }
        }
        wp_redirect(remove_query_arg(array('delete', 'noheader', 'pg')));
        exit;
    } else {
        // Display Payments History
        $status_list = array("pending" => 0, "completed" => 0, "failed" => 0, "refunded" => 0);
        foreach ($status_list as $k => $v) {
            $sql = "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_status = %s AND post_type = 'adverts-payment'";
            $status_list[$k] = (int) $wpdb->get_var($wpdb->prepare($sql, $k));
        }
        $sql = "SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month FROM {$wpdb->posts} WHERE post_type = %s ORDER BY post_date DESC";
        $months_list = $wpdb->get_results($wpdb->prepare($sql, 'adverts-payment'));
        $months = array();
        foreach ($months_list as $m) {
            $months[] = array("value" => $m->year . "-" . $m->month, "label" => sprintf(__('%1$s %2$d'), $wp_locale->get_month($m->month), $m->year));
        }
        $month = adverts_request("month", "");
        $filter = adverts_request("status", "");
        $loop_params = array('post_type' => 'adverts-payment', 'posts_per_page' => 20, 'paged' => adverts_request('pg', 1));
        if ($filter) {
            $loop_params['post_status'] = $filter;
        }
        if ($month == "this-month") {
            $before = date('Y-m-d H:i:s', strtotime('last day of this month', current_time('timestamp')));
            $after = date('Y-m-d H:i:s', strtotime('first day of this month', current_time('timestamp')));
            $loop_params['date_query'] = array(array('before' => $before, 'after' => $after, 'inclusive' => true));
        } elseif ($month == "last-month") {
            $before = date('Y-m-d H:i:s', strtotime('last day of last month', current_time('timestamp')));
            $after = date('Y-m-d H:i:s', strtotime('first day of last month', current_time('timestamp')));
            $loop_params['date_query'] = array(array('before' => $before, 'after' => $after, 'inclusive' => true));
        } elseif (!empty($month)) {
            $time = strtotime($month . "-10");
            $before = date('Y-m-d', strtotime('last day of this month', $time));
            $after = date('Y-m-d H:i:s', strtotime('first day of this month', $time));
            $loop_params['date_query'] = array(array('before' => '', 'after' => '', 'inclusive' => true));
        }
        $loop = new WP_Query($loop_params);
        include ADVERTS_PATH . 'addons/payments/admin/payment-history-list.php';
    }
}
Пример #4
0
/**
 * Binds default payment_listing_type value
 * 
 * @see adext_payments_form_load() Function which adds this function to filters list
 * @uses adverts_form_bind Filter which exexutes this function
 * 
 * @since 1.0
 * @access public
 * @param Adverts_Form $form
 * @return Adverts_Form
 */
function adext_payments_form_bind(Adverts_Form $form)
{
    if (!$form->get_value("payments_listing_type")) {
        $form->set_value("payments_listing_type", adverts_config('payments.default_pricing'));
    }
    return $form;
}