Alexander Nicolaysen Sørnes : objectManager: Support purging rejected entries
Chris Morgan
cmorgan at winehq.org
Mon Nov 5 20:31:57 CST 2007
Module: appdb
Branch: master
Commit: 70e4306e2bfd65b2731fdf7aa82589fa93f1aa0b
URL: http://source.winehq.org/git/appdb.git/?a=commit;h=70e4306e2bfd65b2731fdf7aa82589fa93f1aa0b
Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date: Mon Nov 5 18:38:06 2007 +0100
objectManager: Support purging rejected entries
---
include/application.php | 10 +++
include/application_queue.php | 10 +++
include/objectManager.php | 126 +++++++++++++++++++++++++++++++++++++----
include/testData.php | 10 +++
include/testData_queue.php | 10 +++
include/version.php | 10 +++
include/version_queue.php | 10 +++
objectManager.php | 9 +++
8 files changed, 184 insertions(+), 11 deletions(-)
diff --git a/include/application.php b/include/application.php
index 9bab415..99b1e22 100644
--- a/include/application.php
+++ b/include/application.php
@@ -1180,6 +1180,16 @@ class Application {
return FALSE;
}
+ function objectAllowPurgingRejected()
+ {
+ return TRUE;
+ }
+
+ public function objectGetSubmitTime()
+ {
+ return mysqltimestamp_to_unixtimestamp($this->sSubmitTime);
+ }
+
public function objectGetId()
{
return $this->iAppId;
diff --git a/include/application_queue.php b/include/application_queue.php
index 93e1171..6fa7123 100644
--- a/include/application_queue.php
+++ b/include/application_queue.php
@@ -400,6 +400,16 @@ class application_queue
return application::allowAnonymousSubmissions();
}
+ function objectAllowPurgingRejected()
+ {
+ return $this->oApp->objectAllowPurgingRejected();
+ }
+
+ public function objectGetSubmitTime()
+ {
+ return $this->oApp->objectGetSubmitTime();
+ }
+
function objectGetId()
{
return $this->oApp->objectGetId();
diff --git a/include/objectManager.php b/include/objectManager.php
index 9350891..02f40e5 100644
--- a/include/objectManager.php
+++ b/include/objectManager.php
@@ -220,6 +220,15 @@ class ObjectManager
return;
}
+ /* Show a link to the 'purge rejected entries' page if we are an admin */
+ if($_SESSION['current']->hasPriv('admin') && $this->getOptionalSetting('objectAllowPurgingRejected', FALSE))
+ {
+ echo '<div align="center">';
+ $oM = new objectManager($this->sClass, 'Purge Rejected Entries');
+ echo '<a href="'.$oM->makeUrl('purgeRejected').'">Purge rejected entries</a><br /><br />';
+ echo '</div>';
+ }
+
/* output the header */
echo '<table width="100%" border="0" cellpadding="3" cellspacing="0">';
@@ -520,8 +529,9 @@ class ObjectManager
}
}
- /* Delete the object associated with the given id */
- public function delete_entry($sReplyText)
+ /* Delete the object associated with the given id
+ bStandAlone determines whether this is a stand alone delete operation, where we want to output messages and return */
+ public function delete_entry($sReplyText, $bStandAlone = true)
{
$this->checkMethods(array("delete", "canEdit"));
@@ -603,19 +613,25 @@ class ObjectManager
if($oSubmitterMail)
$oSubmitterMail->send("delete", $sReplyText);
- addmsg("Entry deleted", "green");
+ if($bStandAlone)
+ {
+ addmsg("Entry deleted", "green");
- if($iDeleted)
- addmsg("Deleted $iDeleted child entries", "green");
+ if($iDeleted)
+ addmsg("Deleted $iDeleted child entries", "green");
- if($iFailed)
- addmsg("Failed to delete $iFailed child entries", "red");
+ 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");
+ $this->return_to_url($this->makeUrl("view", false));
+ }
+ return TRUE;
}
+
+ if($bStandAlone)
+ addmsg("Failed to delete entry", "red");
+
+ return FALSE;
}
/* Return the user to the url specified in the objectManager object. Fall back to a
@@ -667,6 +683,94 @@ class ObjectManager
}
}
+ /* Purge rejected entries, optionally by date */
+ public function purgeRejected($aClean)
+ {
+ if(!$_SESSION['current']->hasPriv("admin"))
+ {
+ addmsg("Insufficient privileges", "red");
+ return FALSE;
+ }
+
+ if(!$this->getOptionalSetting("objectAllowPurgingRejected", FALSE))
+ {
+ addmsg("Purging rejected entries is not allowed for this object type");
+ return FALSE;
+ }
+
+ $oObject = $this->getObject();
+
+ $hResult = $oObject->objectGetEntries(true, true);
+
+ if(!$hResult)
+ {
+ addmsg("Failed to get list of rejected entries", "red");
+ return FALSE;
+ }
+
+ if($aClean['bTimeLimit'] == 'true')
+ $iSubmittedBefore = mysqltimestamp_to_unixtimestamp($aClean['sSubmittedBefore']);
+ else
+ $iSubmittedBefore = 0;
+
+ $iDeleted = 0;
+ $iFailed = 0;
+
+ if($sSubmittedBefore)
+ $sMailWord = "old";
+ else
+ $sMailWord = "all";
+
+ while($oRow = mysql_fetch_object($hResult))
+ {
+ $oObject = new $this->sClass(null, $oRow);
+
+ if(!$iSubmittedBefore || $oObject->objectGetSubmitTime() < $iSubmittedBefore)
+ {
+ $oM = new objectManager($this->sClass, "", $oObject->objectGetId());
+ if($oM->delete_entry("Purging $sMailWord rejected entries", false))
+ $iDeleted++;
+ else
+ $iFailed++;
+ }
+ }
+
+ if($iFailed)
+ addmsg("Failed to delete $iFailed entries", 'red');
+
+ $sNoun = ($iDeleted == 1) ? 'entry' : 'entries';
+
+ if($iDeleted)
+ addmsg("Deleted $iDeleted $sNoun", 'green');
+
+ $this->return_to_url(APPDB_ROOT);
+ }
+
+ public function displayPurgeRejected()
+ {
+ if(!$_SESSION['current']->hasPriv("admin"))
+ {
+ $this->error_exit('Only admins can do this');
+ return FALSE;
+ }
+
+ if(!$this->getOptionalSetting("objectAllowPurgingRejected", FALSE))
+ {
+ $this->error_exit('Purging rejected entries is not allowed for this object type');
+ return FALSE;
+ }
+
+ echo '<form action="objectManager.php" action="post" />';
+ echo 'Purge rejected entries of this type<br />';
+ echo '<input type="checkbox" value="true" name="bTimeLimit" /> ';
+ echo 'Only entries submitted before ';
+ echo '<input type="text" name="sSubmittedBefore" size="25" value="'.date('Y-m-d H:i:s').'" /><br /><br />';
+ echo '<input type="hidden" name="sAction" value="doPurgeRejected" />';
+ echo $this->makeUrlFormData();
+ echo '<input type="submit" value="Purge" />';
+ echo '</form>';
+ }
+
/* Move all the object's children to another object of the same type, and
delete the original object afterwards */
public function move_children($iNewId)
diff --git a/include/testData.php b/include/testData.php
index 03bd92d..0605c81 100644
--- a/include/testData.php
+++ b/include/testData.php
@@ -1213,6 +1213,16 @@ class testData{
return FALSE;
}
+ function objectAllowPurgingRejected()
+ {
+ return TRUE;
+ }
+
+ public function objectGetSubmitTime()
+ {
+ return mysqltimestamp_to_unixtimestamp($this->sSubmitTime);
+ }
+
function objectGetItemsPerPage($bQueued = false)
{
$aItemsPerPage = array(25, 50, 100, 200);
diff --git a/include/testData_queue.php b/include/testData_queue.php
index 190d19e..9e492bc 100644
--- a/include/testData_queue.php
+++ b/include/testData_queue.php
@@ -173,6 +173,16 @@ class testData_queue
return testData::allowAnonymousSubmissions();
}
+ function objectAllowPurgingRejected()
+ {
+ return $this->oTestData->objectAllowPurgingRejected();
+ }
+
+ public function objectGetSubmitTime()
+ {
+ return $this->oTestData->objectGetSubmitTime();
+ }
+
function objectGetItemsPerPage($bQueued = false)
{
return testData::objectGetItemsPerPage($bQueued);
diff --git a/include/version.php b/include/version.php
index 3984a1e..2cfc2df 100644
--- a/include/version.php
+++ b/include/version.php
@@ -1796,6 +1796,16 @@ class version {
return FALSE;
}
+ function objectAllowPurgingRejected()
+ {
+ return TRUE;
+ }
+
+ public function objectGetSubmitTime()
+ {
+ return mysqltimestamp_to_unixtimestamp($this->sSubmitTime);
+ }
+
public function objectGetId()
{
return $this->iVersionId;
diff --git a/include/version_queue.php b/include/version_queue.php
index 4451586..007296a 100644
--- a/include/version_queue.php
+++ b/include/version_queue.php
@@ -299,6 +299,16 @@ class version_queue
return version::allowAnonymousSubmissions();
}
+ function objectAllowPurgingRejected()
+ {
+ return $this->oVersion->objectAllowPurgingRejected();
+ }
+
+ public function objectGetSubmitTime()
+ {
+ return $this->oVersion->objectGetSubmitTime();
+ }
+
function objectGetId()
{
return $this->oVersion->objectGetId();
diff --git a/objectManager.php b/objectManager.php
index 46894d8..526f291 100644
--- a/objectManager.php
+++ b/objectManager.php
@@ -95,6 +95,11 @@ if($sAction)
if($oObject->getId() && $aClean['iNewId'])
$oObject->move_children($aClean['iNewId']);
break;
+
+ case 'doPurgeRejected':
+ /* Purge some or all rejected entries */
+ $oObject->purgeRejected($aClean);
+ break;
}
}
@@ -140,6 +145,10 @@ if($oObject->getId() && $sAction != "add")
$oObject->add_entry($aClean, $sErrors);
break;
+ case 'purgeRejected':
+ $oObject->displayPurgeRejected();
+ break;
+
default:
$oObject->display_table($aClean);
}
More information about the wine-cvs
mailing list