<?php
/*******************************************************************************
 * Copyright (c) 2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/donationList.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/payment.class.php");

$App = new App();
$Nav = new Nav();
$Menu = new Menu();
$Paypal = new Paypal();
$testmode = $Paypal->_get_debug_mode();
$DonationList = new DonationList($testmode);

$App->preventCaching();

// Validate with PDT
$Paypal->paypal_confirm_pdt();

// Show thank you message for bitpay donations.
$Paypal->get_gateway_bitpay_thank_you();

# Begin: page-specific settings.  Change these.
$pageTitle = "Together we can improve Eclipse";
$pageKeywords = "friends of eclipse, donation, contribution";
$pageAuthor = "Christopher Guindon";

// Custom theme variables
$variables = array();
$variables['main_container_classes'] = 'container-credit';

$bestFriendsContributions = new FriendsContributionsList($testmode);
$bestFriendsContributions->selectFriendsContributionsList(0, 6, 'WHERE FC.amount >= 100 and F.is_anonymous = 0');
$bestFriends = $bestFriendsContributions->getList();
$donationlist_html = $DonationList->displayFriends($bestFriends, 'credit');

$friendsContributions = new FriendsContributionsList($testmode);
$friendsContributions->selectFriendsContributionsList(0, 40, 'WHERE FC.amount >= 35 and FC.amount <= 99.99 and F.is_anonymous = 0');
$friends = $friendsContributions->getList();
$donationlist_35_html = $DonationList->displayFriends($friends, 'four-columns');

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

$App->setThemeVariables($variables);

# Generate the web page
$App->AddExtraJSFooter('<script type="text/javascript" src="assets/public/javascript/scripts.min.js"></script>');
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="assets/public/stylesheets/credit.min.css" media="screen" />');
$App->generatePage(NULL, $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);