<?php  																														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"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
/* 221934 - this page to remain on eclipse.org */

$pageTitle 		= "Quarterly Project Changes Report";
$pageKeywords	= "projects";
$pageAuthor		= "Bjorn Freeman-Benson Dec 06/05";

ini_set('memory_limit', '12M');

ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">
        <h1><?= $pageTitle ?></h1>

        <p>These are the changes in the Eclipse projects over the last 100 days (a little more than one quarter).</p>

<?php
include_once("fragments/project-review-data.php");
$all = new AllInfo();
$all->load();
$reviews = array();
foreach( $all->_proposals as $proposal) {
  if( !$proposal->is_more_than_one_quarter_old() ) {
   	array_push( $reviews, $proposal );
   }
}
foreach( $all->_reviews as $review) {
  if( !$review->is_more_than_one_quarter_old() ) {
   	array_push( $reviews, $review );
   }
}
if( count($reviews) == 0 ) {
?>
          <p>No project changes in the last quarter</p>
<?php
} else {
?><ul><?php
usort( $reviews, "cmp_q_reviews");
foreach( $reviews as $review ) {
	if( is_a($review, 'ReviewInfo') ) {
?>
		<li><?= $review->get("ProjectName") ?> - <?= $review->get("ReviewName") ?> Release Review <?php

		if( $review->status() == "J1" ) {
		  ?> waiting for ip log <?php
		}
		if( $review->status() == "J2"
		 || $review->status() == "J3"
		 || $review->status() == "J4" ) {
		  ?> scheduled <?php
		}
		if( $review->status() == "JP" ) {
		  ?> was held, result pending <?php
		}
		if( $review->status() == "J5" ) {
		  ?> was successful <?php
		}
		if( $review->status() == "J6" ) {
		  ?> was unsuccessful <?php
		}
		if( $review->status() == "J7" ) {
		  ?> was withdrawn <?php
		}
		?></li><?php
	}
	if( is_a($review, 'ProposalInfo') ) {
?>
		<li><?= $review->get("ProposalName") ?> - <?php

		if( $review->status() == "P1" ) {
		  ?> proposal posted <?php
		}
		if( $review->status() == "P2" ) {
		  ?> proposal updated <?php
		}
		if( $review->status() == "P3"
		 || $review->status() == "P4" ) {
		  ?> Creation Review scheduled <?php
		}
		if( $review->status() == "P5" ) {
		  ?> Creation Review successful <?php
		}
		if( $review->status() == "PW" ) {
		  ?> Creation Review successful; waiting on webmaster@ <?php
		}
		if( $review->status() == "PP" ) {
		  ?> Creation Review completed; waiting on PMC <?php
		}
		if( $review->status() == "P6" ) {
		  ?> Creation Review unsuccessful <?php
		}
		if( $review->status() == "P7" ) {
		  ?> provisioned <?php
		}
		if( $review->status() == "P8" ) {
		  ?> proposal withdrawn <?php
		}
		if( $review->status() == "P9" ) {
		  ?> project archived <?php
		}
		?></li>
<?php
	}
}
?></ul><br/><?php
}
function cmp_q_reviews($a, $b) {
  	if( $a == $b ) return 0;
  	$am = $a->lastdate();
  	$aa = strtotime( $am );
  	$bm = $b->lastdate();
  	$bb = strtotime( $bm );
  	if( $aa == $bb ) return 0;
  	if( $aa < $bb ) return -1;
  	return 1;
}

?>




		</div>

  </div>
<?php
	# Paste your HTML content between the EOHTML markers!
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
