Code: Select all
##############################################################
## MOD Title: Viewforum No Query Join
## MOD Author: Dog Cow < [email protected] > (David) http://www.macgui.com
## MOD Description: This modification will alter your viewforum.php
## page so that it only queries from the topics_table. This may speed
## up forums with large numbers of topics.
## MOD Version: BETA
##
## Installation Level: Easy
## Installation Time: 5 Minutes
## Files To Edit: viewforum.php,
## posting.php,
## includes/functions_post.php
##
## Included Files: topic_update.php
Code: Select all
ALTER TABLE `phpbb_topics` ADD `topic_first_poster_name` VARCHAR( 25 ) NOT NULL AFTER `topic_first_post_id` ;
ALTER TABLE `phpbb_topics` ADD `topic_last_poster_id` MEDIUMINT( 8 ) NOT NULL DEFAULT '0' AFTER `topic_last_post_id` ,
ADD `topic_last_poster_name` VARCHAR( 25 ) NOT NULL AFTER `topic_last_poster_id` ,
ADD `topic_last_post_time` INT( 11 ) NOT NULL DEFAULT '0' AFTER `topic_last_poster_name` ;
Code: Select all
##
## Viewforum No Query Mod Patch by Dog Cow
## fixes ModCP split topic
##
#
#-----[ OPEN ]------------------------------------------
#
functions_admin.php
#
#-----[ FIND ]------------------------------------------
#
if ($row['total_posts'])
{
// Correct the details of this topic
$sql = 'UPDATE ' . TOPICS_TABLE . '
SET topic_replies = ' . ($row['total_posts'] - 1) . ', topic_first_post_id = ' . $row['first_post'] . ', topic_last_post_id = ' . $row['last_post'] . "
WHERE topic_id = $id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not update topic', '', __LINE__, __FILE__, $sql);
}
#
#-----[ AFTER,ADD ]-------------------------------------
#
// Viewforum No Query Mod Patch
$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time
FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
WHERE t.topic_id = $id
AND t.topic_poster = u.user_id
AND p.post_id = t.topic_first_post_id
AND p2.post_id = t.topic_last_post_id
AND u2.user_id = p2.poster_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
}
if ( $topicrow = $db->sql_fetchrow($result) )
{
$topic_id = $topicrow['topic_id'];
$topic_title = $topicrow['topic_title'];
$topic_first_poster_name= ( $topicrow['user_id'] != ANONYMOUS ) ? $topicrow['username'] : ( ( $topicrow['post_username'] != '' ) ? $topicrow['post_username'] : $lang['Guest'] );
$topic_last_poster_id = $topicrow[$i]['id2'];
$last_poster_name = ( $topicrow['id2'] == ANONYMOUS ) ? ( ($topicrow['post_username2'] != '' ) ? $topicrow['post_username2'] . ' ' : $lang['Guest'] . ' ' ) : $topicrow['user2'];
$last_post_time = $topicrow['post_time'];
$sql = "UPDATE " . TOPICS_TABLE . "
SET topic_first_poster_name = '$topic_first_poster_name', topic_last_poster_id = '$topic_last_poster_id', topic_last_poster_name = '$last_poster_name', topic_last_post_time = '$last_post_time'
WHERE topic_id = $id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not UPDATE topic information', '', __LINE__, __FILE__, $sql);
}
}
// End Mod Patch
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
#
# EoM
Code: Select all
##############################################################
## MOD Title: ModCP Merge Hack
## MOD Author: Sko22 < [email protected] > (N/A) http://www.quellicheilpc.it/
## MOD Description: This mod adds topics merge function in moderator control panel.
## MOD Version: 1.0.2
##
## Installation Level: Easy
## Installation Time: 5 Minutes
## Files To Edit:
## modcp.php
## viewtopic.php
## includes/functions_admin.php
## language/lang_english/lang_main.php
## templates/subSilver/subSilver.cfg
## templates/subSilver/modcp_body.tpl
## Included Files:
## templates/subSilver/modcp_merge.tpl
## templates/subSilver/images/topic_merge.gif
##############################################################
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbb.com/mods/
##############################################################
## Author Notes:
## I have tested this MOD whit phpBB 2.0.10 and MySQL Database 3.23.56
## This MOD is an updating to the ModCP Merge Hack realized by sickb0y < http://www.p2pitalia.com >
##
## Future versions can be found at http://www.quellicheilpc.it
## I've set up a support forum for my mods at http://www.quellicheilpc.it/forum
##
## This MOD is released under the GPL License.
## Intellectual Property is retained by the MOD Author(s) listed above
## Copyright: ©2004 ModCP Merge Hack 1.0.2 - Sko22 & sickb0y
##############################################################
## MOD History:
##
## 2004-10-16 - Version 1.0.2
## - Update for phpBB 2.0.10 from Sko22 < http://www.quellicheilpc.it >
## - Added Merge button in viewtopic.php
## 2003-03-23 - Version 1.0.1
## - ModCP Merge Hack realized by sickb0y < http://www.p2pitalia.com >
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################
#
#-----[ COPY ]------------------------------------------
#
copy templates/subSilver/modcp_merge.tpl to templates/subSilver/modcp_merge.tpl
copy templates/subSilver/images/topic_merge.gif to templates/subSilver/images/topic_merge.gif
#
#-----[ OPEN ]------------------------------------------
#
modcp.php
#
#-----[ FIND ]------------------------------------------
#
$unlock = ( isset($HTTP_POST_VARS['unlock']) ) ? TRUE : FALSE;
#
#-----[ AFTER, ADD ]------------------------------------------
#
$merge = ( isset($HTTP_POST_VARS['merge']) ) ? TRUE : FALSE;
#
#-----[ FIND ]------------------------------------------
#
else if ( $unlock )
{
$mode = 'unlock';
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
else if ( $merge )
{
$mode = 'merge';
}
#
#-----[ FIND ]------------------------------------------
#
message_die(GENERAL_MESSAGE, $lang['Topics_Unlocked'] . '<br /><br />' . $message);
break;
#
#-----[ AFTER, ADD ]------------------------------------------
#
case 'merge':
$page_title = $lang['Mod_CP'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
if ( $confirm )
{
if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
{
message_die(GENERAL_MESSAGE, $lang['None_selected']);
}
$new_topic_id = $HTTP_POST_VARS['new_topic'];
$topic_id_list = isset($HTTP_POST_VARS['topic_id_list']) ? $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
for ($i=0; $i < count($topic_id_list); $i++)
{
$old_topic_id = $topic_id_list[$i];
if ( $new_topic_id != $old_topic_id )
{
$sql = "UPDATE " . POSTS_TABLE . "
SET topic_id = $new_topic_id
WHERE topic_id = $topic_id_list[$i]";
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not update posts', '', __LINE__, __FILE__, $sql);
}
$sql = "DELETE FROM " . TOPICS_TABLE . "
WHERE topic_id = $topic_id_list[$i]";
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not update posts', '', __LINE__, __FILE__, $sql);
}
$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
WHERE topic_id = $topic_id_list[$i]";
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not update posts', '', __LINE__, __FILE__, $sql);
}
// Sync the forum indexes
sync('forum', $forum_id);
sync('topic', $new_topic_id);
$message = $lang['Topics_Moved'] . '<br /><br />';
}
else
{
$message = $lang['No_Topics_Moved'] . '<br /><br />';
}
}
if ( !empty($topic_id) )
{
$redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$new_topic_id&sid=" . $userdata['session_id'];
$message .= sprintf($lang['Click_return_topic'], '<a href="' . $redirect_page . '">', '</a>');
}
else
{
$redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
$message .= sprintf($lang['Click_return_modcp'], '<a href="' . $redirect_page . '">', '</a>');
}
$message = $message . '<br \><br \>' . sprintf($lang['Click_return_forum'], '<a href="' . "viewforum.$phpEx?" . POST_FORUM_URL . "=$old_forum_id&sid=" . $userdata['session_id'] . '">', '</a>');
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="3;url=' . $redirect_page . '">')
);
message_die(GENERAL_MESSAGE, $message);
}
else
{
if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
{
message_die(GENERAL_MESSAGE, $lang['None_selected']);
}
$hidden_fields = '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" /><input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
if ( isset($HTTP_POST_VARS['topic_id_list']) )
{
$topics = $HTTP_POST_VARS['topic_id_list'];
for($i = 0; $i < count($topics); $i++)
{
$hidden_fields .= '<input type="hidden" name="topic_id_list[]" value="' . intval($topics[$i]) . '" />';
}
}
else
{
$hidden_fields .= '<input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" />';
}
//
// Set template files
//
$template->set_filenames(array(
'mergetopic' => 'modcp_merge.tpl')
);
$template->assign_vars(array(
'MESSAGE_TITLE' => $lang['Confirm'],
'MESSAGE_TEXT' => $lang['Confirm_move_topic'],
'L_MERGE_TOPIC' => $lang['Merge_topic'],
'L_YES' => $lang['Yes'],
'L_NO' => $lang['No'],
'S_TOPIC_SELECT' => make_topic_select('new_topic', $forum_id),
'S_MODCP_ACTION' => append_sid("modcp.$phpEx"),
'S_HIDDEN_FIELDS' => $hidden_fields)
);
$template->pparse('mergetopic');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
}
break;
#
#-----[ FIND ]------------------------------------------
#
'L_UNLOCK' => $lang['Unlock'],
#
#-----[ AFTER, ADD ]------------------------------------------
#
'L_MERGE' => $lang['Merge'],
#
#-----[ OPEN ]------------------------------------------
#
viewtopic.php
#
#-----[ FIND ]------------------------------------------
#
$topic_mod .= "<a href=\"modcp.$phpEx?" . POST_TOPIC_URL . "=$topic_id&mode=split&sid=" . $userdata['session_id'] . '"><img src="' . $images['topic_mod_split'] . '" alt="' . $lang['Split_topic'] . '" title="' . $lang['Split_topic'] . '" border="0" /></a> ';
#
#-----[ AFTER, ADD ]------------------------------------------
#
$topic_mod .= "<a href=\"modcp.$phpEx?" . POST_TOPIC_URL . "=$topic_id&mode=merge&sid=" . $userdata['session_id'] . '"><img src="' . $images['topic_mod_merge'] . '" alt="' . $lang['Merge_topic'] . '" title="' . $lang['Merge_topic'] . '" border="0" /></a> ';
#
#-----[ OPEN ]------------------------------------------
#
includes/functions_admin.php
#
#-----[ FIND ]------------------------------------------
#
?>
#
#-----[ BEFORE, ADD ]------------------------------------------
#
function make_topic_select($box_name, $forum_id)
{
global $db, $userdata;
$is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
$sql = "SELECT topic_id, topic_title
FROM " . TOPICS_TABLE . "
WHERE forum_id = $forum_id
ORDER BY topic_title";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Couldn not obtain topics information', '', __LINE__, __FILE__, $sql);
}
$topic_list = '';
while( $row = $db->sql_fetchrow($result) )
{
$topic_list .= '<option value="' . $row['topic_id'] . '">' . $row['topic_title'] . '</option>';
}
$topic_list = ( $topic_list == '' ) ? '<option value="-1">-- ! No Topics ! --</option>' : '<select name="' . $box_name . '">' . $topic_list . '</select>';
return $topic_list;
}
#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_main.php
#
#-----[ FIND ]------------------------------------------
#
$lang['Unlock'] = 'Unlock';
#
#-----[ AFTER, ADD ]------------------------------------------
#
$lang['Merge'] = "Merge";
$lang['Merge_topic'] = "Merge to topic";
#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/subSilver.cfg
#
#-----[ FIND ]------------------------------------------
#
$images['topic_mod_split'] = "$current_template_images/topic_split.gif";
#
#-----[ AFTER, ADD ]------------------------------------------
#
$images['topic_mod_merge'] = "$current_template_images/topic_merge.gif";
#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/modcp_body.tpl
#
#-----[ FIND ]------------------------------------------
#
<input type="submit" name="unlock" class="liteoption" value="{L_UNLOCK}" />
#
#-----[ AFTER, ADD ]------------------------------------------
#
<input type="submit" name="merge" class="liteoption" value="{L_MERGE}" />
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Code: Select all
//
// All announcement data, this keeps announcements
// on each viewforum page ...
//
$sql = "SELECT t.*, u.username, u.user_id, u.user_level, u2.username as user2, u2.user_id as id2, u2.user_level as user_level2, p.post_time, p.post_username
FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . USERS_TABLE . " u2
WHERE t.forum_id = $forum_id
AND t.topic_poster = u.user_id
AND p.post_id = t.topic_last_post_id
AND p.poster_id = u2.user_id
AND t.topic_type = " . POST_ANNOUNCE . "
ORDER BY t.topic_last_post_id DESC ";
if ( !($result = $db->sql_query($sql, false, 'posts_')) )
{
message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
}
$topic_rowset = array();
$total_announcements = 0;
while( $row = $db->sql_fetchrow($result) )
{
$topic_rowset[] = $row;
$total_announcements++;
}
$db->sql_freeresult($result);
//
// Grab all the basic data (all topics except announcements)
// for this forum
//
$sql = "SELECT t.*, u.username, u.user_id, u.user_level, u2.username as user2, u2.user_id as id2, u2.user_level as user_level2, p.post_username, p2.post_username AS post_username2, p2.post_time
FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
WHERE t.forum_id = $forum_id
AND t.topic_poster = u.user_id
AND p.post_id = t.topic_first_post_id
AND p2.post_id = t.topic_last_post_id
AND u2.user_id = p2.poster_id
AND t.topic_type <> " . POST_ANNOUNCE . "
AND t.topic_title LIKE '$start_letter%'
$limit_topics_time
ORDER BY t.topic_type DESC, t.topic_last_post_id DESC
LIMIT $start, ".$board_config['topics_per_page'];
if ( !($result = $db->sql_query($sql, false, 'posts_')) )
{
message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
}
maybe the username color, but i dont know how to modify it to add user levels and also user colors..Dog Cow wrote:maybe. But how much do you know about MySQl/PHP? You could modify my MOD so it stores the user level colors in the topics table too.
Me? This makes it so that phpBB doesn't have to query the users and posts table to get a list of topics. This makes it faster by only querying the topics table. It's the same method that phpBB3 employs.JLA wrote:Could you elaborate more on how this will improve the speed and what sort of improvements you have observed.
Thanks in advance