代碼: 選擇全部
#################################################
##名稱: 時效性會員群組 (Temporary Membership On Usergroups)
##作者: OXPUS < webmaster@oxpus.de > (Karsten Ude) http://www.oxpus.de
##描述: 這個外掛可以讓使用者加入特定的群組於限定的時間範圍.
## 在時間到期之後, 使用者將會被自動的取消該群組的身分.
##版本: 1.0.0
##
##難度: Intermediate
##花費: 10-15 分鐘
##修改: 8
## admin/admin_groups.php
## groupcp.php
## includes/page_header.php
## language/lang_english/lang_admin.php
## language/lang_english/lang_main.php
## templates/subSilver/groupcp_info_body.tpl
## templates/subSilver/group_pending_info.tpl
## templates/subSilver/admin/group_edit_body.tpl
##附帶: db_update.php
#################################################
## 作者:
## 上傳 db_update.php 到 phpbb 的主目錄, 並且以瀏覽器執行
## 此檔案將為您對資料庫做些需要的改變.
## 完成後, 請刪除此檔避免出現錯誤.
##
#################################################
## 演進:
## 2004-10-19 - 版本 1.0.0 首次釋出\r
##
#################################################
## 在增加此外掛前, 請務必備份所有需要修改的檔案
#################################################
#代碼: 選擇全部
<?php
/***************************************************************************
* db_update.php
* -------------------
*
* copyright : ?003 Freakin' Booty ;-P & Antony Bailey
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
if( !$userdata['session_logged_in'] )
{
$header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')) ) ? 'Refresh: 0; URL=' : 'Location: ';
header($header_location . append_sid("login.$phpEx?redirect=db_update.$phpEx", true));
exit;
}
if( $userdata['user_level'] != ADMIN )
{
message_die(GENERAL_MESSAGE, 'You are not authorised to access this page');
}
$page_title = 'Updating the database';
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
echo '<table width="100%" cellspacing="1" cellpadding="2" border="0" class="forumline">';
echo '<tr><th>Updating the database</th></tr><tr><td><span class="genmed"><ul type="circle">';
$sql = array();
$sql[] = "ALTER TABLE " . $table_prefix . "groups ADD COLUMN group_remaining TINYINT(11) DEFAULT '0' NOT NULL";
$sql[] = "ALTER TABLE " . $table_prefix . "groups ADD COLUMN group_remaining_time MEDIUMINT(11) DEFAULT '0' NOT NULL";
$sql[] = "ALTER TABLE " . $table_prefix . "user_group ADD COLUMN user_join_time INT(11) DEFAULT '0' NOT NULL";
$sql[] = "ALTER TABLE " . $table_prefix . "user_group ADD COLUMN user_remaining_time MEDIUMINT(5) unsigned DEFAULT '0' NOT NULL";
for( $i = 0; $i < count($sql); $i++ )
{
if( !$result = $db->sql_query ($sql[$i]) )
{
$error = $db->sql_error();
echo '<li>' . $sql[$i] . '<br /> +++ <font color="#FF0000"><b>Error:</b></font> ' . $error['message'] . '</li><br />';
}
\n else
{
echo '<li>' . $sql[$i] . '<br /> +++ <font color="#00AA00"><b>Successfull</b></font></li><br />';
}
}
echo '</ul></span></td></tr><tr><td class="catBottom" height="28"> </td></tr>';
echo '<tr><th>End</th></tr><tr><td><span class="genmed">Installation is now finished. Please be sure to delete this file now.<br />If you have run into any errors, please visit the <a href="http://www.phpbbhacks.com/forums" target="_phpbbhacks">phpBBHacks.com support forums</a> and ask someone for help.</span></td></tr>';
echo '<tr><td class="catBottom" height="28" align="center"><span class="genmed"><a href="' . append_sid("index.$phpEx") . '">Have a nice day</a></span></td></table>';
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>安裝文件.txt
代碼: 選擇全部
#
#-----[ OPEN ]------------------------------------------
#
admin/admin_groups.php
#
#-----[ FIND ]------------------------------------------
#
'group_moderator' => '',
#
#-----[ AFTER, ADD ]------------------------------------------
#
'group_remaining' => '',
'group_remaining_time' => '',
#
#-----[ FIND ]------------------------------------------
#
$group_hidden = ( $group_info['group_type'] == GROUP_HIDDEN ) ? ' checked="checked"' : '';
#
#-----[ AFTER, ADD ]------------------------------------------
#
$group_remaining = ( $group_info['group_remaining'] == TRUE ) ? ' checked="checked"' : '';
#
#-----[ FIND ]------------------------------------------
#
'GROUP_MODERATOR' => $group_moderator,
#
#-----[ AFTER, ADD ]------------------------------------------
#
'GROUP_REMAINING_TIME' => $group_info['group_remaining_time'],
#
#-----[ FIND ]------------------------------------------
#
'L_GROUP_DELETE_CHECK' => $lang['group_delete_check'],
#
#-----[ AFTER, ADD ]------------------------------------------
#
'L_GROUP_REMAINING' => $lang['group_remaining'],
'L_GROUP_REMAINING_TIME' => $lang['group_remaining_time'],
'L_GROUP_REMAINING_TIME_EXPLAIN' => $lang['group_remaining_time_explain'],
'L_GROUP_REMAINING_DAYS' => $lang['Days'],
#
#-----[ FIND ]------------------------------------------
#
'S_GROUP_HIDDEN_CHECKED' => $group_hidden,
#
#-----[ AFTER, ADD ]------------------------------------------
#
'S_GROUP_REMAINING_CHECKED' => $group_remaining,
#
#-----[ FIND ]------------------------------------------
#
$group_moderator = isset($HTTP_POST_VARS['username']) ? $HTTP_POST_VARS['username'] : '';
#
#-----[ AFTER, ADD ]------------------------------------------
#
$group_remaining = isset($HTTP_POST_VARS['group_remaining']) ? intval($HTTP_POST_VARS['group_remaining']) :
0;
$group_remaining_time = isset($HTTP_POST_VARS['group_remaining_time']) ? intval($HTTP_POST_VARS
['group_remaining_time']) : 0;
#
#-----[ FIND ]------------------------------------------
#
$sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
VALUES (" . $group_id . ", " . $group_moderator . ", 0)";
#
#-----[ IN_LINE FIND ]------------------------------------------
#
user_pending
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, user_join_time, user_remaining_time
#
#-----[ IN_LINE FIND ]------------------------------------------
#
)";
#
#-----[ IN_LINE BEFORE, ADD ]------------------------------------------
#
, 0, 0
#
#-----[ FIND ]------------------------------------------
#
$sql = "UPDATE " . GROUPS_TABLE . "
SET group_type = $group_type, group_name = '" . str_replace("\'", "''", $group_name) . "',
group_description = '" . str_replace("\'", "''", $group_description) . "', group_moderator = $group_moderator,
group_allow_pm='$group_allow_pm'
WHERE group_id = $group_id";
#
#-----[ IN_LINE FIND ]------------------------------------------
#
group_moderator = $group_moderator
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, group_remaining = $group_remaining, group_remaining_time = $group_remaining_time
#
#-----[ FIND ]------------------------------------------
#
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not update group', '', __LINE__, __FILE__, $sql);
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
$sql_update = '';
$group_moderator = $group_info['group_moderator'];
if ($group_info['group_remaining'] == 0 && $group_remaining == 1)
{
$user_join_time = ($group_remaining_time != 0) ? time() : 0;
$sql_update = "UPDATE " . USER_GROUP_TABLE . "
SET user_join_time = $user_join_time, user_remaining_time = " . $group_info
['group_remaining_time'] . "
WHERE group_id = " . $group_info['group_id'] . "
AND user_id <> $group_moderator";
}
else ($group_info['group_remaining'] == 1 && $group_remaining == 0 || $group_remaining_time != 0)
{
$sql_update = "UPDATE " . USER_GROUP_TABLE . "
SET user_join_time = 0, user_remaining_time = 0
WHERE user_remaining_time <> 0
AND user_id <> $group_moderator";
}
if ($sql_update != '' && !$db->sql_query($sql_update))
{
message_die(GENERAL_ERROR, 'Could not update user remaining time', '', __LINE__, __FILE__,
$sql_update);
}
#
#-----[ FIND ]------------------------------------------
#
$sql = "INSERT INTO " . GROUPS_TABLE . " (group_type, group_name, group_description, group_moderator,
group_allow_pm, group_single_user)
VALUES ($group_type, '" . str_replace("\'", "''", $group_name) . "', '" . str_replace("\'",
"''", $group_description) . "', $group_moderator, '$group_allow_pm', '0')";
#
#-----[ IN_LINE FIND ]------------------------------------------
#
group_single_user
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, group_remaining, group_remaining_time
#
#-----[ IN_LINE FIND ]------------------------------------------
#
)";
#
#-----[ IN_LINE BEFORE, ADD ]------------------------------------------
#
, $group_remaining, $group_remaining_time
#
#-----[ FIND ]------------------------------------------
#
$sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
\n VALUES ($new_group_id, $group_moderator, 0)";
#
#-----[ IN_LINE FIND ]------------------------------------------
#
user_pending
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, user_join_time, user_remaining_time
#
#-----[ IN_LINE FIND ]------------------------------------------
#
)";
#
#-----[ IN_LINE BEFORE, ADD ]------------------------------------------
#
, 0, 0
#
#-----[ OPEN ]------------------------------------------
#
groupcp.php
#
#-----[ FIND ]------------------------------------------
#
$sql = "SELECT ug.user_id, g.group_type
FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
WHERE g.group_id = $group_id
AND g.group_type <> " . GROUP_HIDDEN . "
AND ug.group_id = g.group_id";
#
#-----[ IN-LINE FIND ]------------------------------------------
#
g.group_type
#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
ug.user_join_time, ug.user_remaining_time, g.group_remaining, g.group_remaining_time
#
#-----[ FIND ]------------------------------------------
#
$sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
VALUES ($group_id, " . $userdata['user_id'] . ", 1)";
#
#-----[ IN-LINE FIND ]------------------------------------------
#
user_pending
#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
, user_join_time, user_remaining_time
#
#-----[ IN-LINE FIND ]------------------------------------------
#
)";
#
#-----[ IN-LINE BEFORE, ADD ]------------------------------------------
#
, 0, 0
#
#-----[ FIND ]------------------------------------------
#
case 'postgresql':
$sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod
#
#-----[ IN_LINE FIND ]------------------------------------------
#
g.group_type
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, g.group_remaining, g.group_remaining_time
#
#-----[ FIND ]------------------------------------------
#
case 'oracle':
$sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod
#
#-----[ IN_LINE FIND ]------------------------------------------
#
g.group_type
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, g.group_remaining, g.group_remaining_time
#
#-----[ FIND ]------------------------------------------
#
default:
$sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod
#
#-----[ IN_LINE FIND ]------------------------------------------
#
g.group_type
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, g.group_remaining, g.group_remaining_time
#
#-----[ FIND ]------------------------------------------
#
if ( !$is_moderator )
{
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("index.$phpEx") .
'">')
);
$message = $lang['Not_group_moderator'] . '<br /><br />' . sprintf($lang
['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');
message_die(GENERAL_MESSAGE, $message);
}
#
#-----[ AFTER, ADD ]------------------------------------------
#
$user_remaining_time = array();
if (isset($HTTP_POST_VARS['user_remaining_time']))
{
$user_remaining_time = $HTTP_POST_VARS['user_remaining_time'];
}
#
#-----[ FIND ]------------------------------------------
#
for ( $i=0; $i < count($keywords); $i++ )
{
#
#-----[ AFTER, ADD ]------------------------------------------
#
$user_pending = ($group_info['group_remaining'] == TRUE) ? 1 : 0;
$user_join_time = ($group_info['group_remaining_time'] != 0 || $user_remaining_time
[$i] != 0) ? time() : 0;
$user_remain_time = ($user_remaining_time[$i] != 0) ? $user_remaining_time[$i] :
$group_info['group_remaining_time'];
#
#-----[ FIND ]------------------------------------------
#
$sql = "INSERT INTO " . USER_GROUP_TABLE . " (user_id, group_id,
user_pending)
VALUES (" . $row['user_id'] . ", $group_id, 0)";
#
#-----[ IN_LINE FIND ]------------------------------------------
#
user_pending
#
#-----[ IN_LINE AFTER, ADD ]------------------------------------------
#
, user_join_time, user_remaining_time
#
#-----[ IN_LINE FIND ]------------------------------------------
#
0)";
#
#-----[ IN_LINE REPLACE WITH ]------------------------------------------
#
$user_pending, $user_join_time, $user_remain_time)";
#
#-----[ FIND ]------------------------------------------
#
$sql = "UPDATE " . USER_GROUP_TABLE . "
SET user_pending = 0
WHERE user_id IN ($sql_in)
AND group_id = $group_id";
#
#-----[ REPLACE WITH ]------------------------------------------
#
for ($i = 0; $i < count($members); $i++)
{
if ($group_info['group_remaining'] == TRUE)
{
$user_pending = (intval($user_remaining_time[$i]) != 0) ? 1 :
0;
$user_join_time = (intval($user_remaining_time[$i]) != 0 ||
$group_info['group_remaining_time'] != 0) ? time() : 0;
$user_remaining_time = intval($user_remaining_time[$i]);
}
else
{
$user_pending = 0;
$user_join_time = ($group_info['group_remaining_time'] != 0)
? time() : 0;
$user_remaining_time = $group_info['group_remaining_time'];
}
$sql_member = intval($members[$i]);
$sql = "UPDATE " . USER_GROUP_TABLE . "
SET user_pending = 0, user_join_time = $user_join_time,
user_remaining_time = $user_remaining_time
WHERE user_id = $sql_member
AND group_id = $group_id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not update user group
table', '', __LINE__, __FILE__, $sql);
}
}
$sql = '';
#
#-----[ FIND ]------------------------------------------
#
if ( !$db->sql_query($sql) )
#
#-----[ REPLACE WITH ]------------------------------------------
#
if ( $sql != '' && !$db->sql_query($sql) )
#
#-----[ FIND ]------------------------------------------
#
//
// Get user information for this group
//
$sql = "SELECT u.username,
#
#-----[ IN-LINE FIND ]------------------------------------------
#
u.username
#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
, user_remaining_time
#
#-----[ FIND ]------------------------------------------
#
$template->assign_vars(array(
'L_GROUP_INFORMATION' => $lang['Group_Information'],
#
#-----[ BEFORE, ADD ]------------------------------------------
#
if ($group_info['group_remaining'] == TRUE || $group_info['group_remaining_time'] != 0)
{
$group_remaining_time = $group_info['group_remaining_time'];
$l_group_remaining_time = (intval($group_info['group_remaining_time']) != 0) ? $lang
['User_group_remaining_time'] : '';
$l_days = ($group_info['group_remaining_time'] == 1) ? $lang['Day'] : $lang['Days'];
}
else
{
$group_remaining_time = '';
$l_group_remaining_time = '';
$l_days = '';
}
#
#-----[ FIND ]------------------------------------------
#
'L_GROUP_MEMBERSHIP' => $lang['Group_membership'],
#
#-----[ AFTER, ADD ]------------------------------------------
#
'L_USER_GROUP_REMAINING_TIME' => $lang['User_group_remaining_time'],
'L_GROUP_REMAINING_TIME' => $l_group_remaining_time,
'L_GROUP_REMAINING_DAYS' => $l_days,
#
#-----[ FIND ]------------------------------------------
#
'GROUP_DETAILS' => $group_details,
#
#-----[ AFTER, ADD ]------------------------------------------
#
'GROUP_REMAINING_TIME' => $group_remaining_time,
#
#-----[ FIND ]------------------------------------------
#
$template->assign_block_vars('member_row', array(
#
#-----[ BEFORE, ADD ]------------------------------------------
#
$user_remaining_time = ($group_members[$i]['user_remaining_time'] != 0) ? $group_members[$i]
['user_remaining_time'] : '';
$l_user_remaining_time = (intval($group_members[$i]['user_remaining_time']) != 0) ? $lang
['User_group_remaining_time'] : '';
$l_user_days = (intval($group_members[$i]['user_remaining_time']) == 1) ? $lang['Day'] : ((intval
($group_members[$i]['user_remaining_time']) == 0) ? '' : $lang['Days']);
#
#-----[ FIND ]------------------------------------------
#
'JOINED' => $joined,
#
#-----[ AFTER, ADD ]------------------------------------------
#
'L_USER_REMAINING_TIME' => $l_user_remaining_time,
'L_USER_REMAINING_DAYS' => $l_user_days,
'USER_REMAINING_TIME' => $user_remaining_time,
#
#-----[ FIND ]------------------------------------------
#
//
// Users pending in ONLY THIS GROUP (which is moderated by this user)
//
if ( $modgroup_pending_count )
{
for($i = 0; $i < $modgroup_pending_count; $i++)
{
#
#-----[ AFTER, ADD ]------------------------------------------
#
if ($group_info['group_remaining'] == TRUE && $group_info['group_remaining_time'] != 0)
{
$user_remaining_time = '<input type="text" name="user_remaining_time[]" size="3"
maxsize="5" class="post" value="'.$group_members[$i]['user_remaining_time'].'" />';
}
else if ($group_info['group_remaining'] == TRUE && $group_info['group_remaining_time'] == 0)
{
$user_remaining_time = 0;
}
else
{
$user_remaining_time = '';
}
#
#-----[ FIND ]------------------------------------------
#
'JOINED' => $joined,
#
#-----[ AFTER, ADD ]------------------------------------------
#
'USER_REMAINING_TIME' => $user_remaining_time,
#
#-----[ OPEN ]------------------------------------------
#
includes/page_header.php
#
#-----[FIND ]------------------------------------------
#
$l_online_users = sprintf($l_t_user_s, $total_online_users, $bots_online);
$l_online_users .= sprintf($l_r_user_s, $logged_visible_online).', ';
$l_online_users .= sprintf($l_h_user_s, $logged_hidden_online).', ';
$l_online_users .= sprintf($l_g_user_s, $guests_online);
}
#
#-----[ AFTER, ADD]------------------------------------------
#
// Delete remaining user from user groups
$sql = "DELETE FROM " . USER_GROUP_TABLE . "
WHERE user_pending <> " . TRUE . "
AND user_remaining_time <> 0
AND user_join_time <> 0
AND (" . time() . " - user_join_time) > (user_remaining_time * 86400)";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not remove temporary user from group', '', __LINE__, __FILE__, $sql);
}
#
#-----[ OPEN ]------------------------------------------
#
language/你的語言/lang_admin.php
#
#-----[ FIND ]------------------------------------------
#
$lang['group_delete_check'] = '刪除這個群組';
#
#-----[ AFTER, ADD ]------------------------------------
#
$lang['group_remaining'] = '為每個使用者開啟時效限制';
$lang['group_remaining_time'] = '為群組設定預定的有效時間';
$lang['group_remaining_time_explain'] = '輸入 0 則取消時效限制. 如果時效限制也是取消的話, 則該群組的所有使用者則永久有效';
#
#-----[ OPEN ]------------------------------------------
#
language/你的語言/lang_main.php
#
#-----[ FIND ]------------------------------------------
#
$lang['Memberships_pending'] = '會員身分審核中';
#
#-----[ AFTER, ADD ]------------------------------------
#
$lang['User_group_remaining_time'] = '時效限制';
$lang['Day'] = '天';
$lang['Days'] = '天';
#
#-----[ SAVE/CLOSE ALL FILES ]--------------------------
#
# EoM