blob: bf68b351562c3217b58b7d9ea2f854a795be2899 [file] [log] [blame]
<?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'
/*******************************************************************************
* Copyright (c) 2009 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:
* Eclipse Foundation- initial API and implementation
*******************************************************************************/
require_once(dirname(__FILE__) . "/../classes/debug.php");
require_once(dirname(__FILE__) . "/../classes/CQ.class.php");
function dump_project_cqs(&$projectIds) {
$cqs = find_cqs();
foreach($cqs as $cq) {
if (!in_array($cq->project, $projectIds)) continue;
if ($cq->isContribution()) continue;
if (!$cq->isThirdParty()) continue;
if ($cq->isUnused()) dump_cq($cq, 'unused');
else if ($cq->isActive()) dump_cq($cq, 'active');
else if ($cq->isPrereq()) dump_cq($cq, 'prereq');
else if ($cq->isPending()) dump_cq($cq, 'pending');
}
}
function dump_cq(&$cq, $state) {
$id = $cq->getId();
$description = htmlentities($cq->getDescription(), ENT_COMPAT | ENT_XML1);
$license = htmlentities($cq->getLicense(), ENT_COMPAT | ENT_XML1);
$use = implode(' ', getKeywordsForCq($cq));
echo "<iplog:cq id=\"$id\" description=\"$description\" license=\"$license\" use=\"$use\" state=\"$state\"/>\n";
}
/**
* @param CQ $cq
*/
function getKeywordsForCq($cq) {
if ($cq->isWorksWith()) return array('workswith');
if ($cq->isExemptPrereq()) return array('exempt_prereq');
$keywords = array();
if ($cq->isModified()) $keywords[] = 'modified';
else if ($cq->isUnmodified()) $keywords[] = 'unmodified';
if ($cq->isSource()) $keywords[] = 'source';
else if ($cq->isBinary()) $keywords[] = 'binary';
else if ($cq->isSourceAndBinary()) $keywords[] = 'source&amp;binary';
return $keywords;
}
/*
function dump_project_cqs(&$projectids) {
global $App;
$componentids = find_ipzilla_components($projectids);
if (!$componentids) return;
$cqs = find_cqs($componentids);
categorize_cqs($cqs);
collect_keywords($cqs);
move_unused_cqs($cqs);
foreach ($cqs as &$cq) dump_cq($cq);
}
function find_cqs(&$componentids) {
global $App;
$sql = "SELECT * FROM bugs WHERE component_id IN (" . implode( ',', $componentids ) . ")";
log_query($sql);
$result = $App->ipzilla_sql( $sql );
log_message(mysql_error());
$cqs = array();
while ($row = mysql_fetch_assoc($result)) {
$cqs[$row['bug_id']] = $row;
}
$count = count($cqs);
log_message("Found $count potential CQs.");
return $cqs;
}
function categorize_cqs(&$cqs) {
foreach($cqs as &$cq) {
// log_message(get_array_pp($cq));
switch( $cq['bug_severity'] ) {
case 'approved_all_projects':
case 'approved_one_project':
case 'approved':
case 'reuse':
$cq['state'] = "active";
break;
case 'exempt_prereq':
case 'workswith':
case 'prereq':
$cq['state'] = "prereq";
break;
case 'awaiting_analysis':
case 'awaiting_committer':
case 'awaiting_emo':
case 'awaiting_pmc':
case 'awaiting_project':
case 'awaiting_triage':
case 'new':
case 'under_review':
if( ($cq['bug_status'] == 'RESOLVED'
|| $cq['bug_status'] == 'CLOSED')
&& $$cq['resolution'] == 'FIXED' ) {
$cq['state'] = active;
} else if( $cq['bug_status'] == 'RESOLVED'
|| $cq['bug_status'] == 'CLOSED') {
$cq['state'] = "closed";
} else {
$cq['state'] = "pending";
}
break;
case 'closed':
case 'rejected':
case 'withdrawn':
$cq['state'] = "closed";
break;
default:
$cq['state'] = "pending";
break;
}
}
}
function collect_keywords(&$cqs) {
global $App;
if (!$cqs) return;
$keywords = array( 'modified', 'unmodified', 'source', 'binary', 'sourceandbinary',
'obsolete', 'unused', 'withdrawn', 'nonepl' );
foreach( $keywords as $key ) $cq["keyword_$key"] = 0;
$bugids = array();
foreach($cqs as $id => $cq) $bugids[] = $id;
$sql = "SELECT bug_id, name FROM keywords
LEFT JOIN keyworddefs ON keywordid = id
WHERE name in ( 'modified', 'unmodified', 'source', 'binary', 'sourceandbinary',
'obsolete', 'unused', 'withdrawn', 'nonepl' )
AND bug_id IN ( " . implode( ",", $bugids ) . " )
";
log_query($sql);
$result = $App->ipzilla_sql( $sql );
while( $row = mysql_fetch_assoc($result) ) {
$cqs[$row['bug_id']]["keyword_" . $row['name']] = 1;
}
}
function move_unused_cqs(&$cqs) {
foreach( $cqs as &$cq ) {
if ($cq['keyword_obsolete'] || $cq['keyword_unused'] || $cq['keyword_withdrawn'])
$cq['state'] = "unused";
}
}
function get_combined_quoted(&$values) {
return '"' . implode("\",\"", $values) . '"';
}
function get_array_pp(&$values) {
$string = 'dg';
foreach($values as $key => $value) {
$string .= "$key => $value; ";
}
return $string;
}
function find_ipzilla_components(&$projectids) {
global $App;
$componentids = array();
$sql = "SELECT id, name FROM components WHERE name in (" . get_combined_quoted($projectids) . ")";
log_query($sql);
$result = $App->ipzilla_sql( $sql );
while ($row = mysql_fetch_array($result)) {
$id = $row[0];
$name = $row[1];
$componentids[] = $id;
log_message("ipzilla-component '$name' has id '$id'");
}
log_message("Done fetching IPZilla components.");
return $componentids;
}
function html_for_keywords( $row ) {
return ($row['keyword_modified'] ? 'modified ' : '') .
($row['keyword_unmodified'] ? 'unmodified ' : '') .
($row['keyword_source'] ? 'source ' : '') .
($row['keyword_binary'] ? 'binary ' : '') .
($row['keyword_sourceandbinary'] ? 'source&amp;binary' : '');
}
function dump_cq(&$cq) {
if ($cq['state'] == "closed") return;
$id = $cq['bug_id'];
$description = htmlspecialchars($cq['short_desc']);
$license = htmlspecialchars($cq['cf_license']);
$use = html_for_keywords($cq);
$state = $cq['state'];
echo "<iplog:cq id=\"$id\" description=\"$description\" license=\"$license\" use=\"$use\" state=\"$state\"/>\n";
}
*/
?>