Update meme voting
This commit is contained in:
58
lib/meme.php
58
lib/meme.php
@@ -28,13 +28,31 @@ function renderMeme(int $id, int $authorId, string $title, string $textContent,
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_DELETE_BUTTON__', (isModerator() || $_SESSION['ID'] == $authorId) ? "<button onclick=\"deleteMeme($id);\"><i class='ri-delete-bin-line'></i></button>" : '', $meme_out);
|
||||
|
||||
$meme_votes = calculateNetVotes($id);
|
||||
$meme_upvote = isLoggedIn() ? "<button onclick=\"voteMeme($id, 1);\"> <i class=\"ri-arrow-up-line\"></i></button>" : '';
|
||||
$meme_downvote = isLoggedIn() ? "<button onclick=\"voteMeme($id, 0);\"> <i class=\"ri-arrow-down-line\"></i></button>" : '';
|
||||
$meme_net_votes = $meme_votes['NetVotes'];
|
||||
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_VOTES_NUMBER__', $meme_votes, $meme_out);
|
||||
if ($meme_votes['UserVote'] > 0){
|
||||
$meme_upvote_active = 'fill';
|
||||
$meme_downvote_active = 'line';
|
||||
$meme_vote_counter_class = 'positive';
|
||||
}
|
||||
elseif (($meme_votes['UserVote'] < 0)) {
|
||||
$meme_upvote_active = 'line';
|
||||
$meme_downvote_active = 'fill';
|
||||
$meme_vote_counter_class = 'negative';
|
||||
}
|
||||
else {
|
||||
$meme_downvote_active = 'line';
|
||||
$meme_upvote_active = 'line';
|
||||
$meme_vote_counter_class = 'neutral';
|
||||
}
|
||||
$meme_upvote = isLoggedIn() ? "<button onclick=\"voteMeme($id, 1);\"> <i id='meme_votes_upvote_$id' class=\"ri-arrow-up-circle-$meme_upvote_active\"></i></button>" : '';
|
||||
$meme_downvote = isLoggedIn() ? "<button onclick=\"voteMeme($id, 0);\"> <i id='meme_votes_downvote_$id' class=\"ri-arrow-down-circle-$meme_downvote_active\"></i></button>" : '';
|
||||
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_VOTES_NUMBER__', $meme_net_votes, $meme_out);
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_UPVOTE__', $meme_upvote, $meme_out);
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_DOWNVOTE__', $meme_downvote, $meme_out);
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_ID__', $id, $meme_out);
|
||||
$meme_out = str_replace('__TEMPLATE_MEME_VOTE_COUNTER_CLASS__', $meme_vote_counter_class, $meme_out);
|
||||
|
||||
return str_replace('__TEMPLATE_MEME_TEXT__', htmlspecialchars($textContent), $meme_out);
|
||||
}
|
||||
@@ -116,30 +134,54 @@ function voteMeme(int $memeID, int $isUpvote): array
|
||||
return $out;
|
||||
}
|
||||
|
||||
function calculateNetVotes(int $memeID): int
|
||||
function deleteVoteMeme(int $memeID): array
|
||||
{
|
||||
global $mysqli;
|
||||
$out = ["Status" => "Fail"];
|
||||
$memeVoteConn = $mysqli->prepare('DELETE FROM MemeVotes WHERE MemeID = ? AND UserID = ?');
|
||||
$memeVoteConn->bind_param('ii', $memeID, $_SESSION['ID']);
|
||||
$memeVoteConn->execute();
|
||||
if ($memeVoteConn->affected_rows > 0) {
|
||||
$out['Status'] = 'Success';
|
||||
}
|
||||
$memeVoteConn->close();
|
||||
return $out;
|
||||
}
|
||||
|
||||
function calculateNetVotes(int $memeID): array
|
||||
{
|
||||
global $mysqli;
|
||||
|
||||
$query = 'SELECT isUpvote FROM MemeVotes WHERE MemeID = ?';
|
||||
$query = 'SELECT isUpvote, UserID FROM MemeVotes WHERE MemeID = ?';
|
||||
$stmt = $mysqli->prepare($query);
|
||||
$stmt->bind_param('i', $memeID);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
|
||||
$netVotes = 0;
|
||||
$userVote = 0;
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$netVotes += ($row['isUpvote'] == 1) ? 1 : -1;
|
||||
$vote = ($row['isUpvote'] == 1) ? 1 : -1;
|
||||
$netVotes += $vote;
|
||||
if ($row['UserID'] == $_SESSION['ID']) {
|
||||
$userVote = $vote;
|
||||
}
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
|
||||
return $netVotes;
|
||||
return [
|
||||
"NetVotes" => $netVotes,
|
||||
"UserVote" => $userVote
|
||||
];
|
||||
}
|
||||
|
||||
function getMemeVotes(int $memeID): array
|
||||
{
|
||||
$voteData = calculateNetVotes($memeID);
|
||||
return [
|
||||
"Status" => "Success",
|
||||
"NetVotes" => calculateNetVotes($memeID)
|
||||
"NetVotes" => $voteData['NetVotes'],
|
||||
"UserVote" => $voteData['UserVote']
|
||||
];
|
||||
}
|
Reference in New Issue
Block a user