1 <?php 2 require_once __DIR__ . '/../includes/bootstrap.php'; 3 if (!$USER) json_out(['error'=>'Not logged in'],401); 4 if (!csrf_ok()) json_out(['error'=>'CSRF'],403); 5 $pid = (int)post('post_id'); 6 if (!$pid) json_out(['error'=>'Missing post_id'],400); 7 $post = DB::row('SELECT * FROM posts WHERE id=?',[$pid]); 8 if (!$post) json_out(['error'=>'Not found'],404); 9 10 $exists = DB::row('SELECT 1 FROM likes WHERE post_id=? AND user_id=?',[$pid,$USER['id']]); 11 if ($exists) { 12 DB::run('DELETE FROM likes WHERE post_id=? AND user_id=?',[$pid,$USER['id']]); 13 DB::run('UPDATE posts SET likes=MAX(0,likes-1) WHERE id=?',[$pid]); 14 // Remove karma from post author 15 add_karma((int)$post['user_id'], -1); 16 $liked = false; 17 } else { 18 DB::insertIgnore('likes', ['post_id','user_id'], [$pid,$USER['id']]); 19 DB::run('UPDATE posts SET likes=likes+1 WHERE id=?',[$pid]); 20 // Award karma to post author 21 add_karma((int)$post['user_id'], 1); 22 $liked = true; 23 } 24 $count = (int)DB::val('SELECT COUNT(*) FROM likes WHERE post_id=?',[$pid]); 25 json_out(['ok'=>true,'liked'=>$liked,'count'=>$count]);