/** * Increment/decrement discussion scores */ public function DiscussionController_VoteDiscussion_Create($Sender) { // if (!C('Plugins.Voting.Enabled')) // return; $DiscussionID = GetValue(0, $Sender->RequestArgs, 0); $TransientKey = GetValue(1, $Sender->RequestArgs); $VoteType = FALSE; if ($TransientKey == 'voteup' || $TransientKey == 'votedown') { $VoteType = $TransientKey; $TransientKey = GetValue(2, $Sender->RequestArgs); } $Session = Gdn::Session(); $NewUserVote = 0; $Total = 0; if ($Session->IsValid() && $Session->ValidateTransientKey($TransientKey) && $DiscussionID > 0) { $DiscussionModel = new DiscussionModel(); $OldUserVote = $DiscussionModel->GetUserScore($DiscussionID, $Session->UserID); if ($VoteType == 'voteup') { $NewUserVote = 1; } else { if ($VoteType == 'votedown') { $NewUserVote = -1; } else { $NewUserVote = $OldUserVote == 1 ? -1 : 1; } } $FinalVote = intval($OldUserVote) + intval($NewUserVote); // Allow admins to vote unlimited. $AllowVote = $Session->CheckPermission('Garden.Moderation.Manage'); // Only allow users to vote up or down by 1. if (!$AllowVote) { $AllowVote = $FinalVote > -2 && $FinalVote < 2; } if ($AllowVote) { $Total = $DiscussionModel->SetUserScore($DiscussionID, $Session->UserID, $FinalVote); } else { $Discussion = $DiscussionModel->GetID($DiscussionID); $Total = GetValue('Score', $Discussion, 0); $FinalVote = $OldUserVote; } // Move the comment into or out of moderation. if (class_exists('LogModel')) { $Moderate = FALSE; if ($Total <= C('Plugins.Voting.ModThreshold1', -10)) { $LogOptions = array('GroupBy' => array('RecordID')); // Get the comment row. if (isset($Discussion)) { $Data = (array) $Discussion; } else { $Data = (array) $DiscussionModel->GetID($DiscussionID); } if ($Data) { // Get the users that voted the comment down. $OtherUserIDs = $DiscussionModel->SQL->Select('UserID')->From('UserComment')->Where('CommentID', $DiscussionID)->Where('Score <', 0)->Get()->ResultArray(); $OtherUserIDs = array_column($OtherUserIDs, 'UserID'); $LogOptions['OtherUserIDs'] = $OtherUserIDs; // Add the comment to moderation. if ($Total > C('Plugins.Voting.ModThreshold2', -20)) { LogModel::Insert('Moderate', 'Discussion', $Data, $LogOptions); } } $Moderate = TRUE; } if ($Total <= C('Plugins.Voting.ModThreshold2', -20)) { // Remove the comment. $DiscussionModel->Delete($DiscussionID, array('Log' => 'Moderate')); $Sender->InformMessage(sprintf(T('The %s has been removed for moderation.'), T('discussion'))); } elseif ($Moderate) { $Sender->InformMessage(sprintf(T('The %s has been flagged for moderation.'), T('discussion'))); } } } $Sender->DeliveryType(DELIVERY_TYPE_BOOL); $Sender->SetJson('TotalScore', $Total); $Sender->SetJson('FinalVote', $FinalVote); $Sender->Render(); }
/** * Increment/decrement discussion scores */ public function DiscussionController_VoteDiscussion_Create($Sender) { if (!C('Plugins.Voting.Enabled')) return; $DiscussionID = GetValue(0, $Sender->RequestArgs, 0); $TransientKey = GetValue(1, $Sender->RequestArgs); $VoteType = FALSE; if ($TransientKey == 'voteup' || $TransientKey == 'votedown') { $VoteType = $TransientKey; $TransientKey = GetValue(2, $Sender->RequestArgs); } $Session = Gdn::Session(); $NewUserVote = 0; $Total = 0; if ($Session->IsValid() && $Session->ValidateTransientKey($TransientKey) && $DiscussionID > 0) { $DiscussionModel = new DiscussionModel(); $OldUserVote = $DiscussionModel->GetUserScore($DiscussionID, $Session->UserID); if ($VoteType == 'voteup') $NewUserVote = 1; else if ($VoteType == 'votedown') $NewUserVote = -1; else $NewUserVote = $OldUserVote == 1 ? -1 : 1; $FinalVote = intval($OldUserVote) + intval($NewUserVote); // Allow admins to vote unlimited. $AllowVote = $Session->CheckPermission('Vanilla.Comments.Edit'); // Only allow users to vote up or down by 1. if (!$AllowVote) $AllowVote = $FinalVote > -2 && $FinalVote < 2; if ($AllowVote) { $Total = $DiscussionModel->SetUserScore($DiscussionID, $Session->UserID, $FinalVote); } else { $Discussion = $DiscussionModel->GetID($DiscussionID); $Total = GetValue('Score', $Discussion, 0); $FinalVote = $OldUserVote; } } $Sender->DeliveryType(DELIVERY_TYPE_BOOL); $Sender->SetJson('TotalScore', $Total); $Sender->SetJson('FinalVote', $FinalVote); $Sender->Render(); }