<?php function tt_remove_wpautop($content) { return do_shortcode(shortcode_unautop($content)); } //items list function tt_event_items_list($atts, $content) { extract(shortcode_atts(array( "class" => "", ), $atts)); $output = ''; $output .= ' <ul class="tt_event_items_list' . ($class!='' ? ' ' . $class : '') . '"> ' . tt_remove_wpautop($content) . ' </ul>'; return $output; } add_shortcode("tt_items_list", "tt_event_items_list"); //items list function tt_event_item($atts, $content) { extract(shortcode_atts(array( "type" => "", "border_color" => "", "text_color" => "", "value" => "" ), $atts)); $output = ''; $output .= ' <li' . ($type=="info" ? ' class="timetable_clearfix type_info"' : '') . ($border_color!='' ? ' style="border-bottom: ' . ($border_color=='none' ? 'none' : '1px solid #' . $border_color . '') . ';"' : '') . '> <' . ($type=="info" ? 'label' : 'span') . ($text_color!='' ? ' style="color: #' . $text_color . ';"' : '') . '>' . tt_remove_wpautop($content) . '</' . ($type=="info" ? 'label' : 'span') . '>'; if($value!="") $output .= '<div class="tt_event_text">' . $value . '</div>'; $output .= ' </li>'; return $output; } add_shortcode("tt_item", "tt_event_item"); //columns function tt_event_columns($atts, $content) { extract(shortcode_atts(array( "class" => "" ), $atts)); return '<div class="tt_event_columns' . ($class!='' ? ' ' . $class : '') . '">' . tt_remove_wpautop($content) . '</div>'; } add_shortcode("tt_columns", "tt_event_columns"); //column left function tt_event_column_left($atts, $content) { return '<div class="tt_event_column_left">' . tt_remove_wpautop($content) . '</div>'; } add_shortcode("tt_column_left", "tt_event_column_left"); //column right function tt_event_column_right($atts, $content) { return '<div class="tt_event_column_right">' . tt_remove_wpautop($content) . '</div>'; } add_shortcode("tt_column_right", "tt_event_column_right"); //event hours function tt_event_hours($atts, $content) { global $post; wp_register_style('timetable_inline_style', false); wp_enqueue_style('timetable_inline_style'); $inline_style = ''; extract(shortcode_atts(array( 'event_id' => $post->ID, 'title' => 'Event Hours', 'time_format' => 'H.i', 'class' => '', 'hour_category' => '', 'text_color' => '', 'border_color' => '', 'columns' => '', 'timetable_page_id' => '', 'show_booking_button' => 'no', 'show_available_slots' => 'no', 'available_slots_singular_label' => '{number_available}/{number_total} slot available', 'available_slots_plural_label' => '{number_available}/{number_total} slots available', 'booking_label' => __('Book now', 'timetable'), 'booked_label' => __('Booked', 'timetable'), 'unavailable_label' => __('Unavailable', 'timetable'), 'booking_text_color' => 'FFFFFF', 'booking_bg_color' => '05BB90', 'booking_hover_text_color' => 'FFFFFF', 'booking_hover_bg_color' => '07B38A', 'booked_text_color' => 'AAAAAA', 'booked_bg_color' => 'EEEEEE', 'unavailable_text_color' => 'AAAAAA', 'unavailable_bg_color' => 'EEEEEE', 'available_slots_color' => '34495E', ), $atts)); if($hour_category!=null && $hour_category!="-") $hour_category = array_values(array_diff(array_filter(array_map('trim', explode(",", $hour_category))), array("-"))); if($columns!="") { $weekdays_explode = explode(",", $columns); $weekdays_in_query = ""; foreach($weekdays_explode as $weekday_explode) $weekdays_in_query .= "'" . $weekday_explode . "'" . ($weekday_explode!=end($weekdays_explode) ? "," : ""); } $user_id = get_current_user_id(); global $wpdb; $output = ''; //The actual fields for data entry $query = "SELECT t1.event_hours_id, t1.event_id, t1.start, t1.end, t1.before_hour_text, t1.after_hour_text, t1.slots_per_user, t1.available_places AS available_places, t2.post_title AS weekday, t2.menu_order, COALESCE(t4.booking_count,0) AS booking_count, COALESCE(t6.booking_count,0) AS current_user_booking_count FROM `" . $wpdb->prefix . "event_hours` AS t1 LEFT JOIN " . $wpdb->posts . " AS t2 ON (t1.weekday_id=t2.ID) LEFT JOIN (SELECT event_hours_id, COALESCE(COUNT(booking_id),0) as booking_count FROM " . $wpdb->prefix . "event_hours_booking GROUP BY event_hours_id) AS t4 ON (t1.event_hours_id=t4.event_hours_id) LEFT JOIN (SELECT event_hours_id, user_id, COUNT(booking_id) as booking_count FROM " . $wpdb->prefix . "event_hours_booking where user_id= " . (int)$user_id . " and user_id!=0 GROUP BY event_hours_id) AS t6 ON t1.event_hours_id=t6.event_hours_id WHERE t1.event_id='" . (int)$event_id . "'"; if($hour_category!=null && $hour_category!="-") $query .= " AND t1.category IN('" . join("','", $hour_category) . "')"; if(isset($weekdays_in_query) && $weekdays_in_query!="") $query .= " AND t2.post_name IN(" . $weekdays_in_query . ")"; $query .= " ORDER BY t2.menu_order, t1.start, t1.end"; $event_hours = $wpdb->get_results($query); $event_hours_count = count($event_hours); if(!$event_hours_count) return $output; if($title!="") $output .= '<h3 class="tt_event_margin_top_27">' . $title . '<span class="tt_event_hours_count">(' . $event_hours_count . ')</span></h3>'; //custom styles if(strtoupper($available_slots_color)!="34495E") { $inline_style .= (strtoupper($available_slots_color)!="34495E" ? ' .tt_event_hours .available_slots_wrapper span.available_slots { color:#' . $available_slots_color . ' !important;}' : ''); } $output .= ' <ul id="event_hours_list" class="timetable_clearfix tt_event_hours' . ($class!="" ? ' ' . $class : '') . '">'; for($i=0; $i<$event_hours_count; $i++) { //get event color if($border_color=="") $border_color = "#" . get_post_meta($event_hours[$i]->event_id, "timetable_color", true); $output .= '<li' . ($border_color!="" ? ' style="border-left-color:' . $border_color . ';"' : '') . ' id="event_hours_' . $event_hours[$i]->event_hours_id . '" class="event_hours_' . ($i%2==0 ? 'left' : 'right') . '"><h4' . ($text_color!="" ? ' style="color:' . $text_color . ';"' : '') . '>' . $event_hours[$i]->weekday . '</h4><h4' . ($text_color!="" ? ' style="color:' . $text_color . ';"' : '') . '>' . date($time_format, strtotime($event_hours[$i]->start)) . ' - ' . date($time_format, strtotime($event_hours[$i]->end)) . '</h4>'; if($event_hours[$i]->before_hour_text!="" || $event_hours[$i]->after_hour_text!="") { $output .= '<p' . ($text_color!="" ? ' style="color:' . $text_color . ';"' : '') . ' class="tt_event_padding_bottom_0">'; if($event_hours[$i]->before_hour_text!="") $output .= $event_hours[$i]->before_hour_text; if($event_hours[$i]->after_hour_text!="") $output .= ($event_hours[$i]->before_hour_text!="" ? '<br>' : '') . $event_hours[$i]->after_hour_text; $output .= '</p>'; } //display booking button if($show_booking_button=='yes') { $taken_slots = $event_hours[$i]->booking_count; $total_slots = $event_hours[$i]->available_places; $available_slots = $total_slots-$taken_slots; $booking_content = prepare_booking_button(array( 'timetable_page_id' => $timetable_page_id, 'redirect' => 'yes', 'current_user_booking_count' => $event_hours[$i]->current_user_booking_count, 'slots_per_user' => $event_hours[$i]->slots_per_user, 'event_hours_id' => $event_hours[$i]->event_hours_id, 'show_booking_button' => $show_booking_button, 'booking_label' => $booking_label, 'booked_label' => $booked_label, 'unavailable_label' => $unavailable_label, 'booking_text_color' => $booking_text_color, 'booking_bg_color' => $booking_bg_color, 'booking_hover_text_color' => $booking_hover_text_color, 'booking_hover_bg_color' => $booking_hover_bg_color, 'booked_text_color' => $booked_text_color, 'booked_bg_color' => $booked_bg_color, 'unavailable_text_color' => $unavailable_text_color, 'unavailable_bg_color' => $unavailable_bg_color, 'available_slots' => $available_slots, )); $booking_slots_label = ''; if($show_available_slots=='yes' && $total_slots>0) { $booking_slots_label = prepare_booking_slots_label(array( 'available_slots' => $available_slots, 'taken_slots' => $taken_slots, 'total_slots' => $total_slots, 'available_slots_singular_label' => $available_slots_singular_label, 'available_slots_plural_label' => $available_slots_plural_label, )); $booking_slots_label = "<p class='available_slots_wrapper'> <span class='available_slots id-" . $event_hours[$i]->event_hours_id . "'>" . $booking_slots_label . "</span> </p>"; } $output .= $booking_slots_label . $booking_content; } $output .= '</li>'; } $output .= '</ul>'; wp_add_inline_style('timetable_inline_style', $inline_style); return $output; } add_shortcode("tt_event_hours", "tt_event_hours"); ?>