mirror of
https://github.com/WhatCD/Gazelle.git
synced 2024-12-12 18:36:29 +00:00
256 lines
10 KiB
PHP
256 lines
10 KiB
PHP
<?
|
|
/*
|
|
User subscription page
|
|
*/
|
|
|
|
if (isset($LoggedUser['PostsPerPage'])) {
|
|
$PerPage = $LoggedUser['PostsPerPage'];
|
|
} else {
|
|
$PerPage = POSTS_PER_PAGE;
|
|
}
|
|
list($Page, $Limit) = Format::page_limit($PerPage);
|
|
|
|
View::show_header('Subscriptions','subscriptions,comments,bbcode');
|
|
|
|
$ShowUnread = (!isset($_GET['showunread']) && !isset($HeavyInfo['SubscriptionsUnread']) || isset($HeavyInfo['SubscriptionsUnread']) && !!$HeavyInfo['SubscriptionsUnread'] || isset($_GET['showunread']) && !!$_GET['showunread']);
|
|
$ShowCollapsed = (!isset($_GET['collapse']) && !isset($HeavyInfo['SubscriptionsCollapse']) || isset($HeavyInfo['SubscriptionsCollapse']) && !!$HeavyInfo['SubscriptionsCollapse'] || isset($_GET['collapse']) && !!$_GET['collapse']);
|
|
|
|
// The monster sql query:
|
|
/*
|
|
* Fields:
|
|
* Page (artist, collages, requests, torrents or forums)
|
|
* PageID (ArtistID, CollageID, RequestID, GroupID, TopicID)
|
|
* PostID (of the last read post)
|
|
* ForumID
|
|
* ForumName
|
|
* Name (for artists and collages; carries the topic title for forum subscriptions)
|
|
* LastPost (PostID of the last post)
|
|
* LastPostTime
|
|
* LastReadBody
|
|
* LastReadEditedTime
|
|
* LastReadUserID
|
|
* LastReadUsername
|
|
* LastReadAvatar
|
|
* LastReadEditedUserID
|
|
*/
|
|
$DB->query("
|
|
(SELECT
|
|
SQL_CALC_FOUND_ROWS
|
|
s.Page,
|
|
s.PageID,
|
|
lr.PostID,
|
|
null AS ForumID,
|
|
null AS ForumName,
|
|
IF(s.Page = 'artist', a.Name, co.Name) AS Name,
|
|
c.ID AS LastPost,
|
|
c.AddedTime AS LastPostTime,
|
|
c_lr.Body AS LastReadBody,
|
|
c_lr.EditedTime AS LastReadEditedTime,
|
|
um.ID AS LastReadUserID,
|
|
um.Username AS LastReadUsername,
|
|
ui.Avatar AS LastReadAvatar,
|
|
c_lr.EditedUserID AS LastReadEditedUserID
|
|
FROM users_subscriptions_comments AS s
|
|
LEFT JOIN users_comments_last_read AS lr ON lr.UserID = $LoggedUser[ID] AND lr.Page = s.Page AND lr.PageID = s.PageID
|
|
LEFT JOIN artists_group AS a ON s.Page = 'artist' AND a.ArtistID = s.PageID
|
|
LEFT JOIN collages AS co ON s.Page = 'collages' AND co.ID = s.PageID
|
|
LEFT JOIN comments AS c ON c.ID = (
|
|
SELECT MAX(ID)
|
|
FROM comments
|
|
WHERE Page = s.Page
|
|
AND PageID = s.PageID
|
|
)
|
|
LEFT JOIN comments AS c_lr ON c_lr.ID = lr.PostID
|
|
LEFT JOIN users_main AS um ON um.ID = c_lr.AuthorID
|
|
LEFT JOIN users_info AS ui ON ui.UserID = um.ID
|
|
WHERE s.UserID = $LoggedUser[ID] AND s.Page IN ('artist', 'collages', 'requests', 'torrents') AND (s.Page != 'collages' OR co.Deleted = '0')" . ($ShowUnread ? ' AND c.ID > IF(lr.PostID IS NULL, 0, lr.PostID)' : '') . "
|
|
GROUP BY s.PageID)
|
|
UNION ALL
|
|
(SELECT 'forums', s.TopicID, lr.PostID, f.ID, f.Name, t.Title, p.ID, p.AddedTime, p_lr.Body, p_lr.EditedTime, um.ID, um.Username, ui.Avatar, p_lr.EditedUserID
|
|
FROM users_subscriptions AS s
|
|
LEFT JOIN forums_last_read_topics AS lr ON lr.UserID = $LoggedUser[ID] AND s.TopicID = lr.TopicID
|
|
LEFT JOIN forums_topics AS t ON t.ID = s.TopicID
|
|
LEFT JOIN forums AS f ON f.ID = t.ForumID
|
|
LEFT JOIN forums_posts AS p ON p.ID = (
|
|
SELECT MAX(ID)
|
|
FROM forums_posts
|
|
WHERE TopicID = s.TopicID
|
|
)
|
|
LEFT JOIN forums_posts AS p_lr ON p_lr.ID = lr.PostID
|
|
LEFT JOIN users_main AS um ON um.ID = p_lr.AuthorID
|
|
LEFT JOIN users_info AS ui ON ui.UserID = um.ID
|
|
WHERE s.UserID = $LoggedUser[ID]" .
|
|
($ShowUnread ? " AND p.ID > IF(t.IsLocked = '1' AND t.IsSticky = '0'" . ", p.ID, IF(lr.PostID IS NULL, 0, lr.PostID))" : '') .
|
|
' AND ' . Forums::user_forums_sql() . "
|
|
GROUP BY t.ID)
|
|
ORDER BY LastPostTime DESC
|
|
LIMIT $Limit");
|
|
$Results = $DB->to_array(false, MYSQLI_ASSOC, false);
|
|
$DB->query('SELECT FOUND_ROWS()');
|
|
list($NumResults) = $DB->next_record();
|
|
|
|
$Debug->log_var($Results, 'Results');
|
|
|
|
$TorrentGroups = $Requests = array();
|
|
foreach ($Results as $Result) {
|
|
if ($Result['Page'] == 'torrents') {
|
|
$TorrentGroups[] = $Result['PageID'];
|
|
} elseif ($Result['Page'] == 'requests') {
|
|
$Requests[] = $Result['PageID'];
|
|
}
|
|
}
|
|
|
|
$TorrentGroups = Torrents::get_groups($TorrentGroups, true, true, false);
|
|
$Requests = Requests::get_requests($Requests);
|
|
|
|
?>
|
|
<div class="thin">
|
|
<div class="header">
|
|
<h2>Subscriptions<?=$ShowUnread ? ' with unread posts' . ($NumResults ? ' (' . $NumResults . ' new)' : '') : ''?></h2>
|
|
|
|
<div class="linkbox">
|
|
<?
|
|
if (!$ShowUnread) {
|
|
?>
|
|
<br /><br />
|
|
<a href="userhistory.php?action=subscriptions&showunread=1" class="brackets">Only display subscriptions with unread replies</a>
|
|
<?
|
|
} else {
|
|
?>
|
|
<br /><br />
|
|
<a href="userhistory.php?action=subscriptions&showunread=0" class="brackets">Show all subscriptions</a>
|
|
<?
|
|
}
|
|
if ($NumResults) {
|
|
?>
|
|
<a href="#" onclick="Collapse(); return false;" id="collapselink" class="brackets"><?=$ShowCollapsed ? 'Show' : 'Hide' ?> post bodies</a>
|
|
<?
|
|
}
|
|
?>
|
|
<a href="userhistory.php?action=catchup&auth=<?=$LoggedUser['AuthKey']?>" class="brackets">Catch up</a>
|
|
<a href="userhistory.php?action=posts&userid=<?=$LoggedUser['ID']?>" class="brackets">Go to post history</a>
|
|
<a href="userhistory.php?action=quote_notifications" class="brackets">Quote notifications</a>
|
|
</div>
|
|
</div>
|
|
<?
|
|
if (!$NumResults) {
|
|
?>
|
|
<div class="center">
|
|
No subscriptions<?=$ShowUnread ? ' with unread posts' : ''?>
|
|
</div>
|
|
<?
|
|
} else {
|
|
?>
|
|
<div class="linkbox">
|
|
<?
|
|
$Pages = Format::get_pages($Page, $NumResults, $PerPage, 11);
|
|
echo $Pages;
|
|
?>
|
|
</div>
|
|
<?
|
|
foreach ($Results as $Result) {
|
|
switch ($Result['Page']) {
|
|
case 'artist':
|
|
$Links = 'Artist: <a href="artist.php?id=' . $Result['PageID'] . '">' . display_str($Result['Name']) . '</a>';
|
|
$JumpLink = 'artist.php?id=' . $Result['PageID'] . '&postid=' . $Result['PostID'] . '#post' . $Result['PostID'];
|
|
break;
|
|
case 'collages':
|
|
$Links = 'Collage: <a href="collages.php?id=' . $Result['PageID'] . '">' . display_str($Result['Name']) . '</a>';
|
|
$JumpLink = 'collages.php?action=comments&collageid=' . $Result['PageID'] . '&postid=' . $Result['PostID'] . '#post' . $Result['PostID'];
|
|
break;
|
|
case 'requests':
|
|
if (!isset($Requests[$Result['PageID']])) {
|
|
continue;
|
|
}
|
|
$Request = $Requests[$Result['PageID']];
|
|
$CategoryName = $Categories[$CategoryID - 1];
|
|
|
|
$Links = 'Request: ';
|
|
if ($CategoryName == 'Music' || $CategoryName == 'Audiobooks' || $CategoryName == 'Comedy') {
|
|
$Links .= ($CategoryName == 'Music' ? Artists::display_artists(Requests::get_artists($Result['PageID'])) : '') . '<a href="requests.php?action=view&id=' . $Result['PageID'] . '" dir="ltr">' . $Request['Title'] . " [" . $Request['Year'] . "]</a>";
|
|
} else {
|
|
$Links .= '<a href="requests.php?action=view&id=' . $Result['PageID'] . '">' . $Request['Title'] . "</a>";
|
|
}
|
|
$JumpLink = 'requests.php?action=view&id=' . $Result['PageID'] . '&postid=' . $Result['PostID'] . '#post' . $Result['PostID'];
|
|
break;
|
|
case 'torrents':
|
|
if (!isset($TorrentGroups[$Result['PageID']])) {
|
|
continue;
|
|
}
|
|
$GroupInfo = $TorrentGroups[$Result['PageID']];
|
|
$Links = 'Torrent: ' . Artists::display_artists($GroupInfo['ExtendedArtists']) . '<a href="torrents.php?id=' . $GroupInfo['ID'] . '" dir="ltr">' . $GroupInfo['Name'] . '</a>';
|
|
if ($GroupInfo['Year'] > 0) {
|
|
$Links .= " [" . $GroupInfo['Year'] . "]";
|
|
}
|
|
if ($GroupInfo['ReleaseType'] > 0) {
|
|
$Links .= " [" . $ReleaseTypes[$GroupInfo['ReleaseType']] . "]";
|
|
}
|
|
$JumpLink = 'torrents.php?id=' . $GroupInfo['ID'] . '&postid=' . $Result['PostID'] . '#post' . $Result['PostID'];
|
|
break;
|
|
case 'forums':
|
|
$Links = 'Forums: <a href="forums.php?action=viewforum&forumid=' . $Result['ForumID'] . '">' . display_str($Result['ForumName']) . '</a> > ' .
|
|
'<a href="forums.php?action=viewthread&threadid=' . $Result['PageID'] .
|
|
'" class="tooltip" title="' . display_str($Result['Name']) . '">' .
|
|
display_str(Format::cut_string($Result['Name'], 75)) .
|
|
'</a>';
|
|
$JumpLink = 'forums.php?action=viewthread&threadid=' . $Result['PageID'] . '&postid=' . $Result['PostID'] . '#post' . $Result['PostID'];
|
|
break;
|
|
default:
|
|
error(0);
|
|
}
|
|
?>
|
|
<table class="forum_post box vertical_margin<?=(!Users::has_avatars_enabled() ? ' noavatar' : '')?>">
|
|
<colgroup>
|
|
<? if (Users::has_avatars_enabled()) { ?>
|
|
<col class="col_avatar" />
|
|
<? } ?>
|
|
<col class="col_post_body" />
|
|
</colgroup>
|
|
<tr class="colhead_dark notify_<?=$Result['Page']?>">
|
|
<td colspan="<?=Users::has_avatars_enabled() ? 2 : 1 ?>">
|
|
<span style="float: left;">
|
|
<?=$Links . ($Result['PostID'] < $Result['LastPost'] ? ' <span class="new">(New!)</span>' : '')?>
|
|
</span>
|
|
<span style="float: left;" class="tooltip last_read" title="Jump to last read">
|
|
<a href="<?=$JumpLink?>"></a>
|
|
</span>
|
|
<? if ($Result['Page'] == 'forums') { ?>
|
|
<span id="bar<?=$Result['PostID'] ?>" style="float: right;">
|
|
<a href="#" onclick="Subscribe(<?=$Result['PageID']?>); return false;" id="subscribelink<?=$Result['PageID']?>" class="brackets">Unsubscribe</a>
|
|
<? } else { ?>
|
|
<span id="bar_<?=$Result['Page'] . $Result['PostID'] ?>" style="float: right;">
|
|
<a href="#" onclick="SubscribeComments('<?=$Result['Page']?>', <?=$Result['PageID']?>); return false;" id="subscribelink_<?=$Result['Page'] . $Result['PageID']?>" class="brackets">Unsubscribe</a>
|
|
<? } ?>
|
|
|
|
<a href="#">↑</a>
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
<? if (!empty($Result['LastReadBody'])) { // if a user is subscribed to a topic/comments but hasn't accessed the site ever, LastReadBody will be null - in this case we don't display a post. ?>
|
|
<tr class="row<?=$ShowCollapsed ? ' hidden' : '' ?>">
|
|
<? if (Users::has_avatars_enabled()) { ?>
|
|
<td class="avatar" valign="top">
|
|
<?=Users::show_avatar($Result['LastReadAvatar'], $Result['LastReadUserID'], $Result['LastReadUsername'], $HeavyInfo['DisableAvatars'])?>
|
|
</td>
|
|
<? } ?>
|
|
<td class="body" valign="top">
|
|
<div class="content3">
|
|
<?=Text::full_format($Result['LastReadBody']) ?>
|
|
<? if ($Result['LastReadEditedUserID']) { ?>
|
|
<br /><br />
|
|
Last edited by <?=Users::format_username($Result['LastReadEditedUserID'], false, false, false) ?> <?=time_diff($Result['LastReadEditedTime'])?>
|
|
<? } ?>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<? } ?>
|
|
</table>
|
|
<? } ?>
|
|
<div class="linkbox">
|
|
<?=$Pages?>
|
|
</div>
|
|
<? }?>
|
|
</div>
|
|
<?
|
|
View::show_footer();
|