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