This repository has been archived on 2025-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
qemudb/include/monitor.php
Alexander Nicolaysen Sørnes 1f081f4be1 test_om_objects: Test unQueue()
2008-01-23 10:45:39 -05:00

351 lines
8.9 KiB
PHP

<?php
/***************************************/
/* Monitor class and related functions */
/***************************************/
/**
* Monitor class for handling Monitors
*/
class Monitor {
var $iMonitorId;
// variables necessary for creating a monitor
var $iAppId;
var $iVersionId;
var $iUserId;
/**
* Constructor.
* If $iMonitorId is provided, fetches Monitor.
*/
function Monitor($iMonitorId="", $oRow = null)
{
if(!$iMonitorId && !$oRow)
return;
if(!$oRow)
{
$sQuery = "SELECT *
FROM appMonitors
WHERE monitorId = '".$iMonitorId."'";
$hResult = query_appdb($sQuery);
$oRow = query_fetch_object($hResult);
}
if($oRow)
{
$this->iMonitorId = $oRow->monitorId;
$this->iAppId = $oRow->appId;
$this->iVersionId = $oRow->versionId;
$this->iUserId = $oRow->userId;
}
}
function find($iUserId, $iVersionId=0)
{
if($iUserId && $iVersionId)
{
$sQuery = "SELECT *
FROM appMonitors
WHERE userId = '".$iUserId."'
AND versionId = '".$iVersionId."'";
$hResult = query_appdb($sQuery);
if( $oRow = query_fetch_object($hResult) )
{
$this->iMonitorId = $oRow->monitorId;
$this->iAppId = $oRow->appId;
$this->iVersionId = $oRow->versionId;
$this->iUserId = $oRow->userId;
}
}
}
function objectGetChildren($bIncludeDeleted = false)
{
/* We have none */
return array();
}
/*
* Creates a new Monitor.
* Informs interested people about the creation.
* Returns true on success, false on failure
*/
function create()
{
/* Check for duplicate entries */
$oMonitor = new monitor();
$this->iUserId = $_SESSION['current']->iUserId;
$oMonitor->find($this->iUserId, $this->iVersionId);
if($oMonitor->iVersionId)
return FALSE;
// create the new monitor entry
$hResult = query_parameters("INSERT INTO appMonitors (versionId, appId,".
"submitTime, userId) ".
"VALUES ('?', '?', ?, '?')",
$this->iVersionId, $this->iAppId,
"NOW()", $this->iUserId);
if($hResult)
{
$this->Monitor(query_appdb_insert_id());
$sWhatChanged = "New monitor\n\n";
$this->SendNotificationMail("add", $sWhatChanged);
return true;
} else
{
addmsg("Error while creating a new Monitor.", "red");
return false;
}
}
function update()
{
/* Stub */
return TRUE;
}
function unQueue()
{
return true; // We don't queue monitors
}
function objectGetSubmitterId()
{
return $this->iUserId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$sSubject = null;
$sMsg = null;
if($this->iVersionId)
{
$sWhat = "version";
$sName = version::fullName($this->iVersionId);
$oVersion = new version($this->iVersionId);
$sUrl = $oVersion->objectMakeUrl();
} else
{
$sWhat = "application";
$oApp = new application($this->iAppId);
$sName = $oApp->sName;
$sUrl = $oApp->objectMakeUrl();
}
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
if($bParentActino)
{
$sSubject = "Monitored $sWhat deleted";
$sMsg = "The $sWhat $sName which you monitored has been ".
"deleted by ".$_SESSION['current']->iUserId.".";
}
break;
}
$aMailTo = null;
} else
{
$oUser = new user($this->iUserId);
$sUser = $oUser->sName;
switch($sAction)
{
case "delete":
if(!$bParentAction)
{
$sSubject = "Monitor for $sName removed: $sUser";
$sMsg = $sUrl;
}
break;
}
User::get_notify_email_address_list(null, $this->iVersionId);
}
return array($sSubject, $sMsg, $aMailTo);
}
function purge()
{
return $this->delete();
}
/**
* Removes the current Monitor from the database.
* Informs interested people about the deletion.
*/
function delete()
{
$hResult = query_parameters("DELETE FROM appMonitors WHERE monitorId = '?'", $this->iMonitorId);
if(!$hResult)
return FALSE;
return TRUE;
}
function SendNotificationMail($sAction="add",$sMsg=null)
{
/* Set variables depending on whether it is an application or version monitor */
if(isset($this->iVersionId))
{
$oVersion = new version($this->iVersionId);
$sAppName = version::fullName($this->iVersionId);
$sUrl = $oVersion->objectMakeUrl();
$sVersion = " version";
} else
{
$oApp = new application($this->iAppId);
$sAppName = Application::lookup_name($this->iAppId);
$sUrl = $oApp->objectMakeUrl();
}
switch($sAction)
{
case "add":
$sSubject = "Monitor for ".$sAppName;
$sSubject .= " added: ".$_SESSION['current']->sRealname;
$sMsg .= "$sUrl\n";
addmsg("You will now receive an email whenever changes are made ".
"to this application$sVersion.", "green");
break;
case "delete":
$sSubject = "Monitor for ".$sAppName;
$sSubject .= " removed: ".$_SESSION['current']->sRealname;
$sMsg .= "$sUrl\n";
addmsg("You will no longer receive an email whenever changes ".
"are made to this application$sVersion.", "green");
break;
}
$sEmail = User::get_notify_email_address_list(null, $this->iVersionId);
if($sEmail)
mail_appdb($sEmail, $sSubject ,$sMsg);
}
function objectGetState()
{
// We don't queue monitors
return 'accepted';
}
function canEdit()
{
if($_SESSION['current']->hasPriv("admin") ||
($this->iUserId == $_SESSION['current']->iUserId))
return TRUE;
return FALSE;
}
function mustBeQueued()
{
return FALSE;
}
/* Stub */
function display()
{
return "";
}
/* Stub */
function getOutputEditorValues($aClean)
{
$this->iVersionId = $aClean['iVersionId'];
$this->iAppId = $aClean['iAppId'];
}
/* Stub */
function objectGetHeader()
{
return null;
}
function objectGetId()
{
return $this->iMonitorId;
}
/* Stub */
function objectGetTableRow()
{
return null;
}
/* Stub */
function objectMakeLink()
{
return "";
}
/* Stub */
function objectMakeUrl()
{
return "";
}
/* Stub */
function outputEditor()
{
return "";
}
function objectGetEntries($sState)
{
$hResult = query_parameters("SELECT * FROM appMonitors");
if(!$hResult)
return FALSE;
return $hResult;
}
function objectGetEntriesCount($sState)
{
$hResult = query_parameters("SELECT COUNT(DISTINCT monitorId) as count
FROM appMonitors");
if(!$hResult)
return FALSE;
$oRow = query_fetch_object($hResult);
if(!$oRow)
return FALSE;
return $oRow->count;
}
function allowAnonymousSubmissions()
{
/* That makes no sense */
return FALSE;
}
/* Retrieve the user's monitored versions */
function getVersionsMonitored($oUser)
{
$hResult = query_parameters("SELECT appId, versionId FROM appMonitors WHERE userId = '?'", $oUser->iUserId);
if(!$hResult || query_num_rows($hResult) == 0)
return NULL;
$aVersionsMonitored = array();
for($i = 0; $oRow = query_fetch_object($hResult); $i++)
$aVersionsMonitored[$i] = array($oRow->appId, $oRow->versionId);
return $aVersionsMonitored;
}
}
?>