<?php /* * Copyright (c) 2023 LatePoint LLC. All rights reserved. */ class OsCartsHelper { public static $cart; public static function reset_cart(){ unset($_COOKIE[LATEPOINT_CART_COOKIE]); self::$cart = self::create_cart(); } public static function get_cart_uuid(){ if(isset($_COOKIE[LATEPOINT_CART_COOKIE])){ return sanitize_text_field( wp_unslash($_COOKIE[LATEPOINT_CART_COOKIE])); }else{ return false; } } public static function can_checkout_multiple_items() : bool{ $can = apply_filters('latepoint_can_checkout_multiple_items', false); if($can){ $force_disabled = OsSettingsHelper::is_on('disable_checkout_multiple_items'); if($force_disabled){ return false; }else{ return true; } }else{ return false; } } public static function get_cart_id(){ $cart = self::get_or_create_cart(); return $cart->id; } public static function create_cart($persist = false){ $cart = new OsCartModel(); if(self::get_cart_uuid()){ $cart->uuid = self::get_cart_uuid(); }else{ $cart->uuid = OsUtilHelper::generate_uuid(); OsSessionsHelper::setcookie(LATEPOINT_CART_COOKIE, $cart->uuid); $_COOKIE[LATEPOINT_CART_COOKIE] = $cart->uuid; } if(!$persist) return $cart; if($cart->save()){ return $cart; }else{ return null; } } public static function clear_current_cart(){ $cart = self::get_or_create_cart(); } public static function is_current_cart_empty(){ $cart = self::get_or_create_cart(); $cart_items = $cart->get_items(); return empty($cart_items); } public static function get_or_create_cart($persist = false){ // no cart in cookie and not in database when asked for persistent one - create one if(!isset(self::$cart) || ($persist && empty(self::$cart->id))){ if(empty(self::get_cart_uuid())){ self::$cart = self::create_cart($persist); }else{ // cookie is set, try to retrieve from DB $cart = new OsCartModel(); $cart = $cart->where(['uuid' => self::get_cart_uuid()])->set_limit(1)->get_results_as_models(); if(!empty($cart) && !empty($cart->id)){ self::$cart = $cart; }else{ self::$cart = self::create_cart($persist); } } } return self::$cart; } public static function add_item_to_cart(OsCartItemModel $item){ $cart = self::get_or_create_cart(true); if($cart){ $cart->add_item($item); } return false; } public static function add_bundle_to_cart(OsBundleModel $bundle) { $item = new OsCartItemModel(); $item->variant = LATEPOINT_ITEM_VARIANT_BUNDLE; $item->item_data = wp_json_encode($bundle->generate_params_for_booking_form()); self::add_item_to_cart($item); } public static function add_booking_to_cart(OsBookingModel $booking) { $item = new OsCartItemModel(); $item->variant = LATEPOINT_ITEM_VARIANT_BOOKING; $item->item_data = wp_json_encode($booking->generate_params_for_booking_form()); return self::add_item_to_cart($item); } public static function get_items_for_cart_id($cart_id) { $cart_items = new OsCartItemModel(); return $cart_items->where(['cart_id' => $cart_id])->get_results_as_models(); } public static function get_default_payment_portion_type($cart) { $regular_price = $cart->get_total(); $deposit_price = $cart->deposit_amount_to_charge(['apply_coupons' => false]); if (($regular_price == 0) && ($deposit_price > 0)) { return LATEPOINT_PAYMENT_PORTION_DEPOSIT; } else { return LATEPOINT_PAYMENT_PORTION_FULL; } } public static function can_checkout(): bool { $cart = self::get_or_create_cart(); return (count($cart->get_items()) > 0); } public static function create_cart_item_from_item_data(array $cart_item_data): OsCartItemModel { $cart_item = new OsCartItemModel(); $cart_item->variant = $cart_item_data['variant']; $cart_item->item_data = wp_json_encode($cart_item_data['item_data']); $cart_item->subtotal = $cart_item_data['subtotal']; $cart_item->total = $cart_item_data['total']; $cart_item->coupon_discount = $cart_item_data['coupon_discount']; $cart_item->coupon_code = $cart_item_data['coupon_code']; $cart_item->tax_total = $cart_item_data['tax_total']; return $cart_item; } }