Dvbbs 8.2.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,PostUserName 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")
        G_PostUserName  = Rs("PostUserName")
    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)
                ParentID_a  = G_ItemList(20, G_Floor)
                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
        Case "candel"
            If Dvbbs.MemberName=G_PostUserName And ParentID_a<>0 Then TPL_Scan sTemplate

        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)
        '判断主题贴用户与当前登录用户是否一致
        If Topicusername=Dvbbs.MemberName Then
            LoginUserIsPostUser = True
        Else
            LoginUserIsPostUser = False
        End If

    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
    '判断用户是否有删除帖子权限
    If (Not CanDelTopic) And (Not LoginUserIsPostUser) Then Dvbbs.AddErrCode(28)
    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 | 引用: 0 | 查看次数: 5522
发表评论
登录后再发表评论!