<?php
//this make the page not accessible outside the foundation


function get_filename(){

	$currentFile = $_SERVER["SCRIPT_NAME"];
	$parts = Explode('/', $currentFile);
	return $parts[count($parts) - 1];


}


/*START OF TEST DATA : This need's to be commented out before the code is commited to the server!
*$number_projects = rand(20,200);
*$friends = rand(0,444);
*$donarlist = '<li>Jeffrey t Buyna - $35</li><li>Zoran Bebic - $35</li><li>Lee Jiyul - $35</li><li>Anonymous - $50</li><li>Mirko Friedenhagen - $40</li><li>Chris Charlton - $35</li><li>Gandon Sebastien - $35</li><li>Dmitry Mityaev - $40</li>';
/*END OF TEST DATA : This need's to be commented out before the code is commited to the server!*/


$current_file = get_filename();
$release = 'juno';

include_once('friendsFunctions.php');
if($current_file == 'projects.php'){
	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/Project.class.php");
	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/SimultaneousReleaseInfo.class.php");
	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php");
	require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/images.inc");
	$projects = getAllProjectsInSimultaneousRelease($release);
	$number_projects = count($projects);
	sortProjects($projects, 'name');
	
	
	if($_GET['test'] == 'true'){
		$x=0;
		foreach($projects as $p){
			$x++;
			print $x . ' ' . $p->getName() .'<br/>'';
			
		}
	}
		
}
$progress = getWantedCount();




