Вход Регистрация
Файл: ajax/posts/get.php
Строк: 380
<?php
/**
 * get posts
 * 
 * @package Sngine
 * @author Yehia Abed
 * @version 0.3
 */

// fetch kernal
$depth '../../';
require(
$depth.'kernal.php');

// check AJAX Request
if(!IsAJAX()) {
    
header('Location: '.SITE_URL);
}

// define the tple
$page "ajax.posts.get";

// check page parameters
if(!isset($_GET['app']) || !isset($_GET['get']) || !isset($_GET['filter']) || !isset($_GET['sort']) || !isset($_GET['startPoint'])) {
    exit(
ReportError('parameters error[1] @/ajax/posts/get'));
}

// valid inputs
$valid['app'] = array('home''wall''news''music''photos''videos''discussions''questions''polls''links');
$valid['get'] = array('all''new''old');
$valid['filter'] = array('All''Just Me''Just User''Just Mention''Just Followers''Just Followings');
$valid['sort'] = array('','Most Recent''Most Liked''Most Favorited''Most Discussed''Most Answered');

if(!
in_array($_GET['app'], $valid['app']) || !in_array($_GET['get'], $valid['get']) || !in_array($_GET['filter'], $valid['filter']) || !in_array($_GET['sort'], $valid['sort'])) {
    exit(
ReportError('parameters error[2] @/ajax/posts/get'));
}

// prepare where statement
if(count($userBlockedUsers) > 0) {
    
$whereStatement ' WHERE post.UserID NOT IN (' implode(','$userBlockedUsers) . ')';
    
$whereStatementComments ' AND comm.UserID NOT IN (' implode(','$userBlockedUsers) . ')';
}

if(
count($userBlockedPosts) > 0) {
    if(empty(
$whereStatement)) {
        
$whereStatement  ' WHERE post.ID NOT IN (' implode(','$userBlockedPosts) . ')';
    }else {
        
$whereStatement .= ' AND post.ID NOT IN (' implode(','$userBlockedPosts) . ')';
    }
}

if(
$_GET['get'] == "new") {
    if(empty(
$whereStatement)) {
        
$whereStatement  " WHERE post.ID > ".Secure($_GET['startPoint'], 'int');
    }else {
        
$whereStatement .= " AND post.ID > ".Secure($_GET['startPoint'], 'int');
    }
}elseif (
$_GET['get'] == "old") {
    if(empty(
$whereStatement)) {
        
$whereStatement  " WHERE post.ID < ".Secure($_GET['startPoint'], 'int');
    }else {
        
$whereStatement .= " AND post.ID < ".Secure($_GET['startPoint'], 'int');
    }
}

if(
$_GET['filter'] == "Just Followings") {
    if(
count($userFollowings) > 0) {
        if(empty(
$whereStatement)) {
            
$whereStatement  ' WHERE post.UserID IN (' implode(','$userFollowings) . ')';
        }else {
            
$whereStatement .= ' AND post.UserID IN (' implode(','$userFollowings) . ')';
        }
    }else {
        exit(
'<div class="dataNullState stopCronJobs">You do not have any followings yet!</div>');
    }
}elseif (
$_GET['filter'] == "Just Followers") {
    if(
count($userFollowers) > 0) {
        if(empty(
$whereStatement)) {
            
$whereStatement  ' WHERE post.UserID IN (' implode(','$userFollowers) . ')';
        }else {
            
$whereStatement .= ' AND post.UserID IN (' implode(','$userFollowers) . ')';
        }
    }else {
        exit(
'<div class="dataNullState stopCronJobs">You do not have any followers yet!</div>');
    }
}elseif (
$_GET['filter'] == "Just Me") {
    if(empty(
$whereStatement)) {
        
$whereStatement  ' WHERE post.UserID = '.Secure($userArray['UserID'], 'int');
    }else {
        
$whereStatement .= ' AND post.UserID = '.Secure($userArray['UserID'], 'int');
    }
}elseif (
$_GET['filter'] == "Just User") {
    if(!isset(
$_GET['id'])) {
        exit(
ReportError('parameters error[3] @/ajax/posts/get'));
    }
    
$mentionStatement ' LEFT JOIN posts_mentions mention ON post.ID = mention.PostID ';
    if(empty(
$whereStatement)) {
        
$whereStatement  " WHERE ((mention.IsUser = 'Y' AND mention.MentionID = ".Secure($_GET['id'], 'int').") OR post.UserID = ".Secure($_GET['id'], 'int').")";
    }else {
        
$whereStatement .= " AND ((mention.IsUser = 'Y' AND mention.MentionID = ".Secure($_GET['id'], 'int').") OR post.UserID = ".Secure($_GET['id'], 'int').")";
    }
}elseif (
$_GET['filter'] == "Just Mention") {
    if(!isset(
$_GET['id'])) {
        exit(
ReportError('parameters error[4] @/ajax/posts/get'));
    }
    
$mentionStatement ' INNER JOIN posts_mentions mention ON post.ID = mention.PostID ';
    if(empty(
$whereStatement)) {
        
$whereStatement  " WHERE mention.IsUser = 'N' AND mention.MentionID = ".Secure($_GET['id'], 'int');
    }else {
        
$whereStatement .= " AND mention.IsUser = 'N' AND mention.MentionID = ".Secure($_GET['id'], 'int');
    }
}

// prepare application
$limitStatement " LIMIT ".$systemSetting['MaxFeeds'];
switch (
$_GET['app']) {
    case 
"news":
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 1";
        }else {
            
$whereStatement .= " AND post.PostType = 1";
        }
        break;
    case 
"music":
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 2";
        }else {
            
$whereStatement .= " AND post.PostType = 2";
        }
        break;
    case 
"photos":
        
$page "ajax.posts.media";
        
// prepare pagination
        
if(isset($_GET['page'])) {
            
$spage = (int) $_GET['page'];
            
$spage = ($spage == 0) ? $spage;
        }else {
            
$spage 1;
        }
        if(
$_GET['filter'] == "Just User") {
            
$total $db->query(sprintf("SELECT * FROM posts post INNER JOIN posts_photos photo ON post.PostID = photo.ID AND post.PostType = 3 WHERE post.UserID = %s"Secure($_GET['id'], 'int'))) or die(ReportError('sql error #1 @/ajax/posts/get'));
        }else {
            
$total $db->query("SELECT * FROM posts_photos") or die(ReportError('sql error #2 @/ajax/posts/get'));
        }
        
$total $total->num_rows;
        require(
$depth.'libs/class-pagination.php');
        
$pagination = new Pagination($spage$systemSetting['MaxMediaFeeds'], $total'photos.php?page=%s');
        
$limitStatement $pagination->getLimitSql();
        
$smarty->assign('pager'$pagination->getPagerMini());
        
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 3";
        }else {
            
$whereStatement .= " AND post.PostType = 3";
        }
        break;
    case 
"videos":
        
$page "ajax.posts.media";
        
// prepare pagination
        
if(isset($_GET['page'])) {
            
$spage = (int) $_GET['page'];
            
$spage = ($spage == 0) ? $spage;
        }else {
            
$spage 1;
        }
        if(
$_GET['filter'] == "Just User") {
            
$total $db->query(sprintf("SELECT * FROM posts post INNER JOIN posts_videos video ON post.PostID = video.ID AND post.PostType = 4 WHERE post.UserID = %s"Secure($_GET['id'], 'int'))) or die(ReportError('sql error #3 @/ajax/posts/get'));
        }else {
            
$total $db->query("SELECT * FROM posts_videos") or die(ReportError('sql error #4 @/ajax/posts/get'));
        }
        
$total $total->num_rows;
        require(
$depth.'libs/class-pagination.php');
        
$pagination = new Pagination($spage$systemSetting['MaxMediaFeeds'], $total'videos.php?page=%s');
        
$limitStatement $pagination->getLimitSql();
        
$smarty->assign('pager'$pagination->getPagerMini());
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 4";
        }else {
            
$whereStatement .= " AND post.PostType = 4";
        }
        break;
    case 
"discussions":
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 5";
        }else {
            
$whereStatement .= " AND post.PostType = 5";
        }
        break;
    case 
"questions":
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 6";
        }else {
            
$whereStatement .= " AND post.PostType = 6";
        }
        break;
    case 
"polls":
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 7";
        }else {
            
$whereStatement .= " AND post.PostType = 7";
        }
        break;
    case 
"links":
        if(empty(
$whereStatement)) {
            
$whereStatement  " WHERE post.PostType = 8";
        }else {
            
$whereStatement .= " AND post.PostType = 8";
        }
        break;
    }
    
// get posts
if(empty($whereStatement)) $whereStatement "";
if(empty(
$mentionStatement)) $mentionStatement "";
$getPosts $db->query("SELECT post.*, user.UserName, user.UserFirstName, user.UserLastName, user.UserAvatarPathMedium AS UserAvatarPath FROM posts post INNER JOIN users user ON post.UserID = user.UserID".$mentionStatement.$whereStatement." ORDER BY post.ID DESC ".$limitStatement) or die(ReportError('sql error #5 @/ajax/posts/get'));

if(
$getPosts->num_rows == 0) {
    if(
$_GET['get'] == "all") {
        exit(
'<div class="dataNullState stopCronJobs">There are no more '.$_GET['app'].' to show.</div>');
    }
    exit;
}

while(
$post $getPosts->fetch_array(MYSQLI_ASSOC)) {
    
    
// news posts
    
if($post['PostType'] == 1) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_news WHERE ID = %s"Secure($post['PostID'], 'int'))) or die(ReportError('sql error #6 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
$post['data']['URL'] = GetURLText($post['data']['Text']);
        
$post['data']['Text'] = SeeMore(DecodeText($post['data']['Text']));
        
    
// music posts
    
}elseif ($post['PostType'] == 2) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_tracks WHERE ID = %s"Secure($post['PostID'], 'int'))) or die(ReportError('sql error #7 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        if(
IsEmpty($post['data']['Text'])) {
            
$post['data']['URL'] = GetURLText($post['data']['Title']);
        }else {
            
$post['data']['URL'] = GetURLText($post['data']['Text']);
        }
        
$post['data']['Text'] = SeeMore(DecodeText($post['data']['Text']));
        
    
// photos posts
    
}elseif ($post['PostType'] == 3) {
        
        
$getData $db->query(sprintf("SELECT IsAlbum, MediaID FROM posts_photos WHERE ID = %s"Secure($post['PostID'], 'int'))) or die(ReportError('sql error #8 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
        if(
$post['data']['IsAlbum'] == 'Y') {
            
$getMedia =  $db->query(sprintf("SELECT album.Title, album.Text, album.New, album.ThumbnailID, source.Thumbnail FROM posts_photos_albums album LEFT JOIN posts_photos_sources source ON album.ThumbnailID = source.ID WHERE album.ID = %s"Secure($post['data']['MediaID'], 'int'))) or die(ReportError('sql error #9 @/ajax/posts/get'));
            
$post['data']['media'] = $getMedia->fetch_array(MYSQLI_ASSOC);
        }else {
            
$getMedia =  $db->query(sprintf("SELECT source.Source, source.Thumbnail, source.Text, source.AlbumID, album.Title FROM posts_photos_sources source INNER JOIN posts_photos_albums album ON source.AlbumID = album.ID WHERE source.ID = %s"Secure($post['data']['MediaID'], 'int'))) or die(ReportError('sql error #10 @/ajax/posts/get'));
            
$post['data']['media'] = $getMedia->fetch_array(MYSQLI_ASSOC);
        }
        
$post['data']['media']['Text'] = SeeMore(DecodeText($post['data']['media']['Text']));
        
    
// videos posts
    
}elseif ($post['PostType'] == 4) {
        
        
$getData $db->query(sprintf("SELECT IsAlbum, MediaID FROM posts_videos WHERE ID = %s"Secure($post['PostID'], 'int'))) or die(ReportError('sql error #11 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
        if(
$post['data']['IsAlbum'] == 'Y') {
            
$getMedia =  $db->query(sprintf("SELECT album.Title, album.Text, album.New, album.ThumbnailID, source.Thumbnail FROM posts_videos_albums album LEFT JOIN posts_videos_sources source ON album.ThumbnailID = source.ID WHERE album.ID = %s"Secure($post['data']['MediaID'], 'int'))) or die(ReportError('sql error #12 @/ajax/posts/get'));
            
$post['data']['media'] = $getMedia->fetch_array(MYSQLI_ASSOC);
        }else {
            
$getMedia =  $db->query(sprintf("SELECT source.Source, source.Type, source.Thumbnail, source.Text, source.AlbumID, album.Title FROM posts_videos_sources source INNER JOIN posts_videos_albums album ON source.AlbumID = album.ID WHERE source.ID = %s"Secure($post['data']['MediaID'], 'int'))) or die(ReportError('sql error #13 @/ajax/posts/get'));
            
$post['data']['media'] = $getMedia->fetch_array(MYSQLI_ASSOC);
        }
        
$post['data']['media']['Text'] = SeeMore(DecodeText($post['data']['media']['Text']));
        
    
// discussions posts
    
}elseif ($post['PostType'] == 5) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_discussions WHERE ID = %s"Secure($post['PostID'], 'int') )) or die(ReportError('sql error #14 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
$post['data']['Text'] = Parse($post['data']['Text']);
        
$post['data']['URL'] = GetURLText($post['data']['Title']);
        
    
// questions posts
    
}elseif ($post['PostType'] == 6) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_questions WHERE ID = %s"Secure($post['PostID'], 'int') )) or die(ReportError('sql error #15 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
$post['Answers'] = $post['data']['Answers'];
        
$post['data']['URL'] = GetURLText($post['data']['Title']);
        
    
// polls posts
    
}elseif ($post['PostType'] == 7) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_polls WHERE ID = %s"Secure($post['PostID'], 'int') )) or die(ReportError('sql error #16 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
        
// get poll options
        
$getPollOptions $db->query(sprintf("SELECT * FROM posts_polls_options WHERE PollID = %s"Secure($post['PostID'], 'int') )) or die(ReportError('sql error #17 @/ajax/posts/get'));
        while(
$pollOption $getPollOptions->fetch_array(MYSQLI_ASSOC)) {
            if(
$post['data']['Votes'] == 0) {
                
$pollOption['Bar'] = 0;
            }else {
                
$pollOption['Bar'] = ($pollOption['Votes'] / $post['data']['Votes']) * 100;
            }
            
// check if user select the option
            
$getOption $db->query(sprintf("SELECT * FROM users_polls_options WHERE UserID = %s AND PollID = %s AND OptionID = %s"Secure($userArray['UserID'], 'int'), Secure($post['PostID'], 'int'), Secure($pollOption['ID'], 'int') )) or die(ReportError('sql error #18 @/ajax/posts/get'));
            if(
$getOption->num_rows == 0) {
                
$pollOption['select'] = false;
            }else {
                
$pollOption['select'] = true;
                
$post['data']['selected'] = $pollOption['ID'];
            }
            
$post['pollOptions'][] = $pollOption;
        }
        
$post['data']['URL'] = GetURLText($post['data']['Question']);
        
    
// links posts
    
}elseif ($post['PostType'] == 8) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_links WHERE ID = %s"Secure($post['PostID'], 'int') )) or die(ReportError('sql error #19 @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
$post['data']['Text'] = DecodeText($post['data']['Text']);
        
$post['data']['Link'] = GetURLText($post['data']['Title']);
        
    
// forums posts
    
}elseif ($post['PostType'] == 9) {
        
        
$getData $db->query(sprintf("SELECT * FROM posts_forums WHERE ID = %s"Secure($post['PostID'], 'int') )) or die(ReportError('sql error #19r @/ajax/posts/get'));
        
$post['data'] = $getData->fetch_array(MYSQLI_ASSOC);
        
$post['data']['URL'] = GetURLText($post['data']['Title']);
        
    }
    
    
// check if user favorited this post before
    
$getPostStatus $db->query(sprintf("SELECT Favorited FROM users_posts_favorites WHERE UserID = %s AND PostType = %s AND PostID = %s"Secure($userArray['UserID'], 'int'), Secure($post['PostType'], 'int'), Secure($post['PostID'], 'int') )) or die(ReportError('sql error #20 @/ajax/posts/get'));
    if(
$getPostStatus->num_rows 0) {
        
$post['favorited'] = true;
    }else {
        
$post['favorited'] = false;
    }
    
    
// check if user liked|disliked this post before
    
$getPostStatus $db->query(sprintf("SELECT Liked FROM users_posts_likes WHERE UserID = %s AND PostType = %s AND PostID = %s"Secure($userArray['UserID'], 'int'), Secure($post['PostType'], 'int'), Secure($post['PostID'], 'int') )) or die(ReportError('sql error #21 @/ajax/posts/get'));
    if(
$getPostStatus->num_rows 0) {
        
$postStatus $getPostStatus->fetch_array(MYSQLI_ASSOC);
        
$post['liked'] = $postStatus['Liked'];
    }
    
    
// get comments
    
if($post['Comments'] > && $post['Comments'] <= $systemSetting['MaxQComments']) {
        
$post['prevComments'] = ($post['Comments'] > $systemSetting['MaxQCommentsViewed'])? $post['Comments'] - $systemSetting['MaxQCommentsViewed']: 0;
        
$getComments $db->query(sprintf("SELECT comm.*, user.UserName, user.UserFirstName, user.UserLastName, user.UserAvatarPathSmall AS UserAvatarPath FROM posts_comments comm INNER JOIN users user ON comm.UserID = user.UserID WHERE comm.PostType = %s AND comm.PostID = %s ".$whereStatementComments." ORDER BY comm.Time ASC LIMIT %s,".$systemSetting['MaxQCommentsViewed'], Secure($post['PostType'], 'int'), Secure($post['PostID'], 'int'), $post['prevComments'] )) or die(ReportError('sql error #22 @/ajax/posts/get'));
        while(
$comment $getComments->fetch_array(MYSQLI_ASSOC)) {
            
            
// check if user liked|disliked this comment before
            
$getCommentStatus $db->query(sprintf("SELECT Liked FROM users_comments_likes WHERE UserID = %s AND CommentID = %s"SafeSQL($userArray['UserID'], 'int'), SafeSQL($comment['ID'], 'int') )) or die(ReportError('sql error #23 @/ajax/posts/get'));
            if(
$getCommentStatus->num_rows 0) {
                
$commentStatus $getCommentStatus->fetch_array(MYSQLI_ASSOC);
                
$comment['liked'] = $commentStatus['Liked'];
            }
            
            
// decode comment text
            
$comment['Text'] = DecodeText($comment['Text']);
            
            
$post['comments'][] = $comment;
        }
    }
    
$posts[] = $post;
}

// get first & last node
$firstNode $posts[0]['ID'];
$lastNode end($posts);
$lastNode $lastNode['ID'];

// prepare sorting
switch ($_GET['sort']) {
    case 
"Most Recent":
        function 
sortArray($a$b){
            if(
$a['Time'] == $b['Time']){
                return 
0;
            }
            return (
$a['Time'] < $b['Time']) ? : -1;
        }
        
usort($postssortArray);
        break;
    case 
"Most Liked":
        function 
sortArray($a$b){
            if(
$a['Likes'] == $b['Likes']){
                return 
0;
            }
            return (
$a['Likes'] < $b['Likes']) ? : -1;
        }
        
usort($postssortArray);
        break;
    case 
"Most Favorited":
        function 
sortArray($a$b){
            if(
$a['Favorits'] == $b['Favorits']){
                return 
0;
            }
            return (
$a['Favorits'] < $b['Favorits']) ? : -1;
        }
        
usort($postssortArray);
        break;
    case 
"Most Discussed":
        function 
sortArray($a$b){
            if(
$a['Comments'] == $b['Comments']){
                return 
0;
            }
            return (
$a['Comments'] < $b['Comments']) ? : -1;
        }
        
usort($postssortArray);
        break;
    case 
"Most Answered":
        function 
sortArray($a$b){
            if(
$a['Answers'] == $b['Answers']){
                return 
0;
            }
            return (
$a['Answers'] < $b['Answers']) ? : -1;
        }
        
usort($postssortArray);
        break;
}

// assign variables
$smarty->assign('app'$_GET['app']);
$smarty->assign('posts'$posts);
$smarty->assign('firstNode'$firstNode);
$smarty->assign('lastNode'$lastNode);

// display page templete
$smarty->display("$page.tpl");

?>
Онлайн: 1
Реклама