function mc_search_results($query) { $limits = true; $before = apply_filters('mc_past_search_results', 0); $after = apply_filters('mc_future_search_results', 10); // return only future events, nearest 10 if (is_string($query)) { $select_category = $limit_string = $select_author = $select_host = ''; $search = " MATCH(event_title,event_desc,event_short,event_label,event_city,event_postcode,event_registration) AGAINST ('{$query}' IN BOOLEAN MODE) AND "; } else { extract($query); $select_category = $category != 'default' ? mc_select_category($category) : ''; $limit_string = mc_limit_string(); $select_author = $author != 'default' ? mc_select_author($author) : ''; $select_host = $host != 'default' ? mc_select_host($host) : ''; $prefix = $select_category . $limit_string . $select_author . $select_host != '' ? ' AND' : ''; $search = "{$prefix} MATCH(event_title,event_desc,event_short,event_label,event_city,event_postcode,event_registration) AGAINST ('{$query}' IN BOOLEAN MODE) AND "; } global $wpdb; $mcdb = $wpdb; if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) { $mcdb = mc_remote_db(); } $date = date('Y', current_time('timestamp')) . '-' . date('m', current_time('timestamp')) . '-' . date('d', current_time('timestamp')); // if a value is non-zero, I'll grab a handful of extra events so I can throw out holidays and others like that. if ($before > 0) { $before = $before + 5; $events1 = $mcdb->get_results("SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end \n\t\tFROM " . MY_CALENDAR_EVENTS_TABLE . " \n\t\tJOIN " . MY_CALENDAR_TABLE . " \n\t\tON (event_id=occur_event_id) \n\t\tJOIN " . MY_CALENDAR_CATEGORIES_TABLE . " \n\t\tON (event_category=category_id) WHERE {$select_category} {$select_author} {$select_host} {$limit_string} {$search} event_approved = 1 AND event_flagged <> 1 \n\t\tAND DATE(occur_begin) < '{$date}' ORDER BY occur_begin DESC LIMIT 0,{$before}"); } else { $events1 = array(); } $events3 = $mcdb->get_results("SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end \n\t\tFROM " . MY_CALENDAR_EVENTS_TABLE . " \n\t\tJOIN " . MY_CALENDAR_TABLE . " \n\t\tON (event_id=occur_event_id) \n\t\tJOIN " . MY_CALENDAR_CATEGORIES_TABLE . " \n\t\tON (event_category=category_id) WHERE {$select_category} {$select_author} {$select_host} {$limit_string} {$search} event_approved = 1 AND event_flagged <> 1 \n\t\tAND DATE(occur_begin) = '{$date}'"); if ($after > 0) { $after = $after + 5; $events2 = $mcdb->get_results("SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end \n\t\tFROM " . MY_CALENDAR_EVENTS_TABLE . " \n\t\tJOIN " . MY_CALENDAR_TABLE . " \n\t\tON (event_id=occur_event_id) \n\t\tJOIN " . MY_CALENDAR_CATEGORIES_TABLE . " \n\t\tON (event_category=category_id) WHERE {$select_category} {$select_author} {$select_host} {$limit_string} {$search} event_approved = 1 AND event_flagged <> 1 \n\t\tAND DATE(occur_begin) > '{$date}' ORDER BY occur_begin ASC LIMIT 0,{$after}"); } else { $events2 = array(); } $arr_events = array(); if (!empty($events1) || !empty($events2) || !empty($events3)) { $arr_events = array_merge($events1, $events3, $events2); } if (!get_option('mc_skip_holidays_category') || get_option('mc_skip_holidays_category') == '') { $holidays = array(); } else { $holidays = mc_get_all_holidays($before, $after, 'yes'); $holiday_array = mc_set_date_array($holidays); } if (is_array($arr_events) && !empty($arr_events)) { $no_events = false; $event_array = mc_set_date_array($arr_events); if (is_array($holidays) && count($holidays) > 0) { $event_array = mc_holiday_limit($event_array, $holiday_array); // if there are holidays, rejigger. } } if (!empty($event_array)) { $template = '<strong>{date}</strong> {title} {details}'; $template = apply_filters('mc_search_template', $template); // no filters parameter prevents infinite looping on the_content filters. $output = mc_produce_upcoming_events($event_array, $template, 'list', 'ASC', 0, $before, $after, 'yes', 'nofilters'); } else { $output = "<li class='no-results'>" . __('Sorry, your search produced no results.', 'my-calendar') . "</li>"; } return "<ol class='mc-search-results'>{$output}</ol>"; }
function my_calendar_grab_events($from, $to, $category = null, $ltype = '', $lvalue = '', $source = 'calendar', $author = null, $host = null, $holidays = null, $search = '') { global $wpdb; $mcdb = $wpdb; if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) { $mcdb = mc_remote_db(); } if ($holidays === null) { if (isset($_GET['mcat'])) { $ccategory = $_GET['mcat']; } else { $ccategory = $category; } } else { $ccategory = $category; } if (isset($_GET['ltype'])) { $cltype = $_GET['ltype']; } else { $cltype = $ltype; } if (isset($_GET['loc'])) { $clvalue = $_GET['loc']; } else { $clvalue = $lvalue; } if (isset($_GET['mc_auth'])) { $clauth = $_GET['mc_auth']; } else { $clauth = $author; } if (isset($_GET['mc_host'])) { $clhost = $_GET['mc_host']; } else { $clhost = $host; } if ($ccategory == '') { $ccategory = 'all'; } if ($clvalue == '') { $clvalue = 'all'; } if ($cltype == '') { $cltype = 'all'; } if ($clvalue == 'all') { $cltype = 'all'; } if ($clauth == '') { $clauth = 'all'; } if ($clhost == '') { $clhost = 'all'; } if (!mc_checkdate($from) || !mc_checkdate($to)) { return array(); } // not valid dates $caching = apply_filters('mc_caching_enabled', false, $ccategory, $ltype, $lvalue, $author, $host); $hash = md5($from . $to . $ccategory . $cltype . $clvalue . $clauth . $clhost); if ($source != 'upcoming') { // no caching on upcoming events by days widgets or lists if ($caching) { $output = mc_check_cache($ccategory, $cltype, $clvalue, $clauth, $clhost, $hash); if ($output && $output != 'empty') { return $output; } if ($output == 'empty') { return array(); } } } $select_category = $ccategory != 'all' ? mc_select_category($ccategory) : ''; $select_author = $clauth != 'all' ? mc_select_author($clauth) : ''; $select_host = $clhost != 'all' ? mc_select_host($clhost) : ''; $select_location = mc_limit_string('grab', $cltype, $clvalue); if ($caching && $source != 'upcoming') { $select_category = ''; $select_location = ''; $select_author = ''; $select_host = ''; } // if caching, then need all categories/locations in cache. UNLESS this is an upcoming events list $arr_events = array(); $limit_string = "event_flagged <> 1 AND event_approved = 1"; $search = mc_prepare_search_query($search); $event_query = "SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end\n\t\t\t\t\tFROM " . MY_CALENDAR_EVENTS_TABLE . " \n\t\t\t\t\tJOIN " . MY_CALENDAR_TABLE . "\n\t\t\t\t\tON (event_id=occur_event_id) \t\t\t\t\t\n\t\t\t\t\tJOIN " . MY_CALENDAR_CATEGORIES_TABLE . " \n\t\t\t\t\tON (event_category=category_id) \n\t\t\t\t\tWHERE {$select_category} {$select_location} {$select_author} {$select_host} {$limit_string} {$search} \n\t\t\t\t\tAND ( DATE(occur_begin) BETWEEN '{$from} 00:00:00' AND '{$to} 23:59:59' \n\t\t\t\t\t\tOR DATE(occur_end) BETWEEN '{$from} 00:00:00' AND '{$to} 23:59:59' \n\t\t\t\t\t\tOR ( DATE('{$from}') BETWEEN DATE(occur_begin) AND DATE(occur_end) ) \n\t\t\t\t\t\tOR ( DATE('{$to}') BETWEEN DATE(occur_begin) AND DATE(occur_end) ) ) \n\t\t\t\t\tORDER BY " . apply_filters('mc_primary_sort', 'occur_begin') . ", " . apply_filters('mc_secondary_sort', 'event_title ASC'); $events = $mcdb->get_results($event_query); if (!empty($events)) { foreach (array_keys($events) as $key) { $event =& $events[$key]; $arr_events[] = $event; } } if ($source != 'upcoming' && $caching) { $new_cache = mc_create_cache($arr_events, $hash, $category, $ltype, $lvalue, $author, $host); if ($new_cache) { $output = mc_check_cache($ccategory, $cltype, $clvalue, $clauth, $clhost, $hash); return $output; } else { // need to clean cache if the cache is maxed. return mc_clean_cache($arr_events, $ccategory, $cltype, $clvalue, $clauth, $clhost); } } else { return $arr_events; } }