function tt_timetable($atts, $content) { extract(shortcode_atts(array("event" => "", "event_category" => "", "events_page" => "", "filter_style" => "dropdown_list", "filter_kind" => "event", "measure" => 1, "filter_label" => "All Events", "hour_category" => "", "columns" => "", "time_format" => "H.i", "hide_hours_column" => 0, "hide_all_events_view" => 0, "show_end_hour" => 0, "event_layout" => 1, "box_bg_color" => "00A27C", "box_hover_bg_color" => "1F736A", "box_txt_color" => "FFFFFF", "box_hover_txt_color" => "FFFFFF", "box_hours_txt_color" => "FFFFFF", "box_hours_hover_txt_color" => "FFFFFF", "filter_color" => "00A27C", "row1_color" => "F0F0F0", "row2_color" => "", "hide_empty" => 0, "disable_event_url" => 0, "text_align" => "center", "row_height" => 31, "id" => "", "responsive" => 1, "direction" => "ltr", "font_custom" => "", "font" => "", "font_subset" => "", "font_size" => "", "custom_css" => ""), $atts)); $events_array = array_values(array_diff(array_filter(array_map('trim', explode(",", $event))), array("-"))); $event_category_array = array_values(array_diff(array_filter(array_map('trim', explode(",", $event_category))), array("-"))); if (count($event_category_array)) { //events array ids $events_array_id = array(); for ($i = 0; $i < count($events_array); $i++) { $event = get_posts(array('name' => $events_array[$i], 'post_type' => 'events', 'post_status' => 'publish', 'numberposts' => 1)); $events_array_id[] = $event[0]->ID; } $events_array_cat = get_posts(array('include' => $events_array_id, 'post_type' => 'events', 'post_status' => 'publish', 'posts_per_page' => -1, 'nopaging' => true, 'orderby' => 'menu_order', 'order' => 'ASC', 'events_category' => implode(",", $event_category_array))); $events_array = array(); for ($i = 0; $i < count($events_array_cat); $i++) { $events_array[] = $events_array_cat[$i]->post_name; } } if (!$hide_all_events_view) { $events_list_html = '<li><a href="#all-events' . ($id != '' ? '-' . $id : '') . '" title="' . esc_attr($filter_label) . '">' . $filter_label . '</a></li>'; } else { $events_list_html = ''; } if ($filter_kind == "event" || !count($event_category_array)) { $events_array_count = count($events_array); for ($i = 0; $i < $events_array_count; $i++) { $events_list = get_posts(array("name" => $events_array[$i], 'post_type' => 'events', 'post_status' => 'publish')); if ($events_list) { $events_list_html .= '<li><a href="#' . $events_array[$i] . '" title="' . esc_attr($events_list[0]->post_title) . '">' . $events_list[0]->post_title . '</a></li>'; } if ($hide_all_events_view && $filter_style == "dropdown_list" && ($filter_label == "All Events" || $filter_label == "") && !$i) { $filter_label = $events_list[$i]->post_title; } /*query_posts(array( "name" => $events_array[$i], 'post_type' => 'events', 'post_status' => 'publish' )); if(have_posts()) { the_post(); $events_list_html .= '<li><a href="#' . $events_array[$i] . '" title="' . esc_attr(get_the_title()) . '">' . get_the_title() . '</a></li>'; } //Reset Query wp_reset_query();*/ } } else { $events_category_array_count = count($event_category_array); for ($i = 0; $i < $events_category_array_count; $i++) { $category = get_term_by("slug", $event_category_array[$i], "events_category"); $events_list_html .= '<li><a href="#' . $event_category_array[$i] . '" title="' . esc_attr($category->name) . '">' . $category->name . '</a></li>'; if ($hide_all_events_view && $filter_style == "dropdown_list" && ($filter_label == "All Events" || $filter_label == "") && !$i) { $filter_label = $category->name; } } } $output = ''; if ($direction == "rtl") { $output .= "<div class='rtl'>"; } if ($filter_style == "dropdown_list") { $output .= '<ul class="timetable_clearfix tabs_box_navigation' . ((int) $responsive ? " tt_responsive" : "") . ' sf-timetable-menu' . ($id != "" ? ' ' . $id : '') . '"> <li class="tabs_box_navigation_selected"><label>' . $filter_label . '</label><span class="tabs_box_navigation_icon"></span><ul class="sub-menu">' . $events_list_html . '</ul></li> </ul>'; } if ((int) $row_height != 31 || strtoupper($box_bg_color) != "00A27C" || strtoupper($filter_color) != "00A27C" || $custom_css != "") { $output .= '<style type="text/css">' . $custom_css . ((int) $row_height != 31 ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable td{height: ' . (int) $row_height . (substr($row_height, -2) != "px" ? 'px' : '') . ';}' : '') . (strtoupper($box_bg_color) != "00A27C" ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event{background: #' . $box_bg_color . ';}' : '') . (strtoupper($filter_color) != "00A27C" ? ($id != "" ? '#' . $id : '') . ' .tt_tabs_navigation li a:hover,' . ($id != "" ? '#' . $id : '') . ' .tt_tabs_navigation li a.selected,' . ($id != "" ? '#' . $id : '') . ' .tt_tabs_navigation li.ui-tabs-active a{border-color:#' . $filter_color . ' !important;}' . ($id != "" ? '.' . $id : '') . '.tabs_box_navigation.sf-timetable-menu .tabs_box_navigation_selected{background-color:#' . $filter_color . ';border-color:#' . $filter_color . ';}' . ($id != "" ? '.' . $id : '') . '.tabs_box_navigation.sf-timetable-menu .tabs_box_navigation_selected:hover{background-color: #FFF; border: 1px solid rgba(0, 0, 0, 0.1);}' . ($id != "" ? '.' . $id : '') . '.sf-timetable-menu li ul li a:hover, .sf-timetable-menu li ul li.selected a:hover{background-color:#' . $filter_color . ';}' : '') . '</style>'; } if ($font != "") { $output .= '<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=' . $font . '&subset=' . $font_subset . '">'; } if ($font_custom != "" || $font != "" || (int) $font_size > 0) { $font_explode = explode(":", $font); $font = '"' . $font_explode[0] . '"'; $output .= '<style type="text/css">' . ($font_custom != "" || $font != "" ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable{font-family:' . ($font_custom != "" ? $font_custom : $font) . ' !important;}' : '') . ((int) $font_size > 0 ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable th,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable td,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event .before_hour_text,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event .after_hour_text,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event .event_header{font-size:' . (int) $font_size . 'px !important;}' : '') . '</style>'; } $output .= '<div class="timetable_clearfix tt_tabs' . ((int) $responsive ? " tt_responsive" : "") . " event_layout_" . $event_layout . '"' . ($id != "" ? ' id="' . $id . '"' : '') . '> <ul class="timetable_clearfix tt_tabs_navigation"' . ($filter_style == "dropdown_list" ? ' style="display: none;"' : '') . '>' . $events_list_html . '</ul>'; if (!$hide_all_events_view) { $output .= '<div id="all-events' . ($id != '' ? '-' . $id : '') . '">' . tt_get_timetable($atts, $events_array) . '</div>'; } if ($filter_kind == "event" || !count($event_category_array)) { for ($i = 0; $i < $events_array_count; $i++) { $output .= '<div id="' . $events_array[$i] . '" class="tt-ui-tabs-hide">' . tt_get_timetable($atts, $events_array[$i]) . '</div>'; } } else { for ($i = 0; $i < $events_category_array_count; $i++) { $events_array = array(); $events_array = get_posts(array('include' => (array) $events_array_id, 'post_type' => 'events', 'post_status' => 'publish', 'events_category' => $event_category_array[$i], 'posts_per_page' => -1, 'nopaging' => true)); $events_array_for_timetable = array(); for ($j = 0; $j < count($events_array); $j++) { $events_array_for_timetable[] = $events_array[$j]->post_name; } $output .= '<div id="' . $event_category_array[$i] . '" class="tt-ui-tabs-hide">' . (count($events_array) ? tt_get_timetable($atts, $events_array_for_timetable) : __('No events available in ' . $event_category_array[$i] . ' category!', 'timetable')) . '</div>'; } } $output .= '</div>'; if ($direction == "rtl") { $output .= "</div>"; } return $output; }
function tt_timetable($atts, $content) { $timetable_events_settings = timetable_events_settings(); extract(shortcode_atts(array("event" => "", "event_category" => "", "events_page" => "", "filter_style" => "dropdown_list", "filter_kind" => "event", "measure" => 1, "filter_label" => "All Events", "filter_label_2" => "All Events Categories", "hour_category" => "", "columns" => "", "time_format" => "H.i", "hide_hours_column" => 0, "hide_all_events_view" => 0, "show_end_hour" => 0, "event_layout" => 1, "box_bg_color" => "00A27C", "box_hover_bg_color" => "1F736A", "box_txt_color" => "FFFFFF", "box_hover_txt_color" => "FFFFFF", "box_hours_txt_color" => "FFFFFF", "box_hours_hover_txt_color" => "FFFFFF", "filter_color" => "00A27C", "row1_color" => "F0F0F0", "row2_color" => "", "hide_empty" => 0, "disable_event_url" => 0, "text_align" => "center", "row_height" => 31, "id" => "", "responsive" => 1, "event_description_responsive" => "none", "collapse_event_hours_responsive" => 0, "direction" => "ltr", "font_custom" => "", "font" => "", "font_subset" => "", "font_size" => "", "custom_css" => ""), $atts)); //replace grave accent added by Visual Composer $custom_css = str_replace("``", "\"", $custom_css); //remove leading '#' hash character $color_params = array('box_bg_color', 'box_hover_bg_color', 'box_txt_color', 'box_hover_txt_color', 'box_hours_txt_color', 'box_hours_hover_txt_color', 'filter_color', 'row1_color', 'row2_color'); foreach ($color_params as $color_param) { if (!empty(${$color_param})) { ${$color_param} = ltrim(${$color_param}, "#"); } } $events_array = array_values(array_diff(array_filter(array_map('trim', explode(",", $event))), array("-"))); $event_category_array = array_values(array_diff(array_filter(array_map('trim', explode(",", $event_category))), array("-"))); if (!$hide_all_events_view) { $events_list_html = '<li><a href="#all-events' . ($id != '' ? '-' . urlencode($id) : '') . '" title="' . esc_attr($filter_label) . '">' . $filter_label . '</a></li>'; $events_categories_list_html = '<li><a href="#all-events' . ($id != '' ? '-' . urlencode($id) : '') . '" title="' . esc_attr($filter_kind == "event_and_event_category" ? $filter_label_2 : $filter_label) . '">' . ($filter_kind == "event_and_event_category" ? $filter_label_2 : $filter_label) . '</a></li>'; } else { $events_list_html = ''; $events_categories_list_html = ''; } if ($filter_kind == "event" || !count($event_category_array) || $filter_kind == "event_and_event_category" && !empty($event)) { $events_array_count = count($events_array); for ($i = 0; $i < $events_array_count; $i++) { $events_list = get_posts(array("name" => $events_array[$i], 'post_type' => $timetable_events_settings['slug'], 'post_status' => 'publish')); if ($events_list) { $events_list_html .= '<li><a href="#' . urlencode($events_array[$i]) . '" title="' . esc_attr($events_list[0]->post_title) . '">' . $events_list[0]->post_title . '</a></li>'; } if ($hide_all_events_view && $filter_style == "dropdown_list" && ($filter_label == "All Events" || $filter_label == "") && !$i) { $filter_label = $events_list[$i]->post_title; } } } if ($filter_kind == "event_category" || $filter_kind == "event_and_event_category" && !empty($event_category)) { $events_category_array_count = count($event_category_array); for ($i = 0; $i < $events_category_array_count; $i++) { $category = get_term_by("slug", $event_category_array[$i], "events_category"); if (!empty($category)) { $events_categories_list_html .= '<li><a href="#' . urlencode($event_category_array[$i]) . '" title="' . esc_attr($category->name) . '">' . $category->name . '</a></li>'; if ($hide_all_events_view && $filter_style == "dropdown_list" && !$i) { if ($filter_kind != "event_and_event_category" && ($filter_label == "All Events" || $filter_label == "")) { $filter_label = $category->name; } if ($filter_kind == "event_and_event_category" && ($filter_label_2 == "All Events Categories" || $filter_label_2 == "")) { $filter_label_2 = $category->name; } } } } } $events_array_verified = array(); if (count($event_category_array)) { //events array ids $events_array_id = array(); for ($i = 0; $i < count($events_array); $i++) { $event_post = get_posts(array('name' => $events_array[$i], 'post_type' => $timetable_events_settings['slug'], 'post_status' => 'publish', 'numberposts' => 1)); $events_array_id[] = $event_post[0]->ID; } $events_array_cat = get_posts(array('include' => $events_array_id, 'post_type' => $timetable_events_settings['slug'], 'post_status' => 'publish', 'posts_per_page' => -1, 'nopaging' => true, 'orderby' => 'menu_order', 'order' => 'ASC', 'events_category' => implode("','", array_map("tt_strtolower_urlencode", $event_category_array)))); if (!empty($events_array_cat)) { for ($i = 0; $i < count($events_array_cat); $i++) { $events_array_verified[] = urldecode($events_array_cat[$i]->post_name); } } else { $events_array_verified = -1; } } $output = ''; if ($direction == "rtl") { $output .= "<div class='rtl'>"; } if ($filter_style == "dropdown_list") { if ($filter_kind == "event_category" || $filter_kind == "event_and_event_category") { $output .= '<ul class="timetable_clearfix tabs_box_navigation events_categories_filter' . ((int) $responsive ? " tt_responsive" : "") . ' sf-timetable-menu' . ($id != "" ? ' ' . urlencode($id) : '') . ' ' . ($filter_kind == "event_and_event_category" ? "tt_double_buttons" : "") . '"> <li class="tabs_box_navigation_selected"><label>' . ($filter_kind == "event_and_event_category" ? $filter_label_2 : $filter_label) . '</label><span class="tabs_box_navigation_icon"></span>' . (!$hide_all_events_view || !empty($event_category) ? '<ul class="sub-menu">' . $events_categories_list_html . '</ul>' : '') . '</li> </ul>'; } if ($filter_kind == "event" || $filter_kind == "event_and_event_category") { $output .= '<ul class="timetable_clearfix tabs_box_navigation events_filter' . ((int) $responsive ? " tt_responsive" : "") . ' sf-timetable-menu' . ($id != "" ? ' ' . urlencode($id) : '') . ' ' . ($filter_kind == "event_and_event_category" ? "tt_double_buttons" : "") . '"> <li class="tabs_box_navigation_selected"><label>' . $filter_label . '</label><span class="tabs_box_navigation_icon"></span>' . (!$hide_all_events_view || !empty($event) ? '<ul class="sub-menu">' . $events_list_html . '</ul>' : '') . '</li> </ul>'; } } if ((int) $row_height != 31 || strtoupper($box_bg_color) != "00A27C" || strtoupper($filter_color) != "00A27C" || $custom_css != "") { $output .= '<style type="text/css">' . $custom_css . ((int) $row_height != 31 ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable td{height: ' . (int) $row_height . (substr($row_height, -2) != "px" ? 'px' : '') . ';}' : '') . (strtoupper($box_bg_color) != "00A27C" ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event{background: #' . $box_bg_color . ';}' : '') . (strtoupper($filter_color) != "00A27C" ? ($id != "" ? '#' . $id : '') . ' .tt_tabs_navigation li a:hover,' . ($id != "" ? '#' . $id : '') . ' .tt_tabs_navigation li a.selected,' . ($id != "" ? '#' . $id : '') . ' .tt_tabs_navigation li.ui-tabs-active a{border-color:#' . $filter_color . ' !important;}' . ($id != "" ? '.' . $id : '') . '.tabs_box_navigation.sf-timetable-menu .tabs_box_navigation_selected{background-color:#' . $filter_color . ';border-color:#' . $filter_color . ';}' . ($id != "" ? '.' . $id : '') . '.tabs_box_navigation.sf-timetable-menu .tabs_box_navigation_selected:hover{background-color: #FFF; border: 1px solid rgba(0, 0, 0, 0.1);}' . ($id != "" ? '.' . $id : '') . '.sf-timetable-menu li ul li a:hover, .sf-timetable-menu li ul li.selected a:hover{background-color:#' . $filter_color . ';}' : '') . '</style>'; } if ($font != "") { $output .= '<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=' . $font . '&subset=' . $font_subset . '">'; } if ($font_custom != "" || $font != "" || (int) $font_size > 0) { $font_explode = explode(":", $font); $font = '"' . $font_explode[0] . '"'; $output .= '<style type="text/css">' . ($font_custom != "" || $font != "" ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable{font-family:' . ($font_custom != "" ? $font_custom : $font) . ' !important;}' : '') . ((int) $font_size > 0 ? ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable th,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable td,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event .before_hour_text,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event .after_hour_text,' . ($id != "" ? '#' . $id : '') . '.tt_tabs .tt_timetable .event .event_header{font-size:' . (int) $font_size . 'px !important;}' : '') . '</style>'; } $output .= '<div class="timetable_clearfix tt_tabs' . ((int) $responsive ? " tt_responsive" : "") . " event_layout_" . $event_layout . '"' . ($id != "" ? ' id="' . $id . '"' : '') . '>'; // we need to display all filter items, both events and events categories, so the filter buttons from both lists are working correctly if ($filter_kind == "event_and_event_category") { $all_filters_list_html = $events_categories_list_html . $events_list_html; // filter list must be hidden $output .= '<ul class="timetable_clearfix tt_tabs_navigation all_filters" style="display: none !important;">' . $all_filters_list_html . '</ul>'; } if ($filter_kind == "event_category" || $filter_kind == "event_and_event_category") { $events_categories_list_html_view_all = ''; if ($hide_all_events_view && empty($event_category)) { $events_categories_list_html_view_all = '<li><a href="#all-events' . ($id != '' ? '-' . urlencode($id) : '') . '" title="' . esc_attr($filter_kind == "event_and_event_category" ? $filter_label_2 : $filter_label) . '">' . ($filter_kind == "event_and_event_category" ? $filter_label_2 : $filter_label) . '</a></li>'; } $output .= '<ul class="timetable_clearfix tt_tabs_navigation events_categories_filter"' . ($filter_style == "dropdown_list" ? ' style="display: none;"' : '') . '>' . $events_categories_list_html_view_all . $events_categories_list_html . '</ul>'; } if ($filter_kind == "event" || $filter_kind == "event_and_event_category") { $events_list_html_view_all = ''; if ($hide_all_events_view && empty($event)) { $events_list_html_view_all = '<li><a href="#all-events' . ($id != '' ? '-' . urlencode($id) : '') . '" title="' . esc_attr($filter_label) . '">' . $filter_label . '</a></li>'; } $output .= '<ul class="timetable_clearfix tt_tabs_navigation events_filter"' . ($filter_style == "dropdown_list" ? ' style="display: none;"' : '') . '>' . $events_list_html_view_all . $events_list_html . '</ul>'; } if (!$hide_all_events_view) { $output .= '<div id="all-events' . ($id != '' ? '-' . urlencode($id) : '') . '">' . (empty($events_array_verified) ? tt_get_timetable($atts, $events_array) : ($events_array_verified != -1 ? tt_get_timetable($atts, $events_array_verified) : __('No events available!', 'timetable'))) . '</div>'; } if ($filter_kind == "event" || !count($event_category_array) || $filter_kind == "event_and_event_category") { for ($i = 0; $i < $events_array_count; $i++) { $post = get_page_by_path($events_array[$i], ARRAY_A, "events"); $categories = wp_get_post_terms($post["ID"], "events_category"); $categories_str = ""; foreach ($categories as $category) { $categories_str .= "tt-event-category-" . $category->slug . " "; } $output .= '<div id="' . urlencode($events_array[$i]) . '" class="tt-ui-tabs-hide ' . $categories_str . '">' . (empty($events_array_verified) || $events_array_verified != -1 && in_array($events_array[$i], $events_array_verified) ? tt_get_timetable($atts, $events_array[$i]) : __('No events available!', 'timetable')) . '</div>'; } } if ($filter_kind == "event_category" || $filter_kind == "event_and_event_category") { for ($i = 0; $i < $events_category_array_count; $i++) { $events_array_posts = array(); $events_array_posts = get_posts(array('include' => (array) $events_array_id, 'post_type' => $timetable_events_settings['slug'], 'post_status' => 'publish', 'events_category' => $event_category_array[$i], 'posts_per_page' => -1, 'nopaging' => true)); $events_array_for_timetable = array(); for ($j = 0; $j < count($events_array_posts); $j++) { $events_array_for_timetable[] = urldecode($events_array_posts[$j]->post_name); } $output .= '<div id="' . urlencode($event_category_array[$i]) . '" class="tt-ui-tabs-hide">' . (count($events_array_posts) ? tt_get_timetable($atts, $events_array_for_timetable) : sprintf(__('No events available in %1$s category!', 'timetable'), $event_category_array[$i])) . '</div>'; } } $output .= '</div>'; $output .= "<div id='tt_error_message' class='tt_hide'>" . __('No events available!', 'timetable') . "</div>"; if ($direction == "rtl") { $output .= "</div>"; } return $output; }