whoisonline - расширение viewtopic.php возможностью узнать кто находится в просматриваемой теме
Эти моды - компиляция известных модов и сообщений на phpbbguru. Мне показалось, что проще всего их применять в "одном флаконе" и таком простом виде, как изложено ниже.
whoisonline:
1) В forum/includes/function.php добавить AFTER
Код: Выделить всё
// a little discrete magic to cache this for 30 seconds
$time = (time() - (intval($config['load_online_time']) * 60));Код: Выделить всё
// c61 whoisonline
if ( ($item_id != 0) && ($item == 'forum') )
{
$current_user_id = $user->data['user_id'];
$sql = 'SELECT s.session_forum_id, s.session_page
FROM ' . SESSIONS_TABLE . ' s
WHERE s.session_time >= ' . ($time - ((int) ($time % 30))) .
' AND s.session_user_id = ' . $current_user_id .
' AND s.session_user_id <> ' . ANONYMOUS;
$result = $db->sql_query($sql);
$forum_id = 0;
while ($row = $db->sql_fetchrow($result))
{
if ($row['session_forum_id'] == 0)
{
preg_match('#^([a-z0-9/_-]+)#i', $row['session_page'], $on_page);
if (!sizeof($on_page))
{
$on_page[1] = '';
}
switch ($on_page[1])
{
case 'viewtopic':
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql2 = 'SELECT forum_id FROM ' . POSTS_TABLE ." WHERE post_id = {$on_page_post[1]}";
$forum_result = $db->sql_query($sql2);
$forum_result_row = $db->sql_fetchrow($forum_result);
if ($forum_result_row)
{
$forum_id = $forum_result_row['forum_id'];
}
$db->sql_freeresult($forum_result);
}
break;
}
}
}
$db->sql_freeresult($result);
if ($forum_id != 0)
{
$sql_rep_change_session_forum_id = 'session_forum_id = ' . $forum_id;
$sql2 = 'UPDATE ' . SESSIONS_TABLE .
' SET ' . $sql_rep_change_session_forum_id .
' WHERE session_time >= ' . ($time - ((int) ($time % 30))) .
' AND session_user_id = ' . $current_user_id .
' AND session_user_id <> ' . ANONYMOUS;
$db->sql_query($sql2);
}
}
//2) В forum/includes/function.php REPLACE
Код: Выделить всё
$sql = 'SELECT s.session_user_id, s.session_ip, s.session_viewonline
FROM ' . SESSIONS_TABLE . ' s
WHERE s.session_time >= ' . ($time - ((int) ($time % 30))) .
$reading_sql .
' AND s.session_user_id <> ' . ANONYMOUS;Код: Выделить всё
// c61 whoisonline
$sql = 'SELECT s.session_user_id, s.session_ip, s.session_page, s.session_viewonline
FROM ' . SESSIONS_TABLE . ' s
WHERE s.session_time >= ' . ($time - ((int) ($time % 30))) .
$reading_sql .
' AND s.session_user_id <> ' . ANONYMOUS;
//3) В forum/includes/function.php добавить AFTER
Код: Выделить всё
// Skip multiple sessions for one user
if (!isset($online_users['online_users'][$row['session_user_id']]))
{
$online_users['online_users'][$row['session_user_id']] = (int) $row['session_user_id'];Код: Выделить всё
// c61 whoisonline
$online_users['online_users_page'][$row['session_user_id']] = 0;
$online_users['online_users_mode'][$row['session_user_id']] = 0;
preg_match('#^([a-z0-9/_-]+)#i', $row['session_page'], $on_page);
if (!sizeof($on_page))
{
$on_page[1] = '';
}
$do_page_sql = 0;
switch ($on_page[1])
{
case 'posting':
preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page);
$posting_mode = (!empty($on_page[1])) ? $on_page[1] : '';
switch ($posting_mode)
{
case 'reply':
case 'quote':
case 'edit':
$do_page_sql = 2;
break;
}
break;
case 'viewtopic':
$do_page_sql = 1;
break;
}
if ($do_page_sql)
{
preg_match('|t=([0-9]+)|', $row['session_page'], $on_page);
if (!empty($on_page[1]))
{
$sql2 = 'SELECT topic_id FROM ' . TOPICS_TABLE ." WHERE topic_id = {$on_page[1]}";
$topic_result = $db->sql_query($sql2);
$topic_result_row = $db->sql_fetchrow($topic_result);
if ($topic_result_row)
{
$online_users['online_users_page'][$row['session_user_id']] = $topic_result_row['topic_id'];
$online_users['online_users_mode'][$row['session_user_id']] = $do_page_sql - 1;
}
$db->sql_freeresult($topic_result);
}
else
{
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql2 = 'SELECT topic_id FROM ' . POSTS_TABLE ." WHERE post_id = {$on_page_post[1]}";
$topic_result = $db->sql_query($sql2);
$topic_result_row = $db->sql_fetchrow($topic_result);
if ($topic_result_row)
{
$online_users['online_users_page'][$row['session_user_id']] = $topic_result_row['topic_id'];
$online_users['online_users_mode'][$row['session_user_id']] = $do_page_sql - 1;
}
$db->sql_freeresult($topic_result);
}
}
}
//4) В forum/includes/function.php добавить AFTER
Код: Выделить всё
$sql = 'SELECT username, username_clean, user_id, user_type, user_allow_viewonline, user_colour
FROM ' . USERS_TABLE . '
WHERE ' . $db->sql_in_set('user_id', $online_users['online_users']) . '
ORDER BY username_clean ASC';
$result = $db->sql_query($sql);Код: Выделить всё
// c61 whoisonline
$current_user_id = $user->data['user_id'];
$current_topic_id = isset($online_users['online_users_page'][$current_user_id]) ? $online_users['online_users_page'][$current_user_id] : 0;
//5) В forum/includes/function.php добавить AFTER
Код: Выделить всё
$user_online_link = get_username_string(($row['user_type'] <> USER_IGNORE) ? 'full' : 'no_profile', $row['user_id'], $row['username'], $row['user_colour']);
$online_userlist .= ($online_userlist != '') ? ', ' . $user_online_link : $user_online_link;Код: Выделить всё
// c61 whoisonline
if ( ($current_topic_id != 0) && ($current_topic_id == $online_users['online_users_page'][$row['user_id']]) )
{
$online_userlist .= ($online_users['online_users_mode'][$row['user_id']] == 0) ? $user->lang['BROWSING_FORUM_IN_TOPIC'] : $user->lang['BROWSING_FORUM_IN_TOPIC_POSTING'];
}
//6) В forum/includes/language/en/common.php добавить AFTER
Код: Выделить всё
'BROWSING_FORUM_GUESTS' => 'Users browsing this forum: %1$s and %2$d guests',Код: Выделить всё
// c61 whoisonline
'BROWSING_FORUM_IN_TOPIC' => ' (at this topic)',
'BROWSING_FORUM_IN_TOPIC_POSTING' => ' (posting at this topic)',
//7) В forum/includes/language/ru/common.php добавить AFTER
Код: Выделить всё
'BROWSING_FORUM_GUESTS' => 'Сейчас этот форум просматривают: %1$s и гости: %2$d',Код: Выделить всё
// c61 whoisonline
'BROWSING_FORUM_IN_TOPIC' => ' (в этой теме)',
'BROWSING_FORUM_IN_TOPIC_POSTING' => ' (отвечает в этой теме)',
//Мод делался для phpbb 3.0.7, на 3.0.12 работает.
viewonline:
1) В ./forum/viewonline.php добавить AFTER
Код: Выделить всё
case 'index':
$location = $user->lang['INDEX'];
$location_url = append_sid("{$phpbb_root_path}index.$phpEx");
break;Код: Выделить всё
// c61 viewonline mod
case 'simplechat/index':
$location = $user->lang['CHAT'];
$location_url = append_sid("{$phpbb_root_path}simplechat/index.$phpEx");
break;
//2) В ./forum/viewonline.php добавить AFTER
Код: Выделить всё
case 'viewtopic':
$forum_id = $row['session_forum_id'];Код: Выделить всё
// c61 viewonline mod
switch ($on_page[1])
{
case 'viewtopic':
if ($forum_id == 0)
{
preg_match('|t=([0-9]+)|', $row['session_page'], $on_page_topic);
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql = 'SELECT t.forum_id FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE ." p WHERE t.topic_id = p.topic_id AND p.post_id = {$on_page_post[1]}";
}
if (!empty($on_page_topic[1]))
{
$sql = 'SELECT forum_id FROM ' . TOPICS_TABLE . " WHERE topic_id = {$on_page_topic[1]}";
}
$topic_result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($topic_result);
if ($topic_data) $forum_id = $topic_data['forum_id'];
$db->sql_freeresult($topic_result);
}
break;
}
//3) В ./forum/viewonline.php AFTER
Код: Выделить всё
switch ($posting_mode)
{
case 'reply':
case 'quote':удалить (закомментировать) строку:
Код: Выделить всё
$location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);вставить строки:
Код: Выделить всё
// c61 viewonline mod
case 'edit':
preg_match('|t=([0-9]+)|', $row['session_page'], $on_page);
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE ." p WHERE t.topic_id = p.topic_id AND p.post_id = {$on_page_post[1]}";
}
if (!empty($on_page[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . " WHERE topic_id = {$on_page[1]}";
}
$topic_result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($topic_result);
$location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name'], $topic_data['topic_title']);
$db->sql_freeresult($topic_result);
$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . ((!empty($on_page[1])) ? '&t=' . $on_page[1] : '&p=' . $on_page_post[1]));
$db->sql_freeresult($topic_result);
$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . ((!empty($on_page[1])) ? '&t=' . $on_page[1] : '&p=' . $on_page_post[1]));
//
break;4) В ./forum/viewonline.php AFTER
Код: Выделить всё
break;
case 'viewtopic':удалить (закомментировать) строку:
Код: Выделить всё
$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);вставить строки:
Код: Выделить всё
// c61 viewonline mod
preg_match('|t=([0-9]+)|', $row['session_page'], $on_page);
preg_match('|p=([0-9]+)|', $row['session_page'], $on_page_post);
if (!empty($on_page_post[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE ." p WHERE t.topic_id = p.topic_id AND p.post_id = {$on_page_post[1]}";
}
if (!empty($on_page[1]))
{
$sql = 'SELECT topic_title FROM ' . TOPICS_TABLE . " WHERE topic_id = {$on_page[1]}";
}
$topic_result = $db->sql_query($sql);
$topic_data = $db->sql_fetchrow($topic_result);
$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_data['topic_title']);
$db->sql_freeresult($topic_result);
$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . ((!empty($on_page[1])) ? '&t=' . $on_page[1] : '&p=' . $on_page_post[1]));
//5) В ./forum/language/en/common.php REPLACE
Код: Выделить всё
'READING_TOPIC' => 'Reading topic in %s',Код: Выделить всё
// c61 viewtopic mod
'READING_TOPIC' => 'Reading topic <%2$s> in <%1$s>',
//6) В ./forum/language/ru/common.php REPLACE
Код: Выделить всё
'READING_TOPIC' => 'Просмотр темы в форуме <%s>',Код: Выделить всё
// c61 viewtopic mod
'READING_TOPIC' => 'Просмотр темы <%2$s> в форуме <%1$s>',
//Мод делался для phpbb 3.0.7, на 3.0.12 работает.

