<?php
/**
 * Copyright (c) 2015, 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/friends/payment.class.php");

$App = new App();
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/donate/assets/public/stylesheets/improve.min.css" media="screen" />');
$App->AddExtraJSFooter('<script type="text/javascript" src="/donate/assets/public/javascript/scripts.min.js?1501"></script>');

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

$App->preventCaching();

$pageTitle = "Eclipse Donation";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("friends of eclipse, donation, contribution");
$Theme->setPageAuthor("Christopher Guindon");

// Custom theme variables
$variables = array();
$variables['main_container_classes'] = 'container-full';
$App->setThemeVariables($variables);

// Generate the web page
ob_start();
include("content/en_" . $App->getScriptName());
$html = ob_get_clean();


$Theme->setHtml($html);
$Theme->removeAttributes('breadcrumbs', 'breadcrumbs-default-margin');
$Theme->generatePage();