mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-01 22:40:39 +02:00
Mostly read tracking (re-)fixes ... it works again ... I'll try not to break it a second time ... other changes for Firebird compatibility
git-svn-id: file:///svn/phpbb/trunk@4148 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
@@ -35,7 +35,7 @@ $forum_id = (isset($_REQUEST['f'])) ? max(intval($_REQUEST['f']), 0) : 0;
|
|||||||
$start = (isset($_GET['start'])) ? max(intval($_GET['start']), 0) : 0;
|
$start = (isset($_GET['start'])) ? max(intval($_GET['start']), 0) : 0;
|
||||||
$mark_read = (!empty($_GET['mark'])) ? htmlspecialchars($_GET['mark']) : '';
|
$mark_read = (!empty($_GET['mark'])) ? htmlspecialchars($_GET['mark']) : '';
|
||||||
|
|
||||||
$sort_days = (!empty($_REQUEST['st'])) ? max(intval($_REQUEST['st']), 0) : ((!empty($user->data['user_show_days'])) ? $user->data['user_show_days'] : 0);
|
$sort_days = (isset($_REQUEST['st'])) ? max(intval($_REQUEST['st']), 0) : ((!empty($user->data['user_show_days'])) ? $user->data['user_show_days'] : 0);
|
||||||
$sort_key = (!empty($_REQUEST['sk'])) ? htmlspecialchars($_REQUEST['sk']) : ((!empty($user->data['user_sortby_type'])) ? $user->data['user_sortby_type'] : 't');
|
$sort_key = (!empty($_REQUEST['sk'])) ? htmlspecialchars($_REQUEST['sk']) : ((!empty($user->data['user_sortby_type'])) ? $user->data['user_sortby_type'] : 't');
|
||||||
$sort_dir = (!empty($_REQUEST['sd'])) ? htmlspecialchars($_REQUEST['sd']) : ((!empty($user->data['user_sortby_dir'])) ? $user->data['user_sortby_dir'] : 'd');
|
$sort_dir = (!empty($_REQUEST['sd'])) ? htmlspecialchars($_REQUEST['sd']) : ((!empty($user->data['user_sortby_dir'])) ? $user->data['user_sortby_dir'] : 'd');
|
||||||
|
|
||||||
@@ -60,6 +60,12 @@ else
|
|||||||
switch (SQL_LAYER)
|
switch (SQL_LAYER)
|
||||||
{
|
{
|
||||||
case 'oracle':
|
case 'oracle':
|
||||||
|
if ($config['load_db_lastread'])
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -71,19 +77,15 @@ else
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$sql_lastread = '';
|
$sql_lastread = $lastread_select = '';
|
||||||
$lastread_select = '';
|
|
||||||
$sql_where = '';
|
|
||||||
|
|
||||||
$tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_t'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_t'])) : array();
|
$tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_track'])) : array();
|
||||||
$tracking_forums = (isset($_COOKIE[$config['cookie_name'] . '_f'])) ? unserialize(stripslashes($_COOKIE[$config['cookie_name'] . '_f'])) : array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$sql_from = ($sql_lastread) ? '((' . FORUMS_TABLE . ' f LEFT JOIN ' . FORUMS_WATCH_TABLE . ' fw ON (fw.forum_id = f.forum_id AND fw.user_id = ' . $user->data['user_id'] . ")) $sql_lastread)" : '(' . FORUMS_TABLE . ' f LEFT JOIN ' . FORUMS_WATCH_TABLE . ' fw ON (fw.forum_id = f.forum_id AND fw.user_id = ' . $user->data['user_id'] . '))';
|
||||||
|
|
||||||
$sql = "SELECT f.*, fw.notify_status $lastread_select
|
$sql = "SELECT f.*, fw.notify_status $lastread_select
|
||||||
FROM ((" . FORUMS_TABLE . ' f
|
FROM $sql_from
|
||||||
LEFT JOIN ' . FORUMS_WATCH_TABLE . ' fw ON (fw.forum_id = f.forum_id
|
|
||||||
AND fw.user_id = ' . $user->data['user_id'] . "))
|
|
||||||
$sql_lastread)
|
|
||||||
WHERE f.forum_id = $forum_id";
|
WHERE f.forum_id = $forum_id";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,13 +177,10 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
|
|
||||||
|
|
||||||
// Do the forum Prune - cron type job ...
|
// Do the forum Prune - cron type job ...
|
||||||
if ($auth->acl_get('a_'))
|
if ($forum_data['prune_next'] < time() && $forum_data['enable_prune'])
|
||||||
{
|
{
|
||||||
if ($forum_data['prune_next'] < time() && $forum_data['enable_prune'])
|
include_once($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
|
||||||
{
|
auto_prune($forum_id, $forum_data['forum_flags'], $forum_data['prune_days'], $forum_data['prune_freq']);
|
||||||
include_once($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
|
|
||||||
auto_prune($forum_id, $forum_data['forum_flags'], $forum_data['prune_days'], $forum_data['prune_freq']);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -255,7 +254,7 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
|
|
||||||
|
|
||||||
// Basic pagewide vars
|
// Basic pagewide vars
|
||||||
$post_alt = (intval($forum_data['forum_status']) == ITEM_LOCKED) ? 'FORUM_LOCKED' : 'POST_NEW_TOPIC';
|
$post_alt = ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->lang['FORUM_LOCKED'] : $user->lang['POST_NEW_TOPIC'];
|
||||||
|
|
||||||
$template->assign_vars(array(
|
$template->assign_vars(array(
|
||||||
'PAGINATION' => generate_pagination("viewforum.$phpEx$SID&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $topics_count, $config['topics_per_page'], $start),
|
'PAGINATION' => generate_pagination("viewforum.$phpEx$SID&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $topics_count, $config['topics_per_page'], $start),
|
||||||
@@ -264,7 +263,7 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
'MOD_CP' => ($auth->acl_gets('m_', $forum_id)) ? sprintf($user->lang['MCP'], "<a href=\"mcp.$phpEx?sid=$user->session_id&f=$forum_id\">", '</a>') : '',
|
'MOD_CP' => ($auth->acl_gets('m_', $forum_id)) ? sprintf($user->lang['MCP'], "<a href=\"mcp.$phpEx?sid=$user->session_id&f=$forum_id\">", '</a>') : '',
|
||||||
'MODERATORS' => (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '',
|
'MODERATORS' => (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '',
|
||||||
|
|
||||||
'POST_IMG' => (intval($forum_data['forum_status']) == ITEM_LOCKED) ? $user->img('btn_locked', $post_alt) : $user->img('btn_post', $post_alt),
|
'POST_IMG' => ($forum_data['forum_status'] == ITEM_LOCKED) ? $user->img('btn_locked', $post_alt) : $user->img('btn_post', $post_alt),
|
||||||
'FOLDER_IMG' => $user->img('folder', 'NO_NEW_POSTS'),
|
'FOLDER_IMG' => $user->img('folder', 'NO_NEW_POSTS'),
|
||||||
'FOLDER_NEW_IMG' => $user->img('folder_new', 'NEW_POSTS'),
|
'FOLDER_NEW_IMG' => $user->img('folder_new', 'NEW_POSTS'),
|
||||||
'FOLDER_HOT_IMG' => $user->img('folder_hot', 'NO_NEW_POSTS_HOT'),
|
'FOLDER_HOT_IMG' => $user->img('folder_hot', 'NO_NEW_POSTS_HOT'),
|
||||||
@@ -305,14 +304,21 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
$total_topics = 0;
|
$total_topics = 0;
|
||||||
$row_ary = array();
|
$row_ary = array();
|
||||||
|
|
||||||
// TODO - Oracle support
|
|
||||||
|
switch (SQL_LAYER)
|
||||||
|
{
|
||||||
|
case 'oracle':
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$sql_from = (($config['load_db_lastread'] || $config['load_db_track']) && $user->data['user_id'] != ANONYMOUS) ? '(' . TOPICS_TABLE . ' t LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id'] . '))' : TOPICS_TABLE . ' t ';
|
||||||
|
}
|
||||||
|
|
||||||
$sql_approved = ($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1';
|
$sql_approved = ($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1';
|
||||||
$sql_tracking = (($config['load_db_lastread'] || $config['load_db_track']) && $user->data['user_id'] != ANONYMOUS) ? 'LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id'] . ')' : '';
|
|
||||||
$sql_select = (($config['load_db_lastread'] || $config['load_db_track']) && $user->data['user_id'] != ANONYMOUS) ? ', tt.mark_type, tt.mark_time' : '';
|
$sql_select = (($config['load_db_lastread'] || $config['load_db_track']) && $user->data['user_id'] != ANONYMOUS) ? ', tt.mark_type, tt.mark_time' : '';
|
||||||
|
|
||||||
$sql = "SELECT t.* $sql_select
|
$sql = "SELECT t.* $sql_select
|
||||||
FROM (" . TOPICS_TABLE . " t
|
FROM $sql_from
|
||||||
$sql_tracking)
|
|
||||||
WHERE t.forum_id IN ($forum_id, 0)
|
WHERE t.forum_id IN ($forum_id, 0)
|
||||||
AND t.topic_type = " . POST_ANNOUNCE . "
|
AND t.topic_type = " . POST_ANNOUNCE . "
|
||||||
ORDER BY $sql_sort_order";
|
ORDER BY $sql_sort_order";
|
||||||
@@ -320,14 +326,13 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
|
|
||||||
while($row = $db->sql_fetchrow($result))
|
while($row = $db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$row_ary[] = $row;
|
$rowset[] = $row;
|
||||||
$total_topics++;
|
$total_topics++;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
$sql = "SELECT t.* $sql_select
|
$sql = "SELECT t.* $sql_select
|
||||||
FROM (" . TOPICS_TABLE . " t
|
FROM $sql_from
|
||||||
$sql_tracking)
|
|
||||||
WHERE t.forum_id = $forum_id
|
WHERE t.forum_id = $forum_id
|
||||||
AND t.topic_type <> " . POST_ANNOUNCE . "
|
AND t.topic_type <> " . POST_ANNOUNCE . "
|
||||||
$sql_approved
|
$sql_approved
|
||||||
@@ -337,7 +342,7 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
|
|
||||||
while($row = $db->sql_fetchrow($result))
|
while($row = $db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$row_ary[] = $row;
|
$rowset[] = $row;
|
||||||
$total_topics++;
|
$total_topics++;
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
@@ -345,17 +350,39 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
// Okay, lets dump out the page ...
|
// Okay, lets dump out the page ...
|
||||||
if ($total_topics)
|
if ($total_topics)
|
||||||
{
|
{
|
||||||
|
if ($config['load_db_lastread'])
|
||||||
|
{
|
||||||
|
$mark_time_forum = $forum_data['mark_time'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$mark_time_forum = (isset($tracking_topics[$forum_id][0])) ? base_convert($tracking_topics[$forum_id][0], 36, 10) + $config['board_startdate'] : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mark_forum_read = true;
|
||||||
|
|
||||||
$i = $s_type_switch = 0;
|
$i = $s_type_switch = 0;
|
||||||
foreach ($row_ary as $row)
|
foreach ($rowset as $key => $row)
|
||||||
{
|
{
|
||||||
$topic_id = $row['topic_id'];
|
$topic_id = $row['topic_id'];
|
||||||
|
|
||||||
|
|
||||||
// How many replies? hhmmm 1? 2? let's find out
|
if ($config['load_db_lastread'])
|
||||||
|
{
|
||||||
|
$mark_time_topic = $row['mark_time'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$topic_id36 = base_convert($topic_id, 10, 36);
|
||||||
|
$mark_time_topic = (isset($tracking_topics[$forum_id][$topic_id36])) ? base_convert($tracking_topics[$forum_id][$topic_id36], 36, 10) + $config['board_startdate'] : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Replies
|
||||||
$replies = ($auth->acl_get('m_approve')) ? $row['topic_replies_real'] : $row['topic_replies'];
|
$replies = ($auth->acl_get('m_approve')) ? $row['topic_replies_real'] : $row['topic_replies'];
|
||||||
|
|
||||||
|
|
||||||
// Type and folder
|
// Topic type/folder
|
||||||
$topic_type = '';
|
$topic_type = '';
|
||||||
if ($row['topic_status'] == ITEM_MOVED)
|
if ($row['topic_status'] == ITEM_MOVED)
|
||||||
{
|
{
|
||||||
@@ -383,7 +410,7 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if ($replies >= intval($config['hot_threshold']))
|
if ($replies >= $config['hot_threshold'])
|
||||||
{
|
{
|
||||||
$folder = 'folder_hot';
|
$folder = 'folder_hot';
|
||||||
$folder_new = 'folder_hot_new';
|
$folder_new = 'folder_hot_new';
|
||||||
@@ -404,18 +431,19 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$unread_topic = ($user->data['user_id'] != ANONYMOUS) ? true : false;
|
|
||||||
if ($user->data['user_id'] != ANONYMOUS)
|
if ($user->data['user_id'] != ANONYMOUS)
|
||||||
{
|
{
|
||||||
$topic_check = (!$config['load_db_lastread']) ? $tracking_topics[$topic_id] : $row['mark_time'];
|
$unread_topic = true;
|
||||||
$forum_check = (!$config['load_db_lastread']) ? $tracking_forums[$forum_id] : $forum_data['mark_time'];
|
if ($mark_time_topic >= $row['topic_last_post_time'] || $mark_time_forum >= $row['topic_last_post_time'])
|
||||||
|
|
||||||
if ($topic_check >= $row['topic_last_post_time'] || $forum_check >= $row['topic_last_post_time'])
|
|
||||||
{
|
{
|
||||||
$unread_topic = false;
|
$unread_topic = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$unread_topic = false;
|
||||||
|
}
|
||||||
|
|
||||||
$newest_post_img = ($unread_topic) ? "<a href=\"viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&view=unread#unread\">" . $user->img('icon_post_newest', 'VIEW_NEWEST_POST') . '</a> ' : '';
|
$newest_post_img = ($unread_topic) ? "<a href=\"viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id&view=unread#unread\">" . $user->img('icon_post_newest', 'VIEW_NEWEST_POST') . '</a> ' : '';
|
||||||
$folder_img = ($unread_topic) ? $folder_new : $folder;
|
$folder_img = ($unread_topic) ? $folder_new : $folder;
|
||||||
@@ -523,35 +551,28 @@ if ($forum_data['forum_type'] == FORUM_POST)
|
|||||||
|
|
||||||
if ($config['load_db_lastread'])
|
if ($config['load_db_lastread'])
|
||||||
{
|
{
|
||||||
if ($row['mark_time'] >= $row['topic_last_post_time'] && !isset($update_forum))
|
if ((isset($row['mark_time']) && $row['topic_last_post_time'] > $row['mark_time']) || (empty($row['mark_time']) && $row['topic_last_post_time'] > $forum_data['mark_time']))
|
||||||
{
|
{
|
||||||
$update_forum = true;
|
$mark_forum_read = false;
|
||||||
}
|
|
||||||
else if ((isset($row['mark_time']) && $row['topic_last_post_time'] > $row['mark_time']) || (empty($row['mark_time']) && $row['topic_last_post_time'] > $forum_data['mark_time']))
|
|
||||||
{
|
|
||||||
$update_forum = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ($tracking_topics[$topic_id] >= $row['topic_last_post_time'] && !isset($update_forum))
|
if (($mark_time_topic && $row['topic_last_post_time'] > $mark_time_topic) || (!$mark_time_topic && $mark_time_forum && $row['topic_last_post_time'] > $mark_time_forum))
|
||||||
{
|
{
|
||||||
$update_forum = true;
|
$mark_forum_read = false;
|
||||||
}
|
|
||||||
else if ((isset($tracking_topics[$topic_id]) && $row['topic_last_post_time'] > $tracking_topics[$topic_id]) || (!isset($tracking_topics[$topic_id]) && $row['topic_last_post_time'] > $tracking_forums[$forum_id]))
|
|
||||||
{
|
|
||||||
$update_forum = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($rowset[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// This is rather a fudge but it's the best I can think of without requiring information
|
// This is rather a fudge but it's the best I can think of without requiring information
|
||||||
// on all topics (as we do in 2.0.x). It looks for unread or new topics, if it doesn't find
|
// on all topics (as we do in 2.0.x). It looks for unread or new topics, if it doesn't find
|
||||||
// any it updates the forum last read cookie. This requires that the user visit the forum
|
// any it updates the forum last read cookie. This requires that the user visit the forum
|
||||||
// after reading a topic
|
// after reading a topic
|
||||||
if ($user->data['user_id'] != ANONYMOUS && $update_forum)
|
if ($user->data['user_id'] != ANONYMOUS && $mark_forum_read)
|
||||||
{
|
{
|
||||||
markread('mark', $forum_id);
|
markread('mark', $forum_id);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user