// ========================================================================= // SHORTCODE: On This Day (Birthdays, Deaths, Games with W-L-OT, Transactions, Events) // Integrated with otg_rangers_games, otg_transactions, and otg_rangers_events schemas // Usage: [otg_on_this_day] // ========================================================================= add_shortcode('otg_on_this_day', 'otg_render_on_this_day'); function otg_render_on_this_day() { global $wpdb; // Tables matching established schemas $players_table = 'otg_players'; $coaches_table = 'otg_coach'; $gms_table = 'otg_general_managers'; $games_table = 'otg_rangers_games'; $transactions_table = 'otg_transactions'; $events_table = 'otg_rangers_events'; // 1. Get Filter Inputs from GET parameters (defaulting to today's month/day) $filter_month = isset($_GET['otd_month']) ? sanitize_text_field($_GET['otd_month']) : date('m'); $filter_day = isset($_GET['otd_day']) ? sanitize_text_field($_GET['otd_day']) : date('d'); $filter_year = isset($_GET['otd_year']) ? sanitize_text_field($_GET['otd_year']) : ''; // Standardized input styles matching site theme $input_style = 'height: 38px; padding: 0 10px; background: #161616; color: #fff; border: 1px solid #444; border-radius: 4px; box-sizing: border-box; font-size: 0.9em;'; $current_url = strtok($_SERVER['URI'] ?? $_SERVER['REQUEST_URI'], '?'); // Start Output Wrapper (Full width, left-aligned container layout) $output = '
'; // Header Section $output .= '
On This Day in Rangers History
'; // Inline CSS: Three columns layout with alternating row backgrounds and game type badge styling $output .= ''; // Filter Form Layout $output .= '
'; foreach ($_GET as $key => $val) { if (!in_array($key, ['otd_month', 'otd_day', 'otd_year', 'paged'])) { $output .= ''; } } // Month Dropdown $output .= '
'; // Day Dropdown $output .= '
'; // Year Input $output .= '
'; $output .= '
'; $output .= ''; $output .= 'Clear'; $output .= '
'; $output .= '
'; // Build Date Conditions for SQL Queries (Birthdays) $date_conditions = ""; $date_params = []; if (!empty($filter_month)) { $date_conditions .= " AND MONTH(Birthday) = %d"; $date_params[] = intval($filter_month); } if (!empty($filter_day)) { $date_conditions .= " AND DAY(Birthday) = %d"; $date_params[] = intval($filter_day); } if (!empty($filter_year)) { $date_conditions .= " AND YEAR(Birthday) = %d"; $date_params[] = intval($filter_year); } // ========================================================================= // 2. DATASETS FETCHING // ========================================================================= // --- A. BIRTHDAYS (Players, Coaches, GMs) --- $players_sql = "SELECT ID as entity_id, Name, Birthday, 'player' as type FROM {$players_table} WHERE played = 'y' AND Birthday IS NOT NULL AND Birthday != '0000-00-00'" . $date_conditions . " ORDER BY Birthday ASC"; $players_bday = $wpdb->get_results(!empty($date_params) ? $wpdb->prepare($players_sql, $date_params) : $players_sql); $coaches_sql = "SELECT CoachID as entity_id, Name, Birthday, 'coach' as type FROM {$coaches_table} WHERE Birthday IS NOT NULL AND Birthday != '0000-00-00'" . $date_conditions . " ORDER BY Birthday ASC"; $coaches_bday = $wpdb->get_results(!empty($date_params) ? $wpdb->prepare($coaches_sql, $date_params) : $coaches_sql); $gms_sql = "SELECT g.id as entity_id, g.name as Name, p.Birthday, 'gm' as type FROM {$gms_table} g JOIN {$players_table} p ON g.player_id = p.ID WHERE p.Birthday IS NOT NULL AND p.Birthday != '0000-00-00'" . str_replace("Birthday", "p.Birthday", $date_conditions) . " ORDER BY p.Birthday ASC"; $gms_bday = $wpdb->get_results(!empty($date_params) ? $wpdb->prepare($gms_sql, $date_params) : $gms_sql); $all_birthdays = array_merge($players_bday, $coaches_bday, $gms_bday); // --- B. DEATHS --- $death_conditions = ""; $death_params = []; if (!empty($filter_month)) { $death_conditions .= " AND MONTH(Death) = %d"; $death_params[] = intval($filter_month); } if (!empty($filter_day)) { $death_conditions .= " AND DAY(Death) = %d"; $death_params[] = intval($filter_day); } if (!empty($filter_year)) { $death_conditions .= " AND YEAR(Death) = %d"; $death_params[] = intval($filter_year); } $deaths_sql = "SELECT ID as entity_id, Name, Death FROM {$players_table} WHERE Death IS NOT NULL AND Death != '0000-00-00'" . $death_conditions . " ORDER BY Death ASC"; $deaths = $wpdb->get_results(!empty($death_params) ? $wpdb->prepare($deaths_sql, $death_params) : $deaths_sql); // --- C. GAMES --- $games_conditions = " WHERE game_type != 1 AND game_outcome != 'SCH' AND game_outcome IS NOT NULL"; $games_params = []; if (!empty($filter_month)) { $games_conditions .= " AND MONTH(game_date) = %d"; $games_params[] = intval($filter_month); } if (!empty($filter_day)) { $games_conditions .= " AND DAY(game_date) = %d"; $games_params[] = intval($filter_day); } if (!empty($filter_year)) { $games_conditions .= " AND YEAR(game_date) = %d"; $games_params[] = intval($filter_year); } $games_sql = "SELECT g.*, st.team AS opponent_name FROM {$games_table} g LEFT JOIN otg_standings_nhl st ON (st.abbreviation = g.opponent_abbr && st.season = g.season && st.abbreviation != 'NYR')" . $games_conditions . " ORDER BY g.game_date DESC"; $games = $wpdb->get_results(!empty($games_params) ? $wpdb->prepare($games_sql, $games_params) : $games_sql); // --- D. TRANSACTIONS --- $allowed_trans_types = ['Released', 'Retired', 'Signed', 'Acquired', 'Traded', 'Contract Terminated', 'Buyout']; $placeholders_trans = implode(',', array_fill(0, count($allowed_trans_types), '%s')); $trans_conditions = " WHERE Transaction IN ($placeholders_trans)"; $trans_params = $allowed_trans_types; if (!empty($filter_month)) { $trans_conditions .= " AND MONTH(Date) = %d"; $trans_params[] = intval($filter_month); } if (!empty($filter_day)) { $trans_conditions .= " AND DAY(Date) = %d"; $trans_params[] = intval($filter_day); } if (!empty($filter_year)) { $trans_conditions .= " AND YEAR(Date) = %d"; $trans_params[] = intval($filter_year); } $transactions_sql = "SELECT * FROM {$transactions_table}" . $trans_conditions . " ORDER BY Date DESC"; $transactions = $wpdb->get_results($wpdb->prepare($transactions_sql, $trans_params)); // --- E. MOMENTS IN HISTORY (otg_rangers_events schema) --- $events_conditions = " WHERE event_date IS NOT NULL AND event_date != '0000-00-00'"; $events_params = []; if (!empty($filter_month)) { $events_conditions .= " AND MONTH(event_date) = %d"; $events_params[] = intval($filter_month); } if (!empty($filter_day)) { $events_conditions .= " AND DAY(event_date) = %d"; $events_params[] = intval($filter_day); } if (!empty($filter_year)) { $events_conditions .= " AND YEAR(event_date) = %d"; $events_params[] = intval($filter_year); } $events_sql = "SELECT e.*, p.Name as player_name FROM {$events_table} e LEFT JOIN {$players_table} p ON e.related_player_id = p.ID" . $events_conditions . " ORDER BY e.event_date DESC"; $events = $wpdb->get_results(!empty($events_params) ? $wpdb->prepare($events_sql, $events_params) : $events_sql); // ========================================================================= // 3. HTML RENDER SECTIONS // ========================================================================= $render_otg_block = function($title, $items_html) { $html = '
'; $html .= '
' . esc_html($title) . '
'; $html .= $items_html; $html .= '
'; return $html; }; // --- COLUMN 1: Birthdays & Passings --- $col1_content = ''; // 1. Birthdays Section $bday_html = ''; if (empty($all_birthdays)) { $bday_html = '

No birthdays found for this date.

'; } else { $bday_html = ''; } $col1_content .= $render_otg_block('Birthdays', $bday_html); // 2. Deaths Section $death_html = ''; if (empty($deaths)) { $death_html = '

No recorded deaths for this date.

'; } else { $death_html = ''; } $col1_content .= $render_otg_block('Passings', $death_html); // --- COLUMN 2: Games History & Transactions --- $col2_content = ''; // Calculate total W-L-OT for the loaded games dataset $calc_w = 0; $calc_l = 0; $calc_ot = 0; foreach ($games as $g_item) { $out = strtoupper(trim($g_item->game_outcome)); $ot_stat = strtoupper(trim($g_item->overtime_status ?? '')); if ($out === 'W') { $calc_w++; } elseif ($out === 'OTL' || $ot_stat === 'OT' || $ot_stat === 'SO') { $calc_ot++; } elseif ($out === 'L') { $calc_l++; } elseif ($out === 'T') { $calc_l++; } } $record_summary_string = $calc_w . '-' . $calc_l . '-' . $calc_ot; // 3. Games Section $games_html = ''; if (empty($games)) { $games_html = '

No games found for this date.

'; } else { $games_html = ''; } // Header title with total W-L-OT right-justified on the same row $games_header_html = '
'; $games_header_html .= 'Games History'; $games_header_html .= 'Record: ' . esc_html($record_summary_string) . ''; $games_header_html .= '
'; $col2_content .= '
' . $games_header_html . $games_html . '
'; // 4. Transactions Section $trans_html = ''; if (empty($transactions)) { $trans_html = '

No relevant transactions recorded for this date.

'; } else { $trans_html = ''; } $col2_content .= $render_otg_block('Transactions', $trans_html); // --- COLUMN 3: Moments in History --- $events_html = ''; if (empty($events)) { $events_html = '

No historical moments recorded for this date.

'; } else { $events_html = '
'; foreach ($events as $ev) { $ev_date = !empty($ev->event_date) ? date('F j, Y', strtotime($ev->event_date)) : ''; $ev_title = !empty($ev->title) ? $ev->title : ''; $ev_excerpt = !empty($ev->excerpt) ? $ev->excerpt : ''; $ev_cat = !empty($ev->category) ? $ev->category : ''; $youtube_link = !empty($ev->you_tube_link) ? trim($ev->you_tube_link) : ''; $relations_output = []; if (!empty($ev->related_player_id)) { $p_url = esc_url(home_url('/profile/?player_id=' . intval($ev->related_player_id))); $p_label = !empty($ev->player_name) ? $ev->player_name : 'Related Player'; $relations_output[] = '' . esc_html($p_label) . ''; } if (!empty($ev->related_game_id)) { $g_url = esc_url(home_url('/box/?game_id=' . intval($ev->related_game_id))); $relations_output[] = 'Related Box Score'; } $events_html .= '
'; $events_html .= '
'; $events_html .= '
' . esc_html($ev_title) . ' ' . esc_html($ev_cat) . '
'; $events_html .= '' . esc_html($ev_date) . ''; $events_html .= '
'; if (!empty($ev_excerpt)) { $events_html .= '

' . nl2br(esc_html($ev_excerpt)) . '

'; } if (!empty($relations_output)) { $events_html .= '
' . implode(' | ', $relations_output) . '
'; } if (!empty($youtube_link)) { $events_html .= '
'; if (shortcode_exists('embedpress')) { $events_html .= do_shortcode('[embedpress]' . esc_url($youtube_link) . '[/embedpress]'); } else { $events_html .= '
'; $events_html .= ''; $events_html .= '
'; } $events_html .= '
'; } $events_html .= '
'; } $events_html .= '
'; } $col3_content = $render_otg_block('Moments in History', $events_html); // Assemble Three-Column Grid structure $output .= '
'; $output .= '
' . $col1_content . '
'; $output .= '
' . $col2_content . '
'; $output .= '
' . $col3_content . '
'; $output .= '
'; $output .= '
'; return $output; } // Helper utility to parse YouTube ID for fallback if necessary function g_extract_youtube_id($url) { parse_str(parse_url($url, PHP_URL_QUERY), $my_array); if (isset($my_array['v'])) { return $my_array['v']; } $path = parse_url($url, PHP_URL_PATH); $path_segments = explode('/', trim($path, '/')); return end($path_segments); } Fish – Activity – OutsideTheGarden Boards – Page 9
JULY
«
Sat
10
Sun
11
Mon
12
Tue
13
Wed
14
Thu
15
Fri
16
»
Fish
Fish
Group: Moderator
Joined: 2023-08-22
Title: Member Moderator
3
Follow
Rangers approaching the modern day record of 155 minutes wit...

In forum Where Smit Hits The Fan

10 months ago
Passing up a shot to pass it to Sheary - things one should n...

In forum Where Smit Hits The Fan

10 months ago
 

In forum Where Smit Hits The Fan

10 months ago
Have I mentioned how much I hated man on man?  

In forum Where Smit Hits The Fan

10 months ago
Is he even Hardy Astrom?  

In forum Where Smit Hits The Fan

10 months ago
The puck pursuit has been pretty good outside the first game...

In forum Where Smit Hits The Fan

10 months ago
Robertson had a bit of an oopsie turnover on his first shift...

In forum Where Smit Hits The Fan

10 months ago
GAME 5: NYR v EDM - 7:00PM MSG

In forum Where Smit Hits The Fan

10 months ago
Can't fault the effort tonight, was a pretty solid game, out...

In forum Where Smit Hits The Fan

10 months ago
Never trust AI on hockey stats  

In forum Where Smit Hits The Fan

10 months ago
Sheary dinged up...hand or wrist?

In forum Where Smit Hits The Fan

10 months ago
Sheary just missed that cross-ice pass by Cuylle, had a lot ...

In forum Where Smit Hits The Fan

10 months ago
Looked pretty obvious too  

In forum Where Smit Hits The Fan

10 months ago
Don't think that's right, Park was still a Ranger then (trad...

In forum Where Smit Hits The Fan

10 months ago
Bit different from Game 1 though, Lindgren has also made som...

In forum Where Smit Hits The Fan

10 months ago
Page 9 / 245