Alexander Nicolaysen Sørnes : bug: Allow admins to only show queued links for versions they maintain

Alexander Nicolaysen Sørnes asornes at winehq.org
Fri Jan 1 08:25:19 CST 2010


Module: appdb
Branch: master
Commit: a45cbc01130b5dae9390cea2183a24c3b5bf37cf
URL:    http://source.winehq.org/git/appdb.git/?a=commit;h=a45cbc01130b5dae9390cea2183a24c3b5bf37cf

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Fri Jan  1 15:24:41 2010 +0100

bug: Allow admins to only show queued links for versions they maintain

---

 include/bugs.php |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 104 insertions(+), 8 deletions(-)

diff --git a/include/bugs.php b/include/bugs.php
index 9f59fa9..b07a3ca 100644
--- a/include/bugs.php
+++ b/include/bugs.php
@@ -406,6 +406,7 @@ class Bug
             return null;
 
         $oFilter->AddFilterInfo('onlyWithoutMaintainers', 'Only show bug links for versions without maintainers', array(FILTER_OPTION_BOOL), FILTER_VALUES_OPTION_BOOL, array('false','true'));
+        $oFilter->AddFilterInfo('onlyMyMaintainedEntries', 'Only show bug links for versions you maintain', array(FILTER_OPTION_BOOL), FILTER_VALUES_OPTION_BOOL, array('false','true'));
 
         return $oFilter;
     }
@@ -413,8 +414,24 @@ class Bug
     function objectGetEntries($sState, $iRows = 0, $iStart = 0, $sOrderBy = '', $bAscending = true, $oFilters = null)
     {
         $sExtraTables = '';
-        $aOptions = $oFilters ? $oFilters->getOptions() : array('onlyWithoutMaintainers' => 'false');
+        $aOptions = $oFilters ? $oFilters->getOptions() : array('onlyWithoutMaintainers' => 'false', 'onlyMyMaintainedEntries' => 'false');
         $sWhereFilter = '';
+        $bOnlyMyMaintainedEntries = false;
+
+        $oBug = new bug();
+
+        if(getInput('onlyMyMaintainedEntries', $aOptions) == 'true'
+           || ($sState != 'accepted' && !$oBug->canEdit()))
+        {
+            $bOnlyMyMaintainedEntries = true;
+        }
+
+        /* This combination doesn't make sense */
+        if(getInput('onlyWithoutMaintainers', $aOptions) == 'true'
+           && getInput('onlyMyMaintainedEntries', $aOptions) == 'true')
+        {
+            return false;
+        }
 
         if(getInput('onlyWithoutMaintainers', $aOptions) == 'true')
         {
@@ -423,24 +440,70 @@ class Bug
             $sWhereFilter .= " AND appVersion.hasMaintainer = 'false' AND appVersion.versionId = buglinks.versionId";
         }
 
-        $sLimit = "";
-        
         /* Selecting 0 rows makes no sense, so we assume the user
          wants to select all of them
          after an offset given by iStart */
         if(!$iRows)
           $iRows = bug::objectGetEntriesCount($sState, $oFilters);
 
-        $sQuery = "select * from buglinks$sExtraTables where buglinks.state = '?'$sWhereFilter LIMIT ?, ?";
-        $hResult = query_parameters($sQuery, $sState, $iStart, $iRows);
+        if($bOnlyMyMaintainedEntries)
+        {
+            $sQuery = "SELECT buglinks.* FROM buglinks, appVersion,
+                        appMaintainers WHERE
+                        buglinks.versionId = appVersion.versionId
+                        AND
+                        appMaintainers.userId = '?'
+                        AND
+                        (
+                            (
+                                appMaintainers.superMaintainer = '1'
+                                AND
+                                appMaintainers.appId = appVersion.appid
+                            )
+                            OR
+                            (
+                                appMaintainers.superMaintainer = '0'
+                                AND
+                                appMaintainers.versionId = appVersion.versionId
+                            )
+                        )
+                        AND
+                        appMaintainers.state = 'accepted'
+                        AND
+                        buglinks.state = '?'$sWhereFilter LIMIT ?,?";
+
+            $hResult = query_parameters($sQuery, $_SESSION['current']->iUserId,
+                                        $sState, $iStart, $iRows);
+        } else
+        {
+            $sQuery = "select * from buglinks$sExtraTables where buglinks.state = '?'$sWhereFilter LIMIT ?, ?";
+            $hResult = query_parameters($sQuery, $sState, $iStart, $iRows);
+        }
+
         return $hResult;
     }
 
     function objectGetEntriesCount($sState, $oFilters = null)
     {
         $sExtraTables = '';
-        $aOptions = $oFilters ? $oFilters->getOptions() : array('onlyWithoutMaintainers' => 'false');
+        $aOptions = $oFilters ? $oFilters->getOptions() : array('onlyWithoutMaintainers' => 'false', 'onlyMyMaintainedEntries' => 'false');
         $sWhereFilter = '';
+        $bOnlyMyMaintainedEntries = false;
+
+        $oBug = new bug();
+
+        if(getInput('onlyMyMaintainedEntries', $aOptions) == 'true'
+           || ($sState != 'accepted' && !$oBug->canEdit()))
+        {
+            $bOnlyMyMaintainedEntries = true;
+        }
+
+        /* This combination doesn't make sense */
+        if(getInput('onlyWithoutMaintainers', $aOptions) == 'true'
+           && getInput('onlyMyMaintainedEntries', $aOptions) == 'true')
+        {
+            return false;
+        }
 
         if(getInput('onlyWithoutMaintainers', $aOptions) == 'true')
         {
@@ -449,9 +512,42 @@ class Bug
             $sWhereFilter .= " AND appVersion.hasMaintainer = 'false' AND appVersion.versionId = buglinks.versionId";
         }
 
-        $sQuery = "select count(*) as cnt from buglinks$sExtraTables where buglinks.state = '?'$sWhereFilter";
-        $hResult = query_parameters($sQuery, $sState);
+        if($bOnlyMyMaintainedEntries)
+        {
+            $sQuery = "SELECT COUNT(buglinks.linkId) as cnt FROM buglinks, appVersion,
+                        appMaintainers WHERE
+                        buglinks.versionId = appVersion.versionId
+                        AND
+                        appMaintainers.userId = '?'
+                        AND
+                        (
+                            (
+                                appMaintainers.superMaintainer = '1'
+                                AND
+                                appMaintainers.appId = appVersion.appid
+                            )
+                            OR
+                            (
+                                appMaintainers.superMaintainer = '0'
+                                AND
+                                appMaintainers.versionId = appVersion.versionId
+                            )
+                        )
+                        AND
+                        appMaintainers.state = 'accepted'
+                        AND
+                        buglinks.state = '?'$sWhereFilter";
+
+            $hResult = query_parameters($sQuery, $_SESSION['current']->iUserId,
+                                        $sState);
+        } else
+        {
+            $sQuery = "select count(*) as cnt from buglinks$sExtraTables where buglinks.state = '?'$sWhereFilter";
+            $hResult = query_parameters($sQuery, $sState);
+        }
+
         $oRow = mysql_fetch_object($hResult);
+
         return $oRow->cnt;
     }
 




More information about the wine-cvs mailing list