function eme_get_events($o_limit = 0, $scope = "future", $order = "ASC", $o_offset = 0, $location_id = "", $category = "", $author = "", $contact_person = "", $show_ongoing = 1, $notcategory = "", $show_recurrent_events_once = 0, $extra_conditions = "")
{
global $wpdb, $eme_timezone;
$events_table = $wpdb->prefix . EVENTS_TBNAME;
$bookings_table = $wpdb->prefix . BOOKINGS_TBNAME;
if (strpos($o_limit, "=")) {
// allows the use of arguments
$defaults = array('o_limit' => 0, 'scope' => 'future', 'order' => 'ASC', 'o_offset' => 0, 'location_id' => '', 'category' => '', 'author' => '', 'contact_person' => '', 'show_ongoing' => 1, 'notcategory' => '', 'show_recurrent_events_once' => 0, 'extra_conditions' => '');
$r = wp_parse_args($o_limit, $defaults);
extract($r);
}
if ($o_limit === "") {
$o_limit = get_option('eme_event_list_number_items');
}
if ($o_limit > 0) {
$limit = "LIMIT " . intval($o_limit);
} else {
$limit = "";
}
if ($o_offset > 0) {
if ($o_limit == 0) {
$limit = "LIMIT " . intval($o_offset);
}
$offset = "OFFSET " . intval($o_offset);
} else {
$offset = "";
}
if ($order != "DESC") {
$order = "ASC";
}
$eme_date_obj = new ExpressiveDate(null, $eme_timezone);
$start_of_week = get_option('start_of_week');
$eme_date_obj->setWeekStartDay($start_of_week);
$today = $eme_date_obj->getDate();
$this_time = $eme_date_obj->getTime();
$this_datetime = $eme_date_obj->getDateTime();
$conditions = array();
// extra sql conditions we put in front, most of the time this is the most
// effective place
if ($extra_conditions != "") {
$conditions[] = $extra_conditions;
}
// if we're not in the admin itf, we don't want draft events
if (!is_admin()) {
if (is_user_logged_in()) {
$conditions[] = "event_status IN (" . STATUS_PUBLIC . "," . STATUS_PRIVATE . ")";
} else {
$conditions[] = "event_status=" . STATUS_PUBLIC;
}
if (get_option('eme_rsvp_hide_full_events')) {
// COALESCE is used in case the SUM returns NULL
// this is a correlated subquery, so the FROM clause should specify events_table again, so it will search in the outer query for events_table.event_id
$conditions[] = "(event_rsvp=0 OR (event_rsvp=1 AND event_seats > (SELECT COALESCE(SUM(booking_seats),0) AS booked_seats FROM {$bookings_table} WHERE {$bookings_table}.event_id = {$events_table}.event_id)))";
}
if (get_option('eme_rsvp_hide_rsvp_ended_events')) {
$conditions[] = "(event_rsvp=0 OR (event_rsvp=1 AND (event_end_date < '{$today}' OR UNIX_TIMESTAMP(CONCAT(event_start_date,' ',event_start_time))-rsvp_number_days*60*60*24-rsvp_number_hours*60*60 > UNIX_TIMESTAMP()) ))";
}
}
if (preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}\$/", $scope)) {
//$conditions[] = " event_start_date like '$scope'";
if ($show_ongoing) {
$conditions[] = " ((event_start_date LIKE '{$scope}') OR (event_start_date <= '{$scope}' AND event_end_date >= '{$scope}'))";
} else {
$conditions[] = " (event_start_date LIKE '{$scope}') ";
}
} elseif (preg_match("/^--([0-9]{4}-[0-9]{2}-[0-9]{2})\$/", $scope, $matches)) {
$limit_start = $matches[1];
if ($show_ongoing) {
$conditions[] = " (event_start_date < '{$limit_start}') ";
} else {
$conditions[] = " (event_end_date < '{$limit_start}') ";
}
} elseif (preg_match("/^\\+\\+([0-9]{4}-[0-9]{2}-[0-9]{2})\$/", $scope, $matches)) {
$limit_start = $matches[1];
$conditions[] = " (event_start_date > '{$limit_start}') ";
} elseif (preg_match("/^0000-([0-9]{2})\$/", $scope, $matches)) {
$month = $matches[1];
$eme_date_obj->setMonth($month);
$number_of_days_month = $eme_date_obj->getDaysInMonth();
$limit_start = "{$year}-{$month}-01";
$limit_end = "{$year}-{$month}-{$number_of_days_month}";
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "this_week") {
// this comes from global wordpress preferences
$start_of_week = get_option('start_of_week');
$eme_date_obj->setWeekStartDay($start_of_week);
$limit_start = $eme_date_obj->startOfWeek()->format('Y-m-d');
$limit_end = $eme_date_obj->endOfWeek()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "next_week") {
// this comes from global wordpress preferences
$start_of_week = get_option('start_of_week');
$eme_date_obj->setWeekStartDay($start_of_week);
$eme_date_obj->addOneWeek();
$limit_start = $eme_date_obj->startOfWeek()->format('Y-m-d');
$limit_end = $eme_date_obj->endOfWeek()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "this_month") {
$limit_start = $eme_date_obj->startOfMonth()->format('Y-m-d');
$limit_end = $eme_date_obj->endOfMonth()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "this_year") {
$year = $eme_date_obj->getYear();
$limit_start = "{$year}-01-01";
$limit_end = "{$year}-12-31";
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "next_month") {
$eme_date_obj->addOneMonth();
$limit_start = $eme_date_obj->startOfMonth()->format('Y-m-d');
$limit_end = $eme_date_obj->endOfMonth()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^([0-9]{4}-[0-9]{2}-[0-9]{2})--([0-9]{4}-[0-9]{2}-[0-9]{2})\$/", $scope, $matches)) {
$limit_start = $matches[1];
$limit_end = $matches[2];
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^([0-9]{4}-[0-9]{2}-[0-9]{2})--today\$/", $scope, $matches)) {
$limit_start = $matches[1];
$limit_end = $today;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^today--([0-9]{4}-[0-9]{2}-[0-9]{2})\$/", $scope, $matches)) {
$limit_start = $today;
$limit_end = $matches[1];
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^\\+(\\d+)d\$/", $scope, $matches)) {
$days = $matches[1];
$limit_start = $today;
$limit_end = $eme_date_obj->addDays($days)->getDate();
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^\\-(\\d+)d\$/", $scope, $matches)) {
$days = $matches[1];
$limit_start = $eme_date_obj->minusDays($days)->getDate();
$limit_end = $today;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^(\\-?\\+?\\d+)d--(\\-?\\+?\\d+)d\$/", $scope, $matches)) {
$day1 = $matches[1];
$day2 = $matches[2];
$limit_start = $eme_date_obj->copy()->modifyDays($day1)->getDate();
$limit_end = $eme_date_obj->copy()->modifyDays($day2)->getDate();
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^relative\\-(\\d+)d--([0-9]{4}-[0-9]{2}-[0-9]{2})\$/", $scope, $matches)) {
$days = $matches[1];
$limit_end = $matches[2];
$eme_date_obj->setTimestampFromString($limit_end . " " . $eme_timezone);
$limit_start = $eme_date_obj->minusDays($days)->getDate() . " " . $eme_timezone;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^([0-9]{4}-[0-9]{2}-[0-9]{2})--relative\\+(\\d+)d\$/", $scope, $matches)) {
$limit_start = $matches[1];
$days = $matches[2];
$eme_date_obj->setTimestampFromString($limit_start . " " . $eme_timezone);
$limit_end = $eme_date_obj->addDays($days)->getDate() . " " . $eme_timezone;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^\\+(\\d+)m\$/", $scope, $matches)) {
$months_in_future = $matches[1]++;
$limit_start = $eme_date_obj->startOfMonth()->format('Y-m-d');
$eme_date_obj->addMonths($months_in_future);
$limit_end = $eme_date_obj->endOfMonth()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^\\-(\\d+)m\$/", $scope, $matches)) {
$months_in_past = $matches[1]++;
$limit_start = $eme_date_obj->copy()->minusMonths($months_in_past)->startOfMonth()->format('Y-m-d');
$limit_end = $eme_date_obj->copy()->minusOneMonth()->endOfMonth()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif (preg_match("/^(\\-?\\+?\\d+)m--(\\-?\\+?\\d+)m\$/", $scope, $matches)) {
$months1 = $matches[1];
$months2 = $matches[2];
$limit_start = $eme_date_obj->copy()->modifyMonths($months1)->startOfMonth()->format('Y-m-d');
$limit_end = $eme_date_obj->copy()->modifyMonths($months2)->endOfMonth()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "today--this_week") {
$limit_start = $today;
$limit_end = $eme_date_obj->endOfWeek()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "today--this_week_plus_one") {
$limit_start = $today;
$limit_end = $eme_date_obj->endOfWeek()->addOneDay()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "today--this_month") {
$limit_start = $today;
$limit_end = $eme_date_obj->endOfMonth()->format('Y-m-d');
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "today--this_year") {
$limit_start = $today;
$limit_end = "{$year}-12-31";
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "this_week--today") {
$limit_start = $eme_date_obj->startOfWeek()->format('Y-m-d');
$limit_end = $today;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "this_month--today") {
$limit_start = $eme_date_obj->startOfMonth()->format('Y-m-d');
$limit_end = $today;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "this_year--today") {
$limit_start = "{$year}-01-01";
$limit_end = $today;
if ($show_ongoing) {
$conditions[] = " ((event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_end_date BETWEEN '{$limit_start}' AND '{$limit_end}') OR (event_start_date <= '{$limit_start}' AND event_end_date >= '{$limit_end}'))";
} else {
$conditions[] = " (event_start_date BETWEEN '{$limit_start}' AND '{$limit_end}')";
}
} elseif ($scope == "tomorrow--future") {
if ($show_ongoing) {
$conditions[] = " (event_start_date > '{$today}' OR (event_end_date > '{$today}' AND event_end_date != '0000-00-00' AND event_end_date IS NOT NULL))";
} else {
$conditions[] = " (event_start_date > '{$today}')";
}
} elseif ($scope == "past") {
//$conditions[] = " (event_end_date < '$today' OR (event_end_date = '$today' and event_end_time < '$this_time' )) ";
// not taking the hour into account until we can enter timezone info as well
if ($show_ongoing) {
$conditions[] = " event_end_date < '{$today}'";
} else {
$conditions[] = " event_start_date < '{$today}'";
}
} elseif ($scope == "today") {
if ($show_ongoing) {
$conditions[] = " (event_start_date = '{$today}' OR (event_start_date <= '{$today}' AND event_end_date >= '{$today}'))";
} else {
$conditions[] = " (event_start_date = '{$today}')";
}
} elseif ($scope == "tomorrow") {
$tomorrow = $eme_date_obj->addOneDay()->getDate();
if ($show_ongoing) {
$conditions[] = " (event_start_date = '{$tomorrow}' OR (event_start_date <= '{$tomorrow}' AND event_end_date >= '{$tomorrow}'))";
} else {
$conditions[] = " (event_start_date = '{$tomorrow}')";
}
} elseif ($scope == "ongoing") {
// only shows ongoing events, for this we try to use the date and time, but it might be incorrect since there's no user timezone info
$conditions[] = " (CONCAT(event_start_date,' ',event_start_time)<='{$this_datetime}' AND CONCAT(event_end_date,' ',event_end_time)>= '{$this_datetime}')";
} else {
if ($scope != "all") {
$scope = "future";
}
if ($scope == "future") {
//$conditions[] = " ((event_start_date = '$today' AND event_start_time >= '$this_time') OR (event_start_date > '$today') OR (event_end_date > '$today' AND event_end_date != '0000-00-00' AND event_end_date IS NOT NULL) OR (event_end_date = '$today' AND event_end_time >= '$this_time'))";
// not taking the hour into account until we can enter timezone info as well
if ($show_ongoing) {
$conditions[] = " (event_start_date >= '{$today}' OR (event_end_date >= '{$today}' AND event_end_date != '0000-00-00' AND event_end_date IS NOT NULL))";
} else {
$conditions[] = " (event_start_date >= '{$today}')";
}
}
}
// when used inside a location description, you can use this_location to indicate the current location being viewed
if ($location_id == "this_location" && get_query_var('location_id')) {
$location_id = get_query_var('location_id');
}
if (is_numeric($location_id)) {
if ($location_id > 0) {
$conditions[] = " location_id = {$location_id}";
}
} elseif ($location_id == "none") {
$conditions[] = " location_id = ''";
} elseif (preg_match('/,/', $location_id)) {
$location_ids = explode(',', $location_id);
$location_conditions = array();
foreach ($location_ids as $loc) {
if (is_numeric($loc) && $loc > 0) {
$location_conditions[] = " location_id = {$loc}";
} elseif ($loc == "none") {
$location_conditions[] = " location_id = ''";
}
}
$conditions[] = "(" . implode(' OR', $location_conditions) . ")";
} elseif (preg_match('/\\+/', $location_id)) {
$location_ids = explode('+', $location_id);
$location_conditions = array();
foreach ($location_ids as $loc) {
if (is_numeric($loc) && $loc > 0) {
$location_conditions[] = " location_id = {$loc}";
}
}
$conditions[] = "(" . implode(' AND', $location_conditions) . ")";
} elseif (preg_match('/ /', $location_id)) {
// url decoding of '+' is ' '
$location_ids = explode(' ', $location_id);
$location_conditions = array();
foreach ($location_ids as $loc) {
if (is_numeric($loc) && $loc > 0) {
$location_conditions[] = " location_id = {$loc}";
}
}
$conditions[] = "(" . implode(' AND', $location_conditions) . ")";
}
if (get_option('eme_categories_enabled')) {
if (is_numeric($category)) {
if ($category > 0) {
$conditions[] = " FIND_IN_SET({$category},event_category_ids)";
}
} elseif ($category == "none") {
$conditions[] = "event_category_ids = ''";
} elseif (preg_match('/,/', $category)) {
$category = explode(',', $category);
$category_conditions = array();
foreach ($category as $cat) {
if (is_numeric($cat) && $cat > 0) {
$category_conditions[] = " FIND_IN_SET({$cat},event_category_ids)";
} elseif ($cat == "none") {
$category_conditions[] = " event_category_ids = ''";
}
}
$conditions[] = "(" . implode(' OR', $category_conditions) . ")";
} elseif (preg_match('/\\+/', $category)) {
$category = explode('+', $category);
$category_conditions = array();
foreach ($category as $cat) {
if (is_numeric($cat) && $cat > 0) {
$category_conditions[] = " FIND_IN_SET({$cat},event_category_ids)";
}
}
$conditions[] = "(" . implode(' AND ', $category_conditions) . ")";
} elseif (preg_match('/ /', $category)) {
// url decoding of '+' is ' '
$category = explode(' ', $category);
$category_conditions = array();
foreach ($category as $cat) {
if (is_numeric($cat) && $cat > 0) {
$category_conditions[] = " FIND_IN_SET({$cat},event_category_ids)";
}
}
$conditions[] = "(" . implode(' AND ', $category_conditions) . ")";
}
}
if (get_option('eme_categories_enabled')) {
if (is_numeric($notcategory)) {
if ($notcategory > 0) {
$conditions[] = " NOT FIND_IN_SET({$notcategory},event_category_ids)";
}
} elseif ($notcategory == "none") {
$conditions[] = "event_category_ids != ''";
} elseif (preg_match('/,/', $notcategory)) {
$notcategory = explode(',', $notcategory);
$category_conditions = array();
foreach ($notcategory as $cat) {
if (is_numeric($cat) && $cat > 0) {
$category_conditions[] = " NOT FIND_IN_SET({$cat},event_category_ids)";
} elseif ($cat == "none") {
$category_conditions[] = " event_category_ids != ''";
}
}
$conditions[] = "(" . implode(' OR', $category_conditions) . ")";
} elseif (preg_match('/\\+/', $notcategory)) {
$notcategory = explode('+', $notcategory);
$category_conditions = array();
foreach ($notcategory as $cat) {
if (is_numeric($cat) && $cat > 0) {
$category_conditions[] = " NOT FIND_IN_SET({$cat},event_category_ids)";
}
}
$conditions[] = "(" . implode(' AND ', $category_conditions) . ")";
} elseif (preg_match('/ /', $notcategory)) {
// url decoding of '+' is ' '
$notcategory = explode(' ', $notcategory);
$category_conditions = array();
foreach ($notcategory as $cat) {
if (is_numeric($cat) && $cat > 0) {
$category_conditions[] = " NOT FIND_IN_SET({$cat},event_category_ids)";
}
}
}
}
// now filter the author ID
if ($author != '' && !preg_match('/,/', $author)) {
$authinfo = get_user_by('login', $author);
$conditions[] = " event_author = " . $authinfo->ID;
} elseif (preg_match('/,/', $author)) {
$authors = explode(',', $author);
$author_conditions = array();
foreach ($authors as $authname) {
$authinfo = get_user_by('login', $authname);
$author_conditions[] = " event_author = " . $authinfo->ID;
}
$conditions[] = "(" . implode(' OR ', $author_conditions) . ")";
}
// now filter the contact ID
if ($contact_person != '' && !preg_match('/,/', $contact_person)) {
$authinfo = get_user_by('login', $contact_person);
$conditions[] = " event_contactperson_id = " . $authinfo->ID;
} elseif (preg_match('/,/', $contact_person)) {
$contact_persons = explode(',', $contact_person);
$contact_person_conditions = array();
foreach ($contact_persons as $authname) {
$authinfo = get_user_by('login', $authname);
$contact_person_conditions[] = " event_contactperson_id = " . $authinfo->ID;
}
$conditions[] = "(" . implode(' OR ', $contact_person_conditions) . ")";
}
// extra conditions for authors: if we're in the admin itf, return only the events for which you have the right to change anything
$current_userid = get_current_user_id();
if (is_admin() && !current_user_can(get_option('eme_cap_edit_events')) && !current_user_can(get_option('eme_cap_list_events')) && current_user_can(get_option('eme_cap_author_event'))) {
$conditions[] = "(event_author = {$current_userid} OR event_contactperson_id= {$current_userid})";
}
$where = implode(" AND ", $conditions);
if ($show_recurrent_events_once) {
if ($where != "") {
$where = " AND " . $where;
}
$sql = "SELECT * FROM {$events_table}\n WHERE (recurrence_id>0 {$where})\n group by recurrence_id union all\n SELECT * FROM {$events_table}\n WHERE (recurrence_id=0 {$where})\n ORDER BY event_start_date {$order} , event_start_time {$order}\n {$limit} \n {$offset}";
} else {
if ($where != "") {
$where = " WHERE " . $where;
}
$sql = "SELECT * FROM {$events_table}\n {$where}\n ORDER BY event_start_date {$order} , event_start_time {$order}\n {$limit} \n {$offset}";
}
$wpdb->show_errors = true;
$events = $wpdb->get_results($sql, ARRAY_A);
$inflated_events = array();
if (!empty($events)) {
//$wpdb->print_error();
foreach ($events as $this_event) {
$this_event = eme_get_event_data($this_event);
array_push($inflated_events, $this_event);
}
if (has_filter('eme_event_list_filter')) {
$inflated_events = apply_filters('eme_event_list_filter', $inflated_events);
}
}
return $inflated_events;
}