\n";
diff --git a/include/maintainer.php b/include/maintainer.php
index efca3b5..6096c7f 100644
--- a/include/maintainer.php
+++ b/include/maintainer.php
@@ -3,24 +3,493 @@
/* functions for maintainers */
/*****************************/
-/*
- * get the userIds of super maintainers for this appId
- */
-function getSuperMaintainersUserIdsFromAppId($iAppId)
+class maintainer
{
- $sQuery = "SELECT userId FROM ".
- "appMaintainers WHERE appId = '?' " .
- "AND superMaintainer = '1' AND queued='?';";
- $hResult = query_parameters($sQuery, $iAppId, "false");
- $retval = array();
- $c = 0;
- while($oRow = mysql_fetch_object($hResult))
+ var $iMaintainerId;
+ var $iAppId;
+ var $iVersionId;
+ var $iUserId;
+ var $sMaintainReason;
+ var $bSuperMaintainer;
+ var $aSubmitTime;
+ var $bQueued;
+
+ function maintainer($iMaintainerId = "")
{
- $retval[$c] = $oRow->userId;
- $c++;
+ $sQuery = "SELECT * FROM appMaintainers WHERE maintainerId = '?'";
+ $hResult = query_parameters($sQuery, $iMaintainerId);
+ if($hResult)
+ {
+ $oRow = mysql_fetch_object($hResult);
+ $this->iMaintainerId = $oRow->maintainerId;
+ $this->iAppId = $oRow->appId;
+ $this->iVersionId = $oRow->versionId;
+ $this->iUserId = $oRow->userId;
+ $this->sMaintainReason = $oRow->maintainReason;
+ $this->bSuperMaintainer = $oRow->superMaintainer;
+ $this->aSubmitTime = $oRow->submitTime;
+ $this->bQueued = $oRow->queued;
+ }
}
- return $retval;
-}
+ function create()
+ {
+ /* user id, appid, and maintain reason must be valid to continue */
+ if(!$this->iUserId || !$this->iAppId || !$this->sMaintainReason)
+ return NULL;
+
+ $hResult = query_parameters("INSERT INTO appMaintainers (appId, versionId, ".
+ "userId, maintainReason, superMaintainer, submitTime, queued) ".
+ "VALUES ('?', '?', '?', '?', '?', ?, '?')",
+ $this->iAppId, $this->iVersionId,
+ $this->iUserId, $this->sMaintainReason,
+ $this->bSuperMaintainer, "NOW()", 'true');
+
+ /* this objects id is the insert id returned by mysql */
+ $this->iMaintainerId = mysql_insert_id();
+
+ return $hResult;
+ }
+
+ function unQueue($sReplyText)
+ {
+ /* if the user isn't already a supermaintainer of the application and */
+ /* if they are trying to become a maintainer and aren't already a maintainer of */
+ /* the version, then continue processing the request */
+
+ $oUser = new User($this->iUserId);
+
+ if(!$oUser->isSuperMaintainer($this->iAppId) &&
+ ((!$this->bSuperMaintainer && !$oUser->isMaintainer($this->iVersionId)) | $this->bSuperMaintainer))
+ {
+ /* unqueue the maintainer entry */
+ $hResult = query_parameters("UPDATE appMaintainers SET queued='false' WHERE userId = '?' AND maintainerId = '?'",
+ $this->iUserId, $this->iMaintainerId);
+
+ if($hResult)
+ {
+ $sStatusMessage = "The maintainer was successfully added into the database \n";
+
+ $oApp = new Application($iAppId);
+ $oVersion = new Version($iVersionId);
+ //Send Status Email
+ $sEmail = $oUser->sEmail;
+ if ($sEmail)
+ {
+ $sSubject = "Application Maintainer Request Report";
+ $sMsg = "Your application to be the maintainer of ".$oApp->sName." ".$oVersion->sName." has been accepted. ";
+ $sMsg .= $sReplyText;
+ $sMsg .= "We appreciate your help in making the Application Database better for all users.\n\n";
+
+ mail_appdb($sEmail, $sSubject ,$sMsg);
+ }
+ }
+ } else
+ {
+ //delete the item from the queue
+ query_parameters("DELETE from appMaintainers WHERE userId = '?' AND maintainerId = '?'",
+ $this->iUserId, $this->iMaintainerId);
+
+ if($oUser->isSuperMaintainer($this->iAppId) && !$this->bSuperMaintainer)
+ $sStatusMessage = "User is already a super maintainer of this application \n";
+ else
+ $sStatusMessage = "User is already a maintainer/super maintainer of this application/version \n";
+ }
+
+ return $sStatusMessage;
+ }
+
+ function reject($sReplyText)
+ {
+ $oUser = new User($this->iUserId);
+ $sEmail = $oUser->sEmail;
+ if ($sEmail)
+ {
+ $oApp = new Application($oRow->appId);
+ $oVersion = new Version($oRow->versionId);
+ $sSubject = "Application Maintainer Request Report";
+ $sMsg = "Your application to be the maintainer of ".$oApp->sName." ".$oVersion->sName." was rejected. ";
+ $sMsg .= $sReplyText;
+ $sMsg .= "";
+ $sMsg .= "-The AppDB admins\n";
+
+ mail_appdb($sEmail, $sSubject ,$sMsg);
+ }
+
+ //delete main item
+ $sQuery = "DELETE from appMaintainers where maintainerId = '?'";
+ $hResult = query_parameters($sQuery, $this->iMaintainerId);
+
+ return $hResult;
+ }
+
+ function delete()
+ {
+ $sQuery = "DELETE from appMaintainers where maintainerId = '?'";
+ query_parameters($sQuery, $this->iMaintainerId);
+ }
+
+ function deleteMaintainer($oUser, $iAppId = null, $iVersionId = null)
+ {
+ /* remove supermaintainer */
+ if($iAppId && ($iVersionId == null))
+ {
+ $superMaintainer = 1;
+ $hResult = query_parameters("DELETE FROM appMaintainers WHERE userId = '?'
+ AND appId = '?' AND superMaintainer = '?'",
+ $oUser->iUserId, $iAppId, $superMaintainer);
+ } else if($iAppId && $iVersionId) /* remove a normal maintainer */
+ {
+ $superMaintainer = 0;
+ $hResult = query_parameters("DELETE FROM appMaintainers WHERE userId = '?'
+ AND appId = '?' AND versionId = '?' AND superMaintainer = '?'",
+ $oUser->iUserId, $iAppId, $iVersionId, $superMaintainer);
+ } else if(($iAppId == null) && ($iVersionId == null)) /* remove all maintainership by this user */
+ {
+ $hResult = query_parameters("DELETE FROM appMaintainers WHERE userId = '?'",
+ $oUser->iUserId);
+ }
+
+ if($hResult)
+ return true;
+
+ return false;
+ }
+
+ function deleteMaintainersForVersion($oVersion)
+ {
+ $hResult = query_parameters("DELETE from appMaintainers WHERE versionId='?'",
+ $oVersion->iVersionId);
+ }
+
+ function deleteMaintainersForApplication($oApp)
+ {
+ $sQuery = "DELETE from appMaintainers WHERE appId='?'";
+ $hResult = query_parameters($sQuery, $oApp->iAppId);
+ return $hResult;
+ }
+
+ function ObjectGetEntries($bQueued)
+ {
+ if($bQueued)
+ $sQuery = "SELECT maintainerId FROM appMaintainers, user_list WHERE appMaintainers.userid = user_list.userid ".
+ "AND queued = '?' ORDER by submitTime";
+ else
+ $sQuery = "SELECT maintainerId FROM appMaintainers, user_list WHERE appMaintainers.userid = user_list.userid ".
+ "AND queued = '?' ORDER by realname";
+
+ if($bQueued)
+ {
+ if($_SESSION['current']->hasPriv("admin"))
+ return query_parameters($sQuery, $bQueued ? "true" : "false");
+ else
+ return NULL;
+ } else
+ {
+ return query_parameters($sQuery, $bQueued ? "true" : "false");
+ }
+ }
+
+ /* retrieve a maintainer object from a row returned by */
+ /* ObjectGetEntries() */
+ function ObjectGetObjectFromObjectGetEntriesRow($oRow)
+ {
+ return new maintainer($oRow->maintainerId);
+ }
+
+ function getMaintainerCountForUser($oUser, $bSuperMaintainer)
+ {
+ $sQuery = "SELECT count(*) as cnt from appMaintainers WHERE userid = '?' AND superMaintainer = '?'".
+ " AND queued ='?'";
+ $hResult = query_parameters($sQuery, $oUser->iUserId, $bSuperMaintainer ? "1" : "0", "false");
+ if(!$hResult)
+ return 0;
+ $oRow = mysql_fetch_object($hResult);
+ return $oRow->cnt;
+ }
+
+ /**
+ * get the applications and versions that this user maintains
+ */
+ function getAppsMaintained($oUser)
+ {
+ /* retrieve the list of application and order them by application name */
+ $hResult = query_parameters("SELECT appMaintainers.appId, versionId, superMaintainer, appName FROM ".
+ "appFamily, appMaintainers WHERE appFamily.appId = appMaintainers.appId ".
+ "AND userId = '?' AND appMaintainers.queued = '?' ORDER BY appName",
+ $oUser->iUserId, "false");
+ if(!$hResult || mysql_num_rows($hResult) == 0)
+ return NULL;
+
+ $aAppsMaintained = array();
+ $c = 0;
+ while($oRow = mysql_fetch_object($hResult))
+ {
+ $aAppsMaintained[$c] = array($oRow->appId, $oRow->versionId, $oRow->superMaintainer);
+ $c++;
+ }
+
+ return $aAppsMaintained;
+ }
+
+ function getQueuedMaintainerCount()
+ {
+ $sQuery = "SELECT count(*) as queued_maintainers FROM appMaintainers where queued='true'";
+ $hResult = query_parameters($sQuery);
+ $oRow = mysql_fetch_object($hResult);
+ return $oRow->queued_maintainers;
+ }
+
+ /* see how many maintainer entries we have in the database */
+ function getMaintainerCount()
+ {
+ $sQuery = "SELECT count(*) as maintainers FROM appMaintainers where queued='false'";
+ $hResult = query_parameters($sQuery);
+ $oRow = mysql_fetch_object($hResult);
+ return $oRow->maintainers;
+ }
+
+ /* see how many unique maintainers we actually have */
+ function getNumberOfMaintainers()
+ {
+ $hResult = query_parameters("SELECT DISTINCT userId FROM appMaintainers WHERE queued='false';");
+ return mysql_num_rows($hResult);
+ }
+
+ function isUserMaintainer($oUser, $iVersionId = null)
+ {
+ /* if we are a super maintainer, we are a maintainer of this version as well */
+ $oVersion = new Version($iVersionId);
+ if($oUser->isSuperMaintainer($oVersion->iAppId))
+ return true;
+
+ /* otherwise check if we maintain this specific version */
+ if($iVersionId)
+ {
+ $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND versionId = '?' AND queued = '?'";
+ $hResult = query_parameters($sQuery, $oUser->iUserId, $iVersionId, "false");
+ } else // are we maintaining any version ?
+ {
+ $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND queued = '?'";
+ $hResult = query_parameters($sQuery, $oUser->iUserId, "false");
+ }
+ if(!$hResult)
+ return false;
+
+ return mysql_num_rows($hResult);
+ }
+
+ function isUserSuperMaintainer($oUser, $iAppId = null)
+ {
+ if($iAppId)
+ {
+ $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND appId = '?' AND superMaintainer = '1' AND queued = '?'";
+ $hResult = query_parameters($sQuery, $oUser->iUserId, $iAppId, "false");
+ } else /* are we super maintainer of any applications? */
+ {
+ $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND superMaintainer = '1' AND queued = '?'";
+ $hResult = query_parameters($sQuery, $oUser->iUserId, "false");
+ }
+ if(!$hResult)
+ return false;
+ return mysql_num_rows($hResult);
+ }
+
+ /* if given an appid or a version id return a handle for a query that has */
+ /* the user ids that are maintainers for this particular appid or version id */
+ function getMaintainersForAppIdVersionId($iAppId = null, $iVersionId = null)
+ {
+ $hResult = null;
+
+ if($iVersionId)
+ {
+ $hResult = query_parameters("SELECT appMaintainers.userId
+ FROM appMaintainers, appVersion
+ WHERE appVersion.appId = appMaintainers.appId
+ AND appVersion.versionId = '?' AND appMaintainers.queued = 'false'",
+ $iVersionId);
+ }
+ /*
+ * If versionId was not supplied we fetch supermaintainers of application and maintainer of all versions.
+ */
+ elseif($iAppId)
+ {
+ $hResult = query_parameters("SELECT userId
+ FROM appMaintainers
+ WHERE appId = '?' AND queued = 'false'",
+ $iAppId);
+ }
+
+ return $hResult;
+ }
+
+ /*
+ * get the userIds of super maintainers for this appId
+ */
+ function getSuperMaintainersUserIdsFromAppId($iAppId)
+ {
+ $sQuery = "SELECT userId FROM ".
+ "appMaintainers WHERE appId = '?' " .
+ "AND superMaintainer = '1' AND queued='?';";
+ $hResult = query_parameters($sQuery, $iAppId, "false");
+ $aUserIds = array();
+ $c = 0;
+ while($oRow = mysql_fetch_object($hResult))
+ {
+ $aUserIds[$c] = $oRow->userId;
+ $c++;
+ }
+
+ return $aUserIds;
+ }
+
+ function ObjectOutputHeader()
+ {
+ echo " Submission Date | \n";
+ echo " Application Name | \n";
+ echo " Version | \n";
+ echo " Super maintainer? | \n";
+ echo " Submitter | \n";
+ }
+
+ function ObjectOutputTableRow()
+ {
+ $oUser = new User($this->iUserId);
+ $oApp = new Application($this->iAppId);
+ $oVersion = new Version($this->iVersionId);
+ echo "".print_date(mysqldatetime_to_unixtimestamp($this->aSubmitTime))." | \n";
+ echo "".$oApp->sName." | \n";
+
+ if($this->bSuperMaintainer)
+ {
+ echo "N/A | \n";
+ echo "Yes | \n";
+ } else
+ {
+ echo "".$oVersion->sName." | \n";
+ echo "No | \n";
+ }
+
+ echo "sEmail."\">".$oUser->sRealname." | \n";
+ }
+
+ function ObjectDisplayQueueProcessingHelp()
+ {
+ echo "| \n\n";
+ echo "Please enter an accurate and personalized reply anytime a maintainer request is rejected.\n";
+ echo "Its not polite to reject someones attempt at trying to help out without explaining why.\n";
+ echo " |
\n\n";
+ }
+
+ function OutputEditor()
+ {
+ //view application details
+ echo html_frame_start("New Maintainer Form",600,"",0);
+ echo "\n";
+
+ /**
+ * Show the other maintainers of this application, if there are any
+ */
+ echo '| Other maintainers of this app: | ',"\n";
+
+ $bFoundMaintainers = false;
+
+ $bFirstDisplay = true; /* if false we need to fix up table rows appropriately */
+
+ /* display maintainers for the version */
+ $oVersion = new Version($this->iVersionId);
+ $aOtherUsers = $oVersion->getMaintainersUserIds();
+ if($aOtherUsers)
+ {
+ $bFoundMaintainers = true;
+ while(list($index, $iUserId) = each($aOtherUsers))
+ {
+ $oUser = new User($iUserId);
+ if($bFirstDisplay)
+ {
+ echo "".$oUser->sRealname." | \n";
+ $bFirstDisplay = false;
+ } else
+ {
+ echo " | ".$oUser->sRealname." | \n";
+ }
+ }
+ }
+
+ /* display super maintainers for the given app */
+ $aOtherUsers = Maintainer::getSuperMaintainersUserIdsFromAppId($this->iAppId);
+ if($aOtherUsers)
+ {
+ $bFoundMaintainers = true;
+ while(list($index, $iUserId) = each($aOtherUsers))
+ {
+ $oUser = new User($iUserId);
+ if($bFirstDisplay)
+ {
+ echo "".$oUser->sRealname."* | \n";
+ $bFirstDisplay = false;
+ } else
+ {
+ echo " | ".$oUser->sRealname."* | \n";
+ }
+ }
+ }
+
+ if(!$bFoundMaintainers)
+ {
+ echo "No other maintainers | \n";
+ }
+
+ // Show which other apps the user maintains
+ echo '| This user also maintains these apps: | ',"\n";
+
+ $bFirstDisplay = true;
+ $oUser = new User($this->iUserId);
+ $aOtherApps = Maintainer::getAppsMaintained($oUser);
+ if($aOtherApps)
+ {
+ while(list($index, list($iAppIdOther, $iVersionIdOther, $bSuperMaintainerOther)) = each($aOtherApps))
+ {
+ $oApp = new Application($iAppIdOther);
+ $oVersion = new Version($iVersionIdOther);
+ if($bFirstDisplay)
+ {
+ $bFirstDisplay = false;
+ if($bSuperMaintainerOther)
+ echo "".$oApp->sName."* | \n";
+ else
+ echo "".$oApp->sName." ".$oVersion->sName." | \n";
+ } else
+ {
+ if($bSuperMaintainerOther)
+ echo " | ".$oApp->sName."* | \n";
+ else
+ echo " | ".$oApp->sName." ".$oVersion->sName." | \n";
+ }
+ }
+ } else
+ {
+ echo "User maintains no other applications | \n";
+ }
+
+ $oApp = new Application($this->iAppId);
+ $oVersion = new Version($this->iVersionId);
+
+ //app name
+ echo '| App Name: | ',"\n";
+ echo "".$oApp->sName." | \n";
+
+ //version
+ echo '| App Version: | ',"\n";
+ echo "".$oVersion->sName." | \n";
+
+ //maintainReason
+ echo '| Maintainer request reason: | ',"\n";
+ echo ' | ',"\n";
+ echo ' ';
+
+ echo html_frame_end(" ");
+ }
+};
?>
diff --git a/include/sidebar_admin.php b/include/sidebar_admin.php
index c60a9f9..6733316 100644
--- a/include/sidebar_admin.php
+++ b/include/sidebar_admin.php
@@ -15,8 +15,8 @@ function global_admin_menu() {
$g->addmisc(" ");
$g->add("View App Queue (".$_SESSION['current']->getQueuedAppCount()."/".$_SESSION['current']->getQueuedVersionCount().")", BASE."admin/adminAppQueue.php");
$g->add("View App Data Queue (".$_SESSION['current']->getQueuedAppDataCount().")", BASE."admin/adminAppDataQueue.php");
- $g->add("View Maintainer Queue (".getQueuedMaintainerCount().")", BASE."admin/adminMaintainerQueue.php");
- $g->add("View Maintainer Entries (".getMaintainerCount().")", BASE."admin/adminMaintainers.php");
+ $g->add("View Maintainer Queue (".Maintainer::getQueuedMaintainerCount().")", BASE."admin/adminMaintainerQueue.php");
+ $g->add("View Maintainer Entries (".Maintainer::getMaintainerCount().")", BASE."admin/adminMaintainers.php");
$g->add("View Bug Links (".getNumberOfQueuedBugLinks()."/".getNumberOfBugLinks().")", BASE."admin/adminBugs.php");
$g->add("View Test Results Queue (".testData::getNumberOfQueuedTests().")", BASE."admin/adminTestResults.php");
diff --git a/include/sidebar_login.php b/include/sidebar_login.php
index 9fbb456..fea6d98 100644
--- a/include/sidebar_login.php
+++ b/include/sidebar_login.php
@@ -19,7 +19,7 @@ function global_sidebar_login() {
/* if this user maintains any applications list them */
/* in their sidebar */
- $apps_user_maintains = $_SESSION['current']->getAppsMaintained();
+ $apps_user_maintains = Maintainer::getAppsMaintained($_SESSION['current']);
if($apps_user_maintains)
{
$g->addmisc("");
diff --git a/include/user.php b/include/user.php
index d80f8e6..084761a 100644
--- a/include/user.php
+++ b/include/user.php
@@ -4,6 +4,7 @@
/************************************/
require_once(BASE."include/version.php");
+require_once(BASE."include/maintainer.php");
require_once(BASE."include/util.php");
define(SUCCESS, 0);
@@ -187,11 +188,10 @@ class User {
*/
function delete()
{
- if(!$this->isLoggedIn()) return false;
$hResult2 = query_parameters("DELETE FROM user_privs WHERE userid = '?'", $this->iUserId);
$hResult3 = query_parameters("DELETE FROM user_prefs WHERE userid = '?'", $this->iUserId);
$hResult4 = query_parameters("DELETE FROM appVotes WHERE userid = '?'", $this->iUserId);
- $hResult5 = query_parameters("DELETE FROM appMaintainers WHERE userid = '?'", $this->iUserId);
+ $hResult5 = Maintainer::deleteMaintainer($this);
$hResult6 = query_parameters("DELETE FROM appComments WHERE userId = '?'", $this->iUserId);
return($hResult = query_parameters("DELETE FROM user_list WHERE userid = '?'", $this->iUserId));
}
@@ -246,174 +246,16 @@ class User {
}
- /**
- * Check if this user is a maintainer of a given appId/versionId.
- */
+ /* Check if this user is a maintainer of a given appId/versionId */
function isMaintainer($iVersionId=null)
{
- if(!$this->isLoggedIn()) return false;
-
- /* if we are a super maintainer, we are a maintainer of this version as well */
- $oVersion = new Version($iVersionId);
- if($this->isSuperMaintainer($oVersion->iAppId))
- return true;
-
- /* otherwise check if we maintain this specific version */
- if($iVersionId)
- {
- $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND versionId = '?' AND queued = '?'";
- $hResult = query_parameters($sQuery, $this->iUserId, $iVersionId, "false");
- } else // are we maintaining any version ?
- {
- $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND queued = '?'";
- $hResult = query_parameters($sQuery, $this->iUserId, "false");
- }
- if(!$hResult)
- return false;
-
- return mysql_num_rows($hResult);
+ return Maintainer::isUserMaintainer($this, $iVersionId);
}
-
- /*
- * Check if this user is a maintainer of a given appId/versionId.
- */
+ /* Check if this user is a maintainer of a given appId/versionId */
function isSuperMaintainer($iAppId=null)
{
- if(!$this->isLoggedIn()) return false;
-
- if($iAppId)
- {
- $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND appId = '?' AND superMaintainer = '1' AND queued = '?'";
- $hResult = query_parameters($sQuery, $this->iUserId, $iAppId, "false");
- } else /* are we super maintainer of any applications? */
- {
- $sQuery = "SELECT * FROM appMaintainers WHERE userid = '?' AND superMaintainer = '1' AND queued = '?'";
- $hResult = query_parameters($sQuery, $this->iUserId, "false");
- }
- if(!$hResult)
- return false;
- return mysql_num_rows($hResult);
- }
-
- /**
- * get the applications and versions that this user maintains
- */
- function getAppsMaintained()
- {
- /* retrieve the list of application and order them by application name */
- $hResult = query_parameters("SELECT appMaintainers.appId, versionId, superMaintainer, appName FROM ".
- "appFamily, appMaintainers WHERE appFamily.appId = appMaintainers.appId ".
- "AND userId = '?' AND appMaintainers.queued = '?' ORDER BY appName",
- $this->iUserId, "false");
- if(!$hResult || mysql_num_rows($hResult) == 0)
- return NULL;
-
- $aAppsMaintained = array();
- $c = 0;
- while($oRow = mysql_fetch_object($hResult))
- {
- $aAppsMaintained[$c] = array($oRow->appId, $oRow->versionId, $oRow->superMaintainer);
- $c++;
- }
-
- return $aAppsMaintained;
- }
-
- function getMaintainerCount($bSuperMaintainer)
- {
- if(!$this->isLoggedIn()) return 0;
-
- $sQuery = "SELECT count(*) as cnt from appMaintainers WHERE userid = '?' AND superMaintainer = '?'".
- " AND queued ='?'";
- $hResult = query_parameters($sQuery, $this->iUserId, $bSuperMaintainer ? "1" : "0", "false");
- if(!$hResult)
- return 0;
- $oRow = mysql_fetch_object($hResult);
- return $oRow->cnt;
- }
-
-
- /**
- * Add the user as a maintainer
- */
- //FIXME: we really don't need any parameter except $iMaintainerId here
- // we'll clean this up when we clean up maintainers
- function addAsMaintainer($iAppId, $iVersionId, $bSuperMaintainer, $iMaintainerId)
- {
-
- $aClean = array();
- $aClean['sReplyText'] = makeSafe($_REQUEST['sReplyText']);
-
- /* if the user isn't already a supermaintainer of the application and */
- /* if they are trying to become a maintainer and aren't already a maintainer of */
- /* the version, then continue processing the request */
- if(!$this->isSuperMaintainer($iAppId) &&
- ((!$bSuperMaintainer && !$this->isMaintainer($iVersionId)) | $bSuperMaintainer))
- {
- /* unqueue the maintainer entry */
- $hResult = query_parameters("UPDATE appMaintainers SET queued='false' WHERE userId = '?' AND maintainerId = '?'",
- $this->iUserId, $iMaintainerId);
-
- if($hResult)
- {
- $statusMessage = "The maintainer was successfully added into the database \n";
-
- $oApp = new Application($iAppId);
- $oVersion = new Version($iVersionId);
- //Send Status Email
- $sEmail = $oUser->sEmail;
- if ($sEmail)
- {
- $sSubject = "Application Maintainer Request Report";
- $sMsg = "Your application to be the maintainer of ".$oApp->sName." ".$oVersion->sName." has been accepted. ";
- $sMsg .= $aClean['sReplyText'];
- $sMsg .= "We appreciate your help in making the Application Database better for all users.\n\n";
-
- mail_appdb($sEmail, $sSubject ,$sMsg);
- }
- }
- } else
- {
- //delete the item from the queue
- query_parameters("DELETE from appMaintainers WHERE userId = '?' AND maintainerId = '?'",
- $this->iUserId, $iMaintainerId);
-
- if($this->isSuperMaintainer($iAppId) && !$bSuperMaintainer)
- $statusMessage = "User is already a super maintainer of this application \n";
- else
- $statusMessage = "User is already a maintainer/super maintainer of this application/version \n";
- }
-
- return $statusMessage;
- }
-
- /* remove maintainership */
- /* if $iAppId and $iVersionId are null, delete all maintainership for this user */
- function deleteMaintainer($iAppId = null, $iVersionId = null)
- {
- /* remove supermaintainer */
- if($iAppId && ($iVersionId == null))
- {
- $superMaintainer = 1;
- $hResult = query_parameters("DELETE FROM appMaintainers WHERE userId = '?'
- AND appId = '?' AND superMaintainer = '?'",
- $this->iUserId, $iAppId, $superMaintainer);
- } else if($iAppId && $iVersionId) /* remove a normal maintainer */
- {
- $superMaintainer = 0;
- $hResult = query_parameters("DELETE FROM appMaintainers WHERE userId = '?'
- AND appId = '?' AND versionId = '?' AND superMaintainer = '?'",
- $this->iUserId, $iAppId, $iVersionId, $superMaintainer);
- } else if(($iAppId == null) && ($iVersionId == null)) /* remove all maintainership by this user */
- {
- $hResult = query_parameters("DELETE FROM appMaintainers WHERE userId = '?'", $this->iUserId);
- }
-
- if($hResult)
- return true;
-
- return false;
+ return Maintainer::isUserSuperMaintainer($this, $iAppId);
}
/* get the number of queued applications */
@@ -717,10 +559,8 @@ class User {
$oRow = mysql_fetch_object($hResult);
if($oRow->c != 0) return true;
- $hResult = query_parameters("SELECT count(userId) as c FROM appMaintainers WHERE userId = '?'",
- $this->iUserId);
- $oRow = mysql_fetch_object($hResult);
- if($oRow->c != 0) return true;
+ if($this->isMaintainer() || $this->isSuperMaintainer())
+ return true;
$hResult = query_parameters("SELECT count(userId) as c FROM appVotes WHERE userId = '?'",
$this->iUserId);
@@ -841,27 +681,7 @@ class User {
/*
* Retrieve version maintainers.
*/
- /*
- * If versionId was supplied we fetch supermaintainers of application and maintainer of version.
- */
- if($iVersionId)
- {
- $hResult = query_parameters("SELECT appMaintainers.userId
- FROM appMaintainers, appVersion
- WHERE appVersion.appId = appMaintainers.appId
- AND appVersion.versionId = '?' AND appMaintainers.queued = 'false'",
- $iVersionId);
- }
- /*
- * If versionId was not supplied we fetch supermaintainers of application and maintainer of all versions.
- */
- elseif($iAppId)
- {
- $hResult = query_parameters("SELECT userId
- FROM appMaintainers
- WHERE appId = '?' AND queued = 'false'",
- $iAppId);
- }
+ $hResult = Maintainer::getMaintainersForAppIdVersionId($iAppId, $iVersionId);
if($hResult)
{
diff --git a/include/util.php b/include/util.php
index a1ca1a0..6d26bef 100644
--- a/include/util.php
+++ b/include/util.php
@@ -184,24 +184,6 @@ function make_maintainer_rating_list($varname, $cvalue)
echo "\n";
}
-/* get the number of queued maintainers */
-function getQueuedMaintainerCount()
-{
- $sQuery = "SELECT count(*) as queued_maintainers FROM appMaintainers where queued='true'";
- $hResult = query_parameters($sQuery);
- $oRow = mysql_fetch_object($hResult);
- return $oRow->queued_maintainers;
-}
-
-/* get the total number of maintainers and applications in the appMaintainers table */
-function getMaintainerCount()
-{
- $sQuery = "SELECT count(*) as maintainers FROM appMaintainers where queued='false'";
- $hResult = query_parameters($sQuery);
- $oRow = mysql_fetch_object($hResult);
- return $oRow->maintainers;
-}
-
/* get the total number of vendors from the vendor table */
function getVendorCount()
{
@@ -227,13 +209,6 @@ function getNumberOfVersions()
return $oRow->num_versions;
}
-/* Get the number of maintainers in the database */
-function getNumberOfMaintainers()
-{
- $hResult = query_parameters("SELECT DISTINCT userId FROM appMaintainers WHERE queued='false';");
- return mysql_num_rows($hResult);
-}
-
/* Get the number of app familes in the database */
function getNumberOfAppFamilies()
{
diff --git a/include/version.php b/include/version.php
index 694a73f..aa767b5 100644
--- a/include/version.php
+++ b/include/version.php
@@ -305,8 +305,8 @@ class Version {
// remove any maintainers for this version so we don't orphan them
- $hResult = query_parameters("DELETE from appMaintainers WHERE versionId='?'", $this->iVersionId);
- if(!$hResult)
+ $result = Maintainer::deleteMaintainersForVersion($this);
+ if(!$result)
{
addmsg("Error removing version maintainers for the deleted version!", "red");
}
@@ -665,7 +665,7 @@ class Version {
echo "Maintainers of this version:\n";
echo "";
$aMaintainers = $this->getMaintainersUserIds();
- $aSupermaintainers = getSuperMaintainersUserIdsFromAppId($this->iAppId);
+ $aSupermaintainers = Maintainer::getSuperMaintainersUserIdsFromAppId($this->iAppId);
$aAllMaintainers = array_merge($aMaintainers,$aSupermaintainers);
$aAllMaintainers = array_unique($aAllMaintainers);
if(sizeof($aAllMaintainers)>0)
@@ -940,9 +940,7 @@ class Version {
if($this->iVersionId == 0)
return $aMaintainers;
- $sQuery = "SELECT userId FROM ".
- "appMaintainers WHERE versionId = '?';";
- $hResult = query_parameters($sQuery, $this->iVersionId);
+ $hResult = Maintainer::getMaintainersForAppIdVersionId(null, $this->iVersionId);
$iCount = 0;
while($oRow = mysql_fetch_object($hResult))
{
diff --git a/maintainerdelete.php b/maintainerdelete.php
index 19e4972..739653c 100644
--- a/maintainerdelete.php
+++ b/maintainerdelete.php
@@ -40,12 +40,12 @@ if($aClean['iConfirmed'])
if($aClean['iSuperMaintainer'])
{
apidb_header("You have resigned as super maintainer of ".$oApp->sName);
- $result = $_SESSION['current']->deleteMaintainer($oApp->iAppId, null);
+ $result = Maintainer::deleteMaintainer($_SESSION['current'], $aClean['iAppId'], null);
} else
{
$oVersion = new Version($aClean['iVersionId']);
apidb_header("You have resigned as maintainer of ".$oApp->sName." ".$oVersion->sName);
- $result = $_SESSION['current']->deleteMaintainer($oApp->iAppId, $oVersion->iVersionId);
+ $result = Maintainer::deleteMaintainer($_SESSION['current'], $oApp->iAppId, $oVersion->iVersionId);
}
/* echo html_frame_start("Removing",400,"",0);
*/
diff --git a/maintainersubmit.php b/maintainersubmit.php
index 5a5b531..26c6465 100644
--- a/maintainersubmit.php
+++ b/maintainersubmit.php
@@ -85,12 +85,14 @@ if( $aClean['sMaintainReason'] )
apidb_header("Submit Maintainer Request");
// add to queue
- $hResult = query_parameters("INSERT INTO appMaintainers (appId, versionId, ".
- "userId, maintainReason, superMaintainer, submitTime, queued) ".
- "VALUES ('?', '?', '?', '?', '?', ?, '?')",
- $aClean['iAppId'], $aClean['iVersionId'],
- $_SESSION['current']->iUserId, $aClean['sMaintainReason'],
- $aClean['iSuperMaintainer'], "NOW()", 'true');
+ $oMaintainer = new Maintainer();
+ $oMaintainer->iAppId = $aClean['iAppId'];
+ $oMaintainer->iVersionId = $aClean['iVersionId'];
+ $oMaintainer->iUserId = $_SESSION['current']->iUserId;
+ $oMaintainer->sMaintainReason = $aClean['sMaintainReason'];
+ $oMaintainer->bSuperMaintainer = $aClean['iSuperMaintainer'];
+
+ $hResult = $oMaintainer->create();
if ($hResult)
{
diff --git a/unit_test/test_maintainer.php b/unit_test/test_maintainer.php
new file mode 100644
index 0000000..bb850a5
--- /dev/null
+++ b/unit_test/test_maintainer.php
@@ -0,0 +1,206 @@
+login($test_email, $test_password);
+ if($retval != SUCCESS)
+ {
+ echo "Got '".$retval."' instead of SUCCESS(".SUCCESS.")\n";
+ return false;
+ }
+
+ /**
+ * make the user a super maintatiner
+ */
+ $iAppId = 655000;
+ $iVersionId = 655200;
+
+ /* queue up this maintainer */
+ $oMaintainer = new Maintainer();
+ $oMaintainer->iAppId = $iAppId;
+ $oMaintainer->iVersionId = $iVersionId;
+ $oMaintainer->iUserId = $_SESSION['current']->iUserId;
+ $oMaintainer->sMaintainReason = "Some crazy reason";
+ $oMaintainer->bSuperMaintainer = TRUE;
+ $oMaintainer->create();
+
+ /* and unqueue it to accept the user as a maintainer */
+ $oMaintainer->unQueue("Some reply text");
+
+ /* see that the user is a super maintainer of the one application we added them to be */
+ $iExpected = 1; /* we expect 1 super maintainer for this user */
+ $iSuperMaintainerCount = Maintainer::getMaintainerCountForUser($oUser, TRUE);
+ if($iSuperMaintainerCount != $iExpected)
+ {
+ echo "Got super maintainer count of '".$iSuperMaintainerCount."' instead of '".$iExpected."'\n";
+ return false;
+ }
+
+ /* maintainer count should be zero */
+ $iExpected = 0;
+ $iMaintainerCount = Maintainer::getMaintainerCountForUser($oUser, FALSE);
+ if($iMaintainerCount != $iExpected)
+ {
+ echo "Got maintainer count of '".$iMaintainerCount."' instead of '".$iExpected."'\n";
+ return false;
+ }
+
+ /* remove maintainership for this user */
+ Maintainer::deleteMaintainer($oUser, $iAppId);
+
+ /**
+ * make the user a maintainer
+ */
+
+ /* queue up this maintainer */
+ $oMaintainer = new Maintainer();
+ $oMaintainer->iAppId = $iAppId;
+ $oMaintainer->iVersionId = $iVersionId;
+ $oMaintainer->iUserId = $_SESSION['current']->iUserId;
+ $oMaintainer->sMaintainReason = "Some crazy reason";
+ $oMaintainer->bSuperMaintainer = FALSE;
+ $oMaintainer->create();
+
+ /* and unqueue it to accept the user as a maintainer */
+ $oMaintainer->unQueue("Some reply text");
+
+ /* see that the user is a super maintainer of no applications */
+ $iExpected = 0; /* we expect 1 super maintainer for this user */
+ $iSuperMaintainerCount = Maintainer::getMaintainerCountForUser($oUser, TRUE);
+ if($iSuperMaintainerCount != $iExpected)
+ {
+ echo "Got super maintainer count of '".$iSuperMaintainerCount."' instead of '".$iExpected."'\n";
+ return false;
+ }
+
+ /* maintainer count should be one */
+ $iExpected = 1;
+ $iMaintainerCount = Maintainer::getMaintainerCountForUser($oUser, FALSE);
+ if($iMaintainerCount != $iExpected)
+ {
+ echo "Got maintainer count of '".$iMaintainerCount."' instead of '".$iExpected."'\n";
+ return false;
+ }
+
+ /* remove maintainership for this user */
+ Maintainer::deleteMaintainer($oUser, $iAppId, $iVersionId);
+
+ return true;
+}
+
+function test_maintainer_getAppsMaintained()
+{
+ test_start(__FUNCTION__);
+
+ global $test_email, $test_password;
+
+ /* login the user */
+ $oUser = new User();
+ $retval = $oUser->login($test_email, $test_password);
+ if($retval != SUCCESS)
+ {
+ echo "Got '".$retval."' instead of SUCCESS(".SUCCESS.")\n";
+ return false;
+ }
+
+ /* make this user an admin so we can create applications without having them queued */
+ $hResult = query_parameters("INSERT into user_privs values ('?', '?')",
+ $oUser->iUserId, "admin");
+
+ /* create a application so we have a valid appFamily for the call to user::getAppsMaintained() */
+ $oApp = new Application();
+ $oApp->sName = "Some application";
+ $oApp->sDescription = "some description";
+ $oApp->submitterId = $oUser->iUserId;
+ if(!$oApp->create())
+ {
+ echo "Failed to create application!\n";
+ return false;
+ }
+
+ /**
+ * make the user a super maintatiner
+ */
+ $iAppId = $oApp->iAppId; /* use the iAppId of the application we just created */
+ $iVersionId = 655200;
+ $bSuperMaintainer = TRUE;
+
+ /* queue up the maintainership */
+ // add to queue
+ $oMaintainer = new Maintainer();
+ $oMaintainer->iAppId = $iAppId;
+ $oMaintainer->iVersionId = $iVersionId;
+ $oMaintainer->iUserId = $oUser->iUserId;
+ $oMaintainer->sMaintainReason = "Some crazy reason";
+ $oMaintainer->bSuperMaintainer = $bSuperMaintainer;
+ $oMaintainer->create();
+
+ $statusMessage = $oMaintainer->unQueue("Some reply text"); /* accept the maintainership */
+
+ /* get an array of the apps maintained */
+ $aAppsMaintained = maintainer::getAppsMaintained($oUser);
+
+ if(!$aAppsMaintained)
+ {
+ echo "aAppsMaintained is null, we expected a non-null return value!\n";
+ return false;
+ }
+
+ /* get only the first entry from the array of applications maintained */
+ /* we only added the user as a maintainer of a single application */
+ list($iAppId1, $iVersionId1, $bSuperMaintainer1) = $aAppsMaintained[0];
+
+ /* make sure all parameters match what we added as maintainer information */
+ if($iAppId1 != $iAppId)
+ {
+ echo "Expected iAppid of ".$iAppId." but got ".$iAppId1."\n";
+ return false;
+ }
+
+ if($iVersionId1 != $iVersionId)
+ {
+ echo "Expected iVersionId of ".$iVersionId." but got ".$iVersionId1."\n";
+ return false;
+ }
+
+ if($bSuperMaintainer1 != $bSuperMaintainer)
+ {
+ echo "Expected bSuperMaintainer of ".$bSuperMaintainer." but got ".$bSuperMaintainer1."\n";
+ return false;
+ }
+
+ /* remove maintainership for this user */
+ Maintainer::deleteMaintainer($oUser, $iAppId);
+
+ /* remove this application */
+ $oApp = new Application($iAppId);
+ $oApp->delete();
+
+ return true;
+}
+
+
+
+if(!test_maintainer_getMaintainerCountForUser())
+ echo "test_maintainer_getMaintainerCountForUser() failed!\n";
+else
+ echo "test_maintainer_getMaintainerCountForUser() passed\n";
+
+
+if(!test_maintainer_getAppsMaintained())
+ echo "test_maintainer_getAppsMaintained() failed!\n";
+else
+ echo "test_maintainer_getAppsMaintained() passed\n";
+
+?>
\ No newline at end of file
diff --git a/unit_test/test_user.php b/unit_test/test_user.php
index 5f3fceb..8da4d75 100644
--- a/unit_test/test_user.php
+++ b/unit_test/test_user.php
@@ -277,200 +277,6 @@ function test_user_update_password()
return true;
}
-function test_user_getMaintainerCount()
-{
- test_start(__FUNCTION__);
-
- global $test_email, $test_password;
-
- /* login the user */
- $oUser = new User();
- $retval = $oUser->login($test_email, $test_password);
- if($retval != SUCCESS)
- {
- echo "Got '".$retval."' instead of SUCCESS(".SUCCESS.")\n";
- return false;
- }
-
- /**
- * make the user a super maintatiner
- */
- $iAppId = 655000;
- $iVersionId = 655200;
-
- //FIXME: when we clean up maintainers we'll want to clean this code up as well
- /* queue up the maintainership */
- // add to queue
- $hResult = query_parameters("INSERT INTO appMaintainers (appId, versionId, ".
- "userId, maintainReason, superMaintainer, submitTime, queued) ".
- "VALUES ('?', '?', '?', '?', '?', ?, '?')",
- $iAppId, $iVersionId,
- $_SESSION['current']->iUserId, "Some crazy reason",
- TRUE ? "1" : "0", "NOW()", 'true');
-
- $iMaintainerId = mysql_insert_id();
-
- $statusMessage = $oUser->addAsMaintainer($iAppId, $iVersionId, TRUE, $iMaintainerId);
-
- /* see that the user is a super maintainer of the one application we added them to be */
- $iExpected = 1; /* we expect 1 super maintainer for this user */
- $iSuperMaintainerCount = $oUser->getMaintainerCount(TRUE);
- if($iSuperMaintainerCount != $iExpected)
- {
- echo "Got super maintainer count of '".$iSuperMaintainerCount."' instead of '".$iExpected."'\n";
- return false;
- }
-
- /* maintainer count should be zero */
- $iExpected = 0;
- $iMaintainerCount = $oUser->getMaintainerCount(FALSE);
- if($iMaintainerCount != $iExpected)
- {
- echo "Got maintainer count of '".$iMaintainerCount."' instead of '".$iExpected."'\n";
- return false;
- }
-
- /* remove maintainership for this user */
- $oUser->deleteMaintainer($iAppId);
-
-
-
-
- /**
- * make the user a maintainer
- */
- //FIXME: when we clean up maintainers we'll want to clean this code up as well
- /* queue up the maintainership */
- // add to queue
- $hResult = query_parameters("INSERT INTO appMaintainers (appId, versionId, ".
- "userId, maintainReason, superMaintainer, submitTime, queued) ".
- "VALUES ('?', '?', '?', '?', '?', ?, '?')",
- $iAppId, $iVersionId,
- $_SESSION['current']->iUserId, "Some crazy reason",
- FALSE ? "1" : "0", "NOW()", 'true');
-
- $iMaintainerId = mysql_insert_id();
-
- $statusMessage = $oUser->addAsMaintainer($iAppId, $iVersionId, FALSE, $iMaintainerId);
-
- /* see that the user is a super maintainer of no applications */
- $iExpected = 0; /* we expect 1 super maintainer for this user */
- $iSuperMaintainerCount = $oUser->getMaintainerCount(TRUE);
- if($iSuperMaintainerCount != $iExpected)
- {
- echo "Got super maintainer count of '".$iSuperMaintainerCount."' instead of '".$iExpected."'\n";
- return false;
- }
-
- /* maintainer count should be one */
- $iExpected = 1;
- $iMaintainerCount = $oUser->getMaintainerCount(FALSE);
- if($iMaintainerCount != $iExpected)
- {
- echo "Got maintainer count of '".$iMaintainerCount."' instead of '".$iExpected."'\n";
- return false;
- }
-
- /* remove maintainership for this user */
- $oUser->deleteMaintainer($iAppId, $iVersionId);
-
- return true;
-}
-
-function test_user_getAppsMaintained()
-{
- test_start(__FUNCTION__);
-
- global $test_email, $test_password;
-
- /* login the user */
- $oUser = new User();
- $retval = $oUser->login($test_email, $test_password);
- if($retval != SUCCESS)
- {
- echo "Got '".$retval."' instead of SUCCESS(".SUCCESS.")\n";
- return false;
- }
-
- /* make this user an admin so we can create applications without having them queued */
- $hResult = query_parameters("INSERT into user_privs values ('?', '?')",
- $oUser->iUserId, "admin");
-
- /* create a application so we have a valid appFamily for the call to user::getAppsMaintained() */
- $oApp = new Application();
- $oApp->sName = "Some application";
- $oApp->sDescription = "some description";
- $oApp->submitterId = $oUser->iUserId;
- if(!$oApp->create())
- {
- echo "Failed to create application!\n";
- return false;
- }
-
- /**
- * make the user a super maintatiner
- */
- $iAppId = $oApp->iAppId; /* use the iAppId of the application we just created */
- $iVersionId = 655200;
- $bSuperMaintainer = TRUE;
-
- //FIXME: when we clean up maintainers we'll want to clean this code up as well
- /* queue up the maintainership */
- // add to queue
- $hResult = query_parameters("INSERT INTO appMaintainers (appId, versionId, ".
- "userId, maintainReason, superMaintainer, submitTime, queued) ".
- "VALUES ('?', '?', '?', '?', '?', ?, '?')",
- $iAppId, $iVersionId,
- $_SESSION['current']->iUserId, "Some crazy reason",
- $bSuperMaintainer ? "1" : "0", "NOW()", 'true');
-
- $iMaintainerId = mysql_insert_id();
-
- $statusMessage = $oUser->addAsMaintainer($iAppId, $iVersionId, $bSuperMaintainer, $iMaintainerId);
-
- /* get an array of the apps maintained */
- $aAppsMaintained = $oUser->getAppsMaintained();
-
- if(!$aAppsMaintained)
- {
- echo "aAppsMaintained is null, we expected a non-null return value!\n";
- return false;
- }
-
- /* get only the first entry from the array of applications maintained */
- /* we only added the user as a maintainer of a single application */
- list($iAppId1, $iVersionId1, $bSuperMaintainer1) = $aAppsMaintained[0];
-
- /* make sure all parameters match what we added as maintainer information */
- if($iAppId1 != $iAppId)
- {
- echo "Expected iAppid of ".$iAppId." but got ".$iAppId1."\n";
- return false;
- }
-
- if($iVersionId1 != $iVersionId)
- {
- echo "Expected iVersionId of ".$iVersionId." but got ".$iVersionId1."\n";
- return false;
- }
-
- if($bSuperMaintainer1 != $bSuperMaintainer)
- {
- echo "Expected bSuperMaintainer of ".$bSuperMaintainer." but got ".$bSuperMaintainer1."\n";
- return false;
- }
-
- /* remove maintainership for this user */
- $oUser->deleteMaintainer($iAppId);
-
- /* remove this application */
- $oApp = new Application($iAppId);
- $oApp->delete();
-
- return true;
-}
-
-
/*************************/
/* Main testing routines */
@@ -504,20 +310,13 @@ if(!test_user_update_password())
else
echo "test_user_update_password() passed\n";
-if(!test_user_getMaintainerCount())
- echo "test_user_getMaintainerCount() failed!\n";
-else
- echo "test_user_getMaintainerCount() passed\n";
-
-if(!test_user_getAppsMaintained())
- echo "test_user_getAppsMaintained() failed!\n";
-else
- echo "test_user_getAppsMaintained() passed\n";
+/* Perform the maintainer tests here because they require that a user we can log into */
+/* and we want to save on having to clean up the user by duplicating the cleanup code below */
+include_once("test_maintainer.php");
/* TODO: the rest of the user member functions we don't currently test */
-
/* clean up the user we created during testing */
/* so the unit test leaves no trace that it ran */
$oUser = new User();
| |