function eme_replace_placeholders($format, $event, $target = "html", $do_shortcode = 1, $lang = '') { global $eme_need_gmap_js, $eme_timezone; // an initial filter for the format, in case people want to change anything before the placeholders get replaced if (has_filter('eme_events_format_prefilter')) { $format = apply_filters('eme_events_format_prefilter', $format, $event); } // some variables we'll use further down more than once $current_userid = get_current_user_id(); $person_id = eme_get_person_id_by_wp_id($current_userid); $eme_enable_notes_placeholders = get_option('eme_enable_notes_placeholders'); if (isset($event['location_id']) && $event['location_id']) { $location = eme_get_location($event['location_id']); } else { $location = eme_new_location(); } // first replace the notes sections, since these can contain other placeholders if ($eme_enable_notes_placeholders) { $format = eme_replace_notes_placeholders($format, $event, $target); } // then we do the custom attributes, since these can contain other placeholders preg_match_all("/#(ESC|URL)?_ATT\\{.+?\\}(\\{.+?\\})?/", $format, $results); foreach ($results[0] as $resultKey => $result) { $need_escape = 0; $need_urlencode = 0; $orig_result = $result; if (strstr($result, '#ESC')) { $result = str_replace("#ESC", "#", $result); $need_escape = 1; } elseif (strstr($result, '#URL')) { $result = str_replace("#URL", "#", $result); $need_urlencode = 1; } $replacement = ""; //Strip string of placeholder and just leave the reference $attRef = substr(substr($result, 0, strpos($result, '}')), 6); if (isset($event['event_attributes'][$attRef])) { $replacement = $event['event_attributes'][$attRef]; } if (trim($replacement) == '' && isset($results[2][$resultKey]) && $results[2][$resultKey] != '') { //Check to see if we have a second set of braces; $replacement = substr($results[2][$resultKey], 1, strlen(trim($results[2][$resultKey])) - 2); } if ($need_escape) { $replacement = eme_sanitize_request(eme_sanitize_html(preg_replace('/\\n|\\r/', '', $replacement))); } if ($need_urlencode) { $replacement = rawurlencode($replacement); } $format = str_replace($orig_result, $replacement, $format); } // and now all the other placeholders $legacy = get_option('eme_legacy'); $deprecated = get_option('eme_deprecated'); if ($legacy) { preg_match_all("/#(ESC|URL)?@?_?[A-Za-z0-9_]+(\\[.*\\])?(\\[.*\\])?/", $format, $placeholders); } else { preg_match_all("/#(ESC|URL)?@?_?[A-Za-z0-9_]+(\\{.*?\\})?(\\{.*?\\})?/", $format, $placeholders); } // make sure we set the largest matched placeholders first, otherwise if you found e.g. // #_LOCATION, part of #_LOCATIONPAGEURL would get replaced as well ... usort($placeholders[0], 'sort_stringlenth'); // if the add and remove booking form appear on the same page, we need to decide which form shows the "message" upon booking // the first one wins $a1 = strpos($format, "ADDBOOKINGFORM"); $a2 = strpos($format, "REMOVEBOOKINGFORM"); $show_message_on_add = 1; $show_message_on_remove = 1; if ($a1 !== false && $a2 !== false) { if ($a1 < $a2) { $show_message_on_remove = 0; } else { $show_message_on_add = 0; } } $eme_date_obj_now = new ExpressiveDate(null, $eme_timezone); foreach ($placeholders[0] as $result) { $need_escape = 0; $need_urlencode = 0; $orig_result = $result; $found = 1; if (strstr($result, '#ESC')) { $result = str_replace("#ESC", "#", $result); $need_escape = 1; } elseif (strstr($result, '#URL')) { $result = str_replace("#URL", "#", $result); $need_urlencode = 1; } $replacement = ""; // matches all fields placeholder if ($event && preg_match('/#_EDITEVENTLINK/', $result)) { if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $replacement = "<a href=' " . admin_url("admin.php?page=events-manager&eme_admin_action=edit_event&event_id=" . $event['event_id']) . "'>" . __('Edit') . "</a>"; } } elseif ($event && preg_match('/#_EDITEVENTURL/', $result)) { if (current_user_can(get_option('eme_cap_edit_events')) || current_user_can(get_option('eme_cap_author_event')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $replacement = admin_url("admin.php?page=events-manager&eme_admin_action=edit_event&event_id=" . $event['event_id']); } } elseif ($event && preg_match('/#_EVENTPRINTBOOKINGSLINK/', $result)) { if (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')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $replacement = "<a href=' " . admin_url("admin.php?page=eme-people&eme_admin_action=booking_printable&event_id=" . $event['event_id']) . "'>" . __('Printable view of bookings', 'eme') . "</a>"; } } elseif ($event && preg_match('/#_EVENTPRINTBOOKINGSURL/', $result)) { if (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')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $replacement = admin_url("admin.php?page=eme-people&eme_admin_action=booking_printable&event_id=" . $event['event_id']); } } elseif ($event && preg_match('/#_EVENTCSVBOOKINGSLINK/', $result)) { if (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')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $replacement = "<a href=' " . admin_url("admin.php?page=eme-people&eme_admin_action=booking_csv&event_id=" . $event['event_id']) . "'>" . __('Printable view of bookings', 'eme') . "</a>"; } } elseif ($event && preg_match('/#_EVENTCSVBOOKINGSURL/', $result)) { if (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')) && ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid)) { $replacement = admin_url("admin.php?page=eme-people&eme_admin_action=booking_csv&event_id=" . $event['event_id']); } } elseif ($event && preg_match('/#_STARTDATE/', $result)) { $replacement = eme_localised_date($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); } elseif ($event && preg_match('/#_STARTTIME/', $result)) { $replacement = eme_localised_time($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone); } elseif ($event && preg_match('/#_ENDDATE/', $result)) { $replacement = eme_localised_date($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone); } elseif ($event && preg_match('/#_ENDTIME/', $result)) { $replacement = eme_localised_time($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone); } elseif ($event && preg_match('/#_24HSTARTTIME/', $result)) { $replacement = substr($event['event_start_time'], 0, 5); } elseif ($event && preg_match('/#_24HENDTIME$/', $result)) { $replacement = substr($event['event_end_time'], 0, 5); } elseif ($event && preg_match('/#_PAST_FUTURE_CLASS/', $result)) { $eme_start_obj = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $eme_end_obj = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); if ($eme_start_obj->greaterThan($eme_date_obj_now)) { $replacement = "eme-future-event"; } elseif ($eme_start_obj->lessOrEqualTo($eme_date_obj_now) && $eme_end_obj->greaterOrEqualTo($eme_date_obj_now)) { $replacement = "eme-ongoing-event"; } else { $replacement = "eme-past-event"; } } elseif ($event && preg_match('/#_12HSTARTTIME$/', $result)) { $replacement = $eme_date_obj_now->copy()->setTimestampFromString($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone)->format('h:i A'); } elseif ($event && preg_match('/#_12HENDTIME$/', $result)) { $replacement = $eme_date_obj_now->copy()->setTimestampFromString($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone)->format('h:i A'); } elseif ($event && preg_match('/#_12HSTARTTIME_NOLEADINGZERO/', $result)) { $replacement = $eme_date_obj_now->copy()->setTimestampFromString($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone)->format('g:i A'); if (get_option('eme_time_remove_leading_zeros')) { $replacement = str_replace(":00", "", $replacement); $replacement = str_replace(":0", ":", $replacement); } } elseif ($event && preg_match('/#_12HENDTIME_NOLEADINGZERO/', $result)) { $replacement = $eme_date_obj_now->copy()->setTimestampFromString($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone)->format('g:i A'); if (get_option('eme_time_remove_leading_zeros')) { $replacement = str_replace(":00", "", $replacement); $replacement = str_replace(":0", ":", $replacement); } } elseif ($event && preg_match('/#_MAP/', $result)) { if ($target == "rss" || $target == "text") { $replacement = ""; } elseif (isset($event['location_id']) && $event['location_id']) { $replacement = eme_single_location_map($location); } } elseif ($event && preg_match('/#_DIRECTIONS/', $result)) { if ($target == "rss" || $target == "text") { $replacement = ""; } elseif (isset($event['location_id']) && $event['location_id']) { $replacement = eme_add_directions_form($location); } } elseif ($event && preg_match('/#_EVENTS_FILTERFORM/', $result)) { if ($target == "rss" || $target == "text" || eme_is_single_event_page()) { $replacement = ""; } else { $replacement = eme_filter_form(); } } elseif ($event && preg_match('/#_ADDBOOKINGFORM$/', $result)) { if ($target == "rss" || $target == "text") { $replacement = ""; } else { $replacement = eme_add_booking_form($event['event_id'], $show_message_on_add); } } elseif ($event && preg_match('/#_ADDBOOKINGFORM_IF_NOT_REGISTERED/', $result)) { if ($target == "rss" || $target == "text") { $replacement = ""; } else { $not_registered_only = 1; $replacement = eme_add_booking_form($event['event_id'], $show_message_on_add, $not_registered_only); } } elseif ($event && preg_match('/#_REMOVEBOOKINGFORM$/', $result)) { if ($target == "rss" || $target == "text") { $replacement = ""; } else { // when the booking just happened and the user needs to pay, we don't show the remove booking form if ($booking_id_done && eme_event_can_pay_online($event)) { $replacement = ""; } else { $replacement = eme_delete_booking_form($event['event_id'], $show_message_on_remove); } } } elseif ($event && preg_match('/#_REMOVEBOOKINGFORM_IF_REGISTERED/', $result)) { if ($target == "rss" || $target == "text") { $replacement = ""; } elseif (is_user_logged_in()) { // when the booking just happened and the user needs to pay, we don't show the remove booking form if ($booking_id_done && eme_event_can_pay_online($event)) { $replacement = ""; } elseif (eme_get_booking_ids_by_wp_id($current_userid, $event['event_id'])) { $replacement = eme_delete_booking_form($event['event_id'], $show_message_on_remove); } } } elseif ($event && preg_match('/#_(AVAILABLESPACES|AVAILABLESEATS)$/', $result)) { $replacement = eme_get_available_seats($event['event_id']); } elseif ($deprecated && preg_match('/#_(AVAILABLESPACES|AVAILABLESEATS)(\\d+)/', $result, $matches) || preg_match('/#_(AVAILABLESPACES|AVAILABLESEATS)\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2]) - 1; if (eme_is_multi($event['event_seats'])) { $seats = eme_get_available_multiseats($event['event_id']); if (array_key_exists($field_id, $seats)) { $replacement = $seats[$field_id]; } } } elseif ($event && preg_match('/#_(TOTALSPACES|TOTALSEATS)$/', $result)) { $replacement = $event['event_seats']; } elseif ($deprecated && preg_match('/#_(TOTALSPACES|TOTALSEATS)(\\d+)/', $result, $matches) || preg_match('/#_(TOTALSPACES|TOTALSEATS)\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2]) - 1; $replacement = 0; if (eme_is_multi($event['event_seats'])) { $seats = eme_convert_multi2array($event['event_seats']); if (array_key_exists($field_id, $seats)) { $replacement = $seats[$field_id]; } } } elseif ($event && preg_match('/#_(RESERVEDSPACES|BOOKEDSEATS)$/', $result)) { $replacement = eme_get_booked_seats($event['event_id']); } elseif ($deprecated && preg_match('/#_(RESERVEDSPACES|BOOKEDSEATS)(\\d+)/', $result, $matches) || preg_match('/#_(RESERVEDSPACES|BOOKEDSEATS)\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2]) - 1; $replacement = 0; if (eme_is_multi($event['event_seats'])) { $seats = eme_get_booked_multiseats($event['event_id']); if (array_key_exists($field_id, $seats)) { $replacement = $seats[$field_id]; } } } elseif ($event && preg_match('/#_(PENDINGSPACES|PENDINGSEATS)$/', $result)) { $replacement = eme_get_pending_seats($event['event_id']); } elseif ($event && preg_match('/#_(PENDINGSPACES|PENDINGSEATS)\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2]) - 1; $replacement = 0; if (eme_is_multi($event['event_seats'])) { $seats = eme_get_pending_multiseats($event['event_id']); if (array_key_exists($field_id, $seats)) { $replacement = $seats[$field_id]; } } } elseif ($event && preg_match('/#_(APPROVEDSPACES|APPROVEDSEATS)$/', $result)) { $replacement = eme_get_approved_seats($event['event_id']); } elseif ($event && preg_match('/#_(APPROVEDSPACES|APPROVEDSEATS)\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2]) - 1; $replacement = 0; if (eme_is_multi($event['event_seats'])) { $seats = eme_get_approved_multiseats($event['event_id']); if (array_key_exists($field_id, $seats)) { $replacement = $seats[$field_id]; } } } elseif ($event && preg_match('/#_USER_(RESERVEDSPACES|BOOKEDSEATS)$/', $result)) { if (is_user_logged_in()) { $replacement = eme_get_booked_seats_by_wp_event_id($current_userid, $event['event_id']); } } elseif ($event && preg_match('/#_LINKEDNAME/', $result)) { $event_link = eme_event_url($event, $lang); if ($target == "html") { $replacement = "<a href='{$event_link}' title='" . eme_trans_sanitize_html($event['event_name'], $lang) . "'>" . eme_trans_sanitize_html($event['event_name'], $lang) . "</a>"; } else { $replacement = eme_translate($event['event_name'], $lang); } if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_ICALLINK/', $result)) { $url = site_url("/?eme_ical=public_single&event_id=" . $event['event_id']); $replacement = "<a href='{$url}'>ICAL</a>"; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_ICALURL/', $result)) { $replacement = site_url("/?eme_ical=public_single&event_id=" . $event['event_id']); } elseif ($event && preg_match('/#_EVENTIMAGE$/', $result)) { if (!empty($event['event_image_id'])) { $event['event_image_url'] = wp_get_attachment_url($event['event_image_id']); } if ($event['event_image_url'] != '') { $replacement = "<img src='" . $event['event_image_url'] . "' alt='" . eme_trans_sanitize_html($event['event_name'], $lang) . "'/>"; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($event && preg_match('/#_EVENTIMAGEURL$/', $result)) { if (!empty($event['event_image_id'])) { $event['event_image_url'] = wp_get_attachment_url($event['event_image_id']); } if ($event['event_image_url'] != '') { $replacement = $event['event_image_url']; } } elseif ($event && preg_match('/#_EVENTIMAGETHUMB$/', $result)) { if (!empty($event['event_image_id'])) { $thumb_array = image_downsize($event['event_image_id'], get_option('eme_thumbnail_size')); $thumb_url = $thumb_array[0]; $thumb_width = $thumb_array[1]; $thumb_height = $thumb_array[2]; $replacement = "<img width='{$thumb_width}' height='{$thumb_height}' src='" . $thumb_url . "' alt='" . eme_trans_sanitize_html($event['event_name'], $lang) . "'/>"; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($event && preg_match('/#_EVENTIMAGETHUMBURL$/', $result)) { if (!empty($event['event_image_id'])) { $thumb_array = image_downsize($event['event_image_id'], get_option('eme_thumbnail_size')); $thumb_url = $thumb_array[0]; $replacement = $thumb_url; } } elseif ($event && preg_match('/#_EVENTIMAGETHUMB\\{(.+)\\}/', $result, $matches)) { if (!empty($event['event_image_id'])) { $thumb_array = image_downsize($event['event_image_id'], $matches[1]); $thumb_url = $thumb_array[0]; $thumb_width = $thumb_array[1]; $thumb_height = $thumb_array[2]; $replacement = "<img width='{$thumb_width}' height='{$thumb_height}' src='" . $thumb_url . "' alt='" . eme_trans_sanitize_html($event['event_name'], $lang) . "'/>"; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($legacy && $event && preg_match('/#_EVENTIMAGETHUMB\\[(.+)\\]/', $result, $matches)) { if (!empty($event['event_image_id'])) { $thumb_array = image_downsize($event['event_image_id'], $matches[1]); $thumb_url = $thumb_array[0]; $thumb_width = $thumb_array[1]; $thumb_height = $thumb_array[2]; $replacement = "<img width='{$thumb_width}' height='{$thumb_height}' src='" . $thumb_url . "' alt='" . eme_trans_sanitize_html($event['event_name'], $lang) . "'/>"; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($event && preg_match('/#_EVENTIMAGETHUMBURL\\{(.+)\\}/', $result, $matches)) { if (!empty($event['event_image_id'])) { $thumb_array = image_downsize($event['event_image_id'], $matches[1]); $thumb_url = $thumb_array[0]; $replacement = $thumb_url; } } elseif ($legacy && $event && preg_match('/#_EVENTIMAGETHUMBURL\\[(.+)\\]/', $result, $matches)) { if (!empty($event['event_image_id'])) { $thumb_array = image_downsize($event['event_image_id'], $matches[1]); $thumb_url = $thumb_array[0]; $replacement = $thumb_url; } } elseif ($event && preg_match('/#_EVENTATT\\{(.+)\\}\\{(.+)\\}/', $result, $matches)) { $tmp_event_id = intval($matches[1]); $tmp_event_attkey = $matches[2]; $tmp_event = eme_get_event($tmp_event_id); if (isset($tmp_event['event_attributes'][$tmp_event_attkey])) { $replacement = $tmp_event['event_attributes'][$tmp_event_attkey]; } } elseif ($event && preg_match('/#_MYLOCATIONATT\\{(.+)\\}/', $result, $matches)) { $tmp_attkey = $matches[1]; if (isset($location['location_attributes'][$tmp_attkey])) { $replacement = $location['location_attributes'][$tmp_attkey]; } } elseif ($event && preg_match('/#_EVENTPAGEURL\\{(.+)\\}/', $result, $matches)) { $events_page_link = eme_get_events_page(true, false); $replacement = add_query_arg(array('event_id' => intval($matches[1])), $events_page_link); if (!empty($lang)) { $replacement = add_query_arg(array('lang' => $lang), $replacement); } } elseif ($legacy && $event && preg_match('/#_EVENTPAGEURL\\[(.+)\\]/', $result, $matches)) { $events_page_link = eme_get_events_page(true, false); $replacement = add_query_arg(array('event_id' => intval($matches[1])), $events_page_link); if (!empty($lang)) { $replacement = add_query_arg(array('lang' => $lang), $replacement); } } elseif ($event && preg_match('/#_EVENTPAGEURL$/', $result)) { $replacement = eme_event_url($event, $lang); } elseif ($event && preg_match('/#_(NAME|EVENTNAME)$/', $result)) { $field = "event_name"; if (isset($event[$field])) { $replacement = $event[$field]; } if ($target == "html") { $replacement = eme_trans_sanitize_html($replacement, $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate($replacement, $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate($replacement, $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_EVENTID/', $result)) { $field = "event_id"; $replacement = intval($event[$field]); } elseif ($event && preg_match('/#_SINGLE_EVENTPAGE_EVENTID/', $result)) { // returns the event id of the single event page currently shown if (eme_is_single_event_page()) { $replacement = intval(get_query_var('event_id')); } } elseif ($event && preg_match('/#_DAYS_TILL_START/', $result)) { $eme_date_obj = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $replacement = $eme_date_obj_now->getDifferenceInDays($eme_date_obj); } elseif ($event && preg_match('/#_DAYS_TILL_END/', $result)) { $eme_date_obj = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); $replacement = $eme_date_obj_now->getDifferenceInDays($eme_date_obj); } elseif ($event && preg_match('/#_HOURS_TILL_START/', $result)) { $eme_date_obj = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $replacement = round($eme_date_obj_now->getDifferenceInHours($eme_date_obj)); } elseif ($event && preg_match('/#_HOURS_TILL_END/', $result)) { $eme_date_obj = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); $replacement = round($eme_date_obj_now->getDifferenceInHours($eme_date_obj)); } elseif ($event && preg_match('/#_EVENTPRICE$|#_PRICE$/', $result)) { $field = "price"; if ($event[$field]) { $replacement = $event[$field]; } if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($deprecated && $event && preg_match('/#_(EVENT)?PRICE(\\d+)/', $result, $matches) || $event && preg_match('/#_(EVENT)?PRICE\\{(\\d+)\\}/', $result, $matches)) { $field_id = intval($matches[2] - 1); if ($event["price"] && eme_is_multi($event["price"])) { $prices = eme_convert_multi2array($event["price"]); if (is_array($prices) && array_key_exists($field_id, $prices)) { $replacement = $prices[$field_id]; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } } elseif ($event && preg_match('/#_CURRENCY/', $result)) { $field = "currency"; // currency is only important if the price is not empty as well if ($event['price']) { $replacement = $event[$field]; } if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_ATTENDEES/', $result)) { $replacement = eme_get_attendees_list_for($event); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_BOOKINGS/', $result)) { $replacement = eme_get_bookings_list_for_event($event); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_(CONTACTNAME|CONTACTPERSON)/', $result)) { $contact = eme_get_contact($event); if ($contact) { $replacement = $contact->display_name; } $replacement = eme_trans_sanitize_html($replacement, $lang); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_(CONTACTEMAIL|PLAIN_CONTACTEMAIL)/', $result)) { $contact = eme_get_contact($event); if ($contact) { $replacement = $contact->user_email; if ($target == "html") { // ascii encode for primitive harvesting protection ... $replacement = eme_ascii_encode($replacement); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($event && preg_match('/#_CONTACTPHONE/', $result)) { $contact = eme_get_contact($event); if ($contact) { $phone = eme_get_user_phone($contact->ID); // ascii encode for primitive harvesting protection ... $replacement = eme_ascii_encode($phone); } if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_AUTHORNAME/', $result)) { $author = eme_get_author($event); if ($author) { $replacement = $author->display_name; } $replacement = eme_trans_sanitize_html($replacement, $lang); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_AUTHOREMAIL/', $result)) { $author = eme_get_author($event); if ($author) { $replacement = $author->user_email; if ($target == "html") { // ascii encode for primitive harvesting protection ... $replacement = eme_ascii_encode($replacement); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($event && preg_match('/#_AUTHORPHONE/', $result)) { $author = eme_get_author($event); if ($author) { $phone = eme_get_user_phone($author->ID); // ascii encode for primitive harvesting protection ... $replacement = eme_ascii_encode($phone); } if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif (preg_match('/#_EVENTCREATIONDATE/', $result)) { $replacement = eme_localised_date($event['creation_date'] . " " . $eme_timezone); } elseif (preg_match('/#_EVENTMODIFDATE/', $result)) { $replacement = eme_localised_date($event['modif_date'] . " " . $eme_timezone); } elseif (preg_match('/#_EVENTCREATIONTIME/', $result)) { $replacement = eme_localised_time($event['creation_date'] . " " . $eme_timezone); } elseif (preg_match('/#_EVENTMODIFTIME/', $result)) { $replacement = eme_localised_time($event['modif_date'] . " " . $eme_timezone); } elseif ($event && preg_match('/#[A-Za-z]$/', $result)) { // matches all PHP date placeholders for startdate-time $replacement = eme_localised_date($event['event_start_date'] . " " . $event['event_start_time'] . " " . $eme_timezone, ltrim($result, "#")); if (get_option('eme_time_remove_leading_zeros') && $result == "#i") { $replacement = ltrim($replacement, "0"); } } elseif ($event && preg_match('/#@[A-Za-z]$/', $result)) { // matches all PHP time placeholders for enddate-time $replacement = eme_localised_date($event['event_end_date'] . " " . $event['event_end_time'] . " " . $eme_timezone, ltrim($result, "#@")); if (get_option('eme_time_remove_leading_zeros') && $result == "#@i") { $replacement = ltrim($replacement, "0"); } } elseif ($event && preg_match('/#_EVENTCATEGORYIDS$/', $result) && get_option('eme_categories_enabled')) { $categories = $event['event_category_ids']; if ($target == "html") { $replacement = eme_trans_sanitize_html($categories, $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_trans_sanitize_html($categories, $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_trans_sanitize_html($categories, $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_(EVENT)?CATEGORIES$/', $result) && get_option('eme_categories_enabled')) { $categories = eme_get_event_category_names($event['event_id']); if ($target == "html") { $replacement = eme_trans_sanitize_html(join(", ", $categories), $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_EVENTCATEGORIES_CSS$/', $result) && get_option('eme_categories_enabled')) { $categories = eme_get_event_category_names($event['event_id']); if ($target == "html") { $replacement = eme_trans_sanitize_html(join(" ", $categories), $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(" ", $categories), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(" ", $categories), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_EVENTCATEGORYDESCRIPTIONS$/', $result) && get_option('eme_categories_enabled')) { $categories = eme_get_event_category_descriptions($event['event_id']); if ($target == "html") { $replacement = eme_trans_sanitize_html(join(", ", $categories), $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_LINKED(EVENT)?CATEGORIES$/', $result) && get_option('eme_categories_enabled')) { $categories = eme_get_event_categories($event['event_id']); $cat_links = array(); foreach ($categories as $category) { $cat_link = eme_category_url($category); $cat_name = $category['category_name']; if ($target == "html") { array_push($cat_links, "<a href='{$cat_link}' title='" . eme_trans_sanitize_html($cat_name, $lang) . "'>" . eme_trans_sanitize_html($cat_name, $lang) . "</a>"); } else { array_push($cat_links, eme_translate($cat_name, $lang)); } } $replacement = join(", ", $cat_links); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $cat_links), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $cat_links), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/^#_(EVENT)?CATEGORIES\\{(.*?)\\}\\{(.*?)\\}/', $result, $matches) && get_option('eme_categories_enabled')) { $include_cats = $matches[2]; $exclude_cats = $matches[3]; $extra_conditions_arr = array(); if (!empty($include_cats)) { array_push($extra_conditions_arr, "category_id IN ({$include_cats})"); } if (!empty($exclude_cats)) { array_push($extra_conditions_arr, "category_id NOT IN ({$exclude_cats})"); } $extra_conditions = join(" AND ", $extra_conditions_arr); $categories = eme_get_event_category_names($event['event_id'], $extra_conditions); if ($target == "html") { $replacement = eme_trans_sanitize_html(join(", ", $categories), $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/^#_EVENTCATEGORIES_CSS\\{(.*?)\\}\\{(.*?)\\}/', $result, $matches) && get_option('eme_categories_enabled')) { $include_cats = $matches[1]; $exclude_cats = $matches[2]; $extra_conditions_arr = array(); if (!empty($include_cats)) { array_push($extra_conditions_arr, "category_id IN ({$include_cats})"); } if (!empty($exclude_cats)) { array_push($extra_conditions_arr, "category_id NOT IN ({$exclude_cats})"); } $extra_conditions = join(" AND ", $extra_conditions_arr); $categories = eme_get_event_category_names($event['event_id'], $extra_conditions); if ($target == "html") { $replacement = eme_trans_sanitize_html(join(" ", $categories), $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(" ", $categories), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(" ", $categories), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($legacy && $event && preg_match('/^#_(EVENT)?CATEGORIES\\[(.*?)\\]\\[(.*?)\\]/', $result, $matches) && get_option('eme_categories_enabled')) { $include_cats = $matches[2]; $exclude_cats = $matches[3]; $extra_conditions_arr = array(); if (!empty($include_cats)) { array_push($extra_conditions_arr, "category_id IN ({$include_cats})"); } if (!empty($exclude_cats)) { array_push($extra_conditions_arr, "category_id NOT IN ({$exclude_cats})"); } $extra_conditions = join(" AND ", $extra_conditions_arr); $categories = eme_get_event_category_names($event['event_id'], $extra_conditions); if ($target == "html") { $replacement = eme_trans_sanitize_html(join(", ", $categories), $lang); $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $categories), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_LINKED(EVENT)?CATEGORIES\\{(.*?)\\}\\{(.*?)\\}/', $result, $matches) && get_option('eme_categories_enabled')) { $include_cats = $matches[2]; $exclude_cats = $matches[3]; $extra_conditions_arr = array(); if (!empty($include_cats)) { array_push($extra_conditions_arr, "category_id IN ({$include_cats})"); } if (!empty($exclude_cats)) { array_push($extra_conditions_arr, "category_id NOT IN ({$exclude_cats})"); } $extra_conditions = join(" AND ", $extra_conditions_arr); $categories = eme_get_event_categories($event['event_id'], $extra_conditions); $cat_links = array(); foreach ($categories as $category) { $cat_link = eme_category_url($category); $cat_name = $category['category_name']; if ($target == "html") { array_push($cat_links, "<a href='{$cat_link}' title='" . eme_trans_sanitize_html($cat_name, $lang) . "'>" . eme_trans_sanitize_html($cat_name, $lang) . "</a>"); } else { array_push($cat_links, eme_translate($cat_name, $lang)); } } $replacement = join(", ", $cat_links); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $cat_links), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $cat_links), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif ($legacy && $event && preg_match('/#_LINKED(EVENT)?CATEGORIES\\[(.*?)\\]\\[(.*?)\\]/', $result, $matches) && get_option('eme_categories_enabled')) { $include_cats = $matches[2]; $exclude_cats = $matches[3]; $extra_conditions_arr = array(); if (!empty($include_cats)) { array_push($extra_conditions_arr, "category_id IN ({$include_cats})"); } if (!empty($exclude_cats)) { array_push($extra_conditions_arr, "category_id NOT IN ({$exclude_cats})"); } $extra_conditions = join(" AND ", $extra_conditions_arr); $categories = eme_get_event_categories($event['event_id'], $extra_conditions); $cat_links = array(); foreach ($categories as $category) { $cat_link = eme_category_url($category); $cat_name = $category['category_name']; if ($target == "html") { array_push($cat_links, "<a href='{$cat_link}' title='" . eme_trans_sanitize_html($cat_name, $lang) . "'>" . eme_trans_sanitize_html($cat_name, $lang) . "</a>"); } else { array_push($cat_links, eme_translate($cat_name, $lang)); } } $replacement = join(", ", $cat_links); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = eme_translate(join(", ", $cat_links), $lang); $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = eme_translate(join(", ", $cat_links), $lang); $replacement = apply_filters('eme_text', $replacement); } } elseif (preg_match('/#_CALENDAR_DAY/', $result)) { $day_key = get_query_var('calendar_day'); $replacement = eme_localised_date($day_key . " " . $eme_timezone); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif ($event && preg_match('/#_RECURRENCE_DESC|#_RECURRENCEDESC/', $result)) { if ($event['recurrence_id']) { $replacement = eme_get_recurrence_desc($event['recurrence_id']); if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } } elseif ($event && preg_match('/#_RECURRENCE_NBR/', $result)) { // returns the sequence number of an event in a recurrence series if ($event['recurrence_id']) { $events = eme_get_recurrence_eventids($event['recurrence_id']); $nbr = array_search($event['event_id'], $events); if ($nbr !== false) { $replacement = $nbr + 1; } } } elseif ($event && preg_match('/#_RSVPEND/', $result)) { // show the end date+time for which a user can rsvp for an event if (eme_is_event_rsvp($event)) { $rsvp_number_days = $event['rsvp_number_days']; $rsvp_number_hours = $event['rsvp_number_hours']; $rsvp_end_obj = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $rsvp_end_obj->minusDays($rsvp_number_days); $rsvp_end_obj->minusHours($rsvp_number_hours); $rsvp_end_date = eme_localised_date($rsvp_end_obj->getDateTime() . " " . $eme_timezone); $rsvp_end_time = eme_localised_time($rsvp_end_obj->getDateTime() . " " . $eme_timezone); $replacement = $rsvp_end_date . " " . $rsvp_end_time; } } elseif ($event && preg_match('/#_IS_RSVP_ENDED/', $result)) { if (eme_is_event_rsvp($event)) { $rsvp_number_days = $event['rsvp_number_days']; $rsvp_number_hours = $event['rsvp_number_hours']; $rsvp_end_obj = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $rsvp_end_obj->minusDays($rsvp_number_days); $rsvp_end_obj->minusHours($rsvp_number_hours); if ($rsvp_end_obj->lessThan($eme_date_obj_now)) { $replacement = 1; } else { $replacement = 0; } } } elseif ($event && preg_match('/#_EVENT_EXTERNAL_REF/', $result)) { $replacement = $event['event_external_ref']; if ($target == "html") { $replacement = apply_filters('eme_general', $replacement); } elseif ($target == "rss") { $replacement = apply_filters('eme_general_rss', $replacement); } else { $replacement = apply_filters('eme_text', $replacement); } } elseif (preg_match('/#_IS_SINGLE_DAY/', $result)) { if (eme_is_single_day_page()) { $replacement = 1; } else { $replacement = 0; } } elseif (preg_match('/#_IS_SINGLE_EVENT/', $result)) { if (eme_is_single_event_page()) { $replacement = 1; } else { $replacement = 0; } } elseif (preg_match('/#_IS_LOGGED_IN/', $result)) { if (is_user_logged_in()) { $replacement = 1; } else { $replacement = 0; } } elseif (preg_match('/#_IS_ADMIN_PAGE/', $result)) { if (is_admin()) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_RSVP_ENABLED/', $result)) { if (eme_is_event_rsvp($event)) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_PRIVATE_EVENT/', $result)) { if ($event['event_status'] == STATUS_PRIVATE) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_RECURRENT_EVENT/', $result)) { if ($event['recurrence_id']) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_ONGOING_EVENT/', $result)) { $eme_start_obj = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $eme_end_obj = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); if ($eme_start_obj->lessOrEqualTo($eme_date_obj_now) && $eme_end_obj->greaterOrEqualTo($eme_date_obj_now)) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_REGISTERED/', $result)) { if (is_user_logged_in() && eme_get_booking_ids_by_wp_id($current_userid, $event['event_id'])) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_MULTIPRICE/', $result)) { if (eme_is_multi($event['price'])) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_MULTISEAT/', $result)) { if (eme_is_multi($event['event_seats'])) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_ALLDAY/', $result)) { if ($event['event_properties']['all_day']) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_ATTENDANCE/', $result)) { if ($event['event_properties']['take_attendance']) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_AUTHOR$/', $result)) { if ($event['event_author'] == $current_userid) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_CONTACTPERSON/', $result)) { if ($event['event_contactperson_id'] == $current_userid) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_AUTHOR_OR_CONTACTPERSON/', $result)) { if ($event['event_author'] == $current_userid || $event['event_contactperson_id'] == $current_userid) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_MULTIDAY/', $result)) { if ($event['event_start_date'] != $event['event_end_date']) { $replacement = 1; } else { $replacement = 0; } } elseif ($event && preg_match('/#_IS_FIRST_RECURRENCE/', $result)) { // returns 1 if the event is the first event in a recurrence series if ($event['recurrence_id']) { $events = eme_get_recurrence_eventids($event['recurrence_id']); $nbr = array_search($event['event_id'], $events); if ($nbr !== false && $nbr == 0) { $replacement = 1; } } } elseif ($event && preg_match('/#_IS_LAST_RECURRENCE/', $result)) { // returns 1 if the event is the last event in a recurrence series if ($event['recurrence_id']) { $events = eme_get_recurrence_eventids($event['recurrence_id']); $nbr = array_search($event['event_id'], $events); $last_index = count($events) - 1; if ($nbr !== false && $nbr == $last_index) { $replacement = 1; } } } elseif (preg_match('/#_LOCALE/', $result)) { $replacement = get_locale(); } else { $found = 0; } if ($found) { if ($need_escape) { $replacement = eme_sanitize_request(eme_sanitize_html(preg_replace('/\\n|\\r/', '', $replacement))); } if ($need_urlencode) { $replacement = rawurlencode($replacement); } $format = str_replace($orig_result, $replacement, $format); } } # now handle all possible location placeholders # but the eme_replace_locations_placeholders can't do "do_shortcode" at the end, because # this would cause [eme_if] tags to be replaced here already, while some placeholders of the # event haven't been replaced yet (like time placeholders, and event details) $format = eme_replace_locations_placeholders($format, $location, $target, 0, $lang); // for extra date formatting, eg. #_{d/m/Y} preg_match_all("/#(ESC|URL)?@?_\\{.*?\\}/", $format, $results); // make sure we set the largest matched placeholders first, otherwise if you found e.g. // #_LOCATION, part of #_LOCATIONPAGEURL would get replaced as well ... usort($results[0], 'sort_stringlenth'); foreach ($results[0] as $result) { $need_escape = 0; $need_urlencode = 0; $orig_result = $result; if (strstr($result, '#ESC')) { $result = str_replace("#ESC", "#", $result); $need_escape = 1; } elseif (strstr($result, '#URL')) { $result = str_replace("#URL", "#", $result); $need_urlencode = 1; } $replacement = ''; if (substr($result, 0, 3) == "#@_") { $my_date = "event_end_date"; $my_time = "event_end_time"; $offset = 4; } else { $my_date = "event_start_date"; $my_time = "event_start_time"; $offset = 3; } $replacement = eme_localised_date($event[$my_date] . " " . $event[$my_time] . " " . $eme_timezone, substr($result, $offset, strlen($result) - ($offset + 1))); if ($need_escape) { $replacement = eme_sanitize_request(eme_sanitize_html(preg_replace('/\\n|\\r/', '', $replacement))); } if ($need_urlencode) { $replacement = rawurlencode($replacement); } $format = str_replace($orig_result, $replacement, $format); } # we handle NOTES the last, this used to be the default behavior # so no placeholder replacement happened accidentaly in possible shortcodes inside #_NOTES # but since we have templates to aid in all that ... if (!$eme_enable_notes_placeholders) { $format = eme_replace_notes_placeholders($format, $event, $target); } // now, replace any language tags found in the format itself $format = eme_translate($format, $lang); if ($do_shortcode) { return do_shortcode($format); } else { return $format; } }
function eme_get_events_list($limit, $scope = "future", $order = "ASC", $format = '', $format_header = '', $format_footer = '', $echo = 1, $category = '', $showperiod = '', $long_events = 0, $author = '', $contact_person = '', $paging = 0, $location_id = "", $user_registered_only = 0, $show_ongoing = 1, $link_showperiod = 0, $notcategory = '', $show_recurrent_events_once = 0, $template_id = 0, $template_id_header = 0, $template_id_footer = 0, $no_events_message = "", $show_single_event = 0) { global $post, $eme_timezone; if ($limit === "") { $limit = get_option('eme_event_list_number_items'); } if (strpos($limit, "=")) { // allows the use of arguments without breaking the legacy code $eme_event_list_number_events = get_option('eme_event_list_number_items'); $defaults = array('limit' => $eme_event_list_number_events, 'scope' => 'future', 'order' => 'ASC', 'format' => '', 'echo' => 1, 'category' => '', 'showperiod' => '', $author => '', $contact_person => '', 'paging' => 0, 'long_events' => 0, 'location_id' => 0, 'show_ongoing' => 1, 'link_showperiod' => 0, 'notcategory' => '', 'show_recurrent_events_once' => 0, 'template_id' => 0, 'template_id_header' => 0, 'template_id_footer' => 0, 'no_events_message' => ''); $r = wp_parse_args($limit, $defaults); extract($r); // for AND categories: the user enters "+" and this gets translated to " " by wp_parse_args // so we fix it again $category = preg_replace("/ /", "+", $category); $notcategory = preg_replace("/ /", "+", $notcategory); } $echo = $echo === "true" || $echo === "1" ? true : $echo; $long_events = $long_events === "true" || $long_events === "1" ? true : $long_events; $paging = $paging === "true" || $paging === "1" ? true : $paging; $show_ongoing = $show_ongoing === "true" || $show_ongoing === "1" ? true : $show_ongoing; $echo = $echo === "false" || $echo === "0" ? false : $echo; $long_events = $long_events === "false" || $long_events === "0" ? false : $long_events; $paging = $paging === "false" || $paging === "0" ? false : $paging; $show_ongoing = $show_ongoing === "false" || $show_ongoing === "0" ? false : $show_ongoing; if ($scope == "") { $scope = "future"; } if ($order != "DESC") { $order = "ASC"; } if ($template_id) { $format = eme_get_template_format($template_id); } if ($template_id_header) { $format_header = eme_get_template_format($template_id_header); } if ($template_id_footer) { $format_footer = eme_get_template_format($template_id_footer); } if (empty($format)) { $format = get_option('eme_event_list_item_format'); if (empty($format_header)) { $format_header = get_option('eme_event_list_item_format_header'); if (empty($format_header)) { $format_header = DEFAULT_EVENT_LIST_HEADER_FORMAT; } } if (empty($format_footer)) { $format_footer = get_option('eme_event_list_item_format_footer'); if (empty($format_footer)) { $format_footer = DEFAULT_EVENT_LIST_FOOTER_FORMAT; } } } // for registered users: we'll add a list of event_id's for that user only $extra_conditions = ""; if ($user_registered_only == 1 && is_user_logged_in()) { $current_userid = get_current_user_id(); $person_id = eme_get_person_id_by_wp_id($current_userid); $list_of_event_ids = join(",", eme_get_event_ids_by_booker_id($person_id)); if (!empty($list_of_event_ids)) { $extra_conditions = " (event_id in ({$list_of_event_ids}))"; } else { // user has no registered events, then make sure none are shown $extra_conditions = " (event_id = 0)"; } } $prev_text = ""; $next_text = ""; $limit_start = 0; $limit_end = 0; // for browsing: if limit=0,paging=1 and only for this_week,this_month or today if ($limit > 0 && $paging == 1 && isset($_GET['eme_offset'])) { $limit_offset = intval($_GET['eme_offset']); } else { $limit_offset = 0; } // if extra scope_filter is found (from the eme_filter shortcode), then no paging // since it won't work anyway if (isset($_REQUEST["eme_scope_filter"])) { $paging = 0; } if ($paging == 1 && $limit == 0) { $eme_date_obj = new ExpressiveDate(null, $eme_timezone); $scope_offset = 0; $scope_text = ""; if (isset($_GET['eme_offset'])) { $scope_offset = $_GET['eme_offset']; } $prev_offset = $scope_offset - 1; $next_offset = $scope_offset + 1; if ($scope == "this_week") { $start_of_week = get_option('start_of_week'); $eme_date_obj->setWeekStartDay($start_of_week); $eme_date_obj->modifyWeeks($scope_offset); $limit_start = $eme_date_obj->startOfWeek()->format('Y-m-d'); $limit_end = $eme_date_obj->endOfWeek()->format('Y-m-d'); $scope = "{$limit_start}--{$limit_end}"; $scope_text = eme_localised_date($limit_start . " " . $eme_timezone) . " -- " . eme_localised_date($limit_end . " " . $eme_timezone); $prev_text = __('Previous week', 'eme'); $next_text = __('Next week', 'eme'); } elseif ($scope == "this_month") { $eme_date_obj->modifyMonths($scope_offset); $limit_start = $eme_date_obj->startOfMonth()->format('Y-m-d'); $limit_end = $eme_date_obj->endOfMonth()->format('Y-m-d'); $scope = "{$limit_start}--{$limit_end}"; $scope_text = eme_localised_date($limit_start . " " . $eme_timezone, get_option('eme_show_period_monthly_dateformat')); $prev_text = __('Previous month', 'eme'); $next_text = __('Next month', 'eme'); } elseif ($scope == "this_year") { $eme_date_obj->modifyYears($scope_offset); $year = $eme_date_obj->getYear(); $limit_start = "{$year}-01-01"; $limit_end = "{$year}-12-31"; $scope = "{$limit_start}--{$limit_end}"; $scope_text = eme_localised_date($limit_start . " " . $eme_timezone, get_option('eme_show_period_yearly_dateformat')); $prev_text = __('Previous year', 'eme'); $next_text = __('Next year', 'eme'); } elseif ($scope == "today") { $scope = $eme_date_obj->modifyDays($scope_offset)->format('Y-m-d'); $limit_start = $scope; $limit_end = $scope; $scope_text = eme_localised_date($limit_start . " " . $eme_timezone); $prev_text = __('Previous day', 'eme'); $next_text = __('Next day', 'eme'); } elseif ($scope == "tomorrow") { $scope_offset++; $scope = $eme_date_obj->modifyDays($scope_offset)->format('Y-m-d'); $limit_start = $scope; $limit_end = $scope; $scope_text = eme_localised_date($limit_start . " " . $eme_timezone); $prev_text = __('Previous day', 'eme'); $next_text = __('Next day', 'eme'); } } // We request $limit+1 events, so we know if we need to show the pagination link or not. if ($limit == 0) { $events = eme_get_events(0, $scope, $order, $limit_offset, $location_id, $category, $author, $contact_person, $show_ongoing, $notcategory, $show_recurrent_events_once, $extra_conditions); } else { $events = eme_get_events($limit + 1, $scope, $order, $limit_offset, $location_id, $category, $author, $contact_person, $show_ongoing, $notcategory, $show_recurrent_events_once, $extra_conditions); } $events_count = count($events); if ($events_count == 1 && $show_single_event) { $event = $events[0]; $output = eme_display_single_event($event['event_id']); return $output; } // get the paging output ready $pagination_top = "<div id='events-pagination-top'> "; $nav_hidden_class = "style='visibility:hidden;'"; if ($paging == 1 && $limit > 0) { // for normal paging and there're no events, we go back to offset=0 and try again if ($events_count == 0) { $limit_offset = 0; $events = eme_get_events($limit + 1, $scope, $order, $limit_offset, $location_id, $category, $author, $contact_person, $show_ongoing, $notcategory, $show_recurrent_events_once, $extra_conditions); $events_count = count($events); } $prev_text = __('Previous page', 'eme'); $next_text = __('Next page', 'eme'); $page_number = floor($limit_offset / $limit) + 1; $this_page_url = get_permalink($post->ID); //$this_page_url=$_SERVER['REQUEST_URI']; // remove the offset info $this_page_url = remove_query_arg('eme_offset', $this_page_url); // we add possible fields from the filter section $eme_filters["eme_eventAction"] = 1; $eme_filters["eme_cat_filter"] = 1; $eme_filters["eme_loc_filter"] = 1; $eme_filters["eme_town_filter"] = 1; $eme_filters["eme_scope_filter"] = 1; foreach ($_REQUEST as $key => $item) { if (isset($eme_filters[$key])) { # if you selected multiple items, $item is an array, but rawurlencode needs a string if (is_array($item)) { $item = join(',', eme_sanitize_request($item)); } $this_page_url = add_query_arg(array($key => $item), $this_page_url); } } // we always provide the text, so everything stays in place (but we just hide it if needed, and change the link to empty // to prevent going on indefinitely and thus allowing search bots to go on for ever if ($events_count > $limit) { $forward = $limit_offset + $limit; $backward = $limit_offset - $limit; if ($backward < 0) { $pagination_top .= "<a class='eme_nav_left' {$nav_hidden_class} href='#'><< {$prev_text}</a>"; } else { $pagination_top .= "<a class='eme_nav_left' href='" . add_query_arg(array('eme_offset' => $backward), $this_page_url) . "'><< {$prev_text}</a>"; } $pagination_top .= "<a class='eme_nav_right' href='" . add_query_arg(array('eme_offset' => $forward), $this_page_url) . "'>{$next_text} >></a>"; $pagination_top .= "<span class='eme_nav_center'>" . __('Page ', 'eme') . $page_number . "</span>"; } if ($events_count <= $limit && $limit_offset > 0) { $forward = 0; $backward = $limit_offset - $limit; if ($backward < 0) { $pagination_top .= "<a class='eme_nav_left' {$nav_hidden_class} href='#'><< {$prev_text}</a>"; } else { $pagination_top .= "<a class='eme_nav_left' href='" . add_query_arg(array('eme_offset' => $backward), $this_page_url) . "'><< {$prev_text}</a>"; } $pagination_top .= "<a class='eme_nav_right' {$nav_hidden_class} href='#'>{$next_text} >></a>"; $pagination_top .= "<span class='eme_nav_center'>" . __('Page ', 'eme') . $page_number . "</span>"; } } if ($paging == 1 && $limit == 0) { $this_page_url = $_SERVER['REQUEST_URI']; // remove the offset info $this_page_url = remove_query_arg('eme_offset', $this_page_url); // we add possible fields from the filter section $eme_filters["eme_eventAction"] = 1; $eme_filters["eme_cat_filter"] = 1; $eme_filters["eme_loc_filter"] = 1; $eme_filters["eme_town_filter"] = 1; $eme_filters["eme_scope_filter"] = 1; foreach ($_REQUEST as $key => $item) { if (isset($eme_filters[$key])) { # if you selected multiple items, $item is an array, but rawurlencode needs a string if (is_array($item)) { $item = join(',', eme_sanitize_request($item)); } $this_page_url = add_query_arg(array($key => $item), $this_page_url); } } // to prevent going on indefinitely and thus allowing search bots to go on for ever, // we stop providing links if there are no more events left $older_events = eme_get_events(1, "--" . $limit_start, $order, 0, $location_id, $category, $author, $contact_person, $show_ongoing, $notcategory, $show_recurrent_events_once, $extra_conditions); $newer_events = eme_get_events(1, "++" . $limit_end, $order, 0, $location_id, $category, $author, $contact_person, $show_ongoing, $notcategory, $show_recurrent_events_once, $extra_conditions); if (count($older_events) > 0) { $pagination_top .= "<a class='eme_nav_left' href='" . add_query_arg(array('eme_offset' => $prev_offset), $this_page_url) . "'><< {$prev_text}</a>"; } else { $pagination_top .= "<a class='eme_nav_left' {$nav_hidden_class} href='#'><< {$prev_text}</a>"; } if (count($newer_events) > 0) { $pagination_top .= "<a class='eme_nav_right' href='" . add_query_arg(array('eme_offset' => $next_offset), $this_page_url) . "'>{$next_text} >></a>"; } else { $pagination_top .= "<a class='eme_nav_right' {$nav_hidden_class} href='#'>{$next_text} >></a>"; } $pagination_top .= "<span class='eme_nav_center'>{$scope_text}</span>"; } $pagination_top .= "</div>"; $pagination_bottom = str_replace("events-pagination-top", "events-pagination-bottom", $pagination_top); $output = ""; if ($events_count > 0) { # if we want to show events per period, we first need to determine on which days events occur # this code is identical to that in eme_calendar.php for "long events" if (!empty($showperiod)) { $eventful_days = array(); $i = 1; foreach ($events as $event) { // we requested $limit+1 events, so we need to break at the $limit, if reached if ($limit > 0 && $i > $limit) { break; } $eme_date_obj_tmp = new ExpressiveDate($event['event_start_date'] . " " . $event['event_start_time'], $eme_timezone); $eme_date_obj_end = new ExpressiveDate($event['event_end_date'] . " " . $event['event_end_time'], $eme_timezone); if ($eme_date_obj_end->lessThan($eme_date_obj_tmp)) { $eme_date_obj_end = $eme_date_obj_tmp->copy(); } if ($long_events) { //Show events on every day that they are still going on while ($eme_date_obj_tmp->lessOrEqualTo($eme_date_obj_end)) { $event_eventful_date = $eme_date_obj_tmp->getDate(); if (isset($eventful_days[$event_eventful_date]) && is_array($eventful_days[$event_eventful_date])) { $eventful_days[$event_eventful_date][] = $event; } else { $eventful_days[$event_eventful_date] = array($event); } $eme_date_obj_tmp->addOneDay(); } } else { //Only show events on the day that they start if (isset($eventful_days[$event['event_start_date']]) && is_array($eventful_days[$event['event_start_date']])) { $eventful_days[$event['event_start_date']][] = $event; } else { $eventful_days[$event['event_start_date']] = array($event); } } $i++; } # now that we now the days on which events occur, loop through them $curyear = ""; $curmonth = ""; $curday = ""; foreach ($eventful_days as $day_key => $day_events) { $eme_date_obj = new ExpressiveDate($day_key, $eme_timezone); list($theyear, $themonth, $theday) = explode('-', $eme_date_obj->getDate()); if ($showperiod == "yearly" && $theyear != $curyear) { $output .= "<li class='eme_period'>" . eme_localised_date($day_key . " " . $eme_timezone, get_option('eme_show_period_yearly_dateformat')) . "</li>"; } elseif ($showperiod == "monthly" && "{$theyear}{$themonth}" != "{$curyear}{$curmonth}") { $output .= "<li class='eme_period'>" . eme_localised_date($day_key . " " . $eme_timezone, get_option('eme_show_period_monthly_dateformat')) . "</li>"; } elseif ($showperiod == "daily" && "{$theyear}{$themonth}{$theday}" != "{$curyear}{$curmonth}{$curday}") { $output .= "<li class='eme_period'>"; if ($link_showperiod) { $eme_link = eme_calendar_day_url($theyear . "-" . $themonth . "-" . $theday); $output .= "<a href=\"{$eme_link}\">" . eme_localised_date($day_key . " " . $eme_timezone) . "</a>"; } else { $output .= eme_localised_date($day_key . " " . $eme_timezone); } $output .= "</li>"; } $curyear = $theyear; $curmonth = $themonth; $curday = $theday; foreach ($day_events as $event) { $output .= eme_replace_placeholders($format, $event); } } } else { $i = 1; foreach ($events as $event) { // we requested $limit+1 events, so we need to break at the $limit, if reached if ($limit > 0 && $i > $limit) { break; } $output .= eme_replace_placeholders($format, $event); $i++; } } // end if (! empty ( $showperiod )) { //Add headers and footers to output $empty_event = eme_new_event(); $output = eme_replace_placeholders($format_header, $empty_event) . $output . eme_replace_placeholders($format_footer, $empty_event); } else { if (empty($no_events_message)) { $no_events_message = get_option('eme_no_events_message'); } $output = "<div id='events-no-events'>" . $no_events_message . "</div>"; } // add the pagination if needed if ($paging == 1 && $events_count > 0) { $output = $pagination_top . $output . $pagination_bottom; } // see how to return the output if ($echo) { echo $output; } else { return $output; } }