<?php
/**
 * Copyright (c) 2014, 2016, 2018 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Christopher Guindon (Eclipse Foundation) - Initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/downloads/downloads.class.php");

$App = new App();
$Theme = $App->getThemeClass();
$Downloads = new Downloads();

// Adding a 100% counter for the downloads page
$impression = new CampaignImpression('DOWNLOADPAGE', $_SERVER['REQUEST_URI'], @gethostbyaddr($_SERVER['REMOTE_ADDR']));
$impression->recordImpression();

// This hide/show the banner ad from being displayed
$Downloads->hideBannerAd(FALSE);

// @todo: We should probably move these functions to Theme().
$App->Promotion = TRUE;
$App->PageRSSTitle = "Eclipse Releases";

$App->AddExtraJSFooter('<script type="text/javascript" src="/downloads/assets/public/javascript/downloads.min.js"></script>');

$App->setThemeVariables(array('hide_breadcrumbs' => TRUE));

$pageTitle = 'Eclipse Downloads';
$Theme->setPageAuthor('Eclipse Foundation');
$Theme->setPageKeywords('eclipse, download, downloads, mirror, project, plug-ins, plugins, java, ide, swt, refactoring, free java ide, tools, platform, open source, development environment, development, ide');
$Theme->setPageTitle($pageTitle);

$App->Promotion = FALSE;

// Custom theme variables
$variables = array();
$variables['main_container_classes'] = 'container-full breadcrumbs-offset footer-offset downloads-container';

// Optional - Hide the CFA button.
$variables['btn_cfa'] = array(
  'hide' => TRUE
);

$App->setThemeVariables($variables);

// Place your html content in a file called content/en_pagename.php
ob_start();
include ("content/en_index.php");
$html = ob_get_clean();

$Theme->setHtml($html);
$Theme->setExtraHeaders('<link href="/downloads/assets/public/stylesheets/downloads.min.css" media="screen" rel="stylesheet" type="text/css"/>');
$Theme->generatePage();
