get_type()=='bookable'){ ?>
base; if($current_page=='woocommerce_page_Phoeniixx_booking_report' || $current_page=='post'){ wp_enqueue_style( 'phoeniixx_arbpw_booking_default_css', PHOEN_ARBPRPLUGURL. "assets/css/default.css",'',false,false); wp_enqueue_style( 'phoeniixx_min_classic_select2_css', PHOEN_ARBPRPLUGURL. "assets/css/select2.css"); wp_enqueue_style( 'phoeniixx_min_classic_date_css', PHOEN_ARBPRPLUGURL. "assets/css/datetimepicker.css"); wp_enqueue_script( 'phoeniixx_arbpw_moment_js', PHOEN_ARBPRPLUGURL. "assets/js/moment.min.js",array('jquery'),'2.21.0',false); wp_enqueue_script( 'phoeniixx_arbpw_full_cal_min_js', PHOEN_ARBPRPLUGURL. "assets/js/fullcalendar.min.js",array('jquery'),'3.8.2',false); wp_enqueue_script( 'phoeniixx_arbpw_booking_picker_js', PHOEN_ARBPRPLUGURL. "assets/js/datetimepicker.js",array('jquery'),'201835',false); wp_enqueue_script( 'phoeniixx_arbpw_booking_select2_js', PHOEN_ARBPRPLUGURL. "assets/js/select2.js",array('jquery'),'4.0.6',false); wp_enqueue_script( 'phoeniixx_arbpw_booking_backend_js', PHOEN_ARBPRPLUGURL. "assets/js/picker.js",array('jquery'),'3.5.6',false); wp_enqueue_script( 'phoeniixx_arbpw_picker_time_backend_js', PHOEN_ARBPRPLUGURL. "assets/js/picker.time.js",array('jquery'),'3.5.6',false); wp_enqueue_style( 'phoeniixx_min_classic_time_css', PHOEN_ARBPRPLUGURL. "assets/css/default.time.css"); } } function phoen_arbpw_report_func(){ wp_enqueue_style( 'phoeniixx_arbpw_full_no_css', PHOEN_ARBPRPLUGURL. "assets/css/fullcalendar.min.css",false); wp_enqueue_style( 'phoeniixx_arbpw_full_hhwes', PHOEN_ARBPRPLUGURL. "assets/css/phoen_backend_add.css",false); ?>

get_type()=="bookable"){ return true; }else{ if($is_purchasable): return true; else: return false; endif; } }, 10, 2); function phoen_calender_collback(){ $example_data=phoen_appointment_example_data(); ?> 0 && $total_amt_pro > 0){ ?> get_type(); switch ( $product_type ) { case 'external': return __( 'Buy product', 'woocommerce' ); break; case 'grouped': return __( 'View products', 'woocommerce' ); break; case 'simple': return __( 'Add to cart', 'woocommerce' ); break; case 'variable': return __( 'Select options', 'woocommerce' ); break; case 'bookable': return __( 'Select Date', 'woocommerce' ); break; default: return __( 'Read more', 'woocommerce' ); } } function phoen_arbpw_calander_on_product() { global $product; global $post; $product_gen_settings=get_post_meta( get_the_ID(), 'phoen_arbpw_calander_mode', true ); $product_enable_book=isset($product_gen_settings['product_enable_book'])?$product_gen_settings['product_enable_book']:''; $product_days_to_sel=isset($product_gen_settings['product_days_to_sel'])?$product_gen_settings['product_days_to_sel']:''; $picker_type=isset($product_gen_settings['pickertype'])?$product_gen_settings['pickertype']:''; $_product = wc_get_product( get_the_ID() ); if( $_product->is_type( 'bookable' ) ) { $days_to_sel=isset($product_gen_settings['product_days_to_sel'])?$product_gen_settings['product_days_to_sel']:''; $calc_mode=isset($product_gen_settings['product_calc_mode'])?$product_gen_settings['product_calc_mode']:''; $timeslot=isset($product_gen_settings['timeslot'])?$product_gen_settings['timeslot']:''; $first_day=isset($product_gen_settings['first_day'])?$product_gen_settings['first_day']:''; $first_booking=isset($product_gen_settings['first_booking'])?$product_gen_settings['first_booking']:''; $maximum_booking=isset($product_gen_settings['maximum_booking'])?$product_gen_settings['maximum_booking']:''; $minimum_booking=isset($product_gen_settings['minimum_booking'])?$product_gen_settings['minimum_booking']:''; if(empty($product_gen_settings['work_hours'])){ $fromTime=$product_gen_settings['working_hours']['fromTime']; $toTime=$product_gen_settings['working_hours']['toTime']; $current_time=current_time('G:i'); $fromTime_o=str_replace(":",',',$fromTime); $toTime_o=str_replace(":",',',$toTime); if( strtotime($current_time) > strtotime($fromTime) ) { $emin_num=" min: true , max: [$toTime_o],"; } else { $emin_num="min: [$fromTime_o], max: [$toTime_o],"; } }else{ $emin_num=" min: true,"; } } $mmkkk=0; if(isset($picker_type) && $picker_type=="weekly"){ if(isset($calc_mode) && $calc_mode=="Night"){ $mmkkk=1; }else{ $mmkkk="null"; } $phoen_add=0; }else{ $phoen_add=1; } // echo $phoen_add; // echo $emin_num; if(!empty($first_day)){ ?> is_type( 'bookable' ) && $product_enable_book==1 ) { if($product_days_to_sel==2) { ?>
" >
" >
is_type( 'bookable' ) ) { if($product_enable_book==1) { if($product_days_to_sel==2) { if((sanitize_text_field($_POST['start_date'])=="")||(sanitize_text_field($_POST['end_date'])=="")) { $data = new WP_Error( 'error', sprintf( __( 'Enter Data correctly', 'custom-options'),"" ) ); wc_add_notice( $data->get_error_message(), 'error' ); $data_msg = 1; } } else if(sanitize_text_field($_POST['start_date'])=="") { $data = new WP_Error( 'error', sprintf( __( 'Enter Data correctly', 'custom-options'),"" ) ); wc_add_notice( $data->get_error_message(), 'error' ); $data_msg = 1; } } } if($data_msg == 1) { return false; } return $passed; } function phoen_arbpw_add_cart_item($cart_item_data) { return $cart_item_data; } function phoen_arbpw_get_item_data( $other_data, $cart_item_data ) { $product_gen_settings=get_post_meta( $cart_item_data['product_id'], 'phoen_arbpw_calander_mode', true ); $product_enable_book=isset($product_gen_settings['product_enable_book'])?$product_gen_settings['product_enable_book']:''; $product_days_to_sel=isset($product_gen_settings['product_days_to_sel'])?$product_gen_settings['product_days_to_sel']:''; if ( ! empty( $cart_item_data['phoeniixx_booking_dates'] ) ) { foreach ( $cart_item_data['phoeniixx_booking_dates'] as $options ) { if($product_enable_book==1) { if($product_days_to_sel==2) { echo "
"." From: ".$options['start_value']; echo "
"." To: ".$options['end_value']; } else if($product_days_to_sel==1){ echo "
"." DateTime: ".$options['start_value']; } } } } return $other_data; } function phoen_arbpw_add_to_cart_product( $cart_item_data,$product_id ) { $val_post = isset($_POST['start_date'])?sanitize_text_field($_POST['start_date']):''; $end_val_lla=isset($_POST['end_date'])?sanitize_text_field($_POST['end_date']):''; $end_val=isset($_POST['end_date'])?sanitize_text_field($_POST['end_date']):''; $product_gen_settings=get_post_meta( $product_id, 'phoen_arbpw_calander_mode', true ); $pickertype = isset($product_gen_settings['pickertype'])?sanitize_text_field($product_gen_settings['pickertype']):''; if(isset($product_gen_settings["product_days_to_sel"]) && $product_gen_settings["product_days_to_sel"]==1){ $product_calc_mode = isset($product_gen_settings['product_calc_mode'])?sanitize_text_field($product_gen_settings['product_calc_mode']):''; $timeslot = !empty($product_gen_settings['timeslot'])?sanitize_text_field($product_gen_settings['timeslot']):1; if($pickertype=="time"){ $val_post_end=date("Y-m-d").' '.$val_post; $val_post=date("y-m-d").' '.$val_post; $val_post_end = date('Y-m-d H:i:s', strtotime($val_post_end)); $minuts=$timeslot*60; $val_post = date('Y-m-d H:i:s', strtotime($val_post)); $end_val = date('Y-m-d H:i:s', strtotime($val_post_end ."+$minuts minute")); }elseif($pickertype=="date"){ if($product_calc_mode=="Night"){ $date_end= date('Y-m-d',strtotime($val_post)); $end_val=date('d M , Y', strtotime($date_end . ' +1 day')); }else{ $end_val=$val_post; } }else{ if($product_calc_mode=="Night"){ $date_end= date('Y-m-d',strtotime($val_post)); $end_val=date('d M , Y', strtotime($date_end . ' +7 day')); }else{ $date_end= date('Y-m-d',strtotime($val_post)); $end_val=date('d M , Y', strtotime($date_end . ' +6 day')); } } }elseif(isset($product_gen_settings["product_days_to_sel"]) && $product_gen_settings["product_days_to_sel"]==2 && $pickertype=="time"){ $val_post=date("y-m-d").' '.$val_post; $end_val_lla=date("y-m-d").' '.$end_val_lla; $val_post = date('Y-m-d H:i:s', strtotime($val_post)); $end_val = date('Y-m-d H:i:s', strtotime($end_val_lla)); } if($val_post != '') { $data[] = array( 'start_value' => $val_post, 'end_value'=>$end_val ); $cart_item_data['phoeniixx_booking_dates'] = $data; } return $cart_item_data; } function phoen_arbpw_calculate_extra_feea($cart_object ) { $old_price1=''; foreach ( $cart_object->cart_contents as $key => $value ) { $_product = wc_get_product( $value['data']->get_id() ); if( $_product->is_type( 'bookable' ) ) { $old_price1=get_post_meta($value['data']->get_id(), 'phoen_regular_price',true); $product_gen_settings=get_post_meta( $value['data']->get_id() ,'phoen_arbpw_calander_mode', true ); $product_enable_book=isset($product_gen_settings['product_enable_book'])?$product_gen_settings['product_enable_book']:''; $product_days_to_sel=isset($product_gen_settings['product_days_to_sel'])?$product_gen_settings['product_days_to_sel']:''; $product_calc_mode=isset($product_gen_settings['product_calc_mode'])?$product_gen_settings['product_calc_mode']:''; $pickertype=isset($product_gen_settings['pickertype'])?$product_gen_settings['pickertype']:''; $st_date= isset($value['phoeniixx_booking_dates'][0]['start_value'])?$value['phoeniixx_booking_dates'][0]['start_value']:''; $end_date= isset($value['phoeniixx_booking_dates'][0]['end_value'])?$value['phoeniixx_booking_dates'][0]['end_value']:''; if($pickertype=="time"){ $dteStart = new DateTime($st_date); $dteEnd = new DateTime($end_date); $dteDiff_mi = $dteStart->diff($dteEnd); $dteDiff=$dteDiff_mi->h; }elseif($pickertype=="weekly"){ $dteStart = new DateTime($st_date); $dteEnd = new DateTime($end_date); $dteDiff = $dteStart->diff($dteEnd); $dteDiff = $dteEnd->diff($dteStart)->format("%a"); $dteDiff=round($dteDiff/7); }else{ $dteStart = new DateTime($st_date); $dteEnd = new DateTime($end_date); $dteDiff = $dteStart->diff($dteEnd); $dteDiff = $dteEnd->diff($dteStart)->format("%a"); } if($product_enable_book==1) { if($pickertype=='time' || $pickertype=='weekly'){ if($product_days_to_sel==1){ $dteDiff=1; } }else{ if(($product_calc_mode=="Day")&&($product_days_to_sel==2)) { $dteDiff+=1; } else if($product_days_to_sel==1) { $dteDiff=1; } } if($end_date=="") { $dteDiff=1; } } $phoen_data = ($old_price1*$dteDiff); $value['data']->set_price($phoen_data); } } } function phoen_arbpw_order_item_meta($item_id,$values) { if ( ! empty( $values['phoeniixx_booking_dates'] ) ) { foreach ( $values['phoeniixx_booking_dates'] as $options ) { if($options['end_value']!="") { woocommerce_add_order_item_meta( $item_id,"FROM", $options['start_value'] ); woocommerce_add_order_item_meta( $item_id,"TO", $options['end_value'] ); } else { woocommerce_add_order_item_meta( $item_id, "DATETIME", $options['start_value'] ); } } } } function phoen_arbpw_add_price_html( $price = '', $product) { global $product; $_product = wc_get_product( $product->get_id() ); if( $_product->is_type( 'bookable' ) ) { $price_html=''; $price=get_post_meta($product->get_id(), 'phoen_regular_price',true); $price=wc_price( $price ); $product_gen_settings=get_post_meta( $product->get_id(), 'phoen_arbpw_calander_mode', true ); $product_enable_book=isset($product_gen_settings['product_enable_book'])?$product_gen_settings['product_enable_book']:''; if(isset($product_gen_settings['pickertype']) && $product_gen_settings['pickertype']=="time") { if(isset($product_gen_settings["product_days_to_sel"]) && $product_gen_settings["product_days_to_sel"]==1){ $product_calc_mode='Time slot'; }else{ $product_calc_mode='Hours'; } }elseif(isset($product_gen_settings['pickertype']) && $product_gen_settings['pickertype']=="weekly"){ $product_calc_mode='Week'; }else{ $product_calc_mode=isset($product_gen_settings['product_calc_mode'])?$product_gen_settings['product_calc_mode']:''; } if($product_enable_book==1){ if($product_gen_settings['pickertype']=="date"){ $price_html = __('/Dag', 'phoen_arbpw'); }else{ $price_html = __('/'.$product_calc_mode, 'phoen_arbpw'); } } if($price!="") { $price .= '' . $price_html . ''; } } return $price; } function phoen_arbpw_get_cart_item_from_session($cart_item_data, $values) { if ( ! empty( $values['phoeniixx_booking_dates'] ) ) { $cart_item_data['phoeniixx_booking_dates'] = $values['phoeniixx_booking_dates']; $cart_item_data = phoen_arbpw_add_cart_item( $cart_item_data ); } return $cart_item_data; } add_filter( 'product_type_selector', 'phoen_add_custom_product_type' ); function phoen_add_custom_product_type( $types ){ $types[ 'bookable' ] = __( 'Bookable Product' ,'phoen_arbpw'); return $types; } add_filter( 'woocommerce_product_data_tabs', 'phoen_appointment_booking_tab' ); add_action( 'product_type_options', 'phoen_bookable_product_type_options' ); function phoen_bookable_product_type_options($options){ $options['virtual']['wrapper_class'] = 'show_if_simple_bookable'; return $options; } add_action( 'plugins_loaded', 'phoen_appointment_custom_product_type' ); function phoen_appointment_custom_product_type(){ // declare the product class class WC_Product_bookable extends WC_Product{ public function __construct( $product ) { $this->product_type = 'bookable'; // $this->virtual = true; parent::__construct( $product ); // add additional functions here } } } function phoen_appointment_booking_tab( $tabs) { $tabs['bookable'] =array( 'label' => __( 'Booking', 'phoen-arbpw' ), 'target' => 'phoen_bookable_options', 'class' => ('show_if_bookable'), 'priority' => 10, ); $tabs['availability'] =array( 'label' => __( 'Availability', 'phoen-arbpw' ), 'target' => 'phoen_bookable_options_availability', 'class' => ('show_if_bookable'), 'priority' => 20, ); return $tabs; } //edit price tag e.g /day or /night add_filter( 'woocommerce_get_price_html', 'phoen_arbpw_add_price_html' , 10, 2 ); //calculate price according to per unit include additional or custom cahrge add_action( 'woocommerce_before_calculate_totals', 'phoen_arbpw_calculate_extra_feea', 1, 1 ); // Get item data to display on cart page after checkout on product column add_filter( 'woocommerce_get_item_data', 'phoen_arbpw_get_item_data' , 10, 2 ); //Stores options value in cart add_filter( 'woocommerce_add_cart_item_data', 'phoen_arbpw_add_to_cart_product' , 10, 2 ); //return options value on cart in product column during session add_filter( 'woocommerce_add_cart_item', 'phoen_arbpw_add_cart_item' , 20, 1 ); // it takes value from checkout to order add_filter( 'woocommerce_get_cart_item_from_session', 'phoen_arbpw_get_cart_item_from_session' , 20, 2 ); //add textbox to product page add_action( 'woocommerce_before_add_to_cart_button', 'phoen_arbpw_calander_on_product', 10, 0 ); // Validate when adding to cart add_filter( 'woocommerce_add_to_cart_validation', 'phoen_arbpw_validate_add_cart_product' , 10, 3 ); //order page add_action( 'woocommerce_add_order_item_meta', 'phoen_arbpw_order_item_meta' , 10, 2 ); include_once(PHOEN_ARBPRPLUGPATH.'includes/phoeniixx_arbpw_product.php'); }else{ add_action('admin_notices', 'phoen_arbpw_admin_notice'); function phoen_arbpw_admin_notice() { global $current_user ; $user_id = $current_user->ID; /* Check that the user hasn't already clicked to ignore the message */ if ( ! get_user_meta($user_id, 'phoen_arbpw_ignore_notice') ) { echo '

'; printf(__('Appointment, Reservation and Rental Booking for Woocommerce could not detect an active Woocommerce plugin. Make sure you have activated it. | Hide Notice'), '?phoen_arbpw_nag_ignore=0'); echo "

"; } } add_action('admin_init', 'phoen_arbpw_nag_ignore'); function phoen_arbpw_nag_ignore() { global $current_user; $user_id = $current_user->ID; /* If user clicks to ignore the notice, add that to their user meta */ if ( isset($_GET['phoen_arbpw_nag_ignore']) && '0' == $_GET['phoen_arbpw_nag_ignore'] ) { add_user_meta($user_id, 'phoen_arbpw_ignore_notice', 'true', true); } } }?>