['title' => __('Search', '12-step-meeting-list'), 'icon' => 'glyphicon glyphicon-search'], 'location' => ['title' => __('Near Location', '12-step-meeting-list'), 'icon' => 'glyphicon glyphicon-map-marker'], ]; // proximity only enabled over SSL if (is_ssl()) { $modes['me'] = ['title' => __('Near Me', '12-step-meeting-list'), 'icon' => 'glyphicon glyphicon-user']; } // define distance dropdown $distances = []; foreach ([1, 2, 5, 10, 25, 50, 100] as $distance) { if ($tsml_distance_units == 'mi') { // translators: %d is the distance in miles $distances[$distance] = sprintf(_n('Within %d Mile', 'Within %d Miles', $distance, '12-step-meeting-list'), $distance); } else { // translators: %d is the distance in kilometers $distances[$distance] = sprintf(_n('Within %d Kilometer', 'Within %d Kilometers', $distance, '12-step-meeting-list'), $distance); } } // define times dropdown $times = [ 'morning' => __('Morning', '12-step-meeting-list'), 'midday' => __('Midday', '12-step-meeting-list'), 'evening' => __('Evening', '12-step-meeting-list'), 'night' => __('Night', '12-step-meeting-list'), ]; // legacy query string stuff, we don't want to break everyone's links (just yet) if (isset($_GET['d'])) { $_GET['tsml-day'] = $_GET['d']; } if (isset($_GET['r'])) { $_GET['tsml-region'] = $_GET['r']; } if (isset($_GET['t'])) { $_GET['tsml-type'] = $_GET['t']; } if (isset($_GET['i'])) { $_GET['tsml-time'] = $_GET['i']; } if (isset($_GET['v'])) { $_GET['tsml-view'] = $_GET['v']; } if (isset($_GET['sq'])) { $_GET['tsml-query'] = $_GET['sq']; } extract($tsml_defaults); $region = $district = null; // parse query string if (isset($_GET['tsml-query'])) { $query = sanitize_text_field(stripslashes($_GET['tsml-query'])); } if (isset($_GET['tsml-region'])) { if (term_exists(sanitize_text_field($_GET['tsml-region']), 'tsml_region')) { $region = $_GET['tsml-region']; } elseif (term_exists(intval($_GET['tsml-region']), 'tsml_region')) { // legacy integer region, redirect $term = get_term(intval($_GET['tsml-region']), 'tsml_region'); wp_redirect(add_query_arg('tsml-region', $term->slug)); } else { wp_redirect(add_query_arg('tsml-region', null)); } } elseif (isset($_GET['tsml-district'])) { if (term_exists(sanitize_text_field($_GET['tsml-district']), 'tsml_district')) { $district = $_GET['tsml-district']; } elseif (term_exists(intval($_GET['tsml-district']), 'tsml_district')) { // legacy integer district, redirect $term = get_term(intval($_GET['tsml-district']), 'tsml_district'); wp_redirect(add_query_arg('tsml-district', $term->slug)); } else { wp_redirect(add_query_arg('tsml-district', null)); } } $types = []; if (!empty($_GET['tsml-type'])) { $type_queries = explode(',', $_GET['tsml-type']); foreach ($type_queries as $type_query) { if (array_key_exists($type_query, $tsml_programs[$tsml_program]['types'])) { $types[] = $type_query; } } } $attendance_options = []; if (!empty($_GET['tsml-attendance_option'])) { $attendance_option_queries = explode(',', $_GET['tsml-attendance_option']); foreach ($attendance_option_queries as $attendance_option_query) { if ((array_key_exists($attendance_option_query, $tsml_meeting_attendance_options)) || ($attendance_option_query === 'active')) { $attendance_options[] = $attendance_option_query; } } } if (isset($_GET['tsml-time']) && (($_GET['tsml-time'] == 'upcoming') || array_key_exists($_GET['tsml-time'], $times))) { $time = $_GET['tsml-time']; } $distance = (isset($_GET['tsml-distance']) && array_key_exists(intval($_GET['tsml-distance']), $distances)) ? intval($_GET['tsml-distance']) : $tsml_defaults['distance']; if (isset($_GET['tsml-mode']) && array_key_exists($_GET['tsml-mode'], $modes)) { $mode = $_GET['tsml-mode']; } if (isset($_GET['tsml-view']) && in_array($_GET['tsml-view'], ['list', 'map'])) { $view = $_GET['tsml-view']; } // day default $today = true; if (isset($_GET['tsml-day'])) { $today = false; $day = ($_GET['tsml-day'] == 'any') ? null : intval($_GET['tsml-day']); } // time can only be upcoming if it's today if (($time == 'upcoming') && ($day != intval(current_time('w')))) { $time = null; } // labels $day_default = __('Any Day', '12-step-meeting-list'); $day_label = ($day === null) ? $day_default : $tsml_days[$day]; $time_default = __('Any Time', '12-step-meeting-list'); if ($time == 'upcoming') { $time_label = __('Upcoming', '12-step-meeting-list'); } else { $time_label = $time ? $times[$time] : $time_default; } $region_default = $region_label = __('Everywhere', '12-step-meeting-list'); if ($region) { $term = get_term_by('slug', $region, 'tsml_region'); $region_label = $term->name; } elseif ($district) { $term = get_term_by('slug', $district, 'tsml_district'); $region_label = $term->name; } $type_default = __('Any Type', '12-step-meeting-list'); if (!count($types) && (!count($attendance_options))) { $type_label = $type_default; } else { $type_label = []; foreach ($attendance_options as $attendance_option) { if ($attendance_option === 'active') { $type_label[] = "Active"; } if (array_key_exists($attendance_option, $tsml_meeting_attendance_options)) { $type_label[] = $tsml_meeting_attendance_options[$attendance_option]; } } foreach ($types as $type) { if (array_key_exists($type, $tsml_programs[$tsml_program]['types'])) { $type_label[] = $tsml_programs[$tsml_program]['types'][$type]; } } $type_label = implode(' + ', $type_label); } $mode_label = array_key_exists($mode, $modes) ? $modes[$mode]['title'] : $modes[0]['title']; $distance_label = $distances[$distance]; // create page title (todo redo with sprintf) $tsml_page_title = []; if ($day !== null) { $tsml_page_title[] = $today ? __('Today\'s', '12-step-meeting-list') : $tsml_days[$day]; } if ($time) { $tsml_page_title[] = $time_label; } if (count($types)) { $tsml_page_title[] = $type_label; } $tsml_page_title[] = empty($tsml_programs[$tsml_program]['abbr']) ? $tsml_programs[$tsml_program]['name'] : $tsml_programs[$tsml_program]['abbr']; $tsml_page_title[] = __('Meetings', '12-step-meeting-list'); if ($region) { $tsml_page_title[] = __('in', '12-step-meeting-list') . ' ' . $region_label; } $tsml_page_title = implode(' ', $tsml_page_title); // set page title for SEO (only applies to this page) add_filter('wp_title', function ($title, $separator = null) { global $tsml_page_title; if (empty($separator)) { return $tsml_page_title; } $title_parts = array_map('trim', explode($separator, $title)); for ($i = 0; $i < count($title_parts); $i++) { if (strcmp($title_parts[$i], __('Meetings', '12-step-meeting-list')) == 0) { $title_parts[$i] = $tsml_page_title; } } return implode(' ' . $separator . ' ', $title_parts); }, 10, 2); // need these later $meetings = $locations = []; $message = ''; // run query if ($mode == 'search') { $type = implode(',', $types); $attendance_option = implode(',', $attendance_options); $meetings = tsml_get_meetings(compact('mode', 'day', 'time', 'region', 'district', 'type', 'query', 'attendance_option')); if (!count($meetings)) { $message = $tsml_strings['no_meetings']; } } elseif ($mode == 'location') { $message = empty($_GET['query']) ? $tsml_strings['loc_empty'] : $tsml_strings['loc_thinking']; } elseif ($mode == 'me') { $message = $tsml_strings['geo_thinking']; } class Walker_Regions_Dropdown extends Walker_Category { public function start_el(&$output, $category, $depth = 0, $args = [], $id = 0) { $classes = ['region', 'notranslate']; if ($args['value'] == esc_attr($category->slug)) { $classes[] = 'active'; } $classes = count($classes) ? ' class="' . implode(' ', $classes) . '"' : ''; $output .= '