<?php
/**
 * Copyright (c) 2014, 2018 Eclipse Foundation and others.
 *
 * 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 API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */

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

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

// Begin: page-specific settings.  Change these.
$pageTitle = "Eclipse desktop & web IDE<span style=\"text-transform:lowercase;\">s</span>";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("eclipse,project,plug-ins,plugins,java,ide,swt,refactoring,free java ide,tools,platform,open source,development environment,development,ide");
$Theme->setPageAuthor("Christopher Guindon");

$Packages = new CompareController($App);
$Packages->setPrefixPackage('release');

$jee = $Packages->getPackages('jee-package');
$java = $Packages->getPackages('java-package');
$php = $Packages->getPackages('php-package');
$cpp = $Packages->getPackages('cpp-package');

// Place your html content in a file called content/en_pagename.php
ob_start();
include("content/en_" . $App->getScriptName());
$html = ob_get_clean();
$Theme->sethtml($html);

// Custom theme variables
$variables = array();
$variables['main_container_classes'] = 'container-full';
$Theme->setThemeVariables($variables);
$Theme->removeAttributes('breadcrumbs', 'breadcrumbs-default-margin');

$Theme->generatePage();