Use more efficient means of rendering reviews.

Change-Id: I4feb02957daf71433f1e54d9c228d249a21a6e34
diff --git a/classes/Review.class.inc b/classes/Review.class.inc
index c2ab12b..7c52ca0 100644
--- a/classes/Review.class.inc
+++ b/classes/Review.class.inc
@@ -59,6 +59,18 @@
 		});
 	}
 
+	public static function getAll($callable) {
+		$sql = "
+			select
+				project, name, date, type, status, url
+			from ProjectReviews
+			order by date desc";
+
+		query('dashboard', $sql, array(), function($row) use (&$callable) {
+			call_user_func($callable, new self($row));
+		});
+	}
+
 	private static function getOne($sql, $args) {
 		$review = null;
 		query('dashboard', $sql, $args, function($row) use (&$review) {
diff --git a/tools/reviews.php b/tools/reviews.php
index a6cb283..fdb3605 100644
--- a/tools/reviews.php
+++ b/tools/reviews.php
@@ -21,11 +21,9 @@
 $Menu = new Menu();
 
 include($App->getProjectCommon());
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/projects/web-parts/projects.css"/>');
 
-require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/Review.class.php");
-
-$smallIconDir = "http://dev.eclipse.org/small_icons";
-$reviews = get_reviews();
+require_once(dirname(__FILE__). "/../classes/Review.class.inc");
 
 ob_start();
 
@@ -41,37 +39,22 @@
 <?php
 
 $nested = array();
-foreach($reviews as $review) {
-	$reviewDate = $review->getReviewDate();
-
-	if ($reviewDate) {
-		// Format the date.
-		$reviewDate = date('Y-m-d', $reviewDate);
-		$nested[$reviewDate][] = $review;
-	} else {
-		$reviewDate = 'unscheduled';
-	}
-}
+Review::getAll(function ($review) use (&$nested) {
+	$nested[date('Y-m-d', $review->getDate())][] = $review;
+});
 
 foreach($nested as $date => $reviews) {
 	$reviewDate = $App->getFormattedDate(strtotime($date), 'long');
 
 	echo "<h3>$reviewDate</h3>";
-	echo "<table width=\"100%\"><tbody>";
+	echo "<table class=\"review-table\"><tbody>";
 	foreach($reviews as $review) {
-		$project = $review->getProjectName();
-		if ($url = $review->getProjectUrl())
-			$project = "<a href=\"$url\">$project</a>";
-
-		$description = $review->getReviewName();
-		if ($url = $review->getSlidesUrl())
-			$description = "<a href=\"$url\">$description</a>";
-
-		if ($review->isSuccessful()) $state = 'Complete';
-		else if ($review->isWithdrawn()) $state = 'Withdrawn';
-		else $state = 'Ongoing';
-
-		echo "<tr><td width=\"60%\">$project</td><td width=\"25%\">$description</td><td width=\"15%\">$state</td></tr>";
+		$project = Project::getProject($review->getProjectId());
+		print "<tr>";
+		print "<td><span class=\"project}\"><a href=\"{$project->getUrl()}\">{$project->getFormalName()}</a></span></td>";
+		print "<td><span class=\"review-{$review->getStatus()}\"><a href=\"{$review->getUrl()}\">{$review->getName()}</a></span></td>";
+		print "<td><span>{$review->getStatus()}</span></td>";
+		print "</tr>";
 	}
 	echo "</tbody></table>";
 }
diff --git a/web-parts/activity.php b/web-parts/activity.php
index 2babef2..7a6d631 100755
--- a/web-parts/activity.php
+++ b/web-parts/activity.php
@@ -37,7 +37,7 @@
 
 		foreach ($list as $review) {
 			$project = Project::getProject($review->getProjectId());
-			print "<li><span class=\"project-{$review->getStatus()}\"><a href=\"{$review->getUrl()}\">{$project->getFormalName()} {$review->getName()}</a></span></li>";
+			print "<li><span class=\"review-{$review->getStatus()}\"><a href=\"{$review->getUrl()}\">{$project->getFormalName()} {$review->getName()}</a></span></li>";
 		}
 
 		print "</ul>";
diff --git a/web-parts/projects.css b/web-parts/projects.css
index 2057c32..26dcdf2 100644
--- a/web-parts/projects.css
+++ b/web-parts/projects.css
@@ -7,8 +7,22 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
-.project-success {
+.review-success {
 	font-weight: bold;
 	background: url(/projects/images/ok.gif) 100% no-repeat;
 	padding-right: 20px;
+}
+
+.review-table {
+	width: 100%;
+}
+
+.review-table td:nth-child(1) {
+	width: 40%;
+}
+.review-table td:nth-child(2) {
+	width: 40%;
+}
+.review-table td:nth-child(3) {
+	width: 20%;
 }
\ No newline at end of file
diff --git a/web-parts/reviews.php b/web-parts/reviews.php
index 8819f1b..7c774ee 100755
--- a/web-parts/reviews.php
+++ b/web-parts/reviews.php
@@ -65,7 +65,7 @@
 
 		foreach ($list as $review) {
 			$project = Project::getProject($review->getProjectId());
-			print "<li><span class=\"project-{$review->getStatus()}\"><a href=\"{$review->getUrl()}\">{$project->getFormalName()} {$review->getName()}</a></span></li>";
+			print "<li><span class=\"review-{$review->getStatus()}\"><a href=\"{$review->getUrl()}\">{$project->getFormalName()} {$review->getName()}</a></span></li>";
 		}
 
 		print "</ul>";