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; } } } 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()", $this->mustBeQueued() ? "true" : "false"); /* this objects id is the insert id returned by mysql */ $this->iMaintainerId = mysql_insert_id(); return $hResult; } function unQueue() { /* 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($this->iAppId); $oVersion = new Version($this->iVersionId); //Send Status Email $sEmail = $oUser->sEmail; if ($sEmail) { if($this->iVersionId) $sURL = APPDB_ROOT."appview.php?iVersionId=$this->iVersionId"; else $sURL = APPDB_ROOT."appview.php?iAppId=$this->iAppId"; $sSubject = "Application Maintainer Request Report"; $sMsg = "Your application to be the maintainer of ".$oApp->sName." ".$oVersion->sName." has been accepted.\n"; $sMsg .= "$sURL\n"; $sMsg .= "$this->sReplyText\n"; $sMsg .= "We appreciate your help in making the Application Database better for all users.\n\n"; mail_appdb($sEmail, $sSubject ,$sMsg); } } } else { /* Delete entry, but only if queued */ query_parameters("DELETE from appMaintainers WHERE userId = '?' AND maintainerId = '?' AND queued = 'true'", $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() { $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 .= $this->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 mustBeQueued() { /* In place for future fine-grained permisson system, only allow admins for now */ if($_SESSION['current']->hasPriv("admin")) return FALSE; else return TRUE; } 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) { if(!$oVersion->iVersionId) return FALSE; $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) { /* Excluding requests for queued apps and versions, as these will be handled automatically */ if($bQueued) $sQuery = "SELECT appMaintainers.submitTime, maintainerId FROM appMaintainers, user_list, appFamily WHERE appMaintainers.userid = user_list.userid AND appMaintainers.queued = '?' AND appMaintainers.appId = appFamily.appId AND appMaintainers.versionId = '' AND appFamily.queued = 'false' UNION SELECT appMaintainers.submitTime, maintainerId FROM appMaintainers, user_list, appVersion WHERE user_list.userid = appMaintainers.userid AND appMaintainers.versionId = appVersion.versionId AND appVersion.queued = 'false' AND appMaintainers.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", $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() { /* Excluding requests for queued apps and versions, as these are handled automatically. One SELECT for super maintainers, one for maintainers. */ $sQuery = "SELECT COUNT(DISTINCT maintainerId) as queued_maintainers FROM appMaintainers, appFamily, appVersion WHERE appMaintainers.queued='true' AND ((appFamily.appId = appMaintainers.appId AND appFamily.queued = 'false' AND appMaintainers.versionId = '') OR ( appVersion.versionId = appMaintainers.versionId AND appVersion.queued = 'false'))"; if(!($hResult = query_parameters($sQuery))) return FALSE; $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 userId from appMaintainers WHERE appMaintainers.queued = 'false' AND ". "appMaintainers.versionId = '?'", $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($sClass) { $aCells = array( "Submission Date", "Application Name", "Version", "Super maintainer?", "Submitter"); if(maintainer::canEdit()) $aCells[sizeof($aCells)] = "Action"; echo html_tr($aCells, $sClass); } function ObjectOutputTableRow($oObject, $sClass) { $oUser = new User($this->iUserId); $oApp = new Application($this->iAppId); $oVersion = new Version($this->iVersionId); $aCells = array( print_date(mysqldatetime_to_unixtimestamp($this->aSubmitTime)), $oApp->sName, ($this->bSuperMaintainer) ? "N/A" : $oVersion->sName, ($this->bSuperMaintainer) ? "Yes" : "No", "sEmail."\">".$oUser->sRealname.""); if(maintainer::canEdit()) $aCells[sizeof($aCells)] = "makeUrl("edit", $this->iMaintainerId)."\">answer"; echo html_tr($aCells, $sClass); } 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 objectGetInstanceFromRow($oRow) { return new maintainer($oRow->maintainerId, $oRow); } function canEdit() { if($_SESSION['current']->hasPriv("admin")) return TRUE; return FALSE; } function outputEditor() { //view application details echo html_frame_start("New Maintainer Form",600,"",0); echo "\n"; echo "iMaintainerId\" />"; /** * Show the other maintainers of this application, if there are any */ echo '',"\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 "\n"; $bFirstDisplay = false; } else { echo "\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 "\n"; $bFirstDisplay = false; } else { echo "\n"; } } } if(!$bFoundMaintainers) { echo "\n"; } // Show which other apps the user maintains echo '',"\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 "\n"; else echo "\n"; } else { if($bSuperMaintainerOther) echo "\n"; else echo "\n"; } } } else { echo "\n"; } $oApp = new Application($this->iAppId); $oVersion = new Version($this->iVersionId); //app name echo '',"\n"; echo "\n"; //version echo '',"\n"; echo "\n"; //maintainReason echo '',"\n"; echo '',"\n"; echo '
Other maintainers of this app:".$oUser->sRealname."
".$oUser->sRealname."
".$oUser->sRealname."*
".$oUser->sRealname."*
No other maintainers
This user also maintains these apps:".$oApp->sName."*
".$oApp->sName." ".$oVersion->sName."
".$oApp->sName."*
".$oApp->sName." ".$oVersion->sName."
User maintains no other applications
App Name:".$oApp->sName."
App Version:".$oVersion->sName."
Maintainer request reason:
'; echo html_frame_end(" "); } function ObjectGetId() { return $this->iMaintainerId; } function getOutputEditorValues($aClean) { $this->sReplyText = $aClean['sReplyText']; return TRUE; } function update() { /* STUB: No updating possible at the moment */ return TRUE; } function getDefaultReply() { $sReplyTextHelp = "Enter a personalized reason for accepting or rejecting the ". "user's maintainer request here"; return $sReplyTextHelp; } function objectHideDelete() { return TRUE; } } ?>