2004-12-12 03:51:51 +00:00
< ? php
2006-06-17 06:10:10 +00:00
require_once ( BASE . " include/util.php " );
2004-12-28 00:01:21 +00:00
/* max votes per user */
define ( 'MAX_VOTES' , 3 );
2004-03-15 16:22:00 +00:00
2007-10-09 21:10:29 +02:00
class vote
{
public $iUserId ;
public $iVoteId ;
public $iSlotIndex ;
public $iVersionId ;
public function vote ( $iVoteId = null , $oRow = null )
{
if ( ! $iVoteId && ! $oRow ) /* Nothing to do */
return ;
if ( ! $oRow )
{
$hResult = query_parameters ( " SELECT * FROM appVotes WHERE id = '?' " , $iVoteId );
$oRow = mysql_fetch_object ( $hResult );
}
if ( $oRow )
{
$this -> iUserId = $oRow -> userId ;
$this -> iVoteId = $oRow -> id ;
$this -> iSlotIndex = $oRow -> slot ;
$this -> iVersionId = $oRow -> versionId ;
}
}
public function update ()
{
/* Check for valid vote slot index */
if ( $this -> iSlotIndex < 1 || $this -> iSlotIndex > MAX_VOTES )
return ;
/* Avoid pointless votes */
if ( ! $this -> iVersionId )
return ;
if ( ! $this -> iVoteId )
{
$hResult = query_parameters ( " INSERT INTO appVotes (versionId,userId,slot) VALUES('?','?','?') " ,
$this -> iVersionId , $_SESSION [ 'current' ] -> iUserId , $this -> iSlotIndex );
} else
{
$hResult = query_parameters ( " UPDATE appVotes SET versionId = '?' WHERE id = '?' " , $this -> iVersionId , $this -> iVoteId );
}
if ( ! $hResult )
return FALSE ;
return TRUE ;
}
2007-10-09 21:15:10 +02:00
public function delete ()
{
/* A vote needs to have a versionId , so if it doesn ' t that means it is not in the
database or it was not selected in the vote editor */
if ( ! $this -> iVersionId )
return TRUE ;
$hResult = query_parameters ( " DELETE FROM appVotes WHERE id = '?' " , $this -> iVoteId );
if ( ! $hResult )
return FALSE ;
return TRUE ;
}
2007-10-09 21:10:29 +02:00
}
class voteManager
{
private $iUserId ;
private $aVotes ;
public function voteManager ( $iUserId = null , $oRow = null )
{
$this -> iUserId = $iUserId ;
}
public function objectGetCustomVars ( $sAction )
{
switch ( $sAction )
{
case " edit " :
return array ( " iVersionId " );
break ;
default :
return null ;
}
}
public function outputEditor ( $aClean = null )
{
2007-10-09 21:15:10 +02:00
echo " The following shows your current votes. Check the boxes next to the apps you wish to replace with a vote for " . version :: fullNameLink ( $aClean [ 'iVersionId' ]) . " or delete. " ;
2007-10-09 21:10:29 +02:00
$oTable = new table ();
$this -> aVotes = $this -> getVotes ();
for ( $i = 0 ; $i < MAX_VOTES ; $i ++ )
{
$sVersionText = $this -> aVotes [ $i ] -> iVersionId ? version :: fullNameLink ( $this -> aVotes [ $i ] -> iVersionId ) : " No app selected " ;
$oTableRow = new tableRow ();
2008-02-23 12:06:24 +11:00
$oTableRow -> addTextCell ( '<input type="checkbox" name="iSlot' . $i . '" value="' . $aClean [ 'iVersionId' ] . '">' );
2007-10-09 21:10:29 +02:00
$oTableRow -> addTextCell ( $sVersionText );
$oTable -> addRow ( $oTableRow );
}
echo $oTable -> getString ();
}
public function canEdit ()
{
if ( $_SESSION [ 'current' ] -> iUserId == $this -> iUserId )
return TRUE ;
return FALSE ;
}
2007-10-09 21:15:10 +02:00
function objectGetMail ( $sAction , $bMailSubmitter , $bParentAction )
{
return array ( null , null , null ); /* No mail */
}
2007-10-09 21:10:29 +02:00
public function mustBeQueued ()
{
return FALSE ;
}
public function objectGetEntries ( $bQueued , $bRejected )
{
return query_parameters ( " SELECT * FROM appVotes " );
}
public function objectGetId ()
{
return $this -> iUserId ;
}
public function create ()
{
return TRUE ;
}
2007-12-12 22:43:22 +01:00
function purge ()
{
return $this -> delete ();
}
2007-10-09 21:15:10 +02:00
public function delete ()
{
$bSuccess = TRUE ;
if ( ! is_array ( $this -> aVotes ))
$this -> aVotes = $this -> getVotes ();
foreach ( $this -> aVotes as $oVote )
{
if ( ! $oVote -> delete ())
$bSuccess = FALSE ;
}
return $bSuccess ;
}
2007-10-09 21:10:29 +02:00
public function update ()
{
foreach ( $this -> aVotes as $oVote )
$oVote -> update ();
}
public function getOutputEditorValues ( $aClean )
{
$this -> aVotes = $this -> getVotes ();
for ( $i = 0 ; $i < MAX_VOTES ; $i ++ )
$this -> aVotes [ $i ] -> iVersionId = $aClean [ " iSlot $i " ];
}
public function objectGetEntriesCount ()
{
$hResult = query_parameters ( " SELECT COUNT(id) as count FROM appVotes " );
if ( ! $hResult )
return FALSE ;
if ( ! ( $oRow = mysql_fetch_object ( $hResult )))
return FALSE ;
return $oRow -> count ;
}
public function objectGetSubmitterId ()
{
return $this -> iUserId ;
}
public function getVotes ()
{
$aVotes = array ();
$hResult = query_parameters ( " SELECT * FROM appVotes WHERE userId = '?' ORDER BY slot " , $this -> iUserId );
if ( ! $hResult )
return $aVotes ;
for ( $i = 0 ; $i < MAX_VOTES ; $i ++ )
$aVotes [ $i ] = null ;
while ( $oRow = mysql_fetch_object ( $hResult ))
$aVotes [ $oRow -> slot - 1 ] = new vote ( null , $oRow );
for ( $i = 0 ; $i < MAX_VOTES ; $i ++ )
{
if ( ! $aVotes [ $i ])
{
$aVotes [ $i ] = new vote ();
$aVotes [ $i ] -> iSlotIndex = $i + 1 ;
}
}
return $aVotes ;
}
}
2009-07-22 20:11:07 +02:00
/**
* used by admins to check whether votes for a version are legit
*/
class voteInspector
{
private $iVersionId ;
function voteInspector ( $iVersionId = null )
{
if ( is_numeric ( $iVersionId ))
$this -> iVersionId = $iVersionId ;
}
public function objectGetId ()
{
return $this -> iVersionId ;
}
public function objectGetState ()
{
return 'accepted' ;
}
2009-07-22 20:30:18 +02:00
public function canEdit ()
{
return $_SESSION [ 'current' ] -> hasPriv ( 'admin' );
}
public function outputEditor ()
2009-07-22 20:11:07 +02:00
{
$oVersion = new version ( $this -> iVersionId );
echo 'Inspecting votes for ' . version :: fullNameLink ( $this -> iVersionId );
echo '<br /><br />' ;
$hResult = query_parameters ( " SELECT userId, COUNT(userId) as count FROM appVotes WHERE
versionId = '?'
GROUP BY userId " , $this->iVersionId );
if ( ! $hResult )
{
echo 'Failed to get list of votes' ;
return ;
}
if ( mysql_num_rows ( $hResult ) == 0 )
{
echo 'There are no votes for this version' ;
return ;
}
$oTable = new Table ();
$oTable -> setCellPadding ( 3 );
$oTableRow = new TableRow ();
$oTableRow -> setClass ( 'color4' );
$oTableRow -> AddTextCell ( 'User' );
$oTableRow -> AddTextCell ( 'ID' );
$oTableRow -> AddTextCell ( 'Created' );
$oTableRow -> AddTextCell ( 'Votes' );
$oTableRow -> AddTextCell ( 'Privileges' );
$oTable -> AddRow ( $oTableRow );
for ( $i = 0 ; $oRow = mysql_fetch_object ( $hResult ); $i ++ )
{
$oVoter = new user ( $oRow -> userId );
$oTableRow = new TableRow ();
$oTableRow -> setClass (( $i % 2 ) ? 'color0' : 'color1' );
$oTableRow -> AddTextCell ( $oVoter -> objectMakeLink ());
$oTableRow -> AddTextCell ( $oVoter -> iUserId );
$oTableRow -> AddTextCell ( $oVoter -> sDateCreated );
$oTableRow -> AddTextCell ( $oRow -> count );
$sPrivs = '' ;
if ( $oVoter -> hasPriv ( 'admin' ))
$sPrivs .= 'Admin<br />' ;
if ( $oVoter -> isMaintainer ( $this -> iVersionId ))
$sPrivs .= 'Maintainer of this version<br />' ;
if ( $oVoter -> isMaintainer ())
{
$oM = new objectManager ( 'maintainerView' , 'View maintainership info' );
$sPrivs .= '<a href="' . $oM -> makeUrl ( 'view' , $oVoter -> iUserId ) . '">Maintainer (other entries)</a><br />' ;
}
$oTableRow -> AddTextCell ( $sPrivs );
$oTable -> AddRow ( $oTableRow );
}
echo $oTable -> getString ();
}
2009-07-22 20:30:18 +02:00
public function getOutputEditorValues ( $aValues )
{
}
public function create ()
{
return true ;
}
public function update ()
{
return true ;
}
2009-07-22 20:11:07 +02:00
}
2004-12-12 03:51:51 +00:00
/**
2004-03-15 16:22:00 +00:00
* count the number of votes for appId by userId
*/
2007-01-21 18:06:53 +00:00
function vote_count ( $iVersionId , $iUserId = null )
2004-03-15 16:22:00 +00:00
{
2006-07-19 00:11:40 +00:00
if ( ! $iUserId )
2004-12-12 03:51:51 +00:00
{
2005-01-30 23:12:48 +00:00
if ( $_SESSION [ 'current' ] -> isLoggedIn ())
2006-07-19 00:11:40 +00:00
$iUserId = $_SESSION [ 'current' ] -> iUserId ;
2004-12-12 03:51:51 +00:00
else
return 0 ;
2006-07-19 00:11:40 +00:00
}
2007-01-21 18:06:53 +00:00
$hResult = query_parameters ( " SELECT * FROM appVotes WHERE versionId = '?' AND userId = '?' " ,
$iVersionId , $iUserId );
2007-08-03 23:27:25 +00:00
return query_num_rows ( $hResult );
2004-03-15 16:22:00 +00:00
}
/*
2007-01-21 18:06:53 +00:00
* total votes for versionId
2004-03-15 16:22:00 +00:00
*/
2007-01-21 18:06:53 +00:00
function vote_count_version_total ( $iVersionId )
2004-03-15 16:22:00 +00:00
{
2007-01-21 18:06:53 +00:00
$hResult = query_parameters ( " SELECT * FROM appVotes WHERE versionId = '?' " ,
$iVersionId );
2007-08-03 23:27:25 +00:00
return query_num_rows ( $hResult );
2004-03-15 16:22:00 +00:00
}
?>