'failure'); if ($reason !== '') $error['reason'] = $reason; print $error; die(); } if (!empty($LoggedUser['DisableForums'])) { error_out('You do not have access to the forums!'); } include(SERVER_ROOT.'/classes/text.class.php'); // Text formatting class $Text = new TEXT; $UserID = empty($_GET['userid']) ? $LoggedUser['ID'] : $_GET['userid']; if (!is_number($UserID)) { error_out('User does not exist!'); } if (isset($LoggedUser['PostsPerPage'])) { $PerPage = $LoggedUser['PostsPerPage']; } else { $PerPage = POSTS_PER_PAGE; } list($Page, $Limit) = Format::page_limit($PerPage); $UserInfo = Users::user_info($UserID); extract(array_intersect_key($UserInfo, array_flip(array('Username', 'Enabled', 'Title', 'Avatar', 'Donor', 'Warned')))); $ViewingOwn = ($UserID === $LoggedUser['ID']); $ShowUnread = ($ViewingOwn && (!isset($_GET['showunread']) || !!$_GET['showunread'])); $ShowGrouped = ($ViewingOwn && (!isset($_GET['group']) || !!$_GET['group'])); if ($ShowGrouped) { $SQL = ' SELECT SQL_CALC_FOUND_ROWS MAX(p.ID) AS ID FROM forums_posts AS p LEFT JOIN forums_topics AS t ON t.ID = p.TopicID'; if ($ShowUnread) { $SQL .= ' LEFT JOIN forums_last_read_topics AS l ON l.TopicID = t.ID AND l.UserID = '.$LoggedUser['ID']; } $SQL .= ' LEFT JOIN forums AS f ON f.ID = t.ForumID WHERE p.AuthorID = '.$UserID.' AND ' . Forums::user_forums_sql(); if ($ShowUnread) { $SQL .= ' AND ((t.IsLocked = \'0\' OR t.IsSticky = \'1\') AND (l.PostID < t.LastPostID OR l.PostID IS NULL))'; } $SQL .= " GROUP BY t.ID ORDER BY p.ID DESC LIMIT $Limit"; $PostIDs = $DB->query($SQL); $DB->query('SELECT FOUND_ROWS()'); list($Results) = $DB->next_record(); if ($Results > $PerPage * ($Page - 1)) { $DB->set_query_id($PostIDs); $PostIDs = $DB->collect('ID'); $SQL = " SELECT p.ID, p.AddedTime, p.Body, p.EditedUserID, p.EditedTime, ed.Username, p.TopicID, t.Title, t.LastPostID, l.PostID AS LastRead, t.IsLocked, t.IsSticky FROM forums_posts as p LEFT JOIN users_main AS um ON um.ID = p.AuthorID LEFT JOIN users_info AS ui ON ui.UserID = p.AuthorID LEFT JOIN users_main AS ed ON ed.ID = p.EditedUserID JOIN forums_topics AS t ON t.ID = p.TopicID JOIN forums AS f ON f.ID = t.ForumID LEFT JOIN forums_last_read_topics AS l ON l.UserID = $UserID AND l.TopicID = t.ID WHERE p.ID IN (".implode(',', $PostIDs).') ORDER BY p.ID DESC'; $Posts = $DB->query($SQL); } } else { $SQL = ' SELECT SQL_CALC_FOUND_ROWS'; if ($ShowGrouped) { $SQL .= ' * FROM ( SELECT'; } $SQL .= ' p.ID, p.AddedTime, p.Body, p.EditedUserID, p.EditedTime, ed.Username, p.TopicID, t.Title, t.LastPostID,'; if ($UserID === $LoggedUser['ID']) { $SQL .= ' l.PostID AS LastRead,'; } $SQL .= " t.IsLocked, t.IsSticky FROM forums_posts as p LEFT JOIN users_main AS um ON um.ID = p.AuthorID LEFT JOIN users_info AS ui ON ui.UserID = p.AuthorID LEFT JOIN users_main AS ed ON ed.ID = p.EditedUserID JOIN forums_topics AS t ON t.ID = p.TopicID JOIN forums AS f ON f.ID = t.ForumID LEFT JOIN forums_last_read_topics AS l ON l.UserID = $UserID AND l.TopicID = t.ID WHERE p.AuthorID = $UserID AND " . Forums::user_forums_sql(); if ($ShowUnread) { $SQL .= ' AND ((t.IsLocked = \'0\' OR t.IsSticky = \'1\') AND (l.PostID < t.LastPostID OR l.PostID IS NULL) ) '; } $SQL .= ' ORDER BY p.ID DESC'; if ($ShowGrouped) { $SQL .= ' ) AS sub GROUP BY TopicID ORDER BY ID DESC'; } $SQL .= " LIMIT $Limit"; $Posts = $DB->query($SQL); $DB->query('SELECT FOUND_ROWS()'); list($Results) = $DB->next_record(); $DB->set_query_id($Posts); } $JsonResults = array(); while (list($PostID, $AddedTime, $Body, $EditedUserID, $EditedTime, $EditedUsername, $TopicID, $ThreadTitle, $LastPostID, $LastRead, $Locked, $Sticky) = $DB->next_record()) { $JsonResults[] = array( 'postId' => (int) $PostID, 'topicId' => (int) $TopicID, 'threadTitle' => $ThreadTitle, 'lastPostId' => (int) $LastPostID, 'lastRead' => (int) $LastRead, 'locked' => $Locked === '1', 'sticky' => $Sticky === '1', 'addedTime' => $AddedTime, 'body' => $Text->full_format($Body), 'bbbody' => $Body, 'editedUserId' => (int) $EditedUserID, 'editedTime' => $EditedTime, 'editedUsername' => $EditedUsername ); } print json_encode( array( 'status' => 'success', 'response' => array( 'currentPage' => (int) $Page, 'pages' => ceil($Results / $PerPage), 'threads' => $JsonResults ) ) );