Module: appdb Branch: master Commit: 70e4306e2bfd65b2731fdf7aa82589fa93f1aa0b URL: http://source.winehq.org/git/appdb.git/?a=commit;h=70e4306e2bfd65b2731fdf7aa...
Author: Alexander Nicolaysen Sørnes alex@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); }