Получение уведомлений.
Идем в notify.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
if(Login::isLoggedIn())
{
$userid =
Login::isLoggedIn();
} else {
echo 'Not
logged in';
}
echo
"<h1>Notifications</h1>";
if
(DB::query('SELECT * FROM notifications WHERE receiver=:userid',
array(':userid'=>$userid))) {
$notifications
= DB::query('SELECT * FROM notifications WHERE receiver=:userid',
array(':userid'=>$userid));
foreach
($notifications as $n) {
if
($n['type'] == 1) {
$senderName
= DB::query('SELECT username FROM users WHERE id=:senderid',
array('senderid'=>$n['sender']))[0]['username'];
echo
$senderName." mentioned you in a post! <hr />";
}
}
}
?>
В БД в таблице
notifications добавляем колонку
extra text null allowed
Идем в Post.php
<?php
class
Post {
public static function createPost($postbody,
$loggedInUserId, $profileUserId) {
// валидация формы
if (strlen($postbody) > 160 ||
strlen($postbody) < 1) {
die('Incorrect length!');
}
// создание топиков
$topics = self::getTopics($postbody);
// чтобы ты мог отправлять
посты только от своего имени!
if ($loggedInUserId == $profileUserId) {
// уведомления
if (count(self::notify($postbody)) != 0) {
foreach (self::notify($postbody) as $key
=> $n) {
$s = $loggedInUserId; // тот, кто
посылает уведомление
// получатель уведомления
$r = DB::query('SELECT id FROM users
WHERE username=:username', array(':username'=>$key))[0]['id'];
// если пользователь
существует, то посылаем ему увдомление
if ($r != 0) {
DB::query('INSERT INTO
notifications VALUES(:id, :type, :receiver, :sender, :extra)',
array(':id'=>null,':type'=>$n["type"],
':receiver'=>$r, ':sender'=>$s, ':extra'=>$n["extra"]));
}
}
}
// 0 - кол-во лайков по
умолчанию
DB::query('INSERT INTO posts VALUES (:id,
:postbody, NOW(), :userid, 0, \'\', :topics)', array(':id'=>null,
':postbody'=>$postbody, ':userid'=>$profileUserId,
':topics'=>$topics));
} else {
die('Incorrect user!');
}
}
public static function createImgPost($postbody,
$loggedInUserId, $profileUserId) {
// валидация формы
if (strlen($postbody) > 160) {
die('Incorrect length!');
}
// создание топиков
$topics = self::getTopics($postbody);
// чтобы ты мог отправлять
посты только от своего имени!
if ($loggedInUserId == $profileUserId) {
// уведомления
if (count(self::notify($postbody)) != 0) {
foreach (self::notify($postbody) as $key
=> $n) {
$s = $loggedInUserId; // тот, кто
посылает уведомление
// получатель уведомления
$r = DB::query('SELECT id FROM users
WHERE username=:username', array(':username'=>$key))[0]['id'];
// если пользователь
существует, то посылаем ему увдомление
if ($r != 0) {
DB::query('INSERT INTO
notifications VALUES(:id, :type, :receiver, :sender, :extra)',
array(':id'=>null,':type'=>$n["type"],
':receiver'=>$r, ':sender'=>$s, ':extra'=>$n["extra"]));
}
}
}
// 0 - кол-во лайков по
умолчанию
DB::query('INSERT INTO posts VALUES (:id,
:postbody, NOW(), :userid, 0, \'\', :topics)', array(':id'=>null,
':postbody'=>$postbody, ':userid'=>$profileUserId,
':topics'=>$topics));
$postid = DB::query('SELECT id FROM posts
WHERE user_id=:user_id ORDER BY id DESC LIMIT 1',
array(':user_id'=>$loggedInUserId))[0]['id'];
return $postid;
} 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 getTopics($text) {
$text = explode(" ", $text); //
explode — Разбивает строку с помощью
разделителя
$topics = "";
foreach ($text as $word) {
// если первый символ слова
@
if (substr( $word, 0, 1) == "#") {
$topics .= substr($word, 1).",";
}
}
return $topics;
}
// уведомления
public static function notify($text) {
$text = explode(" ", $text); //
explode — Разбивает строку с помощью
разделителя
$notify = array();
foreach ($text as $word) {
// если первый символ слова
@
if (substr($word, 0, 1) == "@") {
$notify[substr($word, 1)] =
array("type"=>1, "extra"=>' { "postbody":
'.implode($text, " ").' } ');
}
}
return $notify;
}
public static function link_add($text) {
$text = explode(" ", $text); //
explode — Разбивает строку с помощью
разделителя
$newstring = "";
foreach ($text as $word) {
// если первый символ слова
@
if (substr( $word, 0, 1) == "@") {
$newstring .= "<a
href='profile.php?username=".substr($word,
1)."'>".htmlspecialchars($word)." </a>";
// ссылка на профиль пользователя
} else if (substr( $word, 0, 1) == "#")
{
$newstring .= "<a
href='topics.php?topic=".substr($word,
1)."'>".htmlspecialchars($word)." </a>";
// ссылка на профиль пользователя
} else {
$newstring .= htmlspecialchars($word)."
";
}
}
return $newstring;
}
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 .= "<img
src='".$p['postimg']."'>".(self::link_add($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>
";
// удаление постов
if ($userid == $loggedInUserId) {
$posts .= "<input
type='submit' name='deletepost' value='x'/>";
}
$posts .= "
</form><hr /><br />";
} else {
$posts .= "<img
src='".$p['postimg']."'>".(self::link_add($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>
";
// удаление постов
if ($userid == $loggedInUserId) {
$posts .= "<input
type='submit' name='deletepost' value='x'/>";
}
$posts .= "
</form><hr /><br />";
}
}
return $posts;
}
}
?>
Идем
в notify.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
if(Login::isLoggedIn()) {
$userid = Login::isLoggedIn();
}
else {
echo 'Not logged in';
}
echo "<h1>Notifications</h1>";
if (DB::query('SELECT * FROM notifications WHERE
receiver=:userid', array(':userid'=>$userid))) {
$notifications = DB::query('SELECT * FROM
notifications WHERE receiver=:userid', array(':userid'=>$userid));
foreach ($notifications as $n) {
if ($n['type'] == 1) {
$senderName = DB::query('SELECT username
FROM users WHERE id=:senderid',
array('senderid'=>$n['sender']))[0]['username'];
echo "<pre>";
//print_r($n);
echo $n['extra'];
//json_decode($n['extra']);
echo "</pre>";
echo $senderName." mentioned you in
a post! <hr />";
}
}
}
?>
Снова правим
Post.php, чтобы получить
валидную json-строку.
//
уведомления
public static function notify($text) {
$text = explode(" ", $text); //
explode — Разбивает строку с помощью
разделителя
$notify = array();
foreach ($text as $word) {
// если первый символ слова
@
if (substr($word, 0, 1) == "@") {
$notify[substr($word, 1)] =
array("type"=>1, "extra"=>' { "postbody":
'.htmlentities(implode($text, "
")).' } ');
}
}
return $notify;
}
Файл notify.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
if(Login::isLoggedIn()) {
$userid = Login::isLoggedIn();
}
else {
echo 'Not logged in';
}
echo "<h1>Notifications</h1>";
if (DB::query('SELECT * FROM notifications WHERE
receiver=:userid', array(':userid'=>$userid))) {
$notifications = DB::query('SELECT * FROM
notifications WHERE receiver=:userid', array(':userid'=>$userid));
foreach ($notifications as $n) {
if ($n['type'] == 1) {
$senderName = DB::query('SELECT username
FROM users WHERE id=:senderid',
array('senderid'=>$n['sender']))[0]['username'];
if ($n['extra'] == "") {
echo "You got a notification!";
} else {
$extra = json_decode($n['extra']);
echo $senderName." mentioned
you in a post! - ".$extra->postbody."<hr />";
}
}
}
}
?>
Комментариев нет:
Отправить комментарий