function mcs_payment_form()
{
    $ret = $form = '';
    if (isset($_GET['response_code'])) {
        $mcs = $_GET['response_code'];
        $provider = get_option('mcs_gateway') == 2 ? 'Authorize.net' : 'PayPal';
        switch ($mcs) {
            case 'thanks':
                $ret = "<p class='notice'>" . sprintf(__("Thank you for your purchase! You can view your purchase information at %s. You will receive an email with your payment key once your payment is finalized.", 'my-calendar-submissions'), $provider) . "</p>";
                break;
            case 'cancel':
                $ret = __("Sorry that you decided to cancel your purchase! Contact us if you have any questions!", 'my-calendar-submissions');
                break;
        }
    }
    if (mcs_payment_required()) {
        $price = mcs_get_price(is_user_logged_in());
        $currency = get_option('mcs_currency');
        $quantity = get_option('mcs_quantity');
        $discounts = mcs_check_discount();
        $discount_rate = (int) $discounts['rate'];
        $discount = $discount_rate != 0 ? true : false;
        if (isset($_GET['response_code'])) {
            $message = '';
        } else {
            $message = wpautop(jd_draw_template(array('price' => $price, 'currency' => $currency, 'discount' => $discount_rate, 'begins' => $discounts['begins'], 'ends' => $discounts['ends']), get_option('mcs_payment_message')));
        }
        $form = "<div class='mc-payments-form " . get_option('mcs_gateway') . "'>\n\t\t {$ret}\n\t\t {$message}";
        $nonce = wp_create_nonce('mcs-payments-nonce');
        if (get_option('mcs_gateway') == 'authorizenet') {
            if (get_option('mcs_quantity') != 'true' || (get_option('mcs_quantity') == 'true' && isset($_POST['mcs_quantity']) || isset($_GET['response_code']))) {
                require_once 'gateways/AuthorizeNet.php';
                // The SDK
                $url = mcs_replace_http(add_query_arg('mcsipn', 'true', get_permalink()));
                $rand = time() . rand(100000, 999999);
                $mcs_quantity = isset($_POST['mcs_quantity']) ? (int) $_POST['mcs_quantity'] : 1;
                $price = mcs_calculate_price($mcs_quantity, $price, $discount, $discount_rate);
                $form .= AuthorizeNetDPM::directPost($url, $price, $rand, $nonce);
            } else {
                $form .= mcs_set_quantity_form($price);
            }
        } else {
            $form .= mcs_paypal_form($price, $currency, $discount_rate, $discounts, $discount, $quantity);
        }
        $form .= "</div>";
    }
    return $form;
}
function mcs_processor($post)
{
    if (isset($post['mcs_submission'])) {
        $attach_id = false;
        $nonce = $post['event_nonce_name'];
        if (!wp_verify_nonce($nonce, 'event_nonce')) {
            return;
        }
        // honeypot - only bots should complete this field;
        $honeypot = isset($_POST['your_name']) && $_POST['your_name'] != '' ? true : false;
        if ($honeypot) {
            return;
        }
        // if files being uploaded, upload file and convert to a string for $post
        if (!empty($_FILES['event_image'])) {
            require_once ABSPATH . '/wp-admin/includes/file.php';
            require_once ABSPATH . '/wp-admin/includes/image.php';
            $file = $_FILES['event_image'];
            $upload = wp_handle_upload($file, array('test_form' => false));
            if (!isset($upload['error']) && isset($upload['file'])) {
                $filetype = wp_check_filetype(basename($upload['file']), null);
                $title = $file['name'];
                $ext = strrchr($title, '.');
                $title = $ext !== false ? substr($title, 0, -strlen($ext)) : $title;
                $attachment = array('post_mime_type' => $filetype['type'], 'post_title' => addslashes($title), 'post_content' => '', 'post_status' => 'inherit');
                $alt = isset($_POST['event_image_alt']) ? sanitize_text_field($_POST['event_image_alt']) : '';
                $attach_id = wp_insert_attachment($attachment, $upload['file']);
                update_post_meta($attach_id, '_wp_attachment_image_alt', $alt);
                $attach_data = wp_generate_attachment_metadata($attach_id, $upload['file']);
                wp_update_attachment_metadata($attach_id, $attach_data);
                $post['event_image'] = $upload['url'];
            }
        }
        // end file upload
        $check = mc_check_data('add', $post, 0);
        $message = '';
        if (mcs_payment_required()) {
            $key = isset($post['mcs_key']) ? $post['mcs_key'] : false;
            $quantity = mcs_check_key($key);
            if (!$quantity) {
                $reason = mcs_key_status($key);
                return array("<div class='notice error'><p>" . sprintf(__('That was not a valid payment key: %s', 'my-calendar-submissions'), $reason) . "</p></div>", $check[1], false);
            } else {
                $message = sprintf("<div class='notice error'><p>" . __('%d submissions remaining with this payment key.', 'my-calendar-submissions') . "</p></div>", $quantity - 1);
            }
        }
        if ($check[0]) {
            if (!isset($_POST['event_edit'])) {
                $response = my_calendar_save('add', $check);
                $action = 'add';
            } else {
                $response = my_calendar_save('edit', $check, (int) $_POST['event_edit']);
                $action = 'edit';
            }
            $event_id = $response['event_id'];
            $response = $response['message'];
            $event = mc_get_event_core($event_id);
            $post_id = $event->event_post;
            set_post_thumbnail($post_id, $attach_id);
            if ($message != '') {
                $response .= " {$message}";
            }
            $return = array($response, array(), true);
        } else {
            $return = array($check[3], $check[1], false);
            return $return;
        }
        if ($event_id) {
            $name = $post['mcs_name'];
            $email = $post['mcs_email'];
            if (mcs_payment_required()) {
                // Note: payments will be processed on both submissions & on edits.
                mcs_update_key_quantity($key, $quantity);
            }
            // if no errors and NOT SPAM send notifications.
            if (mc_event_is_spam($event_id)) {
                do_action('mcs_spam_submission', $name, $email, $event_id);
            } else {
                do_action('mcs_complete_submission', $name, $email, $event_id, $action);
            }
        }
        return $return;
    } else {
        return false;
    }
}