\n";
$shOutput .= html_frame_end();
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)
{
case "preview":
return array("bEditing");
case "add":
return array('iVersionId','iAppId','sNoteTitle');
default:
return null;
}
}
public static function isRealVersionId($iVersionId)
{
return $iVersionId > 0;
}
function outputEditor($aValues = null)
{
if($aValues)
{
if(!$this->iVersionId)
$this->iVersionId = getInput('iVersionId', $aValues);
if(!$this->iAppId)
$this->iAppId = getInput('iAppId', $aValues);
if(!$this->sTitle)
$this->sTitle = getInput('sNoteTitle', $aValues);
}
if($this->iAppId && !$this->iVersionId)
$this->iVersionId = APPNOTE_SHOW_FOR_ALL;
if(!$this->iAppId)
{
$oVersion = new version($this->iVersionId);
$this->iAppId = $oVersion->iAppId;
}
HtmlAreaLoaderScript(array("editor"));
echo html_frame_start("Edit Application Note", "90%","",0);
echo html_table_begin("width='100%' border=0 align=left cellpadding=6 cellspacing=0 class='box-body'");
echo '';
echo '';
echo '';
echo '
Title
'."\n";
echo '
',"\n";
echo '
Description
', "\n";
echo '
', "\n";
echo '',"\n";
echo '
';
echo '
'."\n";
if($this->iAppId);
$oApp = new application($this->iAppId);
if($this->iAppId || $oApp->canEdit())
{
$aIds = array();
$aOptions = array();
if($this->isRealVersionId($this->iVersionId))
{
$aIds[] = $this->iVersionId;
$aOptions[] = 'Show for this version only';
}
$aIds = array_merge($aIds, array(APPNOTE_SHOW_FOR_ALL, APPNOTE_SHOW_FOR_VERSIONS, APPNOTE_SHOW_FOR_APP));
$aOptions = array_merge($aOptions, array('Show on both application and version pages', 'Show on all version pages only', 'Show on application page only'));;
echo '
',"\n";
echo html_table_end();
echo html_frame_end();
}
/* retrieves values from $aValue that were output by outputEditor() */
/* $aValues can be $_REQUEST or any array with the values from outputEditor() */
function GetOutputEditorValues($aValues)
{
$this->iVersionId = getInput('iVersionId', $aValues);
if(!$this->isRealVersionId($this->iVersionId))
$this->iAppId = getInput('iAppId', $aValues);
else
$this->iAppId = 0;
$this->sTitle = $aValues['sNoteTitle'];
$this->shDescription = $aValues['shNoteDesc'];
}
function allowAnonymousSubmissions()
{
return false;
}
// NOTE: notes cannot be queued at this point
function mustBeQueued()
{
return false;
}
function objectGetId()
{
return $this->iNoteId;
}
// TODO: we ignore $bQueued and $bRejected as notes
// do not support queuing at this point
// TODO: we have no permissions scope on retrieving entries
// as notes are typically only added to unqueued versions
function objectGetEntries($sState, $iRows = 0, $iStart = 0, $sOrderBy = '', $bAscending = true)
{
$sQuery = "select * from appNotes";
$hResult = query_parameters($sQuery);
return $hResult;
}
function objectGetEntriesCount($sState)
{
$sQuery = "SELECT COUNT(DISTINCT noteId) as count FROM appNotes";
$hResult = query_parameters($sQuery);
if(!$hResult)
return false;
if(($oRow = mysql_fetch_object($hResult)))
return $oRow->count;
return false;
}
//TODO: not sure how to best let users view a table of notes
// since the note contents could be very long we would only
// want to show a small amount of the text. Implement this
// routine when we need it
function objectGetHeader()
{
return null;
}
//TODO: implement this when we implement objectGetHeader()
function objectGetTableRow()
{
return null;
}
function objectMakeUrl()
{
$oManager = new objectManager("note", "View Note");
return $oManager->makeUrl("view", $this->objectGetId());
}
function objectGetSubmitterId()
{
return $this->iSubmitterId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
/* We don't do this at the moment */
return array(null, null, null);
}
public function objectGetParent($sClass = '')
{
if($this->iVersionId)
return new version($this->iVersionId);
else
return new application($this->iAppId);
}
public function objectSetParent($iNewId, $sClass = '')
{
if($this->iVersionId)
$this->iVersionId = $iNewId;
else
$this->iAppId = $iNewId;
}
function objectGetChildren($bIncludeDeleted = false)
{
return array();
}
//TODO: not sure if we want to use sTitle here or what
function objectMakeLink()
{
$sLink = "objectMakeUrl()."\">".
$this->sTitle."";
return $sLink;
}
function objectGetState()
{
return 'accepted'; // We don't queue notes
}
// users can edit the note if they:
// - have "admin" privileges
// - maintain the version, or supermaintain the application that
// this version is under
function canEdit()
{
if($_SESSION['current']->hasPriv("admin"))
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;
}
}
?>