';
// // print_r($user);
// print_r($ticket_type_arr);
// echo '';
// die();
/**
* Now Store the datas into Cart Session
*/
$time_slot_text = isset($_REQUEST['time_slot_name']) ? $_REQUEST['time_slot_name'] : '';
if(!empty($time_slot_text)){
$cart_item_data['event_everyday_time_slot'] = $time_slot_text;
}
$cart_item_data['event_ticket_info'] = $ticket_type_arr;
$cart_item_data['event_validate_info'] = $validate;
$cart_item_data['event_user_info'] = $user;
$cart_item_data['event_tp'] = $total_price;
$cart_item_data['line_total'] = $total_price;
$cart_item_data['line_subtotal'] = $total_price;
$cart_item_data['event_extra_service'] = $event_extra;
$cart_item_data['event_cart_location'] = $event_cart_location;
$cart_item_data['event_cart_date'] = $mep_event_start_date[0];
$cart_item_data['event_recurring_date'] = array_unique($recurring_event_date);
$cart_item_data['event_recurring_date_arr'] = $recurring_event_date;
$cart_item_data['event_cart_display_date'] = $mep_event_start_date[0];
do_action('mep_event_cart_data_reg');
}
$cart_item_data['event_id'] = $product_id;
return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'mep_add_custom_fields_text_to_cart_item', 90, 3);
/**
* Now need to update the cart price according to user selection, the below function is doing this part, Its getting the new parice and update the cart price to new
*/
add_action('woocommerce_before_calculate_totals', 'mep_add_custom_price', 90, 1);
function mep_add_custom_price($cart_object)
{
foreach ($cart_object->cart_contents as $key => $value) {
$event_id = array_key_exists('event_id', $value) ? $value['event_id'] : 0;
if (get_post_type($event_id) == 'mep_events') {
$event_total_price = $value['event_tp'];
$value['data']->set_price($event_total_price);
$value['data']->set_regular_price($event_total_price);
$value['data']->set_sale_price($event_total_price);
$value['data']->set_sold_individually('yes');
$value['data']->get_price();
}
}
}
/**
* After update the price now need to show user what they selected and the Price details, the below fuunction is for that, Its showing the details into the cart below the event name.
*/
function mep_display_custom_fields_text_cart($item_data, $cart_item)
{
$mep_events_extra_prices = array_key_exists('event_extra_option', $cart_item) ? $cart_item['event_extra_option'] : array(); //$cart_item['event_extra_option'];
$eid = array_key_exists('event_id', $cart_item) ? $cart_item['event_id'] : 0; //$cart_item['event_id'];
if (get_post_type($eid) == 'mep_events') {
$hide_location_status = mep_get_option('mep_hide_location_from_order_page', 'general_setting_sec', 'no');
$hide_date_status = mep_get_option('mep_hide_date_from_order_page', 'general_setting_sec', 'no');
$user_info = $cart_item['event_user_info'];
$ticket_type_arr = $cart_item['event_ticket_info'];
$event_extra_service = $cart_item['event_extra_service'];
$event_recurring_date = $cart_item['event_recurring_date'];
$event_label = mep_get_option('mep_event_label', 'general_setting_sec', 'Events');
$recurring = get_post_meta($eid, 'mep_enable_recurring', true) ? get_post_meta($eid, 'mep_enable_recurring', true) : 'no';
echo "
";
if ($recurring == 'yes') {
if (is_array($ticket_type_arr) && sizeof($ticket_type_arr) > 0 && sizeof($user_info) == 0) {
foreach ($ticket_type_arr as $_event_recurring_date) {
if($hide_date_status == 'no'){
?>
- :
0) {
echo '- ';
echo mep_cart_display_user_list($user_info);
echo '
';
}
} else {
if (is_array($user_info) && sizeof($user_info) > 0) {
echo '- ';
echo mep_cart_display_user_list($user_info);
echo '
';
} else {
if($hide_date_status == 'no'){
?>
- :
- :
0) {
// echo $eid;
echo mep_cart_display_ticket_type_list($ticket_type_arr, $eid);
}
if (is_array($event_extra_service) && sizeof($event_extra_service) > 0) {
foreach ($event_extra_service as $extra_service) {
echo '- ' . $extra_service['service_name'] . " - " . wc_price(mep_get_price_including_tax($eid,$extra_service['service_price'])) . ' x ' . $extra_service['service_qty'] . ' = ' . wc_price( mep_get_price_including_tax($eid,(int) $extra_service['service_price'] * (int) $extra_service['service_qty'])) . '
';
}
}
do_action('mep_after_cart_item_display_list',$cart_item);
echo "
";
}
return $item_data;
}
add_filter('woocommerce_get_item_data', 'mep_display_custom_fields_text_cart', 90, 2);
/**
* Now before placing the order we need to check seats are available or not, the below function doing this task its validate the user selected seat numbers are available or not.
*/
add_action('woocommerce_after_checkout_validation', 'mep_checkout_validation');
function mep_checkout_validation($posted)
{
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach ($items as $item => $values) {
$event_id = array_key_exists('event_id', $values) ? $values['event_id'] : 0; // $values['event_id'];
$check_seat_plan = get_post_meta($event_id,'mepsp_event_seat_plan_info',true) ? get_post_meta($event_id,'mepsp_event_seat_plan_info',true) : array();
if (get_post_type($event_id) == 'mep_events' && sizeof($check_seat_plan) == 0) {
$recurring = get_post_meta($event_id, 'mep_enable_recurring', true) ? get_post_meta($event_id, 'mep_enable_recurring', true) : 'no';
$total_seat = apply_filters('mep_event_total_seat_counts', mep_event_total_seat($event_id, 'total'), $event_id);
$total_resv = apply_filters('mep_event_total_resv_seat_count', mep_event_total_seat($event_id, 'resv'), $event_id);
$ticket_arr = $values['event_ticket_info'];
foreach($ticket_arr as $ticket){
$event_name = get_the_title($event_id);
$type = $ticket['ticket_name'];
$event_date = $ticket['event_date'];
$ticket_qty = $ticket['ticket_qty'];
$event_date_txt = get_mep_datetime($ticket['event_date'],'date-time-text');
$total_sold = mep_ticket_type_sold($event_id,$type,$event_date);
$available_seat = $total_seat - ($total_resv + $total_sold);
}
if($ticket_qty > $available_seat){
wc_add_notice("Sorry, $type not availabe. Total available $type is $available_seat of $event_name on $event_date_txt but you select $ticket_qty . Please Try Again", 'error');
}
}
}
}
/**
* The Final function for cart handleing, If everything is fine after user hit the place order button then the below function will send the order data into the next hook for order processing and save to order meta data.
*/
function mep_add_custom_fields_text_to_order_items($item, $cart_item_key, $values, $order)
{
$eid = array_key_exists('event_id', $values) ? $values['event_id'] : 0; //$values['event_id'];
$location_text = mep_get_option('mep_location_text', 'label_setting_sec', __('Location', 'mage-eventpress')) ? mep_get_option('mep_location_text', 'label_setting_sec', __('Location', 'mage-eventpress')) : 'Location';
$date_text = mep_get_option('mep_event_date_text', 'label_setting_sec', __('Date', 'mage-eventpress')) ? mep_get_option('mep_event_date_text', 'label_setting_sec', __('Date', 'mage-eventpress')) : 'Date';
if (get_post_type($eid) == 'mep_events') {
$mep_events_extra_prices = $values['event_extra_option'];
$cart_location = $values['event_cart_location'];
$event_extra_service = $values['event_extra_service'];
$ticket_type_arr = $values['event_ticket_info'];
$cart_date = get_mep_datetime($values['event_cart_date'],'date-time-text');
$form_position = mep_get_option('mep_user_form_position', 'general_attendee_sec', 'details_page');
$event_user_info = $form_position == 'details_page' ? $values['event_user_info'] : mep_save_attendee_info_into_cart($eid);
$recurring = get_post_meta($eid, 'mep_enable_recurring', true) ? get_post_meta($eid, 'mep_enable_recurring', true) : 'no';
$event_label = mep_get_option('mep_event_label', 'general_setting_sec', 'Events');
if ($recurring == 'yes') {
if (is_array($ticket_type_arr) && sizeof($ticket_type_arr) > 0) {
foreach ($ticket_type_arr as $_event_recurring_date) {
$item->add_meta_data($date_text, get_mep_datetime($_event_recurring_date['event_date'], 'date-time-text'));
}
}
} else {
$item->add_meta_data($date_text,$cart_date);
}
if (is_array($ticket_type_arr) && sizeof($ticket_type_arr) > 0) {
mep_cart_order_data_save_ticket_type($item,$ticket_type_arr,$eid);
}
if (is_array($event_extra_service) && sizeof($event_extra_service) > 0) {
foreach ($event_extra_service as $extra_service) {
$service_type_name = $extra_service['service_name'] . " - " . wc_price(mep_get_price_including_tax($eid,$extra_service['service_price'])) . ' x ' . $extra_service['service_qty'] . ' = ';
$service_type_val = wc_price(mep_get_price_including_tax($eid,$extra_service['service_price'] * $extra_service['service_qty']));
$item->add_meta_data($service_type_name, $service_type_val);
}
}
$item->add_meta_data($location_text, $cart_location);
$item->add_meta_data('_event_ticket_info', $ticket_type_arr);
$item->add_meta_data('_event_user_info', $event_user_info);
$item->add_meta_data('_event_service_info', $mep_events_extra_prices);
$item->add_meta_data('event_id', $eid);
$item->add_meta_data('_product_id', $eid);
$item->add_meta_data('_event_extra_service', $event_extra_service);
do_action('mep_event_cart_order_data_add',$values,$item);
}
}
add_action('woocommerce_checkout_create_order_line_item', 'mep_add_custom_fields_text_to_order_items', 90, 4);