[外掛]時效性會員群組

MODs Released by Other phpbb Sites
非官方認證通過之 MOD ,或許有安全性之疑慮,所有問題由原發表者回覆!

版主: 版主管理群

主題已鎖定
hpo14
竹貓忠實會員
竹貓忠實會員
文章: 414
註冊時間: 2003-05-10 16:37
來自: M Starbucks

[外掛]時效性會員群組

文章 hpo14 »

代碼: 選擇全部

#################################################
##名稱: 時效性會員群組 (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
##
#################################################
## 在增加此外掛前, 請務必備份所有需要修改的檔案 
#################################################
#
db_update.php 內容 (請複製, 存成db_update.php)

代碼: 選擇全部

<?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
:arrow: http://www.phpbbhacks.com/download/3974
非官方外掛問題區公告: [必看]請配合發問格式及明確主題發問(2004 02/16更新)

竹貓星球發問規則:
http://phpbb-tw.net/phpbb/viewtopic.php?t=16149

請不要濫用 私人訊息 或是 MSN 問問題...你以為竹貓是架好看的阿
主題已鎖定

回到「非官方認證外掛」