<?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");
?>