Main Page | Directories | File List | File Members

include/trackers/votes.php File Reference

Go to the source code of this file.

Functions

 trackers_votes_user_remains_count ($user_id)
 trackers_votes_user_giventoitem_count ($user_id, $tracker, $item_id)
 trackers_votes_update ($item_id, $group_id=0, $new_vote, $tracker=0)


Function Documentation

trackers_votes_update item_id,
group_id = 0,
new_vote,
tracker = 0
 

Definition at line 67 of file include/trackers/votes.php.

References $group_id, $sql, db_affected_rows(), db_query(), db_result, group_id, trackers_votes_user_giventoitem_count(), and trackers_votes_user_remains_count().

00068 {
00069   # Vote must be simple integer
00070   if (!ctype_digit($new_vote))
00071     {
00072       fb(_("Vote provided is not a simple integer, it has been ignored"), 1);
00073       return false;
00074     }
00075 
00076   # If the tracker is undefined, use the constant
00077   if (!$tracker)
00078     {
00079       $tracker = ARTIFACT;
00080     }
00081 
00082   # If group_id is not known, we guess it
00083   if (!$group_id)
00084     {
00085       $res_getgroupid = db_query("SELECT group_id FROM ".$tracker." WHERE bug_id='$item_id'");
00086       $group_id = db_result($res_getgroupid, 0, 'group_id');
00087     }
00088   
00089   # If the user already voted for this item:
00090   #   - if he voted 0, we must simply remove the vote
00091   #   - if he voted something else, we must add or remove the diff
00092   
00093   # Vote = 0
00094   if ($new_vote < 1) 
00095     {
00096       $registered_vote = trackers_votes_user_giventoitem_count(user_getid(), $tracker, $item_id);
00097       if ($registered_vote)
00098         {
00099           db_query("DELETE FROM user_votes WHERE user_id='".user_getid()."' AND tracker='".$tracker."' AND item_id='$item_id' LIMIT 1");
00100           $res_get = db_query("SELECT vote FROM ".$tracker." WHERE bug_id='$item_id' AND group_id='$group_id'");
00101           $real_new_vote = db_result($res_get, 0, 'vote') - $registered_vote;
00102           db_query("UPDATE ".$tracker." SET vote='$real_new_vote' WHERE bug_id='$item_id' AND group_id='$group_id'");
00103           
00104           fb(_("Vote erased"));
00105         }
00106       return false; 
00107     }
00108   else
00109     {
00110       # Vote > 0 
00111 
00112       # Check the diff between the registered vote and the new vote
00113       $registered_vote = trackers_votes_user_giventoitem_count(user_getid(), $tracker, $item_id);
00114       $diff_vote = $new_vote - $registered_vote;
00115 
00116       # If new vote equal to the current vote, nothing to do
00117       if (!$diff_vote)
00118         {
00119           return true;
00120         }
00121 
00122       # Check whether the user have not specified more votes than he actually
00123       # got available
00124       $remains = trackers_votes_user_remains_count(user_getid());
00125       if ($remains < $diff_vote)
00126         {
00127           # If so, set the diff_vote and new_vote as the maximum possible
00128           $diff_vote = $remains;
00129           $new_vote = $diff_vote + $registered_vote;
00130         }
00131 
00132       # If the vote is new, we do a SQL INSERT, otherwise a SQL UPDATE
00133       # in the user_votes table
00134       if (!$registered_vote)
00135         {
00136           $sql = "INSERT INTO user_votes ".
00137             "(user_id,tracker,item_id,howmuch) ".
00138             "VALUES ('".user_getid()."','".$tracker."','$item_id','$new_vote')";          
00139 
00140           # Add in CC
00141           unset($bah); # workaround for stupid function that require a 
00142                        # variable to be passed as final argument.
00143           trackers_add_cc($item_id,
00144                           $group_id,
00145                           user_getname(),
00146                           "Voted in favor of this item", # hum, picky to deal
00147                           $bah);                        # with, i18n-wise
00148         }
00149       else
00150         {
00151           $sql = "UPDATE user_votes SET howmuch='$new_vote' WHERE ".
00152             "user_id='".user_getid()."' AND tracker='".$tracker."' AND item_id='$item_id'";       
00153         }
00154       $res_insert = db_query($sql);
00155       if (db_affected_rows($res_insert) < 1)
00156         { 
00157           # In case of problem, kept unmodified the item proper info
00158           fb(_("Unable to record the vote, please report to admins"), 1); 
00159           return false;
00160         }
00161       
00162       # Add the new vote to the item proper info table
00163       $res_get = db_query("SELECT vote FROM ".$tracker." WHERE bug_id='$item_id' AND group_id='$group_id'");
00164       $real_new_vote = db_result($res_get, 0, 'vote') + $diff_vote;
00165       $res_update = db_query("UPDATE ".$tracker." SET vote='$real_new_vote' WHERE bug_id='$item_id' AND group_id='$group_id'");
00166       if (db_affected_rows($res_update) < 1)
00167         { 
00168           # In case of problem, kept unmodified the item proper info
00169           fb(_("Unable to finally record the vote, please report to admins"), 1); 
00170           return false;
00171         }
00172       
00173       # If we arrive here, everything went properly
00174       if ($diff_vote > 0)
00175         { $diff_vote = "+$diff_vote"; }
00176       fb(_("Vote recorded")." ($diff_vote)");
00177       return true;
00178     }
00179 }

trackers_votes_user_giventoitem_count user_id,
tracker,
item_id
 

Definition at line 50 of file include/trackers/votes.php.

References $result, $sql, $total, db_numrows(), db_query(), and db_result.

Referenced by trackers_votes_update().

00051 {
00052   $total = 0;
00053   
00054   $sql = "SELECT howmuch FROM user_votes WHERE user_id='$user_id' AND tracker='$tracker' AND item_id='$item_id' LIMIT 1";
00055   $result = db_query($sql);
00056 
00057   if (db_numrows($result)) 
00058     {
00059       $total = db_result($result, 0, 'howmuch');
00060     }
00061    
00062   return $total;
00063 }

trackers_votes_user_remains_count user_id  ) 
 

Definition at line 24 of file include/trackers/votes.php.

References $result, $row, $sql, $total, db_fetch_array(), db_numrows(), and db_query().

Referenced by trackers_votes_update().

00025 {
00026   $total = 100;
00027   
00028   $sql = "SELECT howmuch FROM user_votes WHERE user_id='$user_id'";
00029   $result = db_query($sql);
00030 
00031   if (db_numrows($result)) 
00032     {
00033       while ($row = db_fetch_array($result)) 
00034         {
00035           $total = $total - $row['howmuch'];
00036         }
00037     }
00038   
00039     
00040   # Total < 0 does not make sense
00041   if ($total < 0) 
00042     {
00043       fb(_("You appear to have less than 0 votes remaining. There's a bug somewhere, please contact the administrators"), 1);
00044     }
00045 
00046   return $total;
00047 }


Generated on Sun Feb 26 13:23:05 2006 for Savane PHP Frontend Developer Reference by  doxygen 1.4.4