blob: 511e226b75e2de907a74e0ad449132e07a36cc5a [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2006-2013 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:
* Matt Ward (Eclipse Foundation) - initial API and implementation
* Denis Roy (Eclipse Foundation) - 2013 update
*******************************************************************************/
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");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/evt_log.class.php");
# Add'l requires for Bugzilla
require_once "/home/data/httpd/eclipse-php-classes/system/dbconnection.class.php";
require_once("/home/data/httpd/eclipse-php-classes/system/dbconnection_bugs_rw.class.php");
require_once("/home/data/httpd/eclipse-php-classes/system/dbconnection_foundation_ro.class.php");
$App = new App(); $Menu = new Menu();
$App->runStdWebAppCacheable();
include("_projectCommon.php");
$Menu->addMenuItem("Return to project overview", "edit_bugzilla_project.php", "_self");
//turn on/off verbose debuging
define("DEBUG",0);
//turn on(1) or off(0) actual inserts
define("do_inserts",1);
$Session = $App->useSession(true);
$pageTitle = "Bugzilla Manager";
$pageKeywords = "";
$pageAuthor = "Eclipse Foundation, Inc.";
# Begin buffered output
ob_start();
?>
<link rel="stylesheet" type="text/css" href="../css/stylesheet.css" />
<div id="maincontent" style="padding:8px;">
<h1 style="padding-top:10px; padding-bottom:20px;"><?= $pageTitle ?></h1>
<?php
include "details.html";
if ( (checkpost($_GET['addmilestone'])) )
$Menu->addMenuItem("Show all milestones", "add_bugzilla_milestones.php", "_self");
//connect to the foundation db in
$fdbc = new DBConnectionFoundation();
$fdbh = $fdbc->connect();
$bdbc = new DBConnectionBugsRW();
$bdbh = $bdbc->connect();
//set the global log options
$evt_log = new EvtLog();
$evt_log->setLogTable("__bugs");
$evt_log->setLogAction("ADD_MILSTONE");
$evt_log->setuid($_SESSION['uid']);
$evt_log->setPK2($_SESSION['project']);
/*****************************
*
* Name: do_postwork
* Function: does the checks and data inserts. Putting this stuff here lets me use the return function without screwing up the page.
*
* I/O: needs to be passed the db handle.
*
* By: M. Ward
* Date: Feb 22/06
*
******************************/
function do_postwork( ) {
global $bdbh;
global $fdbh;
global $evt_log;
//check that the 'milestone' is numeric, no letters(other than rc or m)
if( !checkpost($_POST['newmilestone']) ) {
debug_msg("<h4>You need to specify a milestone.</h4>",0);
return;
}
if( checkpost($_POST['newsortkey']) ) {
//check that the sort key is numeric, no letters)
if (!is_numeric($_POST['newsortkey']) ){
debug_msg("<h4>The specified sortkey is not valid</h4>",0);
return;
}
} else { //no sort key
debug_msg("<h4>You need to specify a sort key</h4>",0);
return;
}
//check that the milestone/sortkey do not already exist
//NOTE: this is my(the developer) choice. Bugzilla doesn't seem to give a damn, but I do
//if people want to be able go set multiple milestones to the same sortkey, then remover
//the query after the union, and the check that follows
$bugsquery = "select count(*) from milestones where product_id=\"" . $_SESSION['main_product_id'] ."\"";
$bugsquery .= " AND value=\"" . $_POST['newmilestone'] . "\"";
$bugsquery .= " UNION ALL select count(*) from milestones where product_id=\"" . $_SESSION['main_product_id'] ."\"";
$bugsquery .= " AND sortkey=\"" . $_POST['newsortkey']. "\";";
debug_msg($bugsquery,3);
$bugsresult = mysql_query($bugsquery,$bdbh);
if( $bugsresult == FALSE ){
debug_msg( mysql_error(), 0);
debug_msg("Please contact the Webmaster about this error. Thank you.",0);
return;
}
$count = mysql_fetch_array($bugsresult);
//get the number of values(milestones) that match
$milestones= $count['count(*)'];
//get next row
$count = mysql_fetch_array($bugsresult);
//get the number of values(milestones) that match
$sortkeys= $count['count(*)'];
debug_msg("counts(m/s): ". $milestones . "/" . $sortkeys, 4);
//if the count is < 0 then there is already a version with that exact syntax
if( $milestones != 0 ){
debug_msg("<h4>That milestone already exists!</h4>",0);
return;
}
if( $sortkeys != 0) {
debug_msg("<h4>That sort key already exists!</h4>",0);
return;
}
//ok the milestone needs to be added
//change up the project settings, in case this is a special project
if( checkpost($_SESSION['projisclass'] ) ) {
$workingproject = $_SESSION['projisclass'];
$query = "SELECT count(*) ProjectID FROM Projects WHERE ( ProjectID IN (SELECT ProjectID FROM PeopleProjects WHERE PersonID ='" . $_SESSION['uid'] . "' AND";
$query .= " ( Relation IN ('PM','PD','PL' ) OR ( Relation='CM' AND EditBugs=1 ) ) AND ProjectID like '" . $workingproject . "%' AND (InactiveDate is NULL OR InactiveDate >= CURRENT_DATE()) ) OR ";
$query .= " ( ParentProjectID IN (SELECT ProjectID FROM PeopleProjects WHERE PersonID = '" . $_SESSION['uid'] . "' AND Relation IN ('PM','PD') AND ";
$query .= " (InactiveDate is NULL OR InactiveDate >= CURRENT_DATE())) AND ProjectID like '" . $workingproject . "%' ) ) AND BugsName IS NOT NULL; ";
} else {
$workingproject = $_SESSION['project'];
//check committer edit /pl/pm/pd status
$query = "SELECT count(*) ProjectID FROM Projects WHERE ( ProjectID IN (SELECT ProjectID FROM PeopleProjects WHERE PersonID ='" . $_SESSION['uid'] . "' AND";
$query .= " ( Relation IN ('PM','PD','PL' ) OR ( Relation='CM' AND EditBugs=1 ) ) AND ProjectID='" . $workingproject . "' AND (InactiveDate is NULL OR InactiveDate >= CURRENT_DATE()) ) OR ";
$query .= " ( ParentProjectID IN (SELECT ProjectID FROM PeopleProjects WHERE PersonID = '" . $_SESSION['uid'] . "' AND Relation IN ('PM','PD') AND ";
$query .= " (InactiveDate is NULL OR InactiveDate >= CURRENT_DATE())) AND ProjectID='" . $workingproject . "' ) ) AND BugsName IS NOT NULL; ";
}
debug_msg($query,3);
$result = mysql_query($query, $fdbh);
if( $result == FALSE ){
debug_msg(mysql_error(), 0);
debug_msg("Please contact the Webmaster about this error. Thank you.",0);
return;
}
$data = mysql_fetch_array($result);
if( $data['ProjectID'] >= 1) {
//write the insert statement
$bugsquery = "insert into milestones(value,sortkey,product_id) VALUES('";
$bugsquery .= $_POST['newmilestone'] ."','" . $_POST['newsortkey'] . "','";
$bugsquery .= $_SESSION['main_product_id'] . "');";
//set a key for the logs
$evt_log->setPK1($_POST['newmilestone']);
//show the query
debug_msg($bugsquery,3);
//allows the inserts to be turned off for testing
if( do_inserts == 1) {
$bugsresult = mysql_query($bugsquery,$bdbh);
if ( $bugsresult == FALSE ) {
debug_msg(mysql_error(),0);
debug_msg("Please contact the Webmaster about this error. Thank you.",0);
return;
}
//log the event
$evt_log->insertModLog($_SESSION['uid']);
}
//tell the committer that everything went ok
$html .= "<h3>Milestone added.</h3>";
}
}
//Check dbreadonly flag
if ( $App->getDBReadOnly() ) {
$html = "<h3>The database is currently offline for maintanence. Please try again later</h3>";
} else {
//clicked the submit button
if( $_POST['submit'] ) {
do_postwork( );
$html .="</br><a href=\"add_bugzilla_milestones.php?addmilestone=new\">Add another milestone</a>\n\r";
$html .="</br><a href=\"add_bugzilla_milestones.php\">View all milestones</a>";
}else if( checkpost($_GET['addmilestone']) ){//clicked the add new link
showwarning();
$html = "<h3> Add a new milestone </h3></br>\n\r";
$html .= "<p> Fields marked with an <font face=\"Arial\" color=\"#FF0000\">*</font> are required </p>\n\r";
//show the add version form, simple text box
$html .= "<form name=\"addmilestone\" method=\"post\" action=\"add_bugzilla_milestones.php\">\n\r";
$html .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n\r";
$html .="<tr><td><font face=\"Arial\" color=\"#FF0000\">*</font> Milestone </td><td><input type=\"text\" name=\"newmilestone\"></td></tr>\n\r";
$html .="<tr><td><font face=\"Arial\" color=\"#FF0000\">*</font> Sortkey </td><td><input type=\"text\" name=\"newsortkey\"></td></tr>\n\r";
$html .="<tr><td></td><td class=\"micro\">The value you enter for the sort key is used to determine<br/ >the order that milestones are listed in. Use integer<br /> values from 0-32767.</td></tr>\n\r";
$html .="</table>\n\r";
$html .="<input type=\"submit\" name=\"submit\" value=\"Add Milestone\">";
$html .="</form>";
$html .="</br><a href=\"add_bugzilla_milestones.php\">View all milestones</a>\n\r";
} else { //main section
//get the list of versions for this project
$bugsquery="select * from milestones where product_id=\"" . $_SESSION['main_product_id']."\";";
debug_msg($bugsquery,4);
$bugsresult = mysql_query($bugsquery,$bdbh);
if ( $bugsresult == FALSE ) {
debug_msg(mysql_error(),0);
debug_msg("Please contact the Webmaster about this error. Thank you.",0);
}
$html = "<h3>Bugzilla milestones for " . $_SESSION['project_name'] ."</h3></br>\n\r";
$html .= "<p>Milestones cannot be deleted or edited from this interface. Please <a href='https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Bugzilla&short_desc=Please%20edit%20versions%20for%20my%20project'>file a bug to webmaster</a> for this.</p>";
$html .="<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"normal\">\n\r";
$html .="<tr class=\"list_column_header\" height=\"". $App->getDefaultRowHeight() ."\">\n\r";
$html .="<td align=\"left\"><b>Milestone</b></td>\n\r<td align=\"left\"><b>Sortkey</b></td>\n\r";
$html .="</tr>\n\r";
$count = 0;
while($row = mysql_fetch_array($bugsresult)) {
$html .="<tr height=\"". $App->getDefaultRowHeight() ."\" class=\"data". $count % 2 ."\">";
$html .="<td>". $row['value'] ."</td><td>" . $row['sortkey'] ."</td></tr>\n\r";
$count++;
}
$html .="</table>\n\r";
$html .="</br><a href=\"add_bugzilla_milestones.php?addmilestone=new\">Add a new milestone</a>\n\r";
}//end of default section
//add a link for the 'other products'
if( checkpost($_SESSION['projisclass'] ) == 1 ){
$html .="</br><a href=\"edit_bugzilla_project.php?issp=1\">Return to product overview</a>";
$html .="</br><a href=\"edit_bugzilla_project.php\">Select another product</a>";
} else {
$html .="</br><a href=\"edit_bugzilla_project.php?issp=1\">Return to project overview</a>";
}
}
echo $html;
echo "</div>";
$html = ob_get_contents();
ob_end_clean();
$App->generatePage($theme, $Menu, null, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>