木子屋 Dnawo's BLOG

Dvbbs 8.2.0修改:管理员放权,楼主可管理跟贴

👤 dnawo 📅 2008-04-10 👁 5988 👍 0 💬 0 🔄 本站原创
通常在论坛中只有版主以上级别的人才拥有删除单贴的权限,个人觉得这不够人性化,楼主发表了一个话题,他应该有权决定谁可以参与回复,或者说是他可以决定哪些回复是有意义的并留下来,删除那些无意义的回复。如果管理员可以适当放权,让楼主可管理跟贴,个人觉得这不仅有助于提高论坛贴子的质量,并且还能给论坛管理员减少不少的工作量,可谓一举多得。下边我们就来修改Dvbbs Version 8.2.0实现上述功能。

1.模板修改

以管理员身份登录后台,依次打开"风格界面模板总管理→分页面模板(page_dispbbs)→界面风格→template.html(0)",搜索"{$canedit.end}",并在其后增加下边代码:
{$candel.begin}| <a href="admin_postings.asp?action=dele_a&BoardID={$pub.boardid}&replyID={$bbslist.announceid}&ID={$page.topicid}&star={$page.currentpage}&userid={$user.userid}" title="删除这个帖子">单贴删除</a> {$candel.end}

2.dispbbs.asp修改

1) 增加两个全局变量
Dim G_PostUserName,ParentID_a

2) 修改LoadTopicInfo函数(红色新增)
Sub LoadTopicInfo()
	AnnounceID	= Dvbbs.CheckNumeric(Request("ID"))
	If 0=AnnounceID Then Dvbbs.AddErrCode(30):Dvbbs.Showerr()
	G_CurrentPage = Dvbbs.CheckNumeric(Request("star"))
	If 0=G_CurrentPage Then G_CurrentPage=1
	Skin=Request("Skin")
	If Skin="" or Not IsNumeric(Skin) Then Skin=Dvbbs.Board_setting(42)
	Dim Rs, SQL, iLockSet, iTopicMode, sMove
	sMove		= request("move")
	iLockSet	= Dvbbs.CheckNumeric(Dvbbs.Board_Setting(71))
	SQL="Select top 1 TopicID,boardid,title,hits,isvote,child,pollid,LockTopic,PostTable,TopicMode,DateAndTime,Expression,GetMoneyType,PostUserid[color=Red],PostUserName[/color] From Dv_topic where "
	If ""=sMove Then
		SQL	= SQL & ("topicID=" & AnnounceID)
	Else
		SQL	= SQL & "BoardID=" & Dvbbs.BoardID & " and topicID"
		If "next"=sMove Then 
			SQL	= SQL & ("<" & AnnounceID & " order by topicID desc")
		Else
			SQL	= SQL & (">" & AnnounceID & " order by topicID")
		End If 
	End If 
	If Not IsObject(Conn) Then ConnectionDatabase
	Set Rs=Dvbbs.iCreateObject("Adodb.RecordSet")
	Rs.Open SQL,Conn,1,3
	Dvbbs.SqlQueryNum=Dvbbs.SqlQueryNum+1
	If Rs.eof or Rs.bof Then
		If ""<>sMove Then 
			Response.Write "<script language=""javascript"">alert(""已经是最后一条主题了!"");history.go(-1);</script>"
			Rs.Close
			Set Rs=Nothing 
			Response.End 
		Else
			Dvbbs.AddErrcode(32)
		End If 
	Else
		If CStr(Rs("BoardID"))<>CStr(Dvbbs.BoardID) Then Dvbbs.AddErrCode(29)
		G_Hits			= Dvbbs.CheckNumeric(Rs("hits"))
		Rs("hits")		= G_Hits+1
		G_LockTopic		= Rs("LockTopic")
		If 0=G_LockTopic And iLockSet<>0 And Datediff("d", Rs("DateAndTime"),Now())>iLockSet Then 
			G_LockTopic = 1
			Rs("LockTopic")	= G_LockTopic
		End If 
		On Error Resume Next 
		Rs.Update
		If Err Then Err.Clear
		G_TopicTitle	= Rs("title")
		G_IsVote		= Rs("isvote")
		G_Childs		= Rs("child")
		G_PollID		= Rs("pollid")
		G_Expression	= Rs("Expression")
		T_GetMoneyType	= Rs("GetMoneyType")
		TotalUsetable	= Rs("PostTable")
		iTopicMode		= Rs("topicmode")
		AnnounceID		= Rs("TopicID")
		PostUserid		= Rs("PostUserid")
		[color=Red]G_PostUserName  = Rs("PostUserName")[/color]
	End If 
	Rs.Close
	Set Rs=Nothing 
	Dvbbs.Showerr()
	G_TopicTitle		= Dvbbs.ChkBadWords(G_TopicTitle)
	ReplyID			= Dvbbs.CheckNumeric(Request("ReplyID"))
	If 0=ReplyID Then ReplyID=AnnounceID
	If iTopicMode<>1 Then G_TopicTitle=replace(G_TopicTitle, "<", "<")
	Dvbbs.Stats			= G_TopicTitle
	G_Childs			= G_Childs+1
	Select Case iTopicMode
		Case 2	G_TopicTitle	= "<font color=""red"">"&G_TopicTitle&"</font>"
		Case 3	G_TopicTitle	= "<font color=""blue"">"&G_TopicTitle&"</font>"
		Case 4	G_TopicTitle	= "<font color=""green"">"&G_TopicTitle&"</font>"
		Case Else 
	End Select 
End Sub 

3) 修改TPL_ParseArea函数(红色新增)
Sub TPL_ParseArea(sTokenName, sTemplate)
	Dim iUbd,sTemp
	Select Case sTokenName
		Case "bbslist"
			iUbd = UBound(G_ItemList, 2)
			If "1"=Dvbbs.Forum_ads(7) Then	Dvbbs.Forum_ads(14)=Split(Dvbbs.Forum_ads(14),"#####")
			For G_Floor=0 To iUbd
				'下面几个赋值用在dv_ubbcode.asp
				RootID_a	= G_ItemList(7, G_Floor)
				AnnounceID_a= RootID_a
				ReplyID_a	= G_ItemList(0, G_Floor)
				UserName	= G_ItemList(1, G_Floor)
				PostBuyUser = G_ItemList(19, G_Floor)
				[color=Red]ParentID_a  = G_ItemList(20, G_Floor)[/color]
				TPL_Scan	sTemplate
			Next 
		Case "userinfo"
			If G_ItemList(10, G_Floor)>0 Then
				If 2<>G_ItemList(8, G_Floor) or Dvbbs.BoardMaster or _
				Dvbbs.UserID=G_UserList(0, G_ItemList(10, G_Floor)-1) Then TPL_Scan	sTemplate
			End If 
		Case "boke"
			If 1=Dvbbs.Forum_setting(99) Then	TPL_Scan	sTemplate
		Case "bbslimit"
			sTemp=""
			If 1=G_ItemList(9, G_Floor) Then 
				If "1"<>Dvbbs.GroupSetting(41) Then sTemp="<div class=""limitinfo"">您无权查看精华帖子</div>"
			Else
				Select Case G_ItemList(16, G_Floor)
					Case 2 sTemp="<div class=""limitinfo"">内容被屏蔽</div>"
					Case 3 sTemp="<div class=""limitinfo"">内容待审核</div>"
					Case Else 
						If G_ItemList(10, G_Floor)>0 Then
							Select Case G_UserList(13, G_ItemList(10, G_Floor)-1)
								Case 1 sTemp="<div class=""limitinfo"">用户已被锁定</div>"
								Case 2 sTemp="<div class=""limitinfo"">用户已经被屏蔽</div>"
								Case Else 
							End Select 
						End If 
				End Select 
			End If 
			If ""<>sTemp Then
				TPL_Echo sTemp
			End If 
			If ""=sTemp or TrueMaster or (Dvbbs.Boardmaster And 3<>Dvbbs.UserGroupID) Then
				TPL_Scan	sTemplate
			End If
		Case "qcomic_plus"
			If Dvbbs.qcomic_plus Then
				If Trim(G_ItemList(21, G_Floor))<>"" And Trim(G_ItemList(21, G_Floor))<>"0" Then
					TPL_Scan	sTemplate
				End If
			End If
		Case "logined"
			If Dvbbs.userid>0 Then TPL_Scan	sTemplate
		Case "showvote"
			If G_IsVote>0 And 1=G_CurrentPage Then LoadAndParseVote sTemplate
		Case "canreply" 
			If G_CanReply Then TPL_Scan	sTemplate
		Case "canedit"
			If (IsSelfPost() And Dvbbs.GroupSetting(10)="1") or Dvbbs.boardmaster Then TPL_Scan	sTemplate
		[color=Red]Case "candel"
			If Dvbbs.MemberName=G_PostUserName And ParentID_a<>0 Then TPL_Scan sTemplate[/color]
		Case "tenpay"
			If Dvbbs.Board_Setting(67)=1 Then	TPL_Scan sTemplate
	End Select 
End Sub

3.修改admin_postings.asp中的Dv_Forum_Admin类

1) 新增一个私有变量
Private LoginUserIsPostUser

2) 修改Class_Initialize函数(红色新增)
Private Sub Class_Initialize()
	Dim doWealthMsg,douserEPMsg,douserCPMsg
	IP			=	Dvbbs.UserTrueIP
	LocalCanLockTopic	=	False
	LocalCanDelTopic	=	False
	LocalCanMoveTopic	=	False
	LocalCanTopTopic	=	False
	LocalCanBestTopic	=	False
	LocalCanAwardTopic	=	False
	LocalCanTopTopic_a	=	False
	LocalCanTopTopic_m	=	False
	LocalCanTopicMode	=	False
	'本论坛和上级论坛ID
	UpdateBoardID	=Application(Dvbbs.CacheName&"_boardlist").documentElement.selectSingleNode("board[@boardid='"&Dvbbs.BoardID&"']/@parentstr").text & "," & Dvbbs.BoardID
	doWealth		=	0
	douserEP		=	0
	douserCP		=	0
	doWealthMsg		=	""
	allmsg			=	"没有对用户进行分值操作"
	If Dvbbs.UserID=0 Then Dvbbs.AddErrCode(6)
	ID=Request("ID")
	If ID="" or IsNumeric(ID)=0 Then
		Dvbbs.AddErrCode(30)
	Else
		ID=Clng(ID)
	End If
	If IsNumeric(Request("replyID")) and Request("replyID")<>"" Then ReplyID=Request("replyID")

	If IsNumeric(Request("doWealth")) And Not (Request("doWealth")="0" or Request("doWealth")="") Then
		doWealth=Request("doWealth")
		doWealthMsg="金钱" & Request("doWealth") & ","
	End If
	If IsNumeric(Request("douserEP")) And Not (Request("douserEP")="0" or Request("douserEP")="") Then
		douserEP=Request("douserEP")
		douserEPMsg="经验" & Request("douserEP") & ","
	End If
	If IsNumeric(Request("douserCP")) And Not (Request("douserCP")="0" or Request("douserCP")="") Then
		douserCP=Request("douserCP")
		douserCPMsg="魅力" & Request("douserCP")
	End If
	If Not (doWealthMsg="" And douserEPMsg="" And douserCPMsg="") Then allmsg="用户操作:" & doWealthMsg & douserEPMsg & douserCPMsg

	If Dvbbs.ErrCodes<>"" Then Dvbbs.ShowErr

	Set Rs=Dvbbs.Execute("Select Title,Postusername,PostuserID,PostTable From Dv_Topic Where boardid="&dvbbs.boardid&" and TopicID="&ID)
	If Rs.Eof And Rs.Bof Then
		Dvbbs.AddErrCode(32)
	Else
		Topic=rs(0)
		Topicusername=rs(1)
		TopicuserID=Clng(rs(2))
		TotalUseTable=rs(3)
		[color=Red]'判断主题贴用户与当前登录用户是否一致
		If Topicusername=Dvbbs.MemberName Then
			LoginUserIsPostUser = True
		Else
			LoginUserIsPostUser = False
		End If[/color]
	End If
	Set Rs=Nothing			
	If Dvbbs.ErrCodes<>"" Then Dvbbs.ShowErr		
End Sub

3) main_a函数中找到:
Case "dele_a"
	doWealth=-Dvbbs.Forum_user(3)
	douserEP=-Dvbbs.Forum_user(8)
	douserCP=-Dvbbs.Forum_user(13)
	If Not CanAwardTopic Then seldisable="disabled"
	reaction="dele"
	Action="删除单贴"
	Check_AnnounceInfo()
	If Dvbbs.ErrCodes<>"" Then Exit Sub
	'判断用户是否有删除帖子权限
	If Not CanDelTopic Then Dvbbs.AddErrCode(28)
	If SysObjFso=True Then DelUpFile=1
	Decrease=2

修改为:
Case "dele_a"
	doWealth=-Dvbbs.Forum_user(3)
	douserEP=-Dvbbs.Forum_user(8)
	douserCP=-Dvbbs.Forum_user(13)
	If Not CanAwardTopic Then seldisable="disabled"
	reaction="dele"
	Action="删除单贴"
	Check_AnnounceInfo()
	If Dvbbs.ErrCodes<>"" Then Exit Sub
	'判断用户是否有删除帖子权限
	[color=Red]If (Not CanDelTopic) And (Not LoginUserIsPostUser) Then Dvbbs.AddErrCode(28)[/color]
	If SysObjFso=True Then DelUpFile=1
	Decrease=2

4) dele函数中找到:
'判断用户是否有删除帖子权限
If Not CanDelTopic Then
	Dvbbs.AddErrCode(28)
	Exit Sub
End If

修改为:
'判断用户是否有删除帖子权限
If (Not CanDelTopic) And (Not LoginUserIsPostUser) Then
	Dvbbs.AddErrCode(28)
	Exit Sub
End If


本次修改的两个文件和后台模板均已打包:点击下载

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 联盟同步存储过程修改前后对比 下一篇 → 一次精简JS代码过程