*/ class MEC_skin_single extends MEC_skins { /** * @var string */ public $skin = 'single'; public $uniqueid; public $date_format1; public $display_cancellation_reason; /** * Constructor method * @author Webnus */ public function __construct() { parent::__construct(); // Icons $this->icons = $this->main->icons( (isset($this->settings['icons']) && is_array($this->settings['icons'])) ? $this->settings['icons'] : [] ); } /** * Registers skin actions into WordPress * @author Webnus */ public function actions() { $this->factory->action('wp_ajax_mec_load_single_page', array($this, 'load_single_page')); $this->factory->action('wp_ajax_nopriv_mec_load_single_page', array($this, 'load_single_page')); } /** * Initialize the skin * @author Webnus * @param array $atts */ public function initialize($atts) { $this->atts = $atts; // MEC Settings $this->settings = $this->main->get_settings(); $this->ml_settings = $this->main->get_ml_settings(); // Date Formats $this->date_format1 = (isset($this->ml_settings['single_date_format1']) and trim($this->ml_settings['single_date_format1'])) ? $this->ml_settings['single_date_format1'] : 'M d Y'; // Single Event Layout $this->layout = $this->atts['layout'] ?? NULL; // Search Form Status $this->sf_status = false; $this->sf_display_label = false; $this->sf_reset_button = false; $this->sf_refine = false; // HTML class $this->html_class = ''; if(isset($this->atts['html-class']) and trim($this->atts['html-class']) != '') $this->html_class = $this->atts['html-class']; // From Widget $this->widget = isset($this->atts['widget']) && trim($this->atts['widget']); // Init MEC $this->args['mec-skin'] = $this->skin; $this->id = $this->atts['id'] ?? 0; $this->uniqueid = mt_rand(1000, 10000); $this->maximum_dates = $this->atts['maximum_dates'] ?? 6; } /** * Related Post in Single * @author Webnus * @param mixed $event */ public function display_related_posts_widget($event, $thumbnail_size = 'thumblist') { if(!isset($this->settings['related_events'])) return; if(isset($this->settings['related_events']) && $this->settings['related_events'] != '1') return; if(is_numeric($event)) $event_id = $event; elseif(is_object($event) and isset($event->ID)) $event_id = $event->ID; else return; $limit = (isset($this->settings['related_events_limit']) and trim($this->settings['related_events_limit'])) ? $this->settings['related_events_limit'] : 30; $related_args = array( 'post_type' => $this->main->get_main_post_type(), 'posts_per_page' => max($limit, 30), 'post_status' => 'publish', 'post__not_in' => array($event_id), 'tax_query' => array(), 'meta_query' => array( 'mec_start_date' => array( 'key' => 'mec_start_date', ), 'mec_start_day_seconds' => array( 'key' => 'mec_start_day_seconds', ), ), 'orderby' => array( 'mec_start_date' => 'ASC', 'mec_start_day_seconds' => 'ASC', ), ); if(isset($this->settings['related_events_basedon_category']) && $this->settings['related_events_basedon_category'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_category', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_category', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_organizer']) && $this->settings['related_events_basedon_organizer'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_organizer', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_organizer', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_location']) && $this->settings['related_events_basedon_location'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_location', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_location', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_speaker']) && $this->settings['related_events_basedon_speaker'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_speaker', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_speaker', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_label']) && $this->settings['related_events_basedon_label'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_label', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_label', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_tag']) && $this->settings['related_events_basedon_tag'] == 1) { $post_terms = wp_get_object_terms($event_id, apply_filters('mec_taxonomy_tag', ''), array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => apply_filters('mec_taxonomy_tag', ''), 'field' => 'slug', 'terms' => $post_terms ); } // Display Expired Events $display_expired_events = (isset($this->settings['related_events_display_expireds']) && $this->settings['related_events_display_expireds']); if(!$display_expired_events) { $upcoming_event_ids = $this->main->get_upcoming_event_ids(); $current_event_key = array_search($event_id, $upcoming_event_ids); if($current_event_key !== false) unset($upcoming_event_ids[$current_event_key]); $related_args['post__in'] = $upcoming_event_ids; } $related_args['tax_query']['relation'] = 'OR'; $related_args = apply_filters('mec_add_to_related_post_query', $related_args, $event_id); $now = current_time('timestamp'); $printed = 0; $query = new WP_Query($related_args); if(isset($this->settings['related_events_per_event']) && $this->settings['related_events_per_event']) { $related_events = get_post_meta($event_id, 'mec_related_events', true); if(!is_array($related_events)) $related_events = []; if(count($related_events)) { $query = new WP_Query([ 'post_type' => $this->main->get_main_post_type(), 'posts_per_page' => 4, 'post_status' => 'publish', 'post__not_in' => array($event_id), 'post__in' => $related_events, 'tax_query' => array(), 'meta_query' => array( 'mec_start_date' => array( 'key' => 'mec_start_date', ), 'mec_start_day_seconds' => array( 'key' => 'mec_start_day_seconds', ), ), 'orderby' => array( 'mec_start_date' => 'ASC', 'mec_start_day_seconds' => 'ASC', ), ]); } } if($query->have_posts()) { ?> settings['next_previous_events'])) return; if(isset($this->settings['next_previous_events']) && $this->settings['next_previous_events'] != '1') return; if(is_numeric($event)) $event_id = $event; elseif(is_object($event) and isset($event->ID)) $event_id = $event->ID; else return; $p_exclude = array($event_id); $n_exclude = array($event_id); $pskip = (isset($_REQUEST['pskip']) and is_numeric($_REQUEST['pskip']) and $_REQUEST['pskip'] > 0) ? sanitize_text_field($_REQUEST['pskip']) : NULL; if($pskip) $p_exclude[] = $pskip; $nskip = (isset($_REQUEST['nskip']) and is_numeric($_REQUEST['nskip']) and $_REQUEST['nskip'] > 0) ? sanitize_text_field($_REQUEST['nskip']) : NULL; if($nskip) $n_exclude[] = $nskip; $date = $event->date; $timestamp = (isset($date['start']) and isset($date['start']['timestamp'])) ? $date['start']['timestamp'] : NULL; $args = array( 'post_type' => $this->main->get_main_post_type(), 'posts_per_page' => -1, 'post_status' => 'publish', 'orderby' => 'ASC', 'tax_query' => array(), ); if(isset($this->settings['next_previous_events_category']) && $this->settings['next_previous_events_category'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_category', array('fields' => 'slugs')); $args['tax_query'][] = array( 'taxonomy' => 'mec_category', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['next_previous_events_organizer']) && $this->settings['next_previous_events_organizer'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_organizer', array('fields' => 'slugs')); $args['tax_query'][] = array( 'taxonomy' => 'mec_organizer', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['next_previous_events_location']) && $this->settings['next_previous_events_location'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_location', array('fields' => 'slugs')); $args['tax_query'][] = array( 'taxonomy' => 'mec_location', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['next_previous_events_speaker']) && $this->settings['next_previous_events_speaker'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_speaker', array('fields' => 'slugs')); $args['tax_query'][] = array( 'taxonomy' => 'mec_speaker', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['next_previous_events_label']) && $this->settings['next_previous_events_label'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_label', array('fields' => 'slugs')); $args['tax_query'][] = array( 'taxonomy' => 'mec_label', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['next_previous_events_tag']) && $this->settings['next_previous_events_tag'] == 1) { $post_terms = wp_get_object_terms($event_id, apply_filters('mec_taxonomy_tag', ''), array('fields' => 'slugs')); $args['tax_query'][] = array( 'taxonomy' => apply_filters('mec_taxonomy_tag', ''), 'field' => 'slug', 'terms' => $post_terms ); } $args['tax_query']['relation'] = 'OR'; $p_args = array_merge($args, array('post__not_in' => $p_exclude)); $n_args = array_merge($args, array('post__not_in' => $n_exclude)); $p_args = apply_filters('mec_next_previous_query', $p_args, $event_id); $n_args = apply_filters('mec_next_previous_query', $n_args, $event_id); $p_IDs = []; $n_IDs = []; $query = new WP_Query($p_args); if($query->have_posts()) { while($query->have_posts()) { $query->the_post(); $p_IDs[] = get_the_ID(); } } wp_reset_postdata(); if($p_args === $n_args) $n_IDs = $p_IDs; else { $query = new WP_Query($n_args); if($query->have_posts()) { while($query->have_posts()) { $query->the_post(); $n_IDs[] = get_the_ID(); } } wp_reset_postdata(); } // No Event Found! if(!count($p_IDs) && !count($n_IDs)) return; $p = count($p_IDs) ? $this->db->select("SELECT `post_id`, `tstart` FROM `#__mec_dates` WHERE `tstart`<='".$timestamp."' AND `post_id` IN (".implode(',', $p_IDs).") ORDER BY `tstart` DESC LIMIT 1", 'loadAssoc') : []; $n = count($n_IDs) ? $this->db->select("SELECT `post_id`, `tstart` FROM `#__mec_dates` WHERE `tstart`>='".$timestamp."' AND `post_id` IN (".implode(',', $n_IDs).") ORDER BY `tstart` ASC LIMIT 1", 'loadAssoc') : []; // No Event Found! if(is_array($p) && !isset($p['post_id']) && is_array($n) && !isset($n['post_id'])) return; echo ''; } /** * Fluent Related Post in Single * @author Webnus * @param integer $event_id */ public function fluent_display_related_posts_widget($event_id) { if(!is_plugin_active('mec-fluent-layouts/mec-fluent-layouts.php')) return; if(!isset($this->settings['related_events'])) return; if(isset($this->settings['related_events']) && $this->settings['related_events'] != '1') return; $related_args = array( 'post_type' => $this->main->get_main_post_type(), 'posts_per_page' => 3, 'post_status' => 'publish', 'post__not_in' => array($event_id), 'orderby' => 'ASC', 'tax_query' => array(), ); if(isset($this->settings['related_events_basedon_category']) && $this->settings['related_events_basedon_category'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_category', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_category', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_organizer']) && $this->settings['related_events_basedon_organizer'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_organizer', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_organizer', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_location']) && $this->settings['related_events_basedon_location'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_location', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_location', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_speaker']) && $this->settings['related_events_basedon_speaker'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_speaker', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_speaker', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_label']) && $this->settings['related_events_basedon_label'] == 1) { $post_terms = wp_get_object_terms($event_id, 'mec_label', array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => 'mec_label', 'field' => 'slug', 'terms' => $post_terms ); } if(isset($this->settings['related_events_basedon_tag']) && $this->settings['related_events_basedon_tag'] == 1) { $post_terms = wp_get_object_terms($event_id, apply_filters('mec_taxonomy_tag', ''), array('fields' => 'slugs')); $related_args['tax_query'][] = array( 'taxonomy' => apply_filters('mec_taxonomy_tag', ''), 'field' => 'slug', 'terms' => $post_terms ); } $related_args['tax_query']['relation'] = 'OR'; $related_args = apply_filters('mec_add_to_related_post_query', $related_args, $event_id); $query = new WP_Query($related_args); if($query->have_posts()) { ?> */ public function display_breadcrumb_widget($page_id) { /** * Home Page */ $homeURL = esc_url(home_url('/')); echo '
' . esc_html__('Home', 'modern-events-calendar-lite') . ' '; $archive_title = $this->main->get_archive_title(); $archive_link = $this->main->get_archive_url(); if(isset($this->settings['breadcrumbs_events_page']) && $this->settings['breadcrumbs_events_page']) { $page = get_post($this->settings['breadcrumbs_events_page']); if(isset($page->post_title) && $page->post_status === 'publish') { $archive_title = $page->post_title; $archive_link = get_permalink($page); } } $referer_url = wp_get_referer(); if(trim($referer_url)) { $referer_page_id = url_to_postid($referer_url); if($referer_page_id and strpos(get_post_field('post_content', $referer_page_id), '[MEC') !== false) { $archive_link = $referer_url; $archive_title = get_the_title($referer_page_id); } } /** * Archive Page */ if($archive_link) echo '' . esc_html($archive_title) . ' '; /** * Categories Page */ if(!isset($this->settings['breadcrumbs_category']) or (isset($this->settings['breadcrumbs_category']) and $this->settings['breadcrumbs_category'])) { $categories = wp_get_post_terms($page_id, 'mec_category'); if(!is_array($categories)) $categories = []; foreach($categories as $category) echo '' . esc_html($category->name) . ' '; } /** * Current Event */ echo '' . get_the_title($page_id) . '
'; } /** * Search and returns the filtered events * @return array of objects * @throws Exception * @author Webnus */ public function search() { // Original Event ID for Multilingual Websites $original_event_id = $this->main->get_original_event($this->id); $events = []; $rendered = $this->render->data($this->id, ($this->atts['content'] ?? '')); $occurrence = isset($_GET['occurrence']) ? sanitize_text_field($_GET['occurrence']) : (isset($this->atts['occurrence']) ? sanitize_text_field($this->atts['occurrence']) : current_time('Y-m-d')); $occurrence_time = isset($_GET['time']) ? (int) sanitize_text_field($_GET['time']) : NULL; list($occurrence, $occurrence_time) = $this->main->get_start_date_to_get_event_dates($this->id, $occurrence, $occurrence_time); $data = new stdClass(); $data->ID = $this->id; $data->requested_id = $this->id; $data->data = $rendered; // Get Event Dates $dates = $this->render->dates($this->id, $rendered, $this->maximum_dates, ($occurrence_time ? date('Y-m-d H:i:s', $occurrence_time) : $occurrence)); $dates = $this->main->adjust_event_dates_for_booking($data, $dates, $_GET['occurrence'] ?? ''); $data->dates = $dates; $data->date = $data->dates[0] ?? []; // Set some data from original event in multilingual websites if($this->id != $original_event_id) { $original_tickets = get_post_meta($original_event_id, 'mec_tickets', true); if(!is_array($original_tickets)) $original_tickets = []; $rendered_tickets = []; foreach($original_tickets as $ticket_id => $original_ticket) { if(!isset($data->data->tickets[$ticket_id])) continue; $rendered_tickets[$ticket_id] = array( 'name' => $data->data->tickets[$ticket_id]['name'], 'description' => $data->data->tickets[$ticket_id]['description'], 'price' => $original_ticket['price'], 'price_label' => $data->data->tickets[$ticket_id]['price_label'], 'limit' => $original_ticket['limit'], 'unlimited' => $original_ticket['unlimited'], ); } if(count($rendered_tickets)) $data->data->tickets = $rendered_tickets; else $data->data->tickets = $original_tickets; $data->ID = $original_event_id; $data->dates = $this->render->dates($original_event_id, $rendered, $this->maximum_dates, $occurrence); $data->date = $data->dates[0] ?? []; } $event = $this->render->after_render($data, $this); // Global Event $GLOBALS['mec_current_event'] = $event; $start_timestamp = ($event->data->time['start_timestamp'] ?? ($event->date['start']['timestamp'] ?? strtotime($event->date['start']['date']))); $display_cancellation_reason = get_post_meta($this->id, 'mec_display_cancellation_reason_in_single_page', true); $this->display_cancellation_reason = MEC_feature_occurrences::param($this->id, $start_timestamp, 'display_cancellation_reason_in_single_page', $display_cancellation_reason); $events[] = $event; return $events; } // Get event public function get_event_mec($event_ID) { if(get_post_type($event_ID) != $this->main->get_main_post_type()) return false; // Original Event ID for Multilingual Websites $original_event_id = $this->main->get_original_event($event_ID); // MEC Settings $settings = $this->main->get_settings(); $events = []; $rendered = $this->render->data($event_ID, ($this->atts['content'] ?? '')); $occurrence = isset($_GET['occurrence']) ? sanitize_text_field($_GET['occurrence']) : current_time('Y-m-d'); $occurrence_time = isset($_GET['time']) ? (int) sanitize_text_field($_GET['time']) : NULL; list($occurrence, $occurrence_time) = $this->main->get_start_date_to_get_event_dates($event_ID, $occurrence, $occurrence_time); $data = new stdClass(); $data->ID = $event_ID; $data->requested_id = $event_ID; $data->data = $rendered; $maximum_dates = $this->maximum_dates; if(isset($settings['booking_maximum_dates']) && trim($settings['booking_maximum_dates'])) $maximum_dates = $settings['booking_maximum_dates']; // Apply Maximum of 100 $maximum_dates = min($maximum_dates, 100); // Get Event Dates $dates = $this->render->dates($event_ID, $rendered, $maximum_dates, ($occurrence_time ? date('Y-m-d H:i:s', $occurrence_time) : $occurrence)); $dates = $this->main->adjust_event_dates_for_booking($data, $dates, $_GET['occurrence'] ?? ''); $data->dates = $dates; $data->date = count($data->dates) ? current($data->dates) : []; // Set some data from original event in multilingual websites if($event_ID != $original_event_id) { $original_tickets = get_post_meta($original_event_id, 'mec_tickets', true); $rendered_tickets = []; foreach($original_tickets as $ticket_id=>$original_ticket) { if(!isset($data->data->tickets[$ticket_id])) continue; $rendered_tickets[$ticket_id] = array( 'name' => $data->data->tickets[$ticket_id]['name'], 'description' => $data->data->tickets[$ticket_id]['description'], 'price' => $original_ticket['price'], 'price_label' => $data->data->tickets[$ticket_id]['price_label'], 'limit' => $original_ticket['limit'], 'unlimited' => $original_ticket['unlimited'], ); } if(count($rendered_tickets)) $data->data->tickets = $rendered_tickets; else $data->data->tickets = $original_tickets; $data->ID = $original_event_id; $data->dates = $this->render->dates($original_event_id, $rendered, $maximum_dates, $occurrence); $data->date = $data->dates[0] ?? []; } $event = $this->render->after_render($data, $this); // Global Event $GLOBALS['mec_current_event'] = $event; $events[] = $event; return $events; } /** * Load Single Event Page for AJAX request * @author Webnus * @return void */ public function load_single_page() { $id = isset($_GET['id']) ? sanitize_text_field($_GET['id']) : 0; $layout = isset($_GET['layout']) ? sanitize_text_field($_GET['layout']) : 'm1'; do_action('mec-ajax-load-single-page-before', $id); $post = get_post($id); setup_postdata($GLOBALS['post'] =& $post); // Initialize the skin $this->initialize(array( 'id' => $id, 'layout' => $layout, 'maximum_dates'=>($this->settings['booking_maximum_dates'] ?? 6) )); // Fetch the events $this->fetch(); // Return the output echo MEC_kses::full($this->output()); do_action('mec-ajax-load-single-page-after', $id); exit; } /** * @param string $k * @param array $arr * @depecated use Mec_Single_Widget::is_enabled instead. * @return string * @author Webnus */ public function found_value($k, $arr = []) { $dummy = new Mec_Single_Widget(); $status = $dummy->is_enabled($k); // Legacy Return! return $status ? 'on' : ''; } /** * @param object $event * @return void */ public function display_next_prev_widget($event) { echo MEC_kses::full($this->main->module('next-event.details', array('event' => $event))); } /** * @param object $event * @return void */ public function display_social_widget($event) { if(!isset($this->settings['social_network_status']) or (isset($this->settings['social_network_status']) and !$this->settings['social_network_status'])) return; $url = $event->data->permalink ?? ''; if(trim($url) == '') return; $socials = $this->main->get_social_networks(); ?>
main->get_master_location_id($event); $location = ($location_id ? $this->main->get_location_data($location_id) : array()); if($location_id and count($location)) { $location_description_setting = $this->settings['location_description'] ?? ''; $location_terms = get_the_terms($event->data, 'mec_location'); ?>
icons->display('location-pin'); ?>

main->m('taxonomy_location', esc_html__('Location', 'modern-events-calendar-lite'))); ?>

<?php echo (isset($location['name']) ? esc_attr($location['name']) : ''); ?>
settings['advanced_location']['location_enable_link_section_title'] ?? false )) ? '' : $this->icons->display('location-pin'); ?>
get_location_html($location)); ?>
icons->display('clock'); ?>
icons->display('sitemap'); ?>
icons->display('phone'); ?>
term_id == $location['id'] ) { if(isset($location_term->description) && !empty($location_term->description)): ?>

description);?>

'; $this->show_other_locations($event); // Show Additional Locations echo ''; } /** * @param object $event * @return void */ public function display_local_time_widget($event) { echo '
'; echo MEC_kses::full($this->main->module('local-time.details', array('event' => $event, 'icons' => $this->icons))); echo '
'; } /** * @param object $event * @return void */ public function display_attendees_widget($event) { echo MEC_kses::full($this->main->module('attendees-list.details', array('event' => $event))); } /** * @param object $event * @param object $event_m * @return void */ public function display_booking_widget($event, $event_m) { if($this->main->is_sold($event) and count($event->dates) <= 1): ?>
date)); ?>
main->can_show_booking_module($event)): $data_lity_class = ''; if(isset($this->settings['single_booking_style']) and $this->settings['single_booking_style'] == 'modal') $data_lity_class = 'lity-hide '; ?>
main->module('booking.default', array('event' => $event_m))); ?>
data->categories)) { echo '
'; ?> icons->display('folder'); ?>
main->m('taxonomy_categories', esc_html__('Category', 'modern-events-calendar-lite'))); ?>
data->categories as $category) { $color = ((isset($category['color']) and trim($category['color'])) ? $category['color'] : ''); $color_html = ''; if($color) $color_html .= ' '; $icon = $category['icon'] ?? ''; $icon = isset($icon) && $icon != '' ? '' : ''; echo '
'; } echo '
'; } } /** * @param object cost widget * @return void */ public function display_cost_widget($event) { $cost = $this->main->get_event_cost($event); if($cost) { echo '
'; ?>
icons->display('wallet'); ?>

main->m('cost', esc_html__('Cost', 'modern-events-calendar-lite'))); ?>

main->render_price($cost, $event->ID); else $rendered_cost = $cost; echo apply_filters('mec_display_event_cost', $rendered_cost, $cost); ?>
'; } } /** * @param object countdown widget * @return void */ public function display_countdown_widget($event) { echo '
'; echo MEC_kses::full($this->main->module('countdown.details', array('event' => $event))); echo '
'; } /** * @param object export widget * @return void */ public function display_export_widget($event) { echo MEC_kses::full($this->main->module('export.details', array('event' => $event))); } /** * @param object map widget * @return void */ public function display_map_widget($event) { echo '
'; echo MEC_kses::full($this->main->module('googlemap.details', array('event' => $event))); echo '
'; } /** * @param object date widget * @return void */ public function display_date_widget($event) { $this->date_format1 = (isset($this->ml_settings['single_date_format1']) and trim($this->ml_settings['single_date_format1'])) ? $this->ml_settings['single_date_format1'] : 'M d Y'; $occurrence = (isset($event->date['start']['date']) ? $event->date['start']['date'] : (isset($_GET['occurrence']) ? sanitize_text_field($_GET['occurrence']) : '')); $occurrence_end_date = (isset($event->date['end']['date']) ? $event->date['end']['date'] : (trim($occurrence) ? $this->main->get_end_date_by_occurrence($event->data->ID, (isset($event->date['start']['date']) ? $event->date['start']['date'] : $occurrence)) : '')); $midnight_event = $this->main->is_midnight_event($event); echo '
'; // Event Date if(isset($event->data->meta['mec_date']['start']) and !empty($event->data->meta['mec_date']['start'])) { ?>
icons->display('calendar'); ?>

main->dateify($event, $this->date_format1)); ?>
main->date_label((trim($occurrence) ? array('date' => $occurrence) : $event->date['start']), (trim($occurrence_end_date) ? array('date' => $occurrence_end_date) : (isset($event->date['end']) ? $event->date['end'] : NULL)), $this->date_format1, ' - ', true, 0, $event)); ?>
'; } /** * @param object * @return void */ public function display_more_info_widget($event) { $more_info = (isset($event->data->meta['mec_more_info']) and trim($event->data->meta['mec_more_info']) and $event->data->meta['mec_more_info'] != 'http://') ? $event->data->meta['mec_more_info'] : ''; if(isset($event->date) and isset($event->date['start']) and isset($event->date['start']['timestamp'])) $more_info = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info', $more_info); if($more_info) { $more_info_target = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info_target', $event->data->meta['mec_more_info_target'] ?? ''); $more_info_title = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info_title', ((isset($event->data->meta['mec_more_info_title']) and trim($event->data->meta['mec_more_info_title'])) ? $event->data->meta['mec_more_info_title'] : esc_html__('Read More', 'modern-events-calendar-lite'))); ?>
icons->display('info'); ?>

main->m('more_info_link', esc_html__('More Info', 'modern-events-calendar-lite'))); ?>

main->module('speakers.details', array('event' => $event))); } /** * @param object $event * @return void */ public function display_label_widget($event) { if(isset($event->data->labels) and !empty($event->data->labels)) { echo '
'; $mec_items = count($event->data->labels); $mec_i = 0; ?>
icons->display('bookmark'); ?>

main->m('taxonomy_labels', esc_html__('Labels', 'modern-events-calendar-lite'))); ?>

data->labels as $labels => $label) : $separator = (++$mec_i === $mec_items) ? '' : ','; echo '
' . esc_html($label["name"] . $separator) . '
'; endforeach; ?>
'; } } /** * @param object qrcode Widget * @return void */ public function display_qrcode_widget($event) { echo MEC_kses::full($this->main->module('qrcode.details', array('event' => $event))); } /** * @param object weather Widget * @return void */ public function display_weather_widget($event) { echo MEC_kses::full($this->main->module('weather.details', array('event' => $event))); } /** * @param object time Widget * @return void */ public function display_time_widget($event) { echo '
'; // Event Time if (isset($event->data->meta['mec_date']['start']) and !empty($event->data->meta['mec_date']['start'])) { if (isset($event->data->meta['mec_hide_time']) and $event->data->meta['mec_hide_time'] == '0') { $time_comment = $event->data->meta['mec_comment'] ?? ''; $allday = $event->data->meta['mec_allday'] ?? 0; ?>
icons->display('clock'); ?>

data->time) and trim($event->data->time['start'])): ?>
data->time['start']); ?>data->time['end']) ? ' - ' . $event->data->time['end'] : ''); ?>
main->m('all_day', esc_html__('All Day' , 'modern-events-calendar-lite'))); ?>
'; } /** * @param object * @return void */ public function display_register_button_widget($event) { // MEC Settings $settings = $this->main->get_settings(); $more_info = (isset($event->data->meta['mec_more_info']) and trim($event->data->meta['mec_more_info']) and $event->data->meta['mec_more_info'] != 'http://') ? $event->data->meta['mec_more_info'] : ''; if(isset($event->date) and isset($event->date['start']) and isset($event->date['start']['timestamp'])) $more_info = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info', $more_info); if($this->main->can_show_booking_module($event)): ?> ID, $event->date['start']['timestamp'], 'more_info_target', (isset($event->data->meta['mec_more_info_target']) ? $event->data->meta['mec_more_info_target'] : '_self')); $more_info_title = MEC_feature_occurrences::param($event->ID, $event->date['start']['timestamp'], 'more_info_title', ((isset($event->data->meta['mec_more_info_title']) and trim($event->data->meta['mec_more_info_title'])) ? $event->data->meta['mec_more_info_title'] : esc_html__('Read More', 'modern-events-calendar-lite'))); ?> main->get_master_organizer_id($event); $organizer = ($organizer_id ? $this->main->get_organizer_data($organizer_id) : array()); if($organizer_id and count($organizer)) { echo '
'; $this->show_other_organizers($event); echo '
'; } } /** * @param object organizer Widget * @return void */ public function display_organizer_widget($event) { $organizer_id = $this->main->get_master_organizer_id($event); $organizer = ($organizer_id ? $this->main->get_organizer_data($organizer_id) : array()); if($organizer_id and count($organizer)) { echo '
'; ?>
icons->display('home'); ?>

main->m('taxonomy_organizer', esc_html__('Organizer', 'modern-events-calendar-lite'))); ?>

<?php echo (isset($organizer['name']) ? esc_attr($organizer['name']) : ''); ?>
settings['advanced_organizer']['organizer_enable_link_section_title'] ?? false ) ): ?>
icons->display('home'); ?>
icons->display('phone'); ?>
icons->display('envelope'); ?>
icons->display('sitemap'); ?>
'; } } /** * @param object $event * @return void */ public function show_other_organizers($event) { $additional_organizers_status = (!isset($this->settings['additional_organizers']) or (isset($this->settings['additional_organizers']) and $this->settings['additional_organizers'])); if(!$additional_organizers_status) return; $organizer_id = $this->main->get_master_organizer_id($event); $organizers = []; if(isset($event->data->organizers) && !empty($event->data->organizers)): foreach($event->data->organizers as $o) if($o['id'] != $organizer_id) $organizers[$o['id']] = $o; if(!count($organizers)) return; $organizer_ids = get_post_meta($event->ID, 'mec_additional_organizer_ids', true); if(!is_array($organizer_ids)) $organizer_ids = []; $organizer_ids = array_unique($organizer_ids); ?>
icons->display('home'); ?>

main->m('other_organizers', esc_html__('Other Organizers', 'modern-events-calendar-lite'))); ?>

settings['single_single_style']) and $this->settings['single_single_style'] == 'fluent')) { ?> <?php echo (isset($organizer['name']) ? esc_attr($organizer['name']) : ''); ?> <?php echo (isset($organizer['name']) ? esc_attr($organizer['name']) : ''); ?>
settings['advanced_organizer']['organizer_enable_link_section_title'] ?? false ) ): ?>
icons->display('home'); ?>
icons->display('phone'); ?>
icons->display('envelope'); ?>
icons->display('sitemap'); ?>
settings['addintional_organizers_description'] ) ? $this->settings['addintional_organizers_description'] : ''; $organizer_terms = get_the_terms($event->data, 'mec_organizer'); if($organizer_description_setting == '1'): foreach($organizer_terms as $organizer_term) { if ($organizer_term->term_id == $organizer['id'] ) { if(isset($organizer_term->description) && !empty($organizer_term->description)): ?>

description); ?>

data->locations)) return; $additional_locations_status = !isset($this->settings['additional_locations']) || $this->settings['additional_locations']; if(!$additional_locations_status) return; $location_id = $this->main->get_master_location_id($event); $locations = []; foreach($event->data->locations as $l) if($l['id'] != $location_id) $locations[$l['id']] = $l; if(!count($locations)) return; $location_ids = get_post_meta($event->ID, 'mec_additional_location_ids', true); if(!is_array($location_ids)) $location_ids = []; $location_ids = array_unique($location_ids); $display_title = !(isset($this->settings['additional_locations_disable_title']) && $this->settings['additional_locations_disable_title']); ?>
icons->display('location-pin'); ?>

main->m('other_locations', esc_html__('Other Locations', 'modern-events-calendar-lite'))); ?>

main->m('taxonomy_location', esc_html__('Location', 'modern-events-calendar-lite'))); ?> <?php echo (isset($location['name']) ? esc_attr($location['name']) : ''); ?>
settings['advanced_location']['location_enable_link_section_title'] ?? false ) ? '' : $this->icons->display('location-pin'); ?>
get_location_html($location)); ?>
icons->display('clock'); ?>
icons->display('sitemap'); ?>
icons->display('phone'); ?>
settings['addintional_locations_description'] ?? ''; $location_terms = get_the_terms($event->data, 'mec_location'); if($location_description_setting == '1'): foreach($location_terms as $location_term) { if ($location_term->term_id == $location['id'] ) { if(isset($location_term->description) && !empty($location_term->description)): ?>

description); ?>

data->time['start_timestamp'] ?? ($event->date['start']['timestamp'] ?? strtotime($event->date['start']['date'])); // Get Per Occurrence $hourly_schedules = MEC_feature_occurrences::param($event->data->ID, $timestamp, 'hourly_schedules', $event->data->hourly_schedules ?? []); // Fill with Default Schedule if(!count($hourly_schedules) && count($event->data->hourly_schedules)) $hourly_schedules = $event->data->hourly_schedules; if(is_array($hourly_schedules) and count($hourly_schedules)): // Status of Speakers Feature $speakers_status = isset($this->settings['speakers_status']) && $this->settings['speakers_status']; $speakers = []; $title = esc_html__('Hourly Schedule', 'modern-events-calendar-lite'); if(isset($args['title']) && trim($args['title'])) $title = $args['title']; ?>

= 1 and isset($day['title'])): ?>

-
main->m('taxonomy_speakers', esc_html__('Speakers:', 'modern-events-calendar-lite'))); ?>
name); ?>
term_id, 'thumbnail', true))): ?>
<?php echo esc_attr($speaker->name); ?>
name); ?>
term_id, 'job_title', true))): ?>
term_id, 'tel', true))): ?> term_id, 'email', true))): ?> term_id, 'website', true))): ?> term_id, 'facebook', true))): ?> term_id, 'twitter', true))): ?> term_id, 'instagram', true))): ?> term_id, 'linkedin', true))): ?>
description)): ?>
description); ?>
settings['display_event_fields']) || $this->settings['display_event_fields']; if(!$display and !$sidebar and !$shortcode) return; $fields = $this->main->get_event_fields(); if(!is_array($fields) || !count($fields)) return; // Start Timestamp $start_timestamp = (isset($event->date) and isset($event->date['start']) and isset($event->date['start']['timestamp'])) ? $event->date['start']['timestamp'] : NULL; $data = (isset($event->data) and isset($event->data->meta) and isset($event->data->meta['mec_fields']) and is_array($event->data->meta['mec_fields'])) ? $event->data->meta['mec_fields'] : get_post_meta($event->ID, 'mec_fields', true); if($start_timestamp) $data = MEC_feature_occurrences::param($event->ID, $start_timestamp, 'fields', $data); if(!is_array($data) || !count($data)) return; foreach($fields as $n => $item) { // n meaning number if(!is_numeric($n)) continue; $result = $data[$n] ?? ''; if((!is_array($result) && trim($result) == '') || (is_array($result) && !count($result))) continue; $content = $item['type'] ?? 'text'; if($content === 'checkbox') { $cleaned = []; foreach($result as $k => $v) { if(trim($v) !== '') $cleaned[] = $v; } $value = $cleaned; if(!count($value)) { $content = NULL; } } } if(isset($content) && $content != NULL && (isset($this->settings['display_event_fields_backend']) and $this->settings['display_event_fields_backend'] == 1) or !isset($this->settings['display_event_fields_backend'])) { $date_format = get_option('date_format'); ?>
    $field): if(!is_numeric($f)) continue; ?> $v) { if(trim($v) !== '') $cleaned[] = $v; } $value = $cleaned; if(!count($value)) continue; } $icon = $field['icon'] ?? ''; ?>
  • <?php echo (isset($field['label']) ? esc_attr($field['label']) : ''); ?> : main->to_standard_date($value); ?> main->date_i18n($date_format, strtotime($value))); ?>
settings['advanced_location']['location_enable_link_section_title'] ?? false )){ $location_link = apply_filters('mec_location_single_page_link', '', $location_id, $location_name, $location); }else{ // $location_link = (isset($location['url']) ? $location['url'] : ''); return $location_name; } if(!empty($location_link)) $location_html =''.esc_html($location_name).''; else $location_html = $location_name; return $location_html; } public function display_public_download_module($event) { $file_id = ($event and isset($event->data) and isset($event->data->meta) and isset($event->data->meta['mec_public_dl_file']) and $event->data->meta['mec_public_dl_file']) ? $event->data->meta['mec_public_dl_file'] : NULL; if(!$file_id) return; $url = wp_get_attachment_url($file_id); if(!$url) return; $title = ($event and isset($event->data) and isset($event->data->meta) and isset($event->data->meta['mec_public_dl_title']) and $event->data->meta['mec_public_dl_title']) ? $event->data->meta['mec_public_dl_title'] : NULL; $description = ($event and isset($event->data) and isset($event->data->meta) and isset($event->data->meta['mec_public_dl_description']) and $event->data->meta['mec_public_dl_description']) ? $event->data->meta['mec_public_dl_description'] : NULL; echo MEC_kses::element('
'.($description ? '

'.wp_kses(wpautop($description), array('p' => array(), 'br' => array())).'

' : '').' '.(trim($title) ? esc_html($title) : esc_html__('Download', 'modern-events-calendar-lite')).'
'); } public function display_disclaimer($event) { // Created by FES? $fes = ($event and isset($event->data, $event->data->meta, $event->data->meta['mec_created_by_fes'])); if($fes and isset($this->settings['fes_disclaimer']) and trim($this->settings['fes_disclaimer'])) return '

'.MEC_kses::element($this->settings['fes_disclaimer']).'

'; return ''; } public function display_trailer_url($event) { // Trailer URL $trailer_url = ($event and isset($event->data, $event->data->meta, $event->data->meta['mec_trailer_url'])) ? $event->data->meta['mec_trailer_url'] : ''; // No Trailer URL if(!trim($trailer_url)) return ''; $oembed = wp_oembed_get($trailer_url); if($oembed) $html = $oembed; else { $title = ($event and isset($event->data, $event->data->meta, $event->data->meta['mec_trailer_title']) and trim($event->data->meta['mec_trailer_title'])) ? $event->data->meta['mec_trailer_title'] : esc_html__('Watch Event Trailer', 'modern-events-calendar-lite'); $html = ''.$title.''; } return '

'.$html.'

'; } public function display_image_module($event, $single_thumbnail_size = 'full') { $gallery_html = \MEC\SingleBuilder\SingleBuilder::getInstance()->output('event-gallery', $event->ID, []); // Gallery if($gallery_html) return $gallery_html; // Featured Image else { $featured_image = $event->data->thumbnails[ $single_thumbnail_size ]; if(isset($this->settings['featured_image_caption']) and $this->settings['featured_image_caption']) $featured_image .= MEC_kses::element($this->main->display_featured_image_caption($event)); return $featured_image; } } public function display_banner_module($event, $occurrence_full, $occurrence_end_full) { // Not enabled if(!$this->can_display_banner_module($event)) return ''; // Banner Options $banner = isset($event->data, $event->data->meta, $event->data->meta['mec_banner']) ? $event->data->meta['mec_banner'] : []; if(!is_array($banner)) $banner = []; $color = $banner['color'] ?? ''; $image = $banner['image'] ?? ''; $featured_image = $banner['use_featured_image'] ?? 0; // Force Featured Image if(isset($this->settings['banner_force_featured_image']) && $this->settings['banner_force_featured_image']) { $featured_image = 1; if(trim($color) === '') $color = '#333333'; } if($featured_image) $image = (string) get_the_post_thumbnail_url($event->ID, 'full'); $mode = 'color'; $bg = 'background: '.$color; if(trim($image)) { $bg = 'background: url(\''.$image.'\') no-repeat center; background-size: cover'; $mode = trim($color) ? 'color-image' : 'image'; } $location_id = $this->main->get_master_location_id($event); $location = $location_id ? $this->main->get_location_data($location_id) : []; $content = ''; // Title $content .= '
'; $content .= MEC_kses::element($this->main->display_cancellation_reason($event, $this->display_cancellation_reason)); $content .= '

'.apply_filters('mec_occurrence_event_title', get_the_title(), $event).'

'; $content .= '
'; // Date & Time ob_start(); $this->display_datetime_widget($event, $occurrence_full, $occurrence_end_full); $content .= '
'.ob_get_clean().'
'; // Location if($location_id and count($location)) { ob_start(); $this->display_location_widget($event); $content .= '
'.ob_get_clean().'
'; } return '
' .$content. '
'. ($mode === 'color-image' ? '
' : ''). '
'; } public function can_display_banner_module($event) { // Not Enabled Globally if(!isset($this->settings['banner_status']) || !$this->settings['banner_status']) return false; // Forced Globally if(isset($this->settings['banner_force_featured_image']) && $this->settings['banner_force_featured_image']) return true; // Banner Options $banner = isset($event->data, $event->data->meta, $event->data->meta['mec_banner']) ? $event->data->meta['mec_banner'] : []; if(!is_array($banner)) $banner = []; // Not Enabled for this Event if(!isset($banner['status']) || !$banner['status']) return false; $color = $banner['color'] ?? ''; $image = $banner['image'] ?? ''; $use_featured_image = $banner['use_featured_image'] ?? 0; // No Color and No Image if(trim($color) === '' && trim($image) === '' && !$use_featured_image) return false; return true; } public function display_faq($event) { // FAQs $faqs = isset($event->data->meta['mec_faq']) && is_array($event->data->meta['mec_faq']) ? $event->data->meta['mec_faq'] : []; // No FAQ if(!count($faqs)) return; ?>
main->is_midnight_event($event); ?>
icons->display('calendar'); ?>

main->dateify($event, $this->date_format1)); ?>
main->date_label($occurrence_full, $occurrence_end_full, $this->date_format1, ' - ', true, 0, $event)); ?>
main->holding_status($event)); ?>
data->meta['mec_hide_time']) and $event->data->meta['mec_hide_time'] == '0') { $time_comment = $event->data->meta['mec_comment'] ?? ''; $allday = $event->data->meta['mec_allday'] ?? 0; ?>
icons->display('clock'); ?>

data->time) and trim($event->data->time['start'])): ?>
data->time['start']); ?>data->time['end']) ? ' - '.esc_html($event->data->time['end']) : ''); ?>
main->m('all_day', esc_html__('All Day' , 'modern-events-calendar-lite'))); ?>
data->labels); $mec_i = 0; ?>
icons->display('bookmark'); ?>

main->m('taxonomy_labels', esc_html__('Labels', 'modern-events-calendar-lite'))); ?>

data->labels as $label) { $separator = (++$mec_i === $mec_items) ? '' : ','; echo '
' . esc_html($label["name"] . $separator) . '
'; } ?>