Extension: Voting
[vanilla-miry.git] / extensions / Voting / library / Class.DiscussionVote.php
blobc89971eac3c621825b2a6ec779e4223735412308
1 <?php
2 class DiscussionVote {
4 var $Name;
5 var $Context;
6 var $CategoryID;
7 var $SessionPostBackKey;
8 var $PositiveVote;
9 var $NegativeVote;
11 function DiscussionVote(&$Context) {
12 $this->Name = 'DiscussionVote';
13 $this->Context = &$Context;
14 $this->CategoryID = explode(",", $this->Context->Configuration['VANILLAVOTING_CATEGORYID']);
15 $this->SessionPostBackKey = $this->Context->Session->GetVariable('SessionPostBackKey', 'string');
16 $this->PositiveVote = 1;
17 $this->NegativeVote = -1;
20 function GetDiscussionVote (&$sql) {
21 $sql->AddSelect('Vote', 't','TotalDiscussionVotes');
22 $sql->AddJoin('UserDiscussionVote', 'UserDiscussionVote', 'DiscussionID', 't', 'DiscussionID', 'left join', ' and UserDiscussionVote.'.$this->Context->DatabaseColumns['UserDiscussionVote']['UserID'].' = '.$this->Context->Session->UserID);
23 $sql->AddSelect('Vote', 'UserDiscussionVote');
26 function AddDiscussionVote ($DiscussionID, $Vote, $CurrentTotalVotes) {
27 $sql = $this->Context->ObjectFactory->NewContextObject($this->Context, 'SqlBuilder');
28 $sql->SetMainTable('UserDiscussionVote', 'UserDiscussionVote');
29 $sql->AddFieldNameValue('UserID', $this->Context->Session->UserID);
30 $sql->AddFieldNameValue('DiscussionID', $DiscussionID);
31 $sql->AddFieldNameValue('Vote', $Vote);
32 $sql->AddFieldNameValue('DateCreated', MysqlDateTime());
33 $this->Context->Database->Insert($sql, $this->Name, 'AddDiscussionVote', 'Failed to add discussion vote');
34 $this->UpdateDiscussionTotalVotes ($DiscussionID, $Vote, $CurrentTotalVotes);
37 function DeleteDiscussionVote ($DiscussionID, $Vote, $CurrentTotalVotes) {
38 $sql = $this->Context->ObjectFactory->NewContextObject($this->Context, 'SqlBuilder');
39 $sql->SetMainTable('UserDiscussionVote', 'UserDiscussionVote');
40 $sql->AddWhere('UserDiscussionVote', 'DiscussionID', '', $DiscussionID, '=', '', '', 0, 1);
41 $sql->AddWhere('UserDiscussionVote', 'UserID', '', $this->Context->Session->UserID, '=', 'AND', '', 0);
42 $sql->EndWhereGroup();
43 $this->Context->Database->Delete($sql, $this->Name, 'DeleteDiscussionVote', 'Failed to delete discussion vote');
45 //Now update the total votes for the discussion
46 $this->UpdateDiscussionTotalVotes ($DiscussionID, $Vote, $CurrentTotalVotes);
48 function UpdateDiscussionTotalVotes ($DiscussionID, $Vote, $CurrentTotalVotes) {
49 $sql = $this->Context->ObjectFactory->NewContextObject($this->Context, 'SqlBuilder');
50 $sql->SetMainTable('Discussion', 'Discussion');
51 $sql->AddFieldNameValue('Vote', $CurrentTotalVotes+$Vote);
52 $sql->AddWhere('Discussion', 'DiscussionID', '', $DiscussionID, '=');
53 $this->Context->Database->Update($sql, $this->Name, 'UpdateDiscussionTotalVotes', 'Failed to update discussion total votes');
56 function Render(&$DiscussionList, &$DataSet) {
58 if (in_array($DataSet['CategoryID'], $this->CategoryID)) {
59 $verdict = '';
61 if ($DataSet['Vote'] < 0) {
62 $verdict = 'VotedNegative';
63 } else if ($DataSet['Vote'] > 0) {
64 $verdict = 'VotedPositive';
67 $DiscussionList .= '<ul class="DiscussionVote '.$verdict.'">
68 <li class="DiscussionVoteCount"><span>'.$DataSet['TotalDiscussionVotes'].'</span><span class="DiscussionVoteCountLabel"> '.$this->Context->GetDefinition('Votes').'</span></li>
69 <li class="DiscussionAddVote">';
70 if ($this->Context->Session->UserID > 0) {
71 $DiscussionList .= '<form action="'.GetRequestUri().'" method="get">';
72 if (is_null($DataSet['Vote'])) {
73 $DiscussionList .= '<span class="Vote"><input class="VotePositive" type="button" onClick="AddDiscussionVote(\''.$this->Context->Configuration["VANILLAVOTING_PATH"].'library/AddVote.php\', '.$DataSet['DiscussionID'].', '.$this->PositiveVote.', '.$DataSet['TotalDiscussionVotes'].', \''.$this->SessionPostBackKey.'\');" /><input type="button" class="VoteNegative" onClick="AddDiscussionVote(\''.$this->Context->Configuration["VANILLAVOTING_PATH"].'library/AddVote.php\', '.$DataSet['DiscussionID'].', '.$this->NegativeVote.', '.$DataSet['TotalDiscussionVotes'].', \''.$this->SessionPostBackKey.'\');" /></span>';
74 } else if ($DataSet['Vote'] < 0) {
75 $DiscussionList .= '<span class="VotedNegative"><input class="VotePositive" type="button" disabled="disabled" /><input type="button" class="VoteNegative" disabled="disabled"/></span>';
76 } else if ($DataSet['Vote'] > 0) {
77 $DiscussionList .= '<span class="VotedPositive"><input class="VotePositive" type="button" disabled="disabled" /><input type="button" class="VoteNegative" disabled="disabled"/></span>';
79 $DiscussionList .='</form>';
81 else {
82 $DiscussionList .= '<span class="NotLoggedIn"><a href="'.AppendUrlParameters($this->Context->Configuration['SIGNIN_URL'], 'ReturnUrl='.GetRequestUri()).'">'.$this->Context->GetDefinition('Vote!').'</a></span>';
84 $DiscussionList .= '</li>
85 </ul>';