Alexander Nicolaysen Sørnes <alex@thehandofagony.com>

Let objectManager handle deletion and delete notification.
This commit is contained in:
Chris Morgan
2007-09-14 23:02:12 -04:00
parent e3ca73f7df
commit 2827e0654e
21 changed files with 958 additions and 212 deletions

View File

@@ -18,19 +18,6 @@ echo '<form name="sQform" action="adminMaintainers.php" method="post" enctype="m
if (isset($aClean['sSub']))
{
if($aClean['sSub'] == 'delete')
{
$oMaintainer = new maintainer($aClean['iMaintainerId']);
$oMaintainer->delete();
echo html_frame_start("Delete maintainer: ".$aClean['iMaintainerId'],400,"",0);
if($hResult)
{
// success
echo "<p>Maintainer was successfully deleted</p>\n";
}
echo html_frame_end("&nbsp;");
echo html_back_link(1,'adminMaintainers.php');
}
} else
{
// get available maintainers
@@ -115,7 +102,7 @@ if (isset($aClean['sSub']))
$oVersion = new version($oRow->versionId);
echo " <td>".$oVersion->objectMakeLink()."</td>\n";
}
echo " <td align=\"center\">[<a href='adminMaintainers.php?sSub=delete&iMaintainerId=$oRow->maintainerId'>delete</a>]</td>\n";
echo " <td align=\"center\">[<a href='".BASE."objectManager.php?sClass=maintainer&iId=$oRow->maintainerId&bIsQueue=false&sTitle=Admin%20Maintainers&sAction=delete&sReturnTo=".APPDB_ROOT."admin/adminMaintainers.php'>delete</a>]</td>\n";
echo "</tr>\n\n";
$c++;
}

View File

@@ -236,7 +236,7 @@ class Application {
* Deletes the application from the database.
* and request the deletion of linked elements.
*/
function delete($bSilent=false)
function delete()
{
$bSuccess = true;
@@ -257,14 +257,6 @@ class Application {
if(!($hResult = query_parameters($sQuery, $this->iAppId)))
$bSuccess = false;
if(!$bSilent)
{
$this->SendNotificationMail("delete");
if(!$bSuccess)
addmsg("Error deleting application", "red");
}
return $bSuccess;
}
@@ -342,6 +334,43 @@ class Application {
}
}
function objectGetSubmitterId()
{
return $this->iSubmitterId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
$sSubject = "Submitted application deleted";
$sMsg = "The application you submitted (".$this->sName.
") has been deleted.";
break;
}
$aMailTo = null;
} else
{
switch($sAction)
{
case "delete":
$sSubject = $this->sName." deleted";
$sMsg = "The application '".$this->sName."' has been deleted.";
break;
}
$aMailTo = User::get_notify_email_address_list($this->iAppId);
}
return array($sSubject, $sMsg, $aMailTo);
}
function mailSubmitter($sAction="add")
{
global $aClean;
@@ -368,11 +397,6 @@ class Application {
"Edit+Application\n";
$sMsg .= "Reason given:\n";
break;
case "delete":
$sSubject = "Submitted application deleted";
$sMsg = "The application you submitted (".$this->sName.") has been deleted by ".$_SESSION['current']->sRealname.".";
$sMsg .= "Reason given:\n";
break;
}
$sMsg .= $aClean['sReplyText']."\n";
@@ -455,18 +479,6 @@ class Application {
$sMsg .= $this->objectMakeUrl()."\n";
addmsg("Application modified.", "green");
break;
case "delete":
$sSubject = $this->sName." has been deleted by ".$_SESSION['current']->sRealname;
// if sReplyText is set we should report the reason the application was deleted
if($aClean['sReplyText'])
{
$sMsg .= "Reason given:\n";
$sMsg .= $aClean['sReplyText']."\n"; // append the reply text, if there is any
}
addmsg("Application deleted.", "green");
break;
case "reject":
$sSubject = $this->sName." has been rejected by ".$_SESSION['current']->sRealname;
$sMsg .= APPDB_ROOT."objectManager.php?sClass=application_queue".
@@ -698,8 +710,8 @@ class Application {
}
if($_SESSION['current']->hasPriv("admin"))
{
$url = BASE."admin/deleteAny.php?sWhat=appFamily&amp;iAppId=".$this->iAppId."&amp;sConfirmed=yes";
echo " <form method=\"post\" name=\"sEdit\" action=\"javascript:deleteURL('Are you sure?', '".$url."')\"><input type=\"submit\" value=\"Delete App\" class=\"button\"></form>";
$url = BASE."objectManager.php?sClass=application&bIsQueue=false&sAction=delete&sTitle=Delete%20".$this->sName."&iId=".$this->iAppId;
echo " <form method=\"post\" name=\"sEdit\" action=\"javascript:self.location = '".$url."'\"><input type=\"submit\" value=\"Delete App\" class=\"button\"></form>";
echo ' <form method="post" name="sEdit" action="admin/editBundle.php"><input type="hidden" name="iBundleId" value="'.$this->iAppId.'"><input type="submit" value="Edit Bundle" class="button"></form>';
}
} else

View File

@@ -132,6 +132,26 @@ class application_queue
return $bSuccess;
}
function objectGetChildren()
{
return $this->oApp->objectGetChildren();
}
function objectGetSubmitterId()
{
return $this->oApp->objectGetSubmitterId();
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return $this->oApp->objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction);
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
return $this->oApp->objectGetMail($sAction, $bMailSubmitter, $bParentAction);
}
function outputEditor()
{
/* We ask the user for the application name first so as to avoid duplicate

View File

@@ -98,6 +98,30 @@ class browse_newest_apps
return array($aItemsPerPage, $iDefaultPerPage);
}
function objectGetChildren()
{
$oApp = new application($this->iAppId);
return $oApp->objectGetChildren();
}
function objectGetSubmitterId()
{
$oApp = new application($this->iAppId);
return $oApp->objectGetSubmitterId();
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
$oApp = new application($this->iAppId);
return $oApp->objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction);
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$oApp = new application($this->iAppId);
return $oApp->objectGetMail($sAction, $bMailSubmitter, $bParentAction);
}
function objectGetId()
{
return $this->iAppId;

View File

@@ -151,24 +151,12 @@ class Bug
*
* Return true if successful, false if an error occurs
*/
function delete($bSilent=false)
function delete()
{
$sQuery = "DELETE FROM buglinks
WHERE linkId = '?'";
if($hResult = query_parameters($sQuery, $this->iLinkId))
{
if(!$bSilent)
$this->SendNotificationMail(true);
} else
{
return false;
}
if($this->iSubmitterId &&
($this->iSubmitterId != $_SESSION['current']->iUserId))
{
$this->mailSubmitter(true);
}
if(!($hResult = query_parameters($sQuery, $this->iLinkId)))
return false;
return true;
}
@@ -269,6 +257,22 @@ class Bug
}
}
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);
}
function objectGetChildren()
{
return array();

View File

@@ -163,13 +163,18 @@ class Comment {
return true;
}
function getOutputEditorValues($aClean)
{
/* Stub */
}
/**
* Removes the current comment from the database.
* Informs interested people about the deletion.
* Returns true on success and false on failure.
*/
function delete($bSilent = false)
function delete()
{
$hResult = query_parameters("DELETE FROM appComments WHERE commentId = '?'", $this->iCommentId);
if ($hResult)
@@ -178,57 +183,11 @@ class Comment {
$hResult = query_parameters("UPDATE appComments set parentId = '?' WHERE parentId = '?'",
$this->iParentId, $this->iCommentId);
if(!$bSilent)
{
$this->SendNotificationMail("delete");
}
return true;
} else
{
addmsg("Error removing the deleted comment!", "red");
return false;
}
return false;
}
function SendNotificationMail($sAction="add", $sMsg = null)
{
global $aClean;
// use 'sReplyText' if it is defined, otherwise define the value as an empty string
if(!isset($aClean['sReplyText']))
$aClean['sReplyText'] = "";
$oApp = new Application($this->iAppId);
switch($sAction)
{
case "delete":
$sSubject = "Comment for '".version::fullName($this->iVersionId)."' deleted by ".$_SESSION['current']->sRealname;
$oVersion = new version($this->iVersionId);
$sMsg = $oVersion->objectMakeUrl()."\n";
$sMsg .= "\n";
$sMsg .= "This comment was made on ".substr($this->sDateCreated,0,10)." by ".$this->oOwner->sRealname."\n";
$sMsg .= "\n";
$sMsg .= "Subject: ".$this->sSubject."\r\n";
$sMsg .= "\n";
$sMsg .= $this->sBody."\r\n";
$sMsg .= "\n";
$sMsg .= "Because:\n";
if($sReason)
$sMsg .= $sReason."\n";
else
$sMsg .= "No reason given.\n";
addmsg("Comment deleted.", "green");
break;
}
$sEmail = User::get_notify_email_address_list($this->iAppId, $this->iVersionId);
$sEmail .= $this->oOwner->sEmail;
if($sEmail)
mail_appdb($sEmail, $sSubject, $sMsg);
}
function get_comment_count_for_versionid($iVersionId)
@@ -280,9 +239,15 @@ class Comment {
|| $_SESSION['current']->isMaintainer($oRow->versionId)
|| $_SESSION['current']->isSuperMaintainer($oRow->appId))
{
$oVersion = new version($oRow->versionId);
echo "<tr>";
echo "<td><form method=\"post\" name=\"sMessage\" action=\"".BASE."deletecomment.php\"><input type=\"submit\" value=\"Delete\" class=\"button\">\n";
echo "<input type=\"hidden\" name=\"iCommentId\" value=\"$oRow->commentId\" />";
echo "<td><form method=\"post\" name=\"sMessage\" action=\"".BASE."objectManager.php\"><input type=\"submit\" value=\"Delete\" class=\"button\">\n";
echo "<input type=\"hidden\" name=\"iId\" value=\"$oRow->commentId\" />";
echo "<input type=\"hidden\" name=\"sClass\" value=\"comment\" />";
echo "<input type=\"hidden\" name=\"bQueued\" value=\"false\" />";
echo "<input type=\"hidden\" name=\"sAction\" value=\"delete\" />";
echo "<input type=\"hidden\" name=\"sTitle\" value=\"Delete comment\" />";
echo "<input type=\"hidden\" name=\"sReturnTo\" value=\"".$oVersion->objectMakeUrl()."\" />";
echo "</form>\n";
echo "</td></tr>";
}
@@ -381,11 +346,91 @@ class Comment {
echo "</blockquote>\n";
}
}
if (!$is_main)
echo "</ul>\n";
}
function canEdit()
{
return $_SESSION['current']->hasPriv("admin");
}
function objectGetId()
{
return $this->iCommentId;
}
function objectGetSubmitterId()
{
return $this->oOwner->iUserId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
$oOptions = new mailOptions();
if($sAction == "delete" && $bParentAction)
$oOptions->bMailOnce = TRUE;
return $oOptions;
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$sSubject = "";
$sMessage = "";
$aRecipients = null;
$oVersion = new version($this->iVersionId);
$sVerName = version::fullName($this->iVersionId);
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
if($bParentAction)
{
$sSubject = "Comments for $sVerName deleted";
$sMessage = "Your comments for $sVerName were deleted because the";
$sMessage .= "version was removed from the database";
} else
{
$sSubject = "Comment for $sVerName deleted";
$sMessage = $oVersion->objectMakeUrl()."\n";
$sMessage .= "\n";
$sMessage .= "This comment was made on ".substr($this->sDateCreated,0,10)."\n";
$sMessage .= "\n";
$sMessage .= "Subject: ".$this->sSubject."\r\n";
$sMessage .= "\n";
$sMessage .= $this->sBody."\r\n";
}
break;
}
} else
{
switch($sAction)
{
case "delete":
if(!$bParentAction)
{
$sSubject = "Comment for $sVerName deleted";
$sMessage = $oVersion->objectMakeUrl()."\n";
$sMessage .= "\n";
$sMessage .= "This comment was made on ".substr($this->sDateCreated,0,10)." by ".$this->oOwner->sRealname."\n";
$sMessage .= "\n";
$sMessage .= "Subject: ".$this->sSubject."\r\n";
$sMessage .= "\n";
$sMessage .= $this->sBody."\r\n";
}
break;
}
$aRecipients = User::get_notify_email_address_list($this->iAppId, $this->iVersionId);
}
return array($sSubject, $sMessage, $aRecipients);
}
function objectGetChildren()
{
return array();

View File

@@ -141,9 +141,9 @@ class distribution {
return false;
}
}
// Delete Distributution.
function delete($bSilent=false)
function delete()
{
/* Is the current user allowed to delete this distribution? We allow
everyone to delete a queued, empty distribution, because it should be
@@ -172,16 +172,6 @@ class distribution {
if(!($hResult = query_parameters($sQuery, $this->iDistributionId)))
$bSuccess = FALSE;
if(!$bSilent)
{
$this->SendNotificationMail("delete");
if(!$bSuccess)
addmsg("Error deleting distribution", "delete");
}
$this->mailSubmitter("delete");
return $bSuccess;
}
@@ -283,6 +273,46 @@ class distribution {
return false;
}
function objectGetSubmitterId()
{
return $this->iSubmitterId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$oSubmitter = new user($this->iSubmitterId);
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
$sSubject = "Submitted distribution deleted";
$sMsg = "The distribution you submitted (".$this->sName.") has been ".
"deleted.\n";
break;
}
$aMailTo = null;
} else
{
switch($sAction)
{
case "delete":
$sSubject = "Distribution ".$this->sName." deleted";
$sMsg = "";
break;
}
$aMailTo = User::get_notify_email_address_list(null, null);
}
return array($sSubject, $sMsg, $aMailTo);
}
function mailSubmitter($sAction="add")
{
global $aClean;

View File

@@ -136,6 +136,22 @@ class downloadurl
return $sReturn;
}
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);
}
/* Process data from a Download URL form */
function ProcessForm($aValues)
{

View File

@@ -839,6 +839,77 @@ class maintainer
return $sReplyTextHelp;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$oSubmitter = new user($this->iSubmitterId);
$sVerb = $this->sQueued == "true" ? "rejected" : "removed";
if($this->bSuperMaintainer)
{
$oApp = new application($this->iAppId);
$sFor = $oApp->sName;
} else
{
$sFor = version::fullName($this->iVersionId);
}
$sMsg = null;
$sSubject = null;
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
$sSubject = "Maintainership for $sFor $sVerb";
if($this->sQueued == "true")
{
$sMsg = "Your request to be a maintainer of '$sFor'".
" has been denied.";
} else
{
$sMsg = "You have been removed as a maintainer of ".
"'$sFor'.";
}
break;
}
$aMailTo = null;
} else
{
switch($sAction)
{
case "delete":
if(!$bParentAction)
{
$sSubject = "Maintainership for $sFor $sVerb";
if($this->bQueued == "false")
{
$sMsg = $oSubmitter->sRealName." has been removed as a ".
"maintainer of $sFor.";
} else
{
$sMsg = $oSubmitter->sRealName." request to be a maintainer ".
" of $sFor has been rejected.";
}
}
break;
}
$aMailTo = User::get_notify_email_address_list(null, null);
}
return array($sSubject, $sMsg, $aMailTo);
}
function objectGetSubmitterId()
{
return $this->iUserId;
}
function objectHideDelete()
{
return TRUE;

View File

@@ -100,16 +100,75 @@ class Monitor {
}
}
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);
}
/**
* Removes the current Monitor from the database.
* Informs interested people about the deletion.
*/
function delete($bSilent=false)
function delete()
{
$hResult = query_parameters("DELETE FROM appMonitors WHERE monitorId = '?'", $this->iMonitorId);
if(!$bSilent)
$this->SendNotificationMail("delete");
if(!$hResult)
return FALSE;

View File

@@ -126,13 +126,14 @@ class Note {
*
* Returns: true if successful, false if not
*/
function delete($bSilent=false)
function delete()
{
$hResult = query_parameters("DELETE FROM appNotes WHERE noteId = '?'", $this->iNoteId);
if(!$bSilent)
$this->SendNotificationMail("delete");
return true;
if(!$hResult)
return FALSE;
return TRUE;
}
@@ -311,6 +312,22 @@ class 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);
}
function objectGetChildren()
{
return array();

View File

@@ -10,6 +10,7 @@ class ObjectManager
var $sTitle;
var $iId;
var $bIsRejected;
var $sReturnTo;
var $oMultiPage;
var $oTableRow;
@@ -335,20 +336,228 @@ class ObjectManager
"ObjectDisplayQueueProcessingHelp"));
}
/* Delete the object associated with the given id */
function delete_entry()
/* Ask whether the user really wants to delete the entry and display a delete reason box */
function delete_prompt()
{
$this->checkMethods(array("delete", "canEdit"));
$oObject = new $this->sClass($this->iId);
/* Check permissions */
if(!$oObject->canEdit())
{
echo "<font color=\"red\">You do not have permission to delete this entry.</font>\n";
return;
}
/* Check whether the object exists */
if(!$oObject->objectGetId())
{
echo "<font>There is no entry with that id in the database.</font>\n";
return;
}
$oTable = new Table();
$oTableRow = new TableRow();
$oTable->setAlign("center");
$oTable->addRow($oTableRow);
$oTableRow->addTextCell(
'<div style="left: 200px; width: 400px;" align="center" class="default_container">'.
'<div style="text-align: left;" class="info_container">'.
'<div class="title_class">'.
"Confirm deletion".
"</div>".
'<div class="info_contents">'.
"Are you sure you wish to delete this entry?<br />".
"Please enter a reason why so that you don&#8217;t hurt the submitter&#8217;s".
" feelings.".
"</div>".
"</div>".
'<form method="post" action="'.$this->makeUrl().'">'.
$this->makeUrlFormData().
'<input type="hidden" name="iId" value="'.$this->iId.'" />'.
'<textarea rows="15" cols="50" name="sReplyText"></textarea><br /><br />'.
'<input type="submit" value="Delete" name="sSubmit" class="button" />'.
"</form>".
"</div>");
echo $oTable->getString();
}
function delete_child($sReplyText, $bMailSubmitter, $bMailCommon)
{
$this->checkMethods(array("delete", "canEdit"));
$oObject = new $this->sClass($this->iId);
$oSubmitterMail = null;
$oCommonMail = null;
if(!$oObject->canEdit())
return FALSE;
if($bMailSubmitter)
$oSubmitterMail = $this->get_mail(TRUE, "delete", TRUE);
if($bMailCommon)
$oCommonMail = $this->get_mail(FALSE, "delete", TRUE);
if($oObject->delete())
util_redirect_and_exit($this->makeUrl("view", false));
else
echo "Failure.\n";
{
if($oCommonMail || $oSubmitterMail)
{
$sReplyText = "The parent entry was deleted. The reason given for ".
"that deletion was:\n$sReplyText";
if($oCommonMail)
$oCommonMail->send("delete", $sReplyText);
if($oSubmitterMail)
$oSubmitterMail->send("delete", $sReplyText);
}
return TRUE;
} else
{
return FALSE;
}
}
/* Delete the object associated with the given id */
function delete_entry($sReplyText)
{
$this->checkMethods(array("delete", "canEdit"));
$oObject = new $this->sClass($this->iId);
if(!$oObject->objectGetId())
return FALSE;
if(!$oObject->canEdit())
return FALSE;
$oSubmitterMail = $this->get_mail(TRUE, "delete");
$oCommonMail = $this->get_mail(FALSE, "delete");
$iFailed = 0;
$iDeleted = 0;
/* Delete children first, if there are any */
if(method_exists($oObject, "objectGetChildren"))
{
$aChildren = $oObject->objectGetChildren();
if(!is_array($aChildren))
{
addmsg("Failed to get child entries, aborting", "red");
util_redirect_and_exit($this->makeUrl("view", false));
}
/* Keep track of whether we should send mails. This is used by the
'mail once' option */
$aSendMailSubmitter = array();
$aSendMailCommon = array();
foreach($aChildren as $oChild)
{
if(!is_object($oChild))
{
addmsg("Failed to get child entries, aborting", "red");
util_redirect_and_exit($this->makeUrl("view", false));
}
$oM = $this->om_from_object($oChild);
if(!isset($aSendMailSubmitter[$oM->sClass][$oChild->objectGetSubmitterId()]))
$aSendMailSubmitter[$oM->sClass][$oChild->objectGetSubmitterId()] = TRUE;
if(!isset($aSendMailCommon[$oM->sClass]))
$aSendMailCommon[$oM->sClass] = TRUE;
if($oM->delete_child($sReplyText, $aSendMailSubmitter[$oM->sClass][$oChild->objectGetSubmitterId()], $aSendMailCommon[$oM->sClass]))
{
$iDeleted++;
if($oChild->objectGetMailOptions("delete", TRUE, TRUE)->bMailOnce)
$aSendMailSubmitter[$oM->sClass][$oChild->objectGetSubmitterId()] = FALSE;
if($oChild->objectGetMailOptions("delete", FALSE, TRUE)->bMailOnce)
$aSendMailCommon[$oM->sClass] = FALSE;
} else
{
$iFailed++;
}
}
}
if($oObject->delete())
{
$oCommonMail->send("delete", $sReplyText);
if($oSubmitterMail)
$oSubmitterMail->send("delete", $sReplyText);
addmsg("Entry deleted", "green");
if($iDeleted)
addmsg("Deleted $iDeleted child entries", "green");
if($iFailed)
addmsg("Failed to delete $iFailed child entries", "red");
$this->return_to_url($this->makeUrl("view", false));
} else
{
addmsg("Failed to delete entry", "red");
}
}
/* Return the user to the url specified in the objectManager object. Fall back to a
given value if the object member is not set */
function return_to_url($sFallback)
{
$sUrl = $this->sReturnTo;
if(!$sUrl)
$sUrl = $sFallback;
util_redirect_and_exit($sUrl);
}
function om_from_object($oObject)
{
return new objectManager(get_class($oObject), "", $oObject->objectGetId());
}
/* Creates a mail object using information from objectGetMail(). If bMailSubmitter
is true then we first check to see whether the submitter is the one deleting the
entry, in which case we don't send him a notification mail.
Thus it returns null if no mail is to be sent, or a Mail object otherwise.
bParentAction states whether the action was caused by a change to the parent
entry, for instance this will be true when deleting a version because we
delete its parent application. */
function get_mail($bMailSubmitter, $sAction, $bParentAction = FALSE)
{
$oObject = new $this->sClass($this->iId);
if($bMailSubmitter)
{
$iSubmitterId = $oObject->objectGetSubmitterId();
/* Should we mail the submitter? */
if($iSubmitterId && $iSubmitterId != $_SESSION['current']->iUserId)
{
return new mail($oObject->objectGetMail($sAction, $bMailSubmitter,
$bParentAction),
$iSubmitterId);
} else
{
return null;
}
} else
{
return new mail($oObject->objectGetMail("delete", $bMailSubmitter,
$bParentAction));
}
}
/* Move all the object's children to another object of the same type, and
@@ -377,7 +586,8 @@ class ObjectManager
return FALSE;
}
$this->delete_entry();
/* The argument is the reply text */
$this->delete_entry("Duplicate entry");
}
/* Display a page where the user can select which object the children of the current
@@ -542,7 +752,8 @@ class ObjectManager
$oObject->getOutputEditorValues($aClean);
/* Check input, if necessary */
if(method_exists(new $this->sClass, "checkOutputEditorInput"))
if($aClean['sSubmit'] != "Delete" &&
method_exists(new $this->sClass, "checkOutputEditorInput"))
{
$sErrors = $oObject->checkOutputEditorInput($aClean);
}
@@ -589,7 +800,7 @@ class ObjectManager
break;
case "Delete":
$this->delete_entry();
$this->delete_entry($aClean['sReplyText']);
break;
default:
@@ -655,6 +866,7 @@ class ObjectManager
$sReturn .= "<input type=\"hidden\" name=\"bIsRejected\" value=\"$sIsRejected\" />\n";
$sReturn .= "<input type=\"hidden\" name=\"sClass\" value=\"".$this->sClass."\" />\n";
$sReturn .= "<input type=\"hidden\" name=\"sTitle\" value=\"".$this->sTitle."\" />\n";
$sReturn .= "<input type=\"hidden\" name=\"sReturnTo\" value=\"".$this->sReturnTo."\" />\n";
if($this->oMultiPage->bEnabled)
{
@@ -839,4 +1051,67 @@ class MultiPage
}
}
class mailOptions
{
var $bMailOnce;
function mailOptions()
{
/* Set default options */
$this->bMailOnce = FALSE;
}
}
class mail
{
var $sSubject;
var $sMessage;
var $aRecipients;
function mail($aInput, $iRecipientId = null)
{
if(!$aInput)
return;
/* $aInput is returned from objectGetMail(); an array with the following members
0: Mail subject
1: Mail text
2: Array of recipients
If iRecipientId is set the third array member is ignored. */
$this->sSubject = $aInput[0];
$this->sMessage = $aInput[1];
if($iRecipientId)
{
$oRecipient = new user($iRecipientId);
$this->aRecipients = array($oRecipient->sEmail);
} else
{
$this->aRecipients = $aInput[2];
}
}
function send($sAction, $sReplyText)
{
/* We don't send empty mails */
if(!$this->sSubject && !$this->sMessage)
return;
$this->sMessage .= "\n";
$this->sMessage .= "The action was performed by ".$_SESSION['current']->sRealname."\n";
switch($sAction)
{
case "delete":
$this->sMessage .= "Reasons given\n";
break;
}
$this->sMessage .= $sReplyText;
mail_appdb($this->aRecipients, $this->sSubject, $this->sMessage);
}
}
?>

View File

@@ -132,7 +132,7 @@ class screenshot
*
* Returns: true if deletion was success, false if otherwise
*/
function delete($bSilent=false)
function delete()
{
/* appData has a universal function for removing database entries */
$oAppData = new appData($this->iScreenshotId, null, $this);
@@ -150,13 +150,6 @@ class screenshot
$sOriginalFilename = appdb_fullpath("/data/screenshots/originals/".$this->iScreenshotId);
if(is_file($sOriginalFilename))
unlink($sOriginalFilename);
if(!$bSilent)
$this->mailMaintainers(true);
}
if($this->iSubmitterId && ($this->iSubmitterId != $_SESSION['current']->iUserId))
{
$this->mailSubmitter(true);
}
return true;
@@ -321,6 +314,64 @@ class screenshot
return $this->oThumbnailImage->get_height();
}
function objectGetSubmitterId()
{
return $this->iSubmitterId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
$oOptions = new mailOptions();
if($sAction == "delete" && $bParentAction)
$oOptions->bMailOnce = TRUE;
return $oOptions;
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$sFor = version::fullName($this->iVersionId);
$sMsg = null;
$sSubject = null;
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
if($bParentAction)
{
$sSubject = "Submitter screenshots deleted";
$sMsg = "The screenshots you submitted for $sFor have been ".
"deleted because $sFor was deleted.";
} else
{
$sSubject = "Submitted screenshot deleted";
$sMsg = "The screenshot with description '".$this->sDescription.
"' that you submitted for $sFor has been deleted.";
}
break;
}
$aMailTo = null;
} else
{
switch($sAction)
{
case "delete":
if(!$bParentAction)
{
$sSubject = "Screenshot for $sFor deleted";
$sMsg = "The screenshot with description '".$this->sDescription.
"' for $sFor has been deleted.";
}
break;
}
$aMailTo = User::get_notify_email_address_list(null, $this->iVersionId);
}
return array($sSubject, $sMsg, $aMailTo);
}
function mailSubmitter($bRejected=false)
{

View File

@@ -209,7 +209,7 @@ class testData{
}
// Delete test results.
function delete($bSilent=false)
function delete()
{
// is the current user allowed to delete this test result?
$oVersion = new Version($this->iVersionId);
@@ -230,12 +230,6 @@ class testData{
return false;
}
if(!$bSilent)
$this->SendNotificationMail("delete");
if($this->iSubmitterId && ($this->iSubmitterId != $_SESSION['current']->iUserId))
$this->mailSubmitter("delete");
return true;
}
@@ -314,6 +308,60 @@ class testData{
}
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
$oOptions = new mailOptions();
if($sAction == "delete" && $bParentAction)
$oOptions->bMailOnce = TRUE;
return $oOptions;
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$oSubmitter = new User($this->iSubmitterId);
$sName = version::fullName($this->iVersionId);
$sMsg = null;
$sSubject = null;
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
$sSubject = "Submitted test data deleted";
if($bParentAction)
{
$sMsg = "All test data you submitted for '$sName' has ".
"been deleted because '$sName' was deleted.";
} else
{
$sMsg = "The test report you submitted for '$sName' has ".
"been deleted.";
}
break;
}
$aMailTo = nulL;
} else
{
switch($sAction)
{
case "delete":
if(!$bParentAction)
{
$sSubject = "Test Results deleted for $sName by ".
$_SESSION['current']->sRealname;
$sMsg = "";
}
break;
}
$aMailTo = User::get_notify_email_address_list(null, $this->iVersionId);
}
return array($sSubject, $sMsg, $aMailTo);
}
function mailSubmitter($sAction="add")
{
global $aClean;
@@ -343,12 +391,6 @@ class testData{
$sMsg .= $this->objectMakeUrl()."\n";
$sMsg .= "Reason given:\n";
break;
case "delete":
$sSubject = "Submitted testing data deleted";
$sMsg = "The testing data you submitted for '$sName' has ".
"been deleted by ".$_SESSION['current']->sRealname.".";
$sMsg .= "Reason given:\n";
break;
}
$sMsg .= $aClean['sReplyText']."\n";
$sMsg .= "We appreciate your help in making the Application ".
@@ -400,17 +442,6 @@ class testData{
$sMsg .= $sBacklink;
addmsg("test data modified.", "green");
break;
case "delete":
$sSubject = "Test Results deleted for version ".$oVersion->sName." of ".$oApp->sName." by ".$_SESSION['current']->sRealname;
// if replyText is set we should report the reason the data was deleted
if($aClean['sReplyText'])
{
$sMsg .= "Reason given:\n";
$sMsg .= $aClean['sReplyText']."\n"; // append the reply text, if there is any
}
addmsg("test data deleted.", "green");
break;
case "reject":
$sSubject = "Test Results rejected for version ".$oVersion->sName." of ".$oApp->sName." by ".$_SESSION['current']->sRealname;
$sMsg .= $sBacklink;
@@ -1140,6 +1171,11 @@ class testData{
{
return $this->iTestingId;
}
function objectGetSubmitterId()
{
return $this->iSubmitterId;
}
}
?>

View File

@@ -177,6 +177,26 @@ class testData_queue
{
return $this->oTestData->objectGetId();
}
function objectGetSubmitterId()
{
return $this->oTestData->objectGetSubmitterId();
}
function objectGetChildren()
{
return $this->oTestData->objectGetChildren();
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return $this->oTestData->objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction);
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
return $this->oTestData->objectGetMail($sAction, $bMailSubmitter, $bParentAction);
}
}
?>

View File

@@ -91,7 +91,7 @@ class Url {
* Deletes the url from the database.
* and request its deletion from the filesystem (including the thumbnail).
*/
function delete($bSilent=false)
function delete()
{
$sQuery = "DELETE FROM appData
WHERE id = '?'
@@ -100,15 +100,6 @@ class Url {
if(!$hResult = query_parameters($sQuery, $this->iUrlId))
return false;
if(!$bSilent)
$this->SendNotificationMail(true);
if($this->iSubmitterId &&
$this->iSubmitterId != $_SESSION['current']->iUserId)
{
$this->mailSubmitter(true);
}
return true;
}
@@ -255,11 +246,6 @@ class Url {
addmsg("The url you submitted will be added to the database ".
"database after being reviewed.", "green");
}
} else // Url deleted.
{
$sSubject = "Url for $sAppName deleted by ".$_SESSION['current']->sRealname;
$sMsg = "$sUrl\n";
addmsg("Url deleted.", "green");
}
$sEmail = User::get_notify_email_address_list(null, $this->iVersionId);
@@ -456,7 +442,7 @@ class Url {
return TRUE;
}
function canEdit($iVersionId, $iAppId = NULL)
function canEdit($iVersionId = NULL, $iAppId = NULL)
{
if($_SESSION['current']->hasPriv("admin"))
return TRUE;
@@ -499,6 +485,27 @@ class Url {
return $sReturn;
}
function objectGetId()
{
return $this->iUrlId;
}
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);
}
function objectGetChildren()
{
return array();

View File

@@ -149,19 +149,18 @@ class Vendor {
/**
* Deletes the vendor from the database.
*/
function delete($bSilent=false)
function delete()
{
if(sizeof($this->aApplicationsIds)>0)
{
addmsg("The vendor has not been deleted because there are still applications linked to it.", "red");
} else
return FALSE;
} else
{
$sQuery = "DELETE FROM vendor
WHERE vendorId = '?'
LIMIT 1";
if(query_parameters($sQuery, $this->iVendorId))
{
addmsg("The vendor has been deleted.", "green");
return TRUE;
}
@@ -292,6 +291,29 @@ class Vendor {
return TRUE;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetChildren()
{
/* We don't have any */
return array();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
/* We don't send notification mails */
return array(null, null, null);
}
function objectGetSubmitterId()
{
/* We don't record the submitter id */
return NULL;
}
function getOutputEditorValues($aClean)
{
$this->sName = $aClean['sVendorName'];

View File

@@ -231,7 +231,7 @@ class version {
* Deletes the version from the database.
* and request the deletion of linked elements.
*/
function delete($bSilent=false)
function delete()
{
/* We need the versionId to continue */
if(!$this->iVersionId)
@@ -256,19 +256,9 @@ class version {
if(!$hResult)
$bSuccess = FALSE;
$this->mailSubmitter("delete");
if(!$bSilent)
{
if(!$bSuccess)
addmsg("Error removing version", "red");
$this->SendNotificationMail("delete");
}
return $bSuccess;
}
/**
* Move version out of the queue.
*/
@@ -344,6 +334,46 @@ class version {
}
}
function objectGetSubmitterId()
{
return $this->iSubmitterId;
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return new mailOptions();
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
$oApp = new application($this->iAppId);
if($bMailSubmitter)
{
switch($sAction)
{
case "delete":
$sSubject = "Submitted version deleted";
$sMsg = "The version you submitted (".$oApp->sName." ".$this->sName.
") has been deleted.";
break;
}
$aMailTo = null;
} else
{
switch($sAction)
{
case "delete":
$sSubject = "Version '".$this->sName."' of '".$oApp->sName."' ".
"deleted";
$sMsg = "";
break;
}
$aMailTo = User::get_notify_email_address_list(null, $this->iVersionId);
}
return array($sSubject, $sMsg, $aMailTo);
}
function mailSubmitter($sAction="add")
{
global $aClean; //FIXME: we should pass the sReplyText value in
@@ -372,11 +402,6 @@ class version {
"&bIsQueue=true&bIsRejected=true&iId=".$this->iVersionId."&".
"sTitle=Edit+Version\n";
break;
case "delete":
$sSubject = "Submitted version deleted";
$sMsg = "The version you submitted (".$oApp->sName." ".$this->sName.") has been deleted by ".$_SESSION['current']->sRealname.".";
$sMsg .= "Reason given:\n";
break;
}
$sMsg .= $aClean['sReplyText']."\n";
$sMsg .= "We appreciate your help in making the Version Database better for all users.";
@@ -428,7 +453,6 @@ class version {
addmsg("Version modified.", "green");
break;
case "delete":
$sSubject = "Version '".$this->sName."' of '".$oApp->sName."' has been deleted by ".$_SESSION['current']->sRealname;
// if sReplyText is set we should report the reason the application was deleted
if($aClean['sReplyText'])
@@ -851,8 +875,8 @@ class version {
echo "\t".'<input type="hidden" name="iVersionId" value="'.$this->iVersionId.'" />'."\n";
echo "\t".'<input type=submit value="Edit Version" class="button" />'."\n";
echo '</form>'."\n";
$url = BASE."admin/deleteAny.php?sWhat=appVersion&amp;iAppId=".$oApp->iAppId."&amp;iVersionId=".$this->iVersionId."&amp;sConfirmed=yes";
echo "<form method=\"post\" name=\"sDelete\" action=\"javascript:deleteURL('Are you sure?', '".$url."')\">\n";
$url = BASE."objectManager.php?sClass=version&sAction=delete&bQueued=false&sTitle=Delete%20".version::fullName($this->iVersionId)."&iId=".$this->iVersionId;
echo "<form method=\"post\" name=\"sDelete\" action=\"javascript:self.location = '".$url."'\">\n";
echo "\t".'<input type=submit value="Delete Version" class="button" />'."\n";
echo '</form>'."\n";
echo '<form method="post" name="message" action="admin/addAppNote.php">'."\n";
@@ -975,7 +999,7 @@ class version {
$oNote = new Note($oRow->noteId);
$oNote->display();
}
// Comments Section
Comment::view_app_comments($this->iVersionId);
}

View File

@@ -97,6 +97,26 @@ class version_queue
$this->oDownloadUrl->unQueue();
}
function objectGetSubmitterId()
{
return $this->oVersion->objectGetSubmitterId();
}
function objectGetChildren()
{
return $this->oVersion->objectGetChildren();
}
function objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction)
{
return $this->oVersion->objectGetMailOptions($sAction, $bMailSubmitter, $bParentAction);
}
function objectGetMail($sAction, $bMailSubmitter, $bParentAction)
{
return $this->oVersion->objectGetMail($sAction, $bMailSubmitter, $bParentAction);
}
function outputEditor()
{
global $aClean;

View File

@@ -48,6 +48,9 @@ if(isset($aClean['bIsQueue']) && $aClean['bIsQueue'] == 'true')
else
$oObject->bIsQueue = false;
if(isset($aClean['sReturnTo']))
$oObject->sReturnTo = $aClean['sReturnTo'];
$aClean['bIsRejected'] = isset($aClean['bIsRejected']) ? $aClean['bIsRejected'] : false;
/* If it is rejected it is defined as queued */
if($aClean['bIsRejected'] == 'true')
@@ -68,11 +71,6 @@ $oOtherObject = new $oObject->sClass($oObject->iId);
on failure */
$sErrors = $oObject->processForm($aClean);
if($oObject->iId && $aClean['sAction'] == "delete")
{
$oObject->delete_entry();
}
if(isset($aClean['sAction']) && $aClean['sAction'] == "add")
$oObject->handle_anonymous_submission();
@@ -100,6 +98,10 @@ if($oObject->iId)
$oObject->display_move_children();
break;
case "delete":
$oObject->delete_prompt();
break;
default:
$oObject->view($_SERVER['REQUEST_URI']);
break;

View File

@@ -260,9 +260,13 @@ function test_object_methods()
"canEdit",
"display",
"getOutputEditorValues",
"objectGetChildren",
"objectGetEntries",
"objectGetHeader",
"objectGetId",
"objectGetMail",
"objectGetMailOptions",
"objectGetSubmitterId",
"objectGetTableRow",
"objectMakeLink",
"objectMakeUrl",