1
0
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:
Paul S. Owen
2003-06-19 16:22:12 +00:00
parent c0a013053a
commit 41f625656a

View File

@@ -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&amp;f=$forum_id&amp;st=$sort_days&amp;sk=$sort_key&amp;sd=$sort_dir", $topics_count, $config['topics_per_page'], $start), 'PAGINATION' => generate_pagination("viewforum.$phpEx$SID&amp;f=$forum_id&amp;st=$sort_days&amp;sk=$sort_key&amp;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&amp;f=$forum_id\">", '</a>') : '', 'MOD_CP' => ($auth->acl_gets('m_', $forum_id)) ? sprintf($user->lang['MCP'], "<a href=\"mcp.$phpEx?sid=$user->session_id&amp;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&amp;f=$forum_id&amp;t=$topic_id&amp;view=unread#unread\">" . $user->img('icon_post_newest', 'VIEW_NEWEST_POST') . '</a> ' : ''; $newest_post_img = ($unread_topic) ? "<a href=\"viewtopic.$phpEx$SID&amp;f=$forum_id&amp;t=$topic_id&amp;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);
} }