blob: d87a9184c07599a3fd7967d132d3cea6e2388ff1 [file] [log] [blame]
<?php
/**
* *****************************************************************************
* Copyright (c) 2017 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 dirname ( __FILE__ ) . '/../../eclipse.org-common/system/app.class.php';
require_once dirname ( __FILE__ ) . '/../../eclipse.org-common/system/nav.class.php';
require_once dirname ( __FILE__ ) . '/../../eclipse.org-common/system/menu.class.php';
$App = new App ();
$Nav = new Nav ();
$Menu = new Menu ();
include ($App->getProjectCommon ());
require_once dirname ( __FILE__ ) . '/../classes/Project.class.php';
require_once dirname ( __FILE__ ) . '/../classes/debug.php';
require_once dirname ( __FILE__ ) . '/../classes/database.inc';
//
// Begin: page-specific settings. Change these.
$pageTitle = "Future Eclipse Project Releases";
$pageKeywords = "";
$pageAuthor = "Wayne Beaton";
class Release {
var $project;
var $name;
var $date;
function __construct($project, $name, $date) {
$this->project = $project;
$this->name = $name;
$this->date = $date;
}
function getId() {
return $this->project->getId();
}
function getUrl() {
return $this->project->getUrl();
}
function getName() {
return $this->project->getName() . ' ' . $this->name;
}
function getDate() {
return $this->date;
}
}
function getFutureReleases() {
$releases = array();
$sql = "
select
project as id, name, date
from ProjectReleases
where date > date(now())
order by date";
query('dashboard', $sql, array(), function($row) use (&$releases) {
$project = Project::getProject($row['id']);
$name = $row['name'];
$date = strtotime($row['date']);
$reviewDate = getProbableReviewDate($date);
$releases[$reviewDate][] = new Release($project, $name, $date);
});
return $releases;
}
function dumpFutureReleases() {
foreach(getFutureReleases() as $date => $releases) {
echo "<h3>" . ($date == 0 ? "It's already too late" : ("For review on " . date('Y-m-d', $date))) . "</h3>";
echo "<ul>";
foreach($releases as $release) {
echo "<li><a href=\"{$release->getUrl()}\">{$release->getName()}</a> ";
echo date('Y-m-d', $release->getDate());
dumpOpenCQs($release);
echo "</li>";
}
echo "</ul>";
}
}
function dumpOpenCQs(Release $release) {
echo "<ul>";
$sql = '
select
b.bug_id as id, b.short_desc as title
from bugs as b
join components as c on b.component_id=c.id
where c.name=\'$id\'
and bug_status in (\'NEW\', \'REOPENED\')';
query ('ipzilla', $sql, array('$id' => $release->getId()), function ($row) {
$id = $row ['id'];
$title = $row ['title'];
echo "<li><a target=_blank href=\"https://dev.eclipse.org/ipzilla/show_bug.cgi?id=$id\">$id</a> $title</li>";
});
echo "</ul>";
}
function getProbableReviewDate($date) {
$diff = date('w', $date) - 3; // '3' means Wednesday
if ($diff < 0)
$diff += 7;
$date = strtotime("-$diff days", $date);
$now = strtotime('now');
$dates = array();
while ($date > $now) {
// There's probably a better way to do this, but
// the month boundaries are icky, this works, and is simple.
if (isFirstOrThirdWeek($date)) {
return $date;
}
$date = strtotime("-1 week", $date);
}
return 0;
}
/**
* Answers whether the provided date represents the
*
* @param int $date
*/
function isFirstOrThirdWeek($date) {
$day = date('j', $date) - 1; // 0-based day of the month
if (floor($day / 7) == 0)
return true; // first week
if (floor($day / 7) == 2)
return true; // third week
return false;
}
ob_start ();
?>
<div id="maincontent">
<div id="midcolumn">
<h1><?=$pageTitle?></h1>
<p><strong>EXPERIMENTAL</strong>. This page shows a list of upcoming releases and&mdash;where they
exist&mdash;corresponding lists of open intellectual property review requests (CQs). Note that the
CQs are associated with the projects, not with any particular release. This is for informational
purposes only.</p>
<?php dumpFutureReleases(); ?>
</div>
</div>
<?php
$html = ob_get_contents ();
ob_end_clean ();
$App->generatePage ( $theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
?>