Лайки в выведенных
сообщениях.
В папке classes
создадим файл Post.php
<?php
class
Post {
public
static function createPost($postbody, $loggedInUserId,
$profileUserId) {
//
валидация формы
if
(strlen($postbody) > 160 || strlen($postbody) < 1) {
die('Incorrect length!');
}
//
чтобы ты мог отправлять посты только
от своего имени!
if
($loggedInUserId == $profileUserId) {
//
0 - кол-во лайков по умолчанию
DB::query('INSERT INTO posts VALUES (:id,
:postbody, NOW(), :userid, 0)', array(':id'=>null,
':postbody'=>$postbody, ':userid'=>$profileUserId));
}
else {
die('Incorrect user!');
}
}
public
static function likePost($postId, $likerId) {
if
(!DB::query('SELECT user_id FROM post_likes WHERE post_id=:postid AND
user_id=:userid', array(':postid'=>$postId, ':userid'=>$likerId)))
{
DB::query('UPDATE posts SET likes=likes+1 WHERE
id=:postid', array(':postid'=>$postId));
DB::query('INSERT INTO post_likes VALUES (:id,
:postid, :userid)', array(':id'=>null, ':postid'=>$postId,
':userid'=>$likerId));
}
else {
DB::query('UPDATE posts SET likes=likes-1 WHERE
id=:postid', array(':postid'=>$postId));
DB::query('DELETE FROM post_likes WHERE
post_id=:postid AND user_id=:userid', array(':postid'=>$postId,
':userid'=>$likerId));
}
}
public
static function displayPosts($userid, $username, $loggedInUserId) {
//
посты
$dbposts
= DB::query('SELECT * FROM posts WHERE user_id=:userid ORDER BY id
DESC', array(':userid'=>$userid));
$posts
= "";
foreach($dbposts as $p) {
if
(!DB::query('SELECT post_id FROM post_likes WHERE post_id=:postid AND
user_id=:userid', array(':postid'=>$p['id'],
':userid'=>$loggedInUserId))) {
//print_r($p);
$posts .= htmlspecialchars($p['body'])."
<form
action='profile.php?username=$username&postid=".$p['id']."'
method='post'>
<input type='submit' name='like'
value='Like'/>
<span>".$p['likes']."
likes</span>
</form>
<hr /><br />";
}
else {
$posts .= htmlspecialchars($p['body'])."
<form
action='profile.php?username=$username&postid=".$p['id']."'
method='post'>
<input type='submit' name='unlike'
value='Unlike'/>
<span>".$p['likes']."
likes</span>
</form>
<hr /><br />";
}
}
return
$posts;
}
}
?>
Перепишем
profile.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
include('./classes/Post.php');
$username
= '';
$isFollowing
= False;
$verified
= False; // верифицирован ли пользователь
if
(isset($_GET['username'])) {
if
(DB::query('SELECT username FROM users WHERE username=:username',
array(':username'=>$_GET['username']))) {
$username = DB::query('SELECT username FROM users
WHERE username=:username',
array(':username'=>$_GET['username']))[0]['username'];
$userid = DB::query('SELECT id FROM users WHERE
username=:username', array('username'=>$_GET['username']))[0]['id'];
// id залогиненного
$verified = DB::query('SELECT verified FROM users
WHERE username=:username',
array(':username'=>$_GET['username']))[0]['verified'];
$followerid = Login::isLoggedin(); // Получаем
id фолловера. Это id залогиненного
//
проверяем была ли нажата кнопка follow
if
(isset($_POST['follow'])) {
//
когда не можешь быть фолловером самого
себя
if
($userid != $followerid) {
if (!DB::query('SELECT follower_id FROM followers
WHERE user_id=:userid AND follower_id=:followerid',
array(':userid'=>$userid, ':followerid'=>$followerid))) {
// пользователь с id=6 нажимает
follow и пользователь становится
верефицированным
if ($followerid == 6) {
DB::query('UPDATE users SET verified=1
WHERE id=:userid', array(':userid'=>$userid));
}
DB::query('INSERT INTO followers VALUES (:id,
:userid, :followerid)', array(':id'=>null,':userid'=>$userid,
':followerid'=>$followerid));
//DB::query('INSERT INTO followers VALUES
(\'\', :userid, :followerid)', array(':userid'=>$userid,
':followerid'=>$followerid));
} else {
echo 'Already following!';
}
$isFollowing = True;
}
}
//
проверяем была ли нажата кнопка unfollow
if
(isset($_POST['unfollow'])) {
//
когда не можешь быть фолловером самого
себя
if
($userid != $followerid) {
if (DB::query('SELECT follower_id FROM followers
WHERE user_id=:userid AND follower_id=:followerid',
array(':userid'=>$userid, ':followerid'=>$followerid))) {
// пользователь с id=6 нажимает
unfollow и пользователь становится
неверефицированным
if ($followerid == 6) {
DB::query('UPDATE users SET verified=0
WHERE id=:userid', array(':userid'=>$userid));
}
DB::query('DELETE FROM followers WHERE
user_id=:userid AND follower_id=:followerid',
array(':userid'=>$userid, ':followerid'=>$followerid));
}
$isFollowing = False;
}
}
if
(DB::query('SELECT follower_id FROM followers WHERE user_id=:userid
AND follower_id=:followerid', array(':userid'=>$userid,
':followerid'=>$followerid))) {
$isFollowing = True;
}
//
Отправка формы
if
(isset($_POST['post'])) {
Post::createPost($_POST['postbody'],
Login::isLoggedIn(), $userid);
}
//
лайки
if
(isset($_GET['postid'])) {
Post::likePost($_GET['postid'], $followerid);
}
$posts
= Post::displayPosts($userid, $username, $followerid);
}
else {
die('User not found!');
}
}
?>
<h1><?php
echo $username; ?>'s' Profile<?php if ($verified) { echo ' -
Verified'; } ?> </h1>
<form
action="profile.php?username=<?php echo $username; ?>"
method="post">
<?php
//
кнопка follow не будет отображаться для
своего собственного профайла
if
($userid != $followerid) {
if
($isFollowing) {
echo
'<input type="submit" name="unfollow"
value="Unfollow"/>';
}
else {
echo
'<input type="submit" name="follow"
value="Follow"/>';
}
}
?>
</form>
<form
action="profile.php?username=<?php echo $username; ?>"
method="post">
<textarea
name="postbody" cols="80" rows="8"></textarea>
<br />
<input
type="submit" name="post" value="Post"/>
</form>
<div
class="posts">
<?php
echo $posts; ?>
</div>
Перепишем
index.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
include('./classes/Post.php');
$showTimeline
= False;
if(Login::isLoggedIn()) {
$userid
= Login::isLoggedIn();
$showTimeline = True; // если пользователь
залогинен, то показываем собщения
//echo
'Logged in';
echo
Login::isLoggedIn()."<br />";
}
else {
echo
'Not logged in';
}
//
лайки
if
(isset($_GET['postid'])) {
Post::likePost($_GET['postid'], $userid);
}
//
отображаются посты всех, за кем следует
пользователь с id=4
$followingposts = DB::query('SELECT posts.id,
posts.body, posts.likes, users.`username` FROM users, posts,
followers
WHERE
posts.user_id = followers.user_id
AND
users.id = posts.user_id
AND
follower_id = 4
ORDER
BY posts.likes DESC;');
//print_r($followingposts);
foreach($followingposts as $post) {
echo
$post['body']." ~ ".$post['username'];
echo
"<form action='index.php?postid=".$post['id']."'
method='post'>";
if
(!DB::query('SELECT post_id FROM post_likes WHERE post_id=:postid AND
user_id=:userid', array(':postid'=>$post['id'],
':userid'=>$userid))) {
echo "<input type='submit' name='like'
value='Like'/>";
}
else {
echo "<input type='submit' name='unlike'
value='Unlike'/>";
}
echo
"<span>".$post['likes']." likes</span>
</form>
<hr
/><br />";
}
?>
Комментариев нет:
Отправить комментарий