blob: 046c1a93f2a4737b783971f3a3a54af234f2d4a4 [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2011, 2012 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://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wayne Beaton (Eclipse Foundation) - initial API and 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");
$App = new App();
$Nav = new Nav();
$Menu = new Menu();
include($App->getProjectCommon());
//include( '_commonLeftNav.php' );
$pageTitle = "Eclipse Project Status";
$pageAuthor = "Wayne Beaton";
$pageKeywords = "eclipse,scm,vcs,dvcs,git,cvs,svn";
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/images.inc';
require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/classes/common.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/classes/debug.php';
//mustBeCommitter();
function isValidKey($key) {
return in_array($key, getValidSortKeys());
}
function getValidSortKeys() {
$keys = array('top', 'id', 'phase', 'git', 'cvs', 'svn', 'liveliness', 'committers', 'organizations');
return array_merge($keys, getSimultaneousReleaseNames());
}
function getSortKeys() {
global $_sortKeys;
if (!$_sortKeys) {
$keys = preg_split('/,/',isset($_GET['sort']) ? $_GET['sort'] : 'top,id');
$_sortKeys = array();
foreach($keys as $key) {
if (isValidKey($key) && !in_array($key, $_sortKeys))
$_sortKeys[] = $key;
}
}
return $_sortKeys;
}
function filter($info) {
foreach($_GET as $key=>$value) {
if (isset($info[$key])) {
if ($info[$key] != $value) return true;
}
}
return false;
}
function getProjectStatus() {
$projects = array();
foreach(getActiveProjects() as $project) {
$info = array(
'id' => $project->getId(),
'name' => $project->getName(),
'top' => $project->getTopLevelProject()->getId(),
'topName' => $project->getTopLevelProject()->getName(),
'phase' => $project->isInIncubationPhase() ? 'incubating' : 'regular',
'git' => in_array('git', $project->getSourceRepositoryTypes()),
'svn' => in_array('svn', $project->getSourceRepositoryTypes()),
'cvs' => in_array('cvs', $project->getSourceRepositoryTypes()),
'liveliness' => $project->getLiveliness(),
'committers' => $project->getActiveCommittersCount(),
'organizations' => $project->getActiveOrganizationsCount()
);
foreach(getSimultaneousReleaseNames() as $name) {
$info[$name] = in_array($name, $project->getSimultaneousReleaseNames()) ? 1 : 0;
}
if (!filter($info)) $projects[] = $info;
}
return $projects;
}
function getSortParameter($main) {
$parameters = array($main);
foreach(getSortKeys() as $key)
if (!in_array($key, $parameters))
$parameters[] = $key;
return implode(',', $parameters);
}
function getHttpParameters($sort=null, $top=null) {
$parameters = array();
foreach($_GET as $key=>$value) $parameters[$key] = $value;
if ($sort) $parameters['sort'] = getSortParameter($sort);
if ($top) $parameters['top'] = $top;
$out = ''; $separator = '';
foreach($parameters as $key => $value) {
$out = "$out$separator$key=$value";
$separator = '&';
}
return $out;
}
function dumpStatus($projects) {
global $images;
echo "<table>";
echo "<tr style=\"height: 5em;vertical-align:bottom\">";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('top') . "\">Top&nbsp;Level</a></div></th>";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('id') . "\">Name</a></div></th>";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('phase') . "\">Phase</a></div></th>";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('git') . "\">Git</a></div></th>";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('svn') . "\">SVN</a></div></th>";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('cvs') . "\">CVS</a></div></th>";
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('liveliness') . "\">Liveliness</a></div></th>";
echo "<th><div style=\"width:3em;line-height:90%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('committers') . "\">Active<br/>Committers</a></div></th>";
echo "<th><div style=\"width:3em;line-height:90%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?" . getHttpParameters('organizations') . "\">Active<br/>Organizations</a></div></th>";
$simultaneousReleaseNames = array_reverse(getSimultaneousReleaseNames());
foreach($simultaneousReleaseNames as $name) {
$link = getHttpParameters($name);
$name = ucfirst($name);
echo "<th><div style=\"width:2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-90deg);\"><a href=\"?$link\">$name</a></div></th>";
}
echo "</tr>";
usort($projects, 'sort_projects');
$colour = true;
foreach($projects as $project) {
$top = $project['top'];
$topName = $project['topName'];
$name = $project['name'];
$id = $project['id'];
$phase = $project['phase'] == 'incubating' ? "<img src=\"$images->incubation_conforming_small\"/>" : '&nbsp;';
$git = $project['git'] ? "<img src=\"$images->check\"/>" : '&nbsp;';
$svn = $project['svn'] ? "<img src=\"$images->check\"/>" : '&nbsp;';
$cvs = $project['cvs'] ? "<img src=\"$images->check\"/>" : '&nbsp;';
$liveliness = getLivelinessIcon($project['liveliness']);
$committers = $project['committers'];
$organizations = $project['organizations'];
$style = $colour ? ' style="background-color:#E2E2E2"' : '';
$colour = !$colour;
echo "<tr$style>";
echo "<td>$topName</td>";
echo "<td><a href=\"/projects/project.php?id=$id\">$name</a></td>";
echo "<td>$phase</td>";
echo "<td>$git</td>";
echo "<td>$svn</td>";
echo "<td>$cvs</td>";
echo "<td><img src=\"$liveliness\"/></td>";
echo "<td>$committers</td>";
echo "<td>$organizations</td>";
foreach($simultaneousReleaseNames as $name) {
$in = $project[$name] ? "<img src=\"$images->check\"/>" : '&nbsp;';
echo "<td>$in</td>";
}
echo "</tr>";
}
echo "</table>";
}
function sort_projects($projectA, $projectB) {
foreach(getSortKeys() as $key) {
$a = $projectA[$key];
$b = $projectB[$key];
// Make sure that empty values end up on the bottom.
if (!$a && !$b) return 0;
if (!$a) return 1;
if (!$b) return -1;
if ($key == 'organizations' || $key == 'committers') {
if ($a == $b) continue;
return $a < $b ? 1 : -1;
}
$cmp = strcasecmp($a, $b);
if ($cmp !== 0) return $cmp;
}
return 0;
}
function getGitStatus($git) {
switch($git) {
case PROJECT_REPO_ALL_GIT: return 'All Git';
case PROJECT_REPO_SOME_GIT: return 'Some Git';
case PROJECT_REPO_NO_GIT: return 'No Git';
default: return 'No repositories';
}
}
function getLivelinessIcon($liveliness) {
global $images;
switch($liveliness) {
case PROJECT_LIVELINESS_ACTIVE: return $images->active_small;
case PROJECT_LIVELINESS_STALE: return $images->stale_small;
case PROJECT_LIVELINESS_DEAD: return $images->dead_small;
}
}
if (isset($_GET['json'])) {
header("Content-type: application/json");
echo json_encode(getProjectStatus());
exit;
}
ob_start();
?>
<div id="maincontent">
<div id="midcolumn">
<h1><?php echo $pageTitle; ?></h1>
<?php dumpStatus(getProjectStatus()); ?>
</div>
</div>
<div id="rightcolumn">
<div class="sideitem">
<h6>Filter by Top Level</h6>
<ul>
<?php
foreach(getTopLevelProjects() as $project) {
$id = $project->getId();
$name = $project->getName();
$link = "?" . getHttpParameters(null, $id);
echo "<li><a href=\"$link\">$name</a></li>";
}
?>
</ul>
</div>
<div class="sideitem">
<h6>Legend</h6>
<ul>
<li style="list-style-image: url('<?php echo $images->active_small; ?>')">Activity in the last three months</li>
<li style="list-style-image: url('<?php echo $images->stale_small; ?>')">Activity in the last six months</li>
<li style="list-style-image: url('<?php echo $images->dead_small; ?>')">No activity for more than six months</li>
</ul>
<p>Note that subprojects are included in the determination of liveliness. A project is as lively as the most lively of its subprojects.</p>
</div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage('Nova', $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>