From c37fbc62950dd3ca68a549c42ee2a61fcda61d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Nicolaysen=20S=C3=B8rnes?= Date: Tue, 28 Jul 2009 17:48:52 +0200 Subject: [PATCH] Add support for application-wide notes --- include/application.php | 5 ++ include/html.php | 17 +++++++ include/note.php | 107 ++++++++++++++++++++++++++++++++-------- include/version.php | 10 +--- tables/appdb_tables.sql | 1 + 5 files changed, 110 insertions(+), 30 deletions(-) diff --git a/include/application.php b/include/application.php index c5ef52b..06ef247 100644 --- a/include/application.php +++ b/include/application.php @@ -835,6 +835,9 @@ class Application { if($_SESSION['current']->isSuperMaintainer($this->iAppId) || $_SESSION['current']->hasPriv("admin")) { echo '
'; + echo '
'; + echo ''; + echo '
'; } if($_SESSION['current']->isLoggedIn()) { @@ -877,6 +880,8 @@ class Application { // display bundle $this->displayBundle(); + + note::displayNotesForEntry(null, $this->iAppId); } public static function lookup_name($appId) diff --git a/include/html.php b/include/html.php index ac6cfa0..4cb60dc 100644 --- a/include/html.php +++ b/include/html.php @@ -288,4 +288,21 @@ function html_note($shTitle, $shBody) 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 .= ' " . $aOptions[$i].'
'; + } + + return $shRet; +} + ?> diff --git a/include/note.php b/include/note.php index ea4098b..bde0e77 100644 --- a/include/note.php +++ b/include/note.php @@ -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 */ class Note { var $iNoteId; var $iVersionId; + var $iAppId; var $sTitle; var $shDescription; var $iSubmitterId; @@ -38,6 +43,7 @@ class Note { { $this->iNoteId = $oRow->noteId; $this->iVersionId = $oRow->versionId; + $this->iAppId = $oRow->appId; $this->sTitle = $oRow->noteTitle; $this->shDescription = $oRow->noteDesc; $this->sSubmitTime = $oRow->submitTime; @@ -54,11 +60,11 @@ class Note { function create() { $hResult = query_parameters("INSERT INTO appNotes (versionId, ". - "noteTitle, noteDesc, submitterId, ". + "appId, noteTitle, noteDesc, submitterId, ". "submitTime) ". - "VALUES('?', '?', '?', '?', ?)", - $this->iVersionId, $this->sTitle, - $this->shDescription, + "VALUES('?', '?', '?', '?', '?', ?)", + $this->iVersionId, $this->iAppId, + $this->sTitle, $this->shDescription, $_SESSION['current']->iUserId, "NOW()"); @@ -151,9 +157,18 @@ class Note { function SendNotificationMail($sAction="add",$sMsg=null) { - $oVersion = new version($this->iVersionId); - $sAppName = version::fullName($this->iVersionId); - $sMsg .= $oVersion->objectMakeUrl()."\n"; + if(!$this->iAppId) + { + $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) { case "add": @@ -218,7 +233,14 @@ class Note { $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); @@ -231,7 +253,7 @@ class Note { if((!$aVars || $aVars['bEditing'] != "true") && $this->canEdit()) { $shOutput .= ""; - $shOutput .= "
iNoteId."&sReturnTo=".urlencode($oVersion->objectMakeUrl())."\">"; + $shOutput .= "iNoteId."&sReturnTo=".urlencode($shReturnTo)."\">"; $shOutput .= ''; $shOutput .= '
'; } @@ -242,6 +264,37 @@ class Note { 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) { switch($sAction) @@ -250,7 +303,7 @@ class Note { return array("bEditing"); case "add": - return array("iVersionId","sNoteTitle"); + return array('iVersionId','iAppId','sNoteTitle'); default: return null; @@ -264,6 +317,12 @@ class Note { if(!$this->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) $this->sTitle = $aValues['sNoteTitle']; } @@ -275,7 +334,9 @@ class Note { echo ''; echo ''; - echo ''; + if(!$this->iAppId) + echo ''; + echo ''; echo 'Title'."\n"; echo ' ',"\n"; @@ -284,6 +345,14 @@ class Note { echo '',"\n"; echo '

'; echo ''."\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 'Display mode'."\n"; + echo ''.html_radiobuttons($aIds, $aOptions, 'iVersionId', $this->iVersionId); + echo ''; + } echo '',"\n"; echo html_table_end(); @@ -294,7 +363,8 @@ class Note { /* $aValues can be $_REQUEST or any array with the values from outputEditor() */ function GetOutputEditorValues($aValues) { - $this->iVersionId = $aValues['iVersionId']; + $this->iVersionId = getInput('iVersionId', $aValues); + $this->iAppId = getInput('iAppId', $aValues); $this->sTitle = $aValues['sNoteTitle']; $this->shDescription = $aValues['shNoteDesc']; } @@ -418,16 +488,11 @@ class Note { function canEdit() { if($_SESSION['current']->hasPriv("admin")) - { - return true; - } else if($this->iVersionId) - { - if(maintainer::isUserMaintainer($_SESSION['current'], - $this->iVersionId)) - { 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; } diff --git a/include/version.php b/include/version.php index 064d890..f54eeb2 100644 --- a/include/version.php +++ b/include/version.php @@ -1179,15 +1179,7 @@ class version { view_version_bugs($this->iVersionId, $this->get_buglink_ids()); - /* display the notes for the application */ - $hNotes = query_parameters("SELECT noteId FROM appNotes WHERE versionId = '?'", - $this->iVersionId); - - while( $oRow = query_fetch_object($hNotes) ) - { - $oNote = new Note($oRow->noteId); - $oNote->display(); - } + echo note::displayNotesForEntry($this->iVersionId); // Comments Section if($this->iVersionId) diff --git a/tables/appdb_tables.sql b/tables/appdb_tables.sql index f481355..c6a12ad 100644 --- a/tables/appdb_tables.sql +++ b/tables/appdb_tables.sql @@ -167,6 +167,7 @@ create table appNotes ( noteTitle varchar(255), noteDesc text, versionId int not null, + appId int not null, submitterId int not null, submitTime datetime not null, key(noteId)