2005-07-13 01:13:46 +00:00
< ? php
2006-06-17 06:10:10 +00:00
require_once ( BASE . " include/util.php " );
2006-07-09 22:59:42 +00:00
require_once ( BASE . " include/application.php " );
2005-07-13 01:13:46 +00:00
/******************************************/
/* bug class and related functions */
/******************************************/
/**
* Bug Link class for handling Bug Links and thumbnails
*/
class Bug {
var $iLinkId ;
2007-04-21 02:30:22 +00:00
// parameters necessary to create a new Bug with Bug::create()
var $iVersionId ;
2005-07-13 01:13:46 +00:00
var $iBug_id ;
2007-04-21 02:30:22 +00:00
// values retrieved from bugzilla
2005-07-13 01:13:46 +00:00
var $sShort_desc ;
var $sBug_status ;
var $sResolution ;
var $iAppId ;
var $sSubmitTime ;
var $iSubmitterId ;
var $bQueued ;
/**
* Constructor , fetches the data and bug objects if $ilinkId is given .
*/
function bug ( $iLinkId = null )
{
// we are working on an existing Bug
if ( is_numeric ( $iLinkId ))
{
$sQuery = " SELECT buglinks.*, appVersion.appId AS appId
FROM buglinks , appVersion
WHERE buglinks . versionId = appVersion . versionId
2006-06-27 19:16:27 +00:00
AND linkid = '?' " ;
if ( $hResult = query_parameters ( $sQuery , $iLinkId ))
2005-07-13 01:13:46 +00:00
{
$oRow = mysql_fetch_object ( $hResult );
$this -> iLinkId = $iLinkId ;
$this -> iAppId = $oRow -> appId ;
$this -> iBug_id = $oRow -> bug_id ;
$this -> iVersionId = $oRow -> versionId ;
$this -> bQueued = ( $oRow -> queued == " true " ) ? true : false ;
$this -> sSubmitTime = $oRow -> submitTime ;
$this -> iSubmitterId = $oRow -> submitterId ;
/* lets fill in some blanks */
if ( $this -> iBug_id )
{
$sQuery = " SELECT *
FROM bugs
WHERE bug_id = " . $this->iBug_id ;
if ( $hResult = query_bugzilladb ( $sQuery ))
{
$oRow = mysql_fetch_object ( $hResult );
$this -> sShort_desc = $oRow -> short_desc ;
$this -> sBug_status = $oRow -> bug_status ;
2005-08-13 01:54:15 +00:00
$this -> sResolution = $oRow -> resolution ;
2005-07-13 01:13:46 +00:00
}
}
}
}
}
/**
* Creates a new Bug .
*/
2007-04-21 02:30:22 +00:00
function create ()
2005-07-13 01:13:46 +00:00
{
2007-04-21 02:30:22 +00:00
$oVersion = new Version ( $this -> iVersionId );
2005-07-13 01:13:46 +00:00
// Security, if we are not an administrator or a maintainer, the Bug must be queued.
2007-04-21 02:30:22 +00:00
if ( ! ( $_SESSION [ 'current' ] -> hasPriv ( " admin " ) ||
$_SESSION [ 'current' ] -> isMaintainer ( $oVersion -> iVersionId ) ||
$_SESSION [ 'current' ] -> isSuperMaintainer ( $oVersion -> iAppId )))
2005-07-13 01:13:46 +00:00
{
$this -> bQueued = true ;
} else
{
$this -> bQueued = false ;
}
/* lets check for a valid bug id */
2007-04-21 02:30:22 +00:00
if ( ! is_numeric ( $this -> iBug_id ))
2005-07-13 01:13:46 +00:00
{
2007-04-21 02:30:22 +00:00
addmsg ( $this -> iBug_id . " is not a valid bug number. " , " red " );
2005-07-13 01:13:46 +00:00
return false ;
}
/* check that bug # exists in bugzilla*/
$sQuery = " SELECT *
FROM bugs
2007-04-21 02:30:22 +00:00
WHERE bug_id = " . $this->iBug_id ;
2005-07-16 20:02:17 +00:00
if ( mysql_num_rows ( query_bugzilladb ( $sQuery , " checking bugzilla " )) == 0 )
2005-07-13 01:13:46 +00:00
{
addmsg ( " There is no bug in Bugzilla with that bug number. " , " red " );
return false ;
}
/* Check for Duplicates */
$sQuery = " SELECT *
FROM buglinks
2006-06-27 19:16:27 +00:00
WHERE versionId = '?' " ;
2007-04-21 02:30:22 +00:00
if ( $hResult = query_parameters ( $sQuery , $this -> iVersionId ))
2005-07-13 01:13:46 +00:00
{
while ( $oRow = mysql_fetch_object ( $hResult ))
{
2007-04-21 02:30:22 +00:00
if ( $oRow -> bug_id == $this -> iBug_id )
2005-07-13 01:13:46 +00:00
{
addmsg ( " The Bug link has already been submitted. " , " red " );
return false ;
}
}
2005-07-16 20:02:17 +00:00
}
2005-07-13 01:13:46 +00:00
/* passed the checks so lets insert the puppy! */
2006-06-24 04:20:32 +00:00
$hResult = query_parameters ( " INSERT INTO buglinks (versionId, bug_id, queued, submitterId) " .
" VALUES('?', '?', '?', '?') " ,
2007-04-21 02:30:22 +00:00
$this -> iVersionId , $this -> iBug_id ,
$this -> bQueued ? " true " : " false " ,
2006-06-24 04:20:32 +00:00
$_SESSION [ 'current' ] -> iUserId );
if ( $hResult )
2005-07-13 01:13:46 +00:00
{
2005-07-16 20:02:17 +00:00
/* The following should work but it does not! */
2005-07-13 01:13:46 +00:00
$this -> iLinkId = mysql_insert_id ();
$this -> bug ( $this -> iLinkId );
2005-07-16 20:02:17 +00:00
/* Start of hack to get around the previous not working */
$sQuery = " SELECT buglinks.*, appVersion.appId AS appId
FROM buglinks , appVersion
WHERE buglinks . versionId = appVersion . versionId
2006-06-27 19:16:27 +00:00
AND buglinks . versionId = '?'
AND buglinks . bug_id = '?' " ;
2007-04-21 02:30:22 +00:00
if ( $hResult = query_parameters ( $sQuery , $this -> iVersionId , $this -> iBug_id ))
2005-07-16 20:02:17 +00:00
{
$oRow = mysql_fetch_object ( $hResult );
$this -> bug ( $oRow -> linkId );
}
/*End of Hack */
2005-09-30 01:55:51 +00:00
$this -> SendNotificationMail ();
2005-07-13 01:13:46 +00:00
return true ;
2007-04-21 02:30:22 +00:00
} else
2005-07-13 01:13:46 +00:00
{
2006-06-24 04:20:32 +00:00
addmsg ( " Error while creating a new Bug link. " , " red " );
2005-07-13 01:13:46 +00:00
return false ;
}
}
/**
* Deletes the Bug from the database .
* and request its deletion from the filesystem ( including the thumbnail ) .
*/
function delete ( $bSilent = false )
{
$sQuery = " DELETE FROM buglinks
2006-06-27 19:16:27 +00:00
WHERE linkId = '?' " ;
if ( $hResult = query_parameters ( $sQuery , $this -> iLinkId ))
2005-07-13 01:13:46 +00:00
{
if ( ! $bSilent )
2005-09-30 01:55:51 +00:00
$this -> SendNotificationMail ( true );
2005-07-13 01:13:46 +00:00
}
2007-02-03 03:39:52 +00:00
if ( $this -> iSubmitterId &&
( $this -> iSubmitterId != $_SESSION [ 'current' ] -> iUserId ))
2005-07-13 01:13:46 +00:00
{
$this -> mailSubmitter ( true );
}
}
/**
* Move Bug out of the queue .
*/
function unQueue ()
{
// If we are not in the queue, we can't move the Bug out of the queue.
if ( ! $this -> bQueued )
return false ;
2006-07-04 03:43:06 +00:00
if ( query_parameters ( " UPDATE buglinks SET queued = '?' WHERE linkId='?' " ,
" false " , $this -> iLinkId ))
2005-07-13 01:13:46 +00:00
{
$this -> bQueued = false ;
2006-12-31 19:39:41 +00:00
// we send an e-mail to interested people
2005-07-13 01:13:46 +00:00
$this -> mailSubmitter ();
2005-09-30 01:55:51 +00:00
$this -> SendNotificationMail ();
2005-07-13 01:13:46 +00:00
// the Bug has been unqueued
addmsg ( " The Bug has been unqueued. " , " green " );
}
}
function mailSubmitter ( $bRejected = false )
{
2007-01-04 02:35:01 +00:00
global $aClean ;
if ( ! isset ( $aClean [ 'sReplyText' ]))
$aClean [ 'sReplyText' ] = " " ;
2006-06-17 06:10:10 +00:00
2005-07-13 01:13:46 +00:00
if ( $this -> iSubmitterId )
{
$oSubmitter = new User ( $this -> iSubmitterId );
2006-06-29 16:07:19 +00:00
$sAppName = Application :: lookup_name ( $this -> iAppId ) . " " . Version :: lookup_name ( $this -> iVersionId );
2005-07-13 01:13:46 +00:00
if ( ! $bRejected )
{
$sSubject = " Submitted Bug Link accepted " ;
2006-06-29 16:07:19 +00:00
$sMsg = " The Bug Link you submitted for " . $sAppName . " has been accepted. " ;
2005-07-13 01:13:46 +00:00
} else
{
$sSubject = " Submitted Bug Link rejected " ;
2006-06-29 16:07:19 +00:00
$sMsg = " The Bug Link you submitted for " . $sAppName . " has been rejected. " ;
2005-07-13 01:13:46 +00:00
}
2006-07-13 18:54:10 +00:00
$sMsg .= $aClean [ 'sReplyText' ] . " \n " ;
2005-07-13 01:13:46 +00:00
$sMsg .= " We appreciate your help in making the Application Database better for all users. " ;
mail_appdb ( $oSubmitter -> sEmail , $sSubject , $sMsg );
}
}
2005-09-30 01:55:51 +00:00
function SendNotificationMail ( $bDeleted = false )
2005-07-13 01:13:46 +00:00
{
2007-04-03 02:08:44 +00:00
$sAppName = version :: fullName ( $this -> iVersionId );
$oVersion = new version ( $this -> iVersionId );
2005-07-13 01:13:46 +00:00
if ( ! $bDeleted )
{
if ( ! $this -> bQueued )
{
2006-06-29 16:07:19 +00:00
$sSubject = " Link between Bug " . $this -> iBug_id . " and " . $sAppName . " added by " . $_SESSION [ 'current' ] -> sRealname ;
2007-04-03 02:08:44 +00:00
$sMsg = $oVersion -> objectMakeUrl () . " \n " ;
2005-07-13 01:13:46 +00:00
if ( $this -> iSubmitterId )
{
$oSubmitter = new User ( $this -> iSubmitterId );
$sMsg .= " This Bug Link has been submitted by " . $oSubmitter -> sRealname . " . " ;
$sMsg .= " \n " ;
}
addmsg ( " The Bug Link was successfully added into the database. " , " green " );
} else // Bug Link queued.
{
2006-06-29 16:07:19 +00:00
$sSubject = " Link between Bug " . $this -> iBug_id . " and " . $sAppName . " submitted by " . $_SESSION [ 'current' ] -> sRealname ;
2007-04-03 02:08:44 +00:00
$sMsg = $oVersion -> objectMakeUrl () . " \n " ;
2005-07-13 01:13:46 +00:00
$sMsg .= " This Bug Link has been queued. " ;
$sMsg .= " \n " ;
2005-07-16 20:02:17 +00:00
addmsg ( " The Bug Link you submitted will be added to the database after being reviewed. " , " green " );
2005-07-13 01:13:46 +00:00
}
} else // Bug Link deleted.
{
2006-06-29 16:07:19 +00:00
$sSubject = " Link between Bug " . $this -> iBug_id . " and " . $sAppName . " deleted by " . $_SESSION [ 'current' ] -> sRealname ;
2007-04-03 02:08:44 +00:00
$sMsg = $oVersion -> objectMakeUrl () . " \n " ;
2005-07-13 01:13:46 +00:00
addmsg ( " Bug Link deleted. " , " green " );
}
2006-06-29 15:54:29 +00:00
$sEmail = User :: get_notify_email_address_list ( null , $this -> iVersionId );
2005-07-13 01:13:46 +00:00
if ( $sEmail )
{
mail_appdb ( $sEmail , $sSubject , $sMsg );
}
2006-12-27 03:26:16 +00:00
}
/* Get a list of bugs submitted by a given user */
function listSubmittedBy ( $iUserId , $bQueued = true )
{
$hResult = query_parameters ( " SELECT appFamily.appName, buglinks.versionId, appVersion.versionName, buglinks.submitTime, buglinks.bug_id FROM buglinks, appFamily, appVersion WHERE appFamily.appId = appVersion.appId AND buglinks.versionId = appVersion.versionId AND buglinks.queued = '?' AND buglinks.submitterId = '?' ORDER BY buglinks.versionId " , $bQueued ? " true " : " false " , $iUserId );
if ( ! $hResult || ! mysql_num_rows ( $hResult ))
return FALSE ;
$sReturn = html_table_begin ( " width= \" 100% \" align= \" center \" " );
$sReturn .= html_tr ( array (
" Version " ,
array ( " Bug # " , 'width="50"' ),
array ( " Status " , 'width="80"' ),
array ( " Resolution " , 'width="110"' ),
" Description " ,
" Submit time " ),
" color4 " );
for ( $i = 1 ; $oRow = mysql_fetch_object ( $hResult ); $i ++ )
{
$oBug = new Bug ( $oRow -> bug_id );
$sReturn .= html_tr ( array (
2007-04-03 02:08:44 +00:00
version :: fullNameUrl ( $oRow -> versionId ),
2006-12-27 03:26:16 +00:00
" <a href= \" " . BUGZILLA_ROOT . " show_bug.cgi?id= " . $oRow -> bug_id . " \" > " . $oRow -> bug_id . " </a> " ,
$oBug -> sBug_status ,
$oBug -> sResolution ,
$oBug -> sShort_desc ,
print_date ( mysqltimestamp_to_unixtimestamp ( $oRow -> submitTime ))),
( $i % 2 ) ? " color0 " : " color1 " );
}
$sReturn .= html_table_end ();
return $sReturn ;
}
2005-07-13 01:13:46 +00:00
}
/*
* Bug Link functions that are not part of the class
*/
function view_version_bugs ( $iVersionId = null , $aBuglinkIds )
{
2007-01-04 02:35:01 +00:00
global $aClean ;
2006-06-17 06:10:10 +00:00
2005-07-13 01:13:46 +00:00
$bCanEdit = FALSE ;
$oVersion = new Version ( $iVersionId );
2005-07-16 20:02:17 +00:00
2005-07-13 01:13:46 +00:00
// Security, if we are an administrator or a maintainer, we can remove or ok links.
if (( $_SESSION [ 'current' ] -> hasPriv ( " admin " ) ||
$_SESSION [ 'current' ] -> isMaintainer ( $oVersion -> iVersionId ) ||
$_SESSION [ 'current' ] -> isSuperMaintainer ( $oVersion -> iAppId )))
{
$bCanEdit = TRUE ;
}
//start format table
if ( $_SESSION [ 'current' ] -> isLoggedIn ())
{
2007-04-03 02:08:44 +00:00
echo " <form method=post action=' " . $oVersion -> objectMakeUrl () . " '> \n " ;
2005-07-13 01:13:46 +00:00
}
echo html_frame_start ( " Known bugs " , " 98% " , '' , 0 );
echo " <table width= \" 100% \" border= \" 0 \" cellpadding= \" 3 \" cellspacing= \" 1 \" > \n \n " ;
echo " <tr class=color4> \n " ;
echo " <td align=center width= \" 80 \" >Bug #</td> \n " ;
echo " <td>Description</td> \n " ;
echo " <td align=center width= \" 80 \" >Status</td> \n " ;
echo " <td align=center width= \" 80 \" >Resolution</td> \n " ;
echo " <td align=center width= \" 80 \" >Other Apps affected</td> \n " ;
if ( $bCanEdit == true )
{
echo " <td align=center width= \" 80 \" >delete</td> \n " ;
echo " <td align=center width= \" 80 \" >checked</td> \n " ;
}
echo " </tr> \n \n " ;
$c = 0 ;
foreach ( $aBuglinkIds as $iBuglinkId )
{
2006-09-06 01:43:30 +00:00
$oBuglink = new Bug ( $iBuglinkId );
2005-07-13 01:13:46 +00:00
// set row color
$bgcolor = ( $c % 2 == 0 ) ? " color0 " : " color1 " ;
//display row
echo " <tr class= $bgcolor > \n " ;
echo " <td align=center><a href=' " . BUGZILLA_ROOT . " show_bug.cgi?id= " . $oBuglink -> iBug_id . " '> " . $oBuglink -> iBug_id . " </a></td> \n " ;
echo " <td> " . $oBuglink -> sShort_desc . " </td> \n " ;
echo " <td align=center> " . $oBuglink -> sBug_status . " </td> " , " \n " ;
echo " <td align=center> " . $oBuglink -> sResolution . " </td> " , " \n " ;
echo " <td align=center><a href='viewbugs.php?bug_id= " . $oBuglink -> iBug_id . " '>View</a></td> \n " ;
if ( $bCanEdit == true )
{
2007-04-03 02:08:44 +00:00
echo " <td align=center>[<a href=' " . $oVersion -> objectMakeUrl () . " &sSub=delete&iBuglinkId= " . $oBuglink -> iLinkId . " '>delete</a>]</td> \n " ;
2005-07-13 01:13:46 +00:00
if ( $oBuglink -> bQueued )
{
2007-04-03 02:08:44 +00:00
echo " <td align=center>[<a href=' " . $oVersion -> objectMakeUrl () . " &sSub=unqueue&iBuglinkId= " . $oBuglink -> iLinkId . " '>OK</a>]</td> \n " ;
2005-07-13 01:13:46 +00:00
} else
{
echo " <td align=center>Yes</td> \n " ;
}
}
echo " </tr> \n \n " ;
$c ++ ;
}
if ( $_SESSION [ 'current' ] -> isLoggedIn ())
{
2006-07-06 17:27:54 +00:00
echo '<input type="hidden" name="iVersionId" value="' . $iVersionId . '">' , " \n " ;
2005-07-13 01:13:46 +00:00
echo '<tr class=color3><td align=center>' , " \n " ;
2006-07-06 17:27:54 +00:00
echo '<input type="text" name="iBuglinkId" value="' . $aClean [ 'buglinkId' ] . '" size="8"></td>' , " \n " ;
echo '<td><input type="submit" name="sSub" value="Submit a new bug link."></td>' , " \n " ;
2005-07-30 03:15:50 +00:00
echo '<td colspan=6></td></tr></form>' , " \n " ;
2005-07-13 01:13:46 +00:00
}
echo '</table>' , " \n " ;
echo html_frame_end ();
2006-12-27 03:26:16 +00:00
}
2005-07-13 01:13:46 +00:00
?>