444 lines
17 KiB
PHP
444 lines
17 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Checkout Form
|
|
*
|
|
* This template can be overridden by copying it to yourtheme/woocommerce/checkout/form-checkout.php.
|
|
*
|
|
* HOWEVER, on occasion WooCommerce will need to update template files and you
|
|
* (the theme developer) will need to copy the new files to your theme to
|
|
* maintain compatibility. We try to do this as little as possible, but it does
|
|
* happen. When this occurs the version of the template file will be bumped and
|
|
* the readme will list any important changes.
|
|
*
|
|
* @see https://docs.woocommerce.com/document/template-structure/
|
|
* @package WooCommerce\Templates
|
|
* @version 3.5.0
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
do_action('woocommerce_before_checkout_form', $checkout);
|
|
|
|
// If checkout registration is disabled and not logged in, the user cannot checkout.
|
|
if (!$checkout->is_registration_enabled() && $checkout->is_registration_required() && !is_user_logged_in()) {
|
|
echo esc_html(apply_filters('woocommerce_checkout_must_be_logged_in_message', __('You must be logged in to checkout.', 'woocommerce')));
|
|
return;
|
|
}
|
|
|
|
?>
|
|
<div id='v-app'>
|
|
<form name="checkout" method="post" class="checkout woocommerce-checkout" action="<?php echo esc_url(wc_get_checkout_url()); ?>" enctype="multipart/form-data">
|
|
|
|
<?php if ($checkout->get_checkout_fields()) : ?>
|
|
<?php do_action('woocommerce_checkout_before_customer_details'); ?>
|
|
|
|
<div class="col2-set" id="customer_details">
|
|
<div class="col-1">
|
|
<div class="form-steps">
|
|
<div class="step-1" v-show="step === 'step-1'">
|
|
<?php do_action('woocommerce_checkout_billing'); ?>
|
|
<?php do_action('woocommerce_checkout_shipping'); ?>
|
|
|
|
<a href="#" class="button--primary" @click.prevent="switchStep">Review Order</a>
|
|
</div>
|
|
|
|
<div class="step-2" v-show="step === 'step-2'">
|
|
<p>Please review the information below, and enter your payment details to complete your order.</p>
|
|
<hr />
|
|
<div class="d-flex justify-content-between">
|
|
<h4>1. Subscriber Information</h4>
|
|
<a href="#" @click.prevent="switchStep">Edit</a>
|
|
</div>
|
|
<p><strong>Name (Person using the service):</strong><br />
|
|
{{ subscriber_first_name }} {{ subscriber_last_name }}<br />
|
|
<strong>Gender:</strong><br />
|
|
{{ subscriber_gender }}<br />
|
|
<div class="d-flex justify-content-between">
|
|
<h4>Subscriber Contact Information</h4>
|
|
<a href="#" @click.prevent="switchStep">Edit</a>
|
|
</div>
|
|
<p v-html="subscriber_address_preview"></p>
|
|
|
|
<div class="d-flex justify-content-between">
|
|
<h4>2. Billing Address</h4>
|
|
<a href="#" @click.prevent="switchStep">Edit</a>
|
|
</div>
|
|
<p v-html="billing_address_preview"></p>
|
|
|
|
<div class="d-flex justify-content-between">
|
|
<h4>3. Shipping Address</h4>
|
|
<a href="#" @click.prevent="switchStep">Edit</a>
|
|
</div>
|
|
<p v-html="shipping_address_preview"></p>
|
|
|
|
<h4>4. Payment Information</h4>
|
|
<p>Your payment method won't be charged until after you've spoken to one of our sales representivites.</p>
|
|
|
|
<p class="form-row my-field-class orm-row-wide" id="card_number_field" data-priority=""><label for="card_number" class="">Credit Card <span class="optional">(optional)</span></label><span class="woocommerce-input-wrapper"><cleave v-model="card_number" type="tel" v-model="form.cardNumber" class="form-control" :options="options.creditCard" type="number" class="input-text" name="card_number" id="card_number" placeholder="" ></span></p>
|
|
<span class="cc_type"></span>
|
|
|
|
<p class="form-row my-field-class orm-row-wide" id="expiration_month_field" data-priority=""><label for="expiration_month" class="">Expiration Month <span class="optional">(optional)</span></label><span class="woocommerce-input-wrapper"><input type="number" class="input-text " name="expiration_month" id="expiration_month" placeholder="" value="" v-model="expiration_month" min="1" max="12" step="1" /></span></p>
|
|
|
|
|
|
<p class="form-row my-field-class orm-row-wide" id="expiration_year_field" data-priority=""><label for="expiration_year" class="">Expiration Year <span class="optional">(optional)</span></label><span class="woocommerce-input-wrapper"><input type="number" class="input-text " name="expiration_year" id="expiration_year" placeholder="" value="" v-model="expiration_year" min="2024" max="2032" step="1" /></span></p>
|
|
|
|
<div class="d-flex mt-3">
|
|
<input class="mt-2 me-2" type="checkbox" v-model="i_agree" />
|
|
<p>By checking this box, I am confirming that I have read and agree with the <a href="/terms-of-use/" target="_blank">terms of use</a> associated with placing this order. Lifeline values your privacy. Please read our <a href="/privacy-policy/" target="_blank">privacy policy</a> form for more information.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-2">
|
|
<div class="d-flex ms-5">
|
|
<?php echo generateCartSummary(false); ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php do_action('woocommerce_checkout_after_customer_details'); ?>
|
|
|
|
<?php endif; ?>
|
|
|
|
<?php do_action('woocommerce_checkout_before_order_review_heading'); ?>
|
|
|
|
<h3 id="order_review_heading"><?php esc_html_e('Your order', 'woocommerce'); ?></h3>
|
|
|
|
<?php do_action('woocommerce_checkout_before_order_review'); ?>
|
|
|
|
<div id="order_review" class="woocommerce-checkout-review-order" style="position: relative;">
|
|
<div v-show="!canCheckOut" style="width: 100%; height: 100%; background: white; z-index: 1; position: absolute; opacity: 0.75;"></div>
|
|
|
|
<?php do_action('woocommerce_checkout_order_review'); ?>
|
|
</div>
|
|
|
|
<?php do_action('woocommerce_checkout_after_order_review'); ?>
|
|
|
|
</form>
|
|
</div>
|
|
|
|
<?php do_action('woocommerce_after_checkout_form', $checkout); ?>
|
|
|
|
|
|
<style>
|
|
#place_order {
|
|
border: none;
|
|
padding: 8px 20px;
|
|
background-color: #F5AD23 !important;
|
|
color: #fff !important;
|
|
font-size: 25px;
|
|
font-weight: 600;
|
|
text-decoration: none;
|
|
box-sizing: border-box;
|
|
display: inline-block;
|
|
line-height: 36px;
|
|
}
|
|
.woocommerce-billing-fields > h3 {
|
|
/* hide the billing details headline */
|
|
display: none;
|
|
visibility: hidden;
|
|
}
|
|
|
|
body.checkout-step-1 #order_review, body.checkout-step-1 #order_review_heading {
|
|
visibility: hidden;
|
|
display: none;
|
|
}
|
|
|
|
span.woocommerce-input-wrapper {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
span.woocommerce-input-wrapper label {
|
|
padding: 0 20px 0 5px;
|
|
}
|
|
tr.woocommerce-shipping-totals {
|
|
display: none;
|
|
visibility: hidden;
|
|
}
|
|
#caregiver_authorized_field label {
|
|
line-height: 1.2;
|
|
cursor: pointer;
|
|
}
|
|
#caregiver_authorized_field span {
|
|
display: none;
|
|
visibility: hidden;
|
|
}
|
|
span.optional {
|
|
display: none;
|
|
visibility: hidden;
|
|
}
|
|
#order_review_heading, .woocommerce table.shop_table {
|
|
display: none;
|
|
visibility: hidden;
|
|
}
|
|
.cc_type {
|
|
float: right;
|
|
top: -40px;
|
|
position: relative;
|
|
right: 15px;
|
|
}
|
|
</style>
|
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/cleave.js@1"></script>
|
|
<script src="https://unpkg.com/vue@3.2/dist/vue.global.prod.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/vue-cleave-component@3"></script>
|
|
|
|
<script type="module">
|
|
|
|
// import { createApp } from 'vue'
|
|
|
|
var cctype = null;
|
|
|
|
const app = Vue.createApp({
|
|
data() {
|
|
return {
|
|
step: "",
|
|
subscriber_first_name: "",
|
|
subscriber_last_name: "",
|
|
subscriber_gender: "male",
|
|
subscriber_birthdate: "1950-01-01",
|
|
subscriber_address_1: "",
|
|
subscriber_address_2: "",
|
|
subscriber_zip: "",
|
|
subscriber_city: "",
|
|
subscriber_state: "",
|
|
subscriber_email: "",
|
|
subscriber_phone: "",
|
|
show_caregiver_form: "true",
|
|
caregiver_relation: "",
|
|
caregiver_first_name: "",
|
|
caregiver_last_name: "",
|
|
caregiver_email: "",
|
|
caregiver_phone: "",
|
|
caregiver_authorized: "false",
|
|
caregiver_authorized_box: false,
|
|
card_number: "",
|
|
expiration_month: "",
|
|
expiration_year: "",
|
|
i_agree: false,
|
|
shipToADifferentAddress: true,
|
|
billing_address_preview: "",
|
|
shipping_address_preview: "",
|
|
SESSpromoid: "",
|
|
SESSpromotion_description: "",
|
|
SESScoupon_code: "",
|
|
allJQueryFieldsAreGood: false,
|
|
appliedCoupons: "",
|
|
form: {
|
|
cardNumber: null,
|
|
date: null,
|
|
|
|
},
|
|
options: {
|
|
creditCard: {
|
|
creditCard: true,
|
|
delimiter: '',
|
|
onCreditCardTypeChanged: function(type) {
|
|
console.log("onCreditCardTypeChanged", type);
|
|
if(type=="visa" ){
|
|
cctype = "Visa";
|
|
} else if (type=="mastercard") {
|
|
cctype = "MasterCard";
|
|
} else if (type=="amex") {
|
|
cctype = "American Express";
|
|
} else if (type=="discover") {
|
|
cctype = "Discover";
|
|
}
|
|
document.querySelector('.cc_type').innerHTML = '<input type="hidden" name="creditcard_type" id="creditcard_type" value="'+cctype+'"><img aria-hidden="true" src="/wp-content/themes/lifeline/images/' + type +'.png" style="width: 50px;">';
|
|
}
|
|
},
|
|
date: {
|
|
date: true,
|
|
datePattern: ['d', 'm', 'Y'],
|
|
delimiter: '/',
|
|
},
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
subscriber_address_preview: function() {
|
|
var output = this.subscriber_first_name + " " + this.subscriber_last_name + "<br />" + this.subscriber_address_1;
|
|
if (this.subscriber_address_2) {
|
|
output = output + "<br />" + this.subscriber_address_2;
|
|
}
|
|
output = output + "<br />" + this.subscriber_city + ", " + this.subscriber_state + " " + this.subscriber_zip;
|
|
if (this.subscriber_phone) {
|
|
output = output + "<br />" + this.subscriber_phone;
|
|
}
|
|
if (this.subscriber_email) {
|
|
output = output + "<br />" + this.subscriber_email;
|
|
}
|
|
|
|
return output;
|
|
},
|
|
can_proceed_to_step_two: function() {
|
|
var requiredFields = [
|
|
"subscriber_first_name",
|
|
"subscriber_last_name",
|
|
"subscriber_address_1",
|
|
"subscriber_city",
|
|
"subscriber_state",
|
|
"subscriber_zip",
|
|
];
|
|
for (var i = 0; i < requiredFields.length; i++) {
|
|
var key = requiredFields[i];
|
|
|
|
if (!this[key]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return this.allJQueryFieldsAreGood;
|
|
},
|
|
canCheckOut: function() {
|
|
if (this.card_number.length == 0) {
|
|
return false;
|
|
}
|
|
if (this.expiration_month.length == 0) {
|
|
return false;
|
|
}
|
|
if (this.expiration_year.length == 0) {
|
|
return false;
|
|
}
|
|
return this.i_agree;
|
|
}
|
|
},
|
|
methods: {
|
|
checkAllJQueryFieldsAreGood: function() {
|
|
var fieldIDs = [
|
|
"billing_first_name",
|
|
"billing_last_name",
|
|
"billing_address_1",
|
|
"billing_city",
|
|
"billing_postcode",
|
|
"billing_phone",
|
|
"billing_email"
|
|
];
|
|
|
|
for (var i = 0; i < fieldIDs.length; i++) {
|
|
var id = fieldIDs[i];
|
|
|
|
if ($("#"+id).val().length === 0) {
|
|
this.allJQueryFieldsAreGood = false;
|
|
return;
|
|
}
|
|
}
|
|
this.allJQueryFieldsAreGood = true;
|
|
},
|
|
getBillingFields: function() {
|
|
var output = $("#billing_first_name").val() + " " + $("#billing_last_name").val() + "<br />";
|
|
if ($("#billing_company").val()) {
|
|
output += $("#billing_company").val() + "<br />";
|
|
}
|
|
output += $("#billing_address_1").val() + "<br />";
|
|
if ($("#billing_address_2").val()) {
|
|
output += $("#billing_address_2").val() + "<br />";
|
|
}
|
|
output += $("#billing_city").val() + ", " + $("#billing_state").val() + "<br />";
|
|
output += $("#select2-billing_country-container").text() + "<br />";
|
|
if ($("#billing_phone").val()) {
|
|
output += $("#billing_phone").val() + "<br />";
|
|
}
|
|
if ($("#billing_email").val()) {
|
|
output += $("#billing_email").val() + "<br />";
|
|
}
|
|
this.billing_address_preview = output;
|
|
},
|
|
getShippingFields: function() {
|
|
if (!this.shipToADifferentAddress) {
|
|
this.shipping_address_preview = this.billing_address_preview;
|
|
return;
|
|
}
|
|
|
|
var output = $("#shipping_first_name").val() + " " + $("#shipping_last_name").val() + "<br />";
|
|
if ($("#shipping_company").val()) {
|
|
output += $("#shipping_company").val() + "<br />";
|
|
}
|
|
output += $("#shipping_address_1").val() + "<br />";
|
|
if ($("#shipping_address_2").val()) {
|
|
output += $("#shipping_address_2").val() + "<br />";
|
|
}
|
|
output += $("#shipping_city").val() + ", " + $("#shipping_state").val() + " " + $("#shipping_postcode").val() + "<br />";
|
|
output += $("#select2-shipping_country-container").text() + "<br />";
|
|
this.shipping_address_preview = output;
|
|
},
|
|
switchStep: function() {
|
|
this.checkAllJQueryFieldsAreGood();
|
|
|
|
if (this.step === "step-1") {
|
|
if (this.can_proceed_to_step_two) {
|
|
this.step = "step-2";
|
|
} else {
|
|
// validation failed... what should we do?
|
|
}
|
|
} else {
|
|
this.step = "step-1";
|
|
}
|
|
|
|
// internal vue tracking for the "ship to a differet address?" checkbox
|
|
this.shipToADifferentAddress = $("#ship-to-different-address-checkbox").is(":checked");
|
|
this.getBillingFields();
|
|
this.getShippingFields();
|
|
|
|
setTimeout(function() {
|
|
// scrolling to top...
|
|
$(window).scrollTop($("h1").offset().top);
|
|
}, 100);
|
|
}
|
|
},
|
|
watch: {
|
|
step: function() {
|
|
console.log(this.step);
|
|
if (this.step === 'step-1') {
|
|
$("body").addClass("checkout-step-1");
|
|
$("body").removeClass("checkout-step-2");
|
|
} else {
|
|
$("body").addClass("checkout-step-2");
|
|
$("body").removeClass("checkout-step-1");
|
|
}
|
|
},
|
|
caregiver_authorized_box: function() {
|
|
if (this.caregiver_authorized_box) {
|
|
this.caregiver_authorized = "true";
|
|
return;
|
|
}
|
|
this.caregiver_authorized = "false";
|
|
}
|
|
},
|
|
mounted: function() {
|
|
this.step = "step-1";
|
|
this.SESSpromoid = "<?= $_SESSION["SESSpromoid"]; ?>";
|
|
this.SESSpromotion_description = "<?= $_SESSION["SESSpromotion_description"]; ?>";
|
|
this.SESScoupon_code = "<?= $_SESSION["SESScoupon_code"]; ?>";
|
|
|
|
// HACK!!! This will run once a second and if it finds any hidden
|
|
// coupons in the order review table then it will parse the data and set
|
|
// the vue data prop so that it can be shown how we want it to be shown
|
|
var self = this;
|
|
setInterval(function() {
|
|
if ($(".cart-discount").length === 0) {
|
|
self.appliedCoupons = "";
|
|
return;
|
|
}
|
|
|
|
self.appliedCoupons = "";
|
|
$(".cart-discount").each(function() {
|
|
var couponTitle = $(this).children("th").text();
|
|
var couponDesc = $(this).children("td").text();
|
|
self.appliedCoupons = self.appliedCoupons + couponTitle + "<br />" + couponDesc + "<br />";
|
|
});
|
|
}, 1000);
|
|
}
|
|
})
|
|
|
|
app.use(VueCleave);
|
|
|
|
app.mount('#v-app');
|
|
</script>
|
|
|