app/controllers/release.php (150 lines of code) (raw):

<?php declare(strict_types=1); use ReleaseInsights\{Data, ESR, Model, Template, Version}; $requested_version = Version::get(); $requested_version_int = (int) Version::get(); if ($requested_version == '0.0') { header('Location: /404/'); return; } // Planned releases $upcoming_releases = new Data()->getFutureReleases(); $owners = new Data()->release_owners; $css_page_id = match (true) { $requested_version_int === NIGHTLY => 'release_nightly', $requested_version_int === BETA => 'release_beta', $requested_version_int === RELEASE => 'release_current', $requested_version_int < RELEASE => 'release_past', default => 'release_future', }; $template_data = [ 'css_page_id' => $css_page_id, 'page_title' => 'Milestones and key data for Firefox ' . $requested_version_int, 'release' => $requested_version_int, 'release_owner' => $owners[$requested_version] ?? 'TBD', 'fallback_content' => '', ]; // Releases before version 4 were handled completely differently if ($requested_version_int < 4) { [$dot_release_count, $release_date] = new Model('pre_firefox4_release')->get(); $template_data += ['dot_release_count' => $dot_release_count]; $template_data += ['release_date' => $release_date]; new Template('pre4_release.html.twig', $template_data)->render(); return; } $template_data = array_merge( $template_data, [ 'ESR' => ESR::getVersion($requested_version_int), 'OLDER_ESR' => ESR::getOlderSupportedVersion($requested_version_int), 'ESR_115' => ESR::getWin7SupportedVersion($requested_version_int), ] ); if (isset($_GET['version']) && $_GET['version'] === 'esr') { [ $next_ESR, $current_ESR, $release_date, $esr_calendar, ] = new Model('esr_release')->get(); $template_data = array_merge($template_data, [ 'page_title' => 'Firefox ESR schedule', 'css_page_id' => 'release_esr', 'next_ESR' => $next_ESR, 'current_ESR' => $current_ESR, 'release_date' => $release_date, 'esr_calendar' => $esr_calendar, 'esr_majors' => ESR::$esr_releases, ]); new Template('esr_release.html.twig', $template_data)->render(); return; } // If this is a release we already shipped, display stats for the release if ($requested_version_int <= RELEASE) { [ $last_release_date, $previous_release_date, $beta_cycle_length, $nightly_cycle_length, $nightly_fixes, $beta_changelog, $beta_uplifts, $rc_uplifts, $rc_changelog, $rc_uplifts_url, $rc_backouts_url, $beta_uplifts_url, $beta_backouts_url, $rc_count, $beta_count, $dot_release_count, $dot_releases, $nightly_start_date, $beta_start_date, $firefox_releases, $no_planned_dot_releases, $release_rollout, $uptake, $chemspills, ] = new Model('past_release')->get(); $template_file = 'past_release.html.twig'; $template_data = array_merge($template_data, [ 'release_date' => $last_release_date, 'previous_release_date' => $previous_release_date, 'beta_cycle_length' => $beta_cycle_length, 'nightly_cycle_length' => $nightly_cycle_length, 'nightly_fixes' => $nightly_fixes, 'beta_changelog' => $beta_changelog, 'beta_uplifts' => $beta_uplifts, 'rc_uplifts' => $rc_uplifts, 'rc_changelog' => $rc_changelog, 'rc_uplifts_url' => $rc_uplifts_url, 'rc_backouts_url' => $rc_backouts_url, 'beta_uplifts_url' => $beta_uplifts_url, 'beta_backouts_url' => $beta_backouts_url, 'rc_count' => $rc_count, 'beta_count' => $beta_count, 'dot_release_count' => $dot_release_count, 'dot_releases' => $dot_releases, 'nightly_start_date' => $nightly_start_date, 'beta_start_date' => $beta_start_date, 'firefox_releases' => $firefox_releases, 'no_planned_dot_releases' => $no_planned_dot_releases, 'release_rollout' => $release_rollout, 'uptake' => $uptake, 'chemspills' => $chemspills, ]); } elseif ($requested_version_int > RELEASE && array_key_exists($requested_version, $upcoming_releases)) { [ $release_date, $beta_cycle_length, $nightly_cycle_length, $nightly_fixes, $nightly_updates, $nightly_emergency, $cycle_dates, $deadlines, $rollout, $wellness_days, $latest_nightly, ] = new Model('future_release')->get(); $template_file = 'future_release.html.twig'; $template_data = array_merge($template_data, [ 'release_date' => $release_date, 'beta_cycle_length' => $beta_cycle_length, 'nightly_cycle_length' => $nightly_cycle_length, 'nightly_fixes' => $nightly_fixes, 'nightly_updates' => $nightly_updates, 'nightly_emergency' => $nightly_emergency, 'cycle_dates' => $cycle_dates, 'deadlines' => $deadlines, 'beta_rollout' => $rollout, 'wellness_days' => $wellness_days, 'latest_nightly' => $latest_nightly, ]); } else { $template_file = 'future_release.html.twig'; $template_data = array_merge($template_data, [ 'page_title' => 'No information yet for this release', 'fallback_content' => '<p class="alert alert-warning text-center w-50 mx-auto">The release date for this version is not yet available.</p>', ]); } new Template($template_file, $template_data)->render();