## MOD Title: Moderators_optimization
## MOD Author: Профессор (Е.Подопригора, г.Орёл) http://www.dozor.org
## MOD Description: Мод позволяет избавиться от выполнения sql
## запросов при составлении списка модераторов
## на главной странице форума (index.php )и при выполнии viewforum.php
## MOD Version: 1.0 28 августа 2005г.
##
## Files To Edit: 4
## index.php
## templates/subSilver/index_body.tpl
## viewforum.php
## templates/subSilver/viewforum_body.tpl
##
## Files To Copy: 1
## admin/admin_moder_optimiz.php
##
##############################################################
#
#-----[ Выполнить ]---------------------------------------
#
Создать поле forum_moderators в таблице forums
Для этого запустите скопируйте в корневой каталог форума файл
create_moder_pole.php и выполните его,
либо выполните команду через sql админ
ALTER TABLE phpbb_forums
ADD forum_moderators text;
#
#-----[ Открыть и добавить в lang_admin.php ]-----------------------
#
$lang['Moderator_Optimiz'] = 'Синхронизировать список модераторов';
#
#-----[ Скопировать и выполнить ]--------------------------------
#
Скопируйте admin_moder_optimiz.php в admin/admin_moder_optimiz.php
Затем через админ панель выполните пункт "Синхронизировать список модераторов"
#
#-----[ Открыть ]---------------------------------------
#
index.php
#
#-----[ Найти ]------------------------------------------
#
// Obtain list of moderators of each forum
#
#-----[ Удалить всё до этих строк включительно ]-------------
#
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>';
}
$db->sql_freeresult($result);
#
#-----[ Найти и удалить ]--------------------------------------
#
if ( count($forum_moderators[$forum_id]) > 0 )
{
$l_moderators = ( count($forum_moderators[$forum_id]) == 1 ) ? $lang['Moderator'] : $lang['Moderators'];
$moderator_list = implode(', ', $forum_moderators[$forum_id]);
}
else
{
$l_moderators = ' ';
$moderator_list = ' ';
}
#
#-----[ Найти ]--------------------------------------
#
'MODERATORS' => $moderator_list,
#
#-----[ Заменить на ]--------------------------------------
#
'MODERATORS' => $forum_data[$j]['forum_moderators'],
#
#-----[ Найти и удалить ]-----------------------------------
#
'L_MODERATOR' => $l_moderators,
#
#-----[ Открыть ]---------------------------------------
#
templates/subSilver/index_body.tpl
#
#-----[ Найти и удалить ]-----------------------------------
#
{catrow.forumrow.L_MODERATOR}
#
#-----[ Открыть ]---------------------------------------
#
viewforum.php
#
#-----[ Найти ]-------------------------------------
#
// Obtain list of moderators of each forum
#
#-----[ Найти ]------------------------------------------
#
unset($moderators);
#
#-----[ Удалить ]------------------------------------------
#
Удалить всё, что стоит между этими строками
#
#-----[ Удалить строку]------------------------------------
#
'L_MODERATOR' => $l_moderators,
#
#-----[ Найти ]------------------------------------------
#
'MODERATORS' => $forum_moderators,
#
#-----[ Заменить на ]---------------------------------------
#
'MODERATORS' => $forum_row['forum_moderators'],
#
#-----[ Открыть ]---------------------------------------
#
viewforum_body.tpl
#
#-----[ Найти ]------------------------------------------
#
{L_MODERATOR}: {MODERATORS}
#
#-----[ Заменить на ]---------------------------------------
#
{MODERATORS}
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Файл create_moder_pole.php
Файл admin_moder_optimiz.php<?php
// create_moder_pole.php
// создаем поле в базе данных для описания списка модераторов
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'common.php');
include($phpbb_root_path . 'includes/functions_selects.'.$phpEx);
$sql = '
ALTER TABLE phpbb_forums
ADD forum_moderators text;
';
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not query announcements information', '', __LINE__, __FILE__, $sql);
}
echo('Complette');
?>
<?php
/******************************************************************
* admin_moder_optimiz.php
* -------------------------------
* begin : 28/08/2005
* copyright : Профессор (Е.Подопригора, ш.Орёл)
* www : http://dozor.org
*
* version : 1.0.0 - 26/08/2005
*
*
*********************************************************************/
define('IN_PHPBB', 1);
if( !empty($setmodules) ) {
$file = basename(__FILE__);
$module['Forums']['Moderator_Optimiz'] = $file;
return;
}
// Load default header
$phpbb_root_path = "./../";
require($phpbb_root_path . 'extension.inc');
require('./pagestart.' . $phpEx);
$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_id, topic_replies
FROM ((( " . FORUMS_TABLE . " f
LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_id = p.topic_id )
ORDER BY f.cat_id, f.forum_order";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
while( $row = $db->sql_fetchrow($result) ) {
$forum_data[] = $row;
}
if ( !($total_forums = count($forum_data)) ) {
message_die(GENERAL_MESSAGE, 'На этом сайте нет форумов');
}
// Составление списка модераторов
$sql = "SELECT aa.forum_id, u.user_id, u.username
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
WHERE aa.auth_mod = " . TRUE . "
AND g.group_single_user = 1
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
AND u.user_id = ug.user_id
GROUP BY u.user_id, u.username, aa.forum_id
ORDER BY aa.forum_id, u.user_id";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
}
$forum_moderators = array();
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>';
}
$db->sql_freeresult($result);
$sql = "SELECT aa.forum_id, g.group_id, g.group_name
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
WHERE aa.auth_mod = " . TRUE . "
AND g.group_single_user = 0
AND g.group_type <> " . GROUP_HIDDEN . "
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
GROUP BY g.group_id, g.group_name, aa.forum_id
ORDER BY aa.forum_id, g.group_id";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
}
while( $row = $db->sql_fetchrow($result) )
{
$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>';
}
$db->sql_freeresult($result);
// Конец составления списка модераторов
$sql = "SELECT f.forum_id
FROM " . FORUMS_TABLE . " f
ORDER BY f.cat_id, f.forum_order";
if( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
$forum_data = $db->sql_fetchrowset($result);
for ($i = 0; $i < count($forum_data); $i++)
{
$vspom_forum_id = $forum_data[$i][forum_id];
if ( count($forum_moderators[$vspom_forum_id]) > 0 ) {
$l_moderators = ( count($forum_moderators[$vspom_forum_id]) == 1 ) ? '<br>Модератор - ' : '<br>Модераторы: ';
$moderator_list = implode(', ', $forum_moderators[$vspom_forum_id]);
}
else {
$l_moderators = '';
$moderator_list = '';
}
$moderators_in_forum = $l_moderators . $moderator_list;
$sql = "UPDATE " . FORUMS_TABLE . "
SET forum_moderators = '" . $moderators_in_forum . "'
WHERE forum_id = $vspom_forum_id";
if( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
}
$sql = "SELECT f.*
FROM " . FORUMS_TABLE . " f
ORDER BY f.cat_id, f.forum_order";
if( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
$forum_data = $db->sql_fetchrowset($result);
echo '<b>Список модераторов синхронизирован для вывода на главной странице</b><br><br>';
echo '<table width="100%" cellpadding="2" cellspacing="1" border="1" class="forumline">';
for ($i = 0; $i < count($forum_data); $i++)
{
echo '<tr><td class="row1" align="left" valign="top">';
echo $forum_data[$i][forum_name] . '<br>';
echo $forum_data[$i]['forum_desc'] . '<br>';
echo $forum_data[$i]['forum_moderators'];
echo '<br></td></tr>';
}
echo '</table>';
include('./page_footer_admin.'.$phpEx);
?>