Current directory: /home/klas4s23/domains/585455.klas4s23.mid-ica.nl/public_html/Gastenboek/uploads
<?php
session_start();
include "db.php";
// Return error if not logged in
if (!isset($_SESSION['user_id'])) {
echo json_encode([
'status' => 'error',
'message' => 'You must be logged in to like or dislike lists'
]);
exit();
}
// Get data from POST request
$user_id = $_SESSION['user_id'];
$list_id = isset($_POST['list_id']) ? (int)$_POST['list_id'] : 0;
$is_like = isset($_POST['is_like']) ? (int)$_POST['is_like'] : 1; // 1 for like, 0 for dislike
// Validate list_id
if ($list_id <= 0) {
echo json_encode([
'status' => 'error',
'message' => 'Invalid list ID'
]);
exit();
}
try {
// Start transaction
$conn->beginTransaction();
// Check if the list exists and is public
$stmt = $conn->prepare("SELECT id FROM word_lists WHERE id = ? AND public = 1");
$stmt->execute([$list_id]);
if ($stmt->rowCount() === 0) {
throw new Exception("List not found or is not public");
}
// Check if user already liked/disliked this list
$stmt = $conn->prepare("SELECT id, is_like FROM list_likes WHERE list_id = ? AND user_id = ?");
$stmt->execute([$list_id, $user_id]);
$existing = $stmt->fetch();
if ($existing) {
// User already has a like/dislike for this list
if ($existing['is_like'] == $is_like) {
// If same action, remove the like/dislike (toggle off)
$stmt = $conn->prepare("DELETE FROM list_likes WHERE id = ?");
$stmt->execute([$existing['id']]);
// Update counts in word_lists table
if ($is_like == 1) {
$conn->exec("UPDATE word_lists SET like_count = like_count - 1 WHERE id = $list_id");
} else {
$conn->exec("UPDATE word_lists SET dislike_count = dislike_count - 1 WHERE id = $list_id");
}
$action = "removed";
} else {
// If different action, update the record
$stmt = $conn->prepare("UPDATE list_likes SET is_like = ? WHERE id = ?");
$stmt->execute([$is_like, $existing['id']]);
// Update counts in word_lists table - both increment one and decrement the other
if ($is_like == 1) {
$conn->exec("UPDATE word_lists SET like_count = like_count + 1, dislike_count = dislike_count - 1 WHERE id = $list_id");
} else {
$conn->exec("UPDATE word_lists SET like_count = like_count - 1, dislike_count = dislike_count + 1 WHERE id = $list_id");
}
$action = "changed";
}
} else {
// No existing like/dislike, insert new one
$stmt = $conn->prepare("INSERT INTO list_likes (list_id, user_id, is_like) VALUES (?, ?, ?)");
$stmt->execute([$list_id, $user_id, $is_like]);
// Update count in word_lists table
if ($is_like == 1) {
$conn->exec("UPDATE word_lists SET like_count = like_count + 1 WHERE id = $list_id");
} else {
$conn->exec("UPDATE word_lists SET dislike_count = dislike_count + 1 WHERE id = $list_id");
}
$action = "added";
}
// Get updated counts
$stmt = $conn->prepare("SELECT like_count, dislike_count FROM word_lists WHERE id = ?");
$stmt->execute([$list_id]);
$counts = $stmt->fetch();
// Commit transaction
$conn->commit();
// Return success response with updated counts
echo json_encode([
'status' => 'success',
'action' => $action,
'like_count' => $counts['like_count'],
'dislike_count' => $counts['dislike_count'],
'is_like' => $is_like
]);
} catch (Exception $e) {
// Rollback transaction on error
$conn->rollBack();
echo json_encode([
'status' => 'error',
'message' => $e->getMessage()
]);
}
?>