//WooCommerce Bookings,added # of personsclass WOE_Bookings{var $title_type_ids;var $type_id_title;function __construct(){add_filter('woe_get_order_product_fields',array($this,'add_product_fields'));add_filter('woe_get_order_product_item',array($this,'fetch_booking'));//set global filtersadd_filter('woe_get_order_product_value_booking_status',array($this,'get_booking_field_status'),10,5);add_filter('woe_get_order_product_value_booking_start_date',array($this,'get_booking_field_start_date'),10,5);add_filter('woe_get_order_product_value_booking_start_time',array($this,'get_booking_field_start_time'),10,5);add_filter('woe_get_order_product_value_booking_end_date',array($this,'get_booking_field_end_date'),10,5);add_filter('woe_get_order_product_value_booking_end_time',array($this,'get_booking_field_end_time'),10,5);add_filter('woe_get_order_product_value_booking_resource',array($this,'get_booking_field_resource'),10,5);add_filter('woe_get_order_product_value_booking_persons_total',array($this,'get_booking_field_persons_total'),10,5);add_filter('woe_get_order_product_value_booking_persons',array($this,'get_booking_field_persons'),10,5);// add function for person types if(class_exists("WC_Product_Booking_Data_Store_CPT") AND method_exists("WC_Product_Booking_Data_Store_CPT","get_person_types_ids")){$this->title_type_ids=array();$person_types_ids=WC_Product_Booking_Data_Store_CPT::get_person_types_ids();foreach($person_types_ids as $type_id){$title=get_the_title($type_id);//remember ids for each Label$this->type_id_title[$type_id]=$title;if(!isset($this->title_type_ids[$title]))$this->title_type_ids[$title]=array();$this->title_type_ids[$title][]=$type_id;add_filter('woe_get_order_product_value_booking_person_type_'.$title,function($value,$order,$item,$product,$item_meta) use($title){if (!$this->booking) return $value;$counters=$this->booking->get_person_counts();$total=0;foreach($this->title_type_ids[$title] as $type_id)if(isset($counters[$type_id]))$total +=$counters[$type_id];return $total},10,5)}}}function add_product_fields($fields){$fields['booking_status']=array('label'=>'Booking Status','colname'=>'Booking Status','checked'=>1);$fields['booking_start_date']=array('label'=>'Booking Start Date','colname'=>'Booking Start Date','checked'=>1);$fields['booking_start_time']=array('label'=>'Booking Start Time','colname'=>'Booking Start Time','checked'=>1);$fields['booking_end_date']=array('label'=>'Booking End Date','colname'=>'Booking End Date','checked'=>1);$fields['booking_end_time']=array('label'=>'Booking End Time','colname'=>'Booking End Time','checked'=>1);$fields['booking_resource']=array('label'=>'Booking Resource','colname'=>'Booking Resource','checked'=>1);$fields['booking_persons']=array('label'=>'Booking # of Persons','colname'=>'Booking Persons','checked'=>1,'segment'=>'cart');$fields['booking_persons_total']=array('label'=>'Booking Total # of Persons','colname'=>'Booking Persons Total','checked'=>1,'segment'=>'cart');// add person types as columns if(class_exists("WC_Product_Booking_Data_Store_CPT") AND method_exists("WC_Product_Booking_Data_Store_CPT","get_person_types_ids")){$person_types_ids=WC_Product_Booking_Data_Store_CPT::get_person_types_ids();foreach($person_types_ids as $type_id){$post=get_post($type_id);if($post)$fields['booking_person_type_'.$post->post_title]=array('label'=>'Booking Persons - ' .$post->post_title,'colname'=>'Booking Persons - ' .$post->post_title,'checked'=>1)}}return $fields}// booking for item function fetch_booking($item){global $wpdb;$this->booking=false;$booking_id=$wpdb->get_var("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key= '_booking_order_item_id' AND meta_value=" . intval($item->get_id()));if($booking_id){$this->booking=new WC_Booking($booking_id)}return $item}function get_booking_field_status($value,$order,$item,$product,$item_meta){return $this->booking ? $this->booking->get_status(): $value}function get_booking_field_start_date($value,$order,$item,$product,$item_meta){return $this->booking ? date_i18n(wc_date_format(),$this->booking->start): $value}function get_booking_field_start_time($value,$order,$item,$product,$item_meta){return $this->booking ? date_i18n(wc_time_format(),$this->booking->start): $value}function get_booking_field_end_date($value,$order,$item,$product,$item_meta){return $this->booking ? date_i18n(wc_date_format(),$this->booking->end): $value}function get_booking_field_end_time($value,$order,$item,$product,$item_meta){return $this->booking ? date_i18n(wc_time_format(),$this->booking->end): $value}function get_booking_field_resource($value,$order,$item,$product,$item_meta){if (!$this->booking) return $value;$resource=$this->booking->get_resource();return $resource ? $resource->get_name(): $value}function get_booking_field_persons_total($value,$order,$item,$product,$item_meta){return $this->booking ? $this->booking->get_persons_total(): $value}function get_booking_field_persons($value,$order,$item,$product,$item_meta){if($this->booking){$values=array();foreach($this->booking->get_persons() as $type_id=>$counter){$label=isset($this->type_id_title[$type_id]) ? $this->type_id_title[$type_id]: "Type #$type_id";$values[]="$label - $counter"}$value=join(", ",$values)};return $value}}new WOE_Bookings();