Add support for application-wide notes

This commit is contained in:
Alexander Nicolaysen Sørnes
2009-07-28 17:48:52 +02:00
parent 7682b4ae67
commit c37fbc6295
5 changed files with 110 additions and 30 deletions

View File

@@ -835,6 +835,9 @@ class Application {
if($_SESSION['current']->isSuperMaintainer($this->iAppId) || $_SESSION['current']->hasPriv("admin")) if($_SESSION['current']->isSuperMaintainer($this->iAppId) || $_SESSION['current']->hasPriv("admin"))
{ {
echo ' <form method="post" name="sEdit" action="admin/editAppFamily.php"><input type="hidden" name="iAppId" value="'.$this->iAppId.'"><input type="submit" value="Edit Application" class="button"></form>'; echo ' <form method="post" name="sEdit" action="admin/editAppFamily.php"><input type="hidden" name="iAppId" value="'.$this->iAppId.'"><input type="submit" value="Edit Application" class="button"></form>';
echo '<form method="post" action="objectManager.php?sClass=note&sAction=add&sTitle=Add+note&iAppId='.$this->iAppId.'&sNoteTitle=HOWTO&sReturnTo='.urlencode($this->objectMakeUrl()).'">';
echo '<input type="submit" value="Add note/how-to" />';
echo '</form>';
} }
if($_SESSION['current']->isLoggedIn()) if($_SESSION['current']->isLoggedIn())
{ {
@@ -877,6 +880,8 @@ class Application {
// display bundle // display bundle
$this->displayBundle(); $this->displayBundle();
note::displayNotesForEntry(null, $this->iAppId);
} }
public static function lookup_name($appId) public static function lookup_name($appId)

View File

@@ -288,4 +288,21 @@ function html_note($shTitle, $shBody)
return $shRet; return $shRet;
} }
function html_radiobuttons($aIds, $aOptions, $sName, $sDefault = '')
{
$shRet = '';
for($i = 0; $i < sizeof($aIds); $i++)
{
if($aIds[$i] == $sDefault)
$shChecked = ' checked="checked"';
else
$shChecked = '';
$shRet .= '<input type="radio" name="'.$sName.'" value="'.$aIds[$i]."\"$shChecked> " . $aOptions[$i].'<br />';
}
return $shRet;
}
?> ?>

View File

@@ -7,12 +7,17 @@ require_once(BASE."include/version.php");
/************************************/ /************************************/
define('APPNOTE_SHOW_FOR_ALL', -1);
define('APPNOTE_SHOW_FOR_VERSIONS', -2);
define('APPNOTE_SHOW_FOR_APP', -3);
/** /**
* Note class for handling notes * Note class for handling notes
*/ */
class Note { class Note {
var $iNoteId; var $iNoteId;
var $iVersionId; var $iVersionId;
var $iAppId;
var $sTitle; var $sTitle;
var $shDescription; var $shDescription;
var $iSubmitterId; var $iSubmitterId;
@@ -38,6 +43,7 @@ class Note {
{ {
$this->iNoteId = $oRow->noteId; $this->iNoteId = $oRow->noteId;
$this->iVersionId = $oRow->versionId; $this->iVersionId = $oRow->versionId;
$this->iAppId = $oRow->appId;
$this->sTitle = $oRow->noteTitle; $this->sTitle = $oRow->noteTitle;
$this->shDescription = $oRow->noteDesc; $this->shDescription = $oRow->noteDesc;
$this->sSubmitTime = $oRow->submitTime; $this->sSubmitTime = $oRow->submitTime;
@@ -54,11 +60,11 @@ class Note {
function create() function create()
{ {
$hResult = query_parameters("INSERT INTO appNotes (versionId, ". $hResult = query_parameters("INSERT INTO appNotes (versionId, ".
"noteTitle, noteDesc, submitterId, ". "appId, noteTitle, noteDesc, submitterId, ".
"submitTime) ". "submitTime) ".
"VALUES('?', '?', '?', '?', ?)", "VALUES('?', '?', '?', '?', '?', ?)",
$this->iVersionId, $this->sTitle, $this->iVersionId, $this->iAppId,
$this->shDescription, $this->sTitle, $this->shDescription,
$_SESSION['current']->iUserId, $_SESSION['current']->iUserId,
"NOW()"); "NOW()");
@@ -151,9 +157,18 @@ class Note {
function SendNotificationMail($sAction="add",$sMsg=null) function SendNotificationMail($sAction="add",$sMsg=null)
{ {
$oVersion = new version($this->iVersionId); if(!$this->iAppId)
$sAppName = version::fullName($this->iVersionId); {
$sMsg .= $oVersion->objectMakeUrl()."\n"; $oVersion = new version($this->iVersionId);
$sAppName = version::fullName($this->iVersionId);
$sMsg .= $oVersion->objectMakeUrl()."\n";
} else
{
$oApp = new application($this->iAppId);
$sAppName = $oApp->sName;
$sMsg .= $oApp->objectMakeUrl()."\n";
}
switch($sAction) switch($sAction)
{ {
case "add": case "add":
@@ -218,7 +233,14 @@ class Note {
$sClass = 'defaultnote'; $sClass = 'defaultnote';
} }
$oVersion = new version($this->iVersionId); if(!$aVars || !getInput('shReturnTo', $aVars))
{
$oVersion = new version($this->iVersionId);
$shReturnTo = $oVersion->objectMakeUrl();
} else
{
$shReturnTo = $aVars['shReturnTo'];
}
$shOutput = html_frame_start("","98%",'',0); $shOutput = html_frame_start("","98%",'',0);
@@ -231,7 +253,7 @@ class Note {
if((!$aVars || $aVars['bEditing'] != "true") && $this->canEdit()) if((!$aVars || $aVars['bEditing'] != "true") && $this->canEdit())
{ {
$shOutput .= "<tr class=\"color1\" align=\"center\" valign=\"top\"><td>"; $shOutput .= "<tr class=\"color1\" align=\"center\" valign=\"top\"><td>";
$shOutput .= "<form method=\"post\" name=\"message\" action=\"objectManager.php?sClass=note&amp;sAction=edit&amp;iId=".$this->iNoteId."&amp;sReturnTo=".urlencode($oVersion->objectMakeUrl())."\">"; $shOutput .= "<form method=\"post\" name=\"message\" action=\"objectManager.php?sClass=note&amp;sAction=edit&amp;iId=".$this->iNoteId."&amp;sReturnTo=".urlencode($shReturnTo)."\">";
$shOutput .= '<input type="submit" value="Edit Note" class="button">'; $shOutput .= '<input type="submit" value="Edit Note" class="button">';
$shOutput .= '</form></td></tr>'; $shOutput .= '</form></td></tr>';
} }
@@ -242,6 +264,37 @@ class Note {
echo $shOutput; echo $shOutput;
} }
function displayNotesForEntry($iVersionId, $iAppId = null)
{
if($iVersionId)
{
$oVersion = new version($iVersionId);
$oApp = $oVersion->objectGetParent();
$hResult = query_parameters("SELECT noteId FROM appNotes WHERE versionId = '?' OR (appId = '?' AND (versionId = '?' OR versionId = '?'))", $iVersionId, $oApp->objectGetId(), APPNOTE_SHOW_FOR_ALL, APPNOTE_SHOW_FOR_VERSIONS);
} else if($iAppId)
{
$hResult = query_parameters("SELECT noteId FROM appNotes WHERE appId = '?' AND versionId = '?' OR versionId = '?'", $iAppId, APPNOTE_SHOW_FOR_ALL, APPNOTE_SHOW_FOR_APP);
}
if(!$hResult)
return;
if($iVersionId)
$oVersion = new version($iVersionId);
else
$oApp = new application($iAppId);
while($oRow = mysql_fetch_object($hResult))
{
$oNote = new note($oRow->noteId);
$shReturnTo = $iVersionId ? $oVersion->objectMakeUrl() : $oApp->objectMakeUrl();
$aVars = array('shReturnTo' => $shReturnTo, 'bEditing' => 'false');
$oNote->display($aVars);
}
}
function objectGetCustomVars($sAction) function objectGetCustomVars($sAction)
{ {
switch($sAction) switch($sAction)
@@ -250,7 +303,7 @@ class Note {
return array("bEditing"); return array("bEditing");
case "add": case "add":
return array("iVersionId","sNoteTitle"); return array('iVersionId','iAppId','sNoteTitle');
default: default:
return null; return null;
@@ -264,6 +317,12 @@ class Note {
if(!$this->iVersionId) if(!$this->iVersionId)
$this->iVersionId = $aValues['iVersionId']; $this->iVersionId = $aValues['iVersionId'];
if(!$this->iAppId)
$this->iAppId = getInput('iAppId', $aValues);
if($this->iAppId && !$this->iVersionId)
$this->iVersionId = APPNOTE_SHOW_FOR_ALL;
if(!$this->sTitle) if(!$this->sTitle)
$this->sTitle = $aValues['sNoteTitle']; $this->sTitle = $aValues['sNoteTitle'];
} }
@@ -275,7 +334,9 @@ class Note {
echo '<input type="hidden" name="bEditing" value="true">'; echo '<input type="hidden" name="bEditing" value="true">';
echo '<input type="hidden" name="iNoteId" value="'.$this->iNoteId.'">'; echo '<input type="hidden" name="iNoteId" value="'.$this->iNoteId.'">';
echo '<input type="hidden" name="iVersionId" value="'.$this->iVersionId.'">'; if(!$this->iAppId)
echo '<input type="hidden" name="iVersionId" value="'.$this->iVersionId.'">';
echo '<input type="hidden" name="iAppId" value="'.$this->iAppId.'">';
echo '<tr><td class=color1>Title</td>'."\n"; echo '<tr><td class=color1>Title</td>'."\n";
echo ' <td class=color0><input size=80% type="text" name="sNoteTitle" type="text" value="'.$this->sTitle.'"></td></tr>',"\n"; echo ' <td class=color0><input size=80% type="text" name="sNoteTitle" type="text" value="'.$this->sTitle.'"></td></tr>',"\n";
@@ -284,6 +345,14 @@ class Note {
echo '<textarea cols="80" rows="20" id="editor" name="shNoteDesc">'.$this->shDescription.'</textarea>',"\n"; echo '<textarea cols="80" rows="20" id="editor" name="shNoteDesc">'.$this->shDescription.'</textarea>',"\n";
echo '</p>'; echo '</p>';
echo '</td></tr>'."\n"; echo '</td></tr>'."\n";
if($this->iAppId)
{
$aIds = array(APPNOTE_SHOW_FOR_ALL, APPNOTE_SHOW_FOR_VERSIONS, APPNOTE_SHOW_FOR_APP);
$aOptions = array('Show on both application and version pages', 'Show on version pages only', 'Show on application page only');
echo '<tr><td class="color1">Display mode</td>'."\n";
echo '<td class="color0">'.html_radiobuttons($aIds, $aOptions, 'iVersionId', $this->iVersionId);
echo '</td></tr>';
}
echo '<tr><td colspan="2" align="center" class="color3">',"\n"; echo '<tr><td colspan="2" align="center" class="color3">',"\n";
echo html_table_end(); echo html_table_end();
@@ -294,7 +363,8 @@ class Note {
/* $aValues can be $_REQUEST or any array with the values from outputEditor() */ /* $aValues can be $_REQUEST or any array with the values from outputEditor() */
function GetOutputEditorValues($aValues) function GetOutputEditorValues($aValues)
{ {
$this->iVersionId = $aValues['iVersionId']; $this->iVersionId = getInput('iVersionId', $aValues);
$this->iAppId = getInput('iAppId', $aValues);
$this->sTitle = $aValues['sNoteTitle']; $this->sTitle = $aValues['sNoteTitle'];
$this->shDescription = $aValues['shNoteDesc']; $this->shDescription = $aValues['shNoteDesc'];
} }
@@ -418,16 +488,11 @@ class Note {
function canEdit() function canEdit()
{ {
if($_SESSION['current']->hasPriv("admin")) if($_SESSION['current']->hasPriv("admin"))
{
return true;
} else if($this->iVersionId)
{
if(maintainer::isUserMaintainer($_SESSION['current'],
$this->iVersionId))
{
return true; return true;
} else if($this->iVersionId && !$this->iAppId)
} return maintainer::isUserMaintainer($_SESSION['current'], $this->iVersionId);
else if($this->iAppId)
return maintainer::isUserSuperMaintainer($_SESSION['current'], $this->iAppId);
return false; return false;
} }

View File

@@ -1179,15 +1179,7 @@ class version {
view_version_bugs($this->iVersionId, $this->get_buglink_ids()); view_version_bugs($this->iVersionId, $this->get_buglink_ids());
/* display the notes for the application */ echo note::displayNotesForEntry($this->iVersionId);
$hNotes = query_parameters("SELECT noteId FROM appNotes WHERE versionId = '?'",
$this->iVersionId);
while( $oRow = query_fetch_object($hNotes) )
{
$oNote = new Note($oRow->noteId);
$oNote->display();
}
// Comments Section // Comments Section
if($this->iVersionId) if($this->iVersionId)

View File

@@ -167,6 +167,7 @@ create table appNotes (
noteTitle varchar(255), noteTitle varchar(255),
noteDesc text, noteDesc text,
versionId int not null, versionId int not null,
appId int not null,
submitterId int not null, submitterId int not null,
submitTime datetime not null, submitTime datetime not null,
key(noteId) key(noteId)