www.gusucode.com > ASP+ACCESS学生论坛设计与实现(源代码+论文+开题报告) > ASP+ACCESS学生论坛设计与实现(源代码+论文+开题报告)\13学生论坛ASPAC\BBS\admin_batch.asp

    <!--#include file="Conn.asp"-->
<!-- #include file="inc/const.asp" -->
<!--#include file="inc/dv_clsother.asp"-->
<%
Mybbs.LoadTemplates("fmanage")
Mybbs.Stats=template.Strings(1)
Mybbs.Nav()
Dim rootid 
Dim id
Dim Lasttopic,Lastpost
Dim lastrootid,lastpostuser
Dim ip,url
Dim title,content
Dim TotalUseTable
Dim ars
Dim rs,sql,i,sucmsg,ErrCodes
ip=Mybbs.UserTrueIP
If Mybbs.UserID=0 Then Mybbs.AddErrCode(6)
Dim UpdateBoardID,UpdateBoardID_1
If Mybbs.BoardParentID = 0 Then
	UpdateBoardID=Mybbs.BoardID
Else
	UpdateBoardID=Mybbs.Board_Data(3,0) & "," & Mybbs.BoardID
End If
If Request.form("announceid")="" Then Mybbs.AddErrCode(30)
Dim CanBatchTopic
CanBatchTopic=False
Mybbs.Head_var 1,Mybbs.Board_Data(4,0),"",""
If (Mybbs.master or Mybbs.superboardmaster or Mybbs.boardmaster) and Cint(Mybbs.GroupSetting(45))=1 Then CanBatchTopic=true
If Mybbs.FoundUserPer and Cint(Mybbs.GroupSetting(45))=1 Then
	CanBatchTopic=true
ElseIf Mybbs.FoundUserPer and Cint(Mybbs.GroupSetting(45))=0 Then
	CanBatchTopic=false
End If
If not CanBatchTopic Then Mybbs.AddErrCode(28)
Mybbs.ShowErr()
Main
Mybbs.ActiveOnline
Mybbs.Footer()

Sub Main
	Select Case Request("action")
	Case "lock"
		Topic_Batch_Lock
	Case "dele"
		Topic_Batch_Delete
	Case "move"
		Topic_Batch_Move
	Case "istop"
		'Topic_Batch_Istop
	Case "isbest"
		Topic_Batch_Isbest
	Case "topicmode"
		Topic_SetTopicMode
	Case Else
		Mybbs.AddErrCode(35)
	End Select
	If ErrCodes<>"" Then Response.redirect "showerr.asp?BoardID="&Mybbs.BoardID&"ErrCodes="&ErrCodes&"&action=OtherErr"
	Mybbs.ShowErr
End Sub

'批量专辑操作
Function Topic_SetTopicMode
Dim TopModeID
If Request.form("mode")<>"" and IsNumeric(Request.form("mode")) Then
	TopModeID=Cint(Request.form("mode"))
Else
	ErrCodes=ErrCodes+"<li>"+template.Strings(2)
	Exit Function
End If
Dim ID
For I=1 To Request.Form("Announceid").Count
	ID=Replace(Request.Form("Announceid")(I),"'","")
	ID=CLng(ID)
	Mybbs.Execute("Update Dv_Topic Set Mode="&TopModeID&" Where BoardID="&Mybbs.BoardID&" And TopicID=" & ID)
Next
	SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) Values ("&Id&","&Mybbs.BoardID&",'More','"&Mybbs.Membername&"','批量专辑操作','"&Ip&"',3)"
	Mybbs.Execute(SQL)
	sucmsg="<li>批量专辑操作成功。<li>您的操作信息已经记录在案。"
	Mybbs.Dvbbs_suc(sucmsg)
End Function

'批量锁定
Function Topic_Batch_Lock
	Dim ID
	For I=1 To Request.Form("Announceid").Count
		ID=Replace(Request.Form("Announceid")(I),"'","")
		ID=CLng(ID)
		Mybbs.Execute("update dv_Topic Set LockTopic=1 Where BoardID="&Mybbs.BoardID&" And TopicID=" & ID)
	Next
	SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) Values ("&Id&","&Mybbs.BoardID&",'More','"&Mybbs.Membername&"','批量锁定','"&Ip&"',3)"
	Mybbs.Execute(SQL)
	sucmsg="<li>帖子批量锁定成功。<li>您的操作信息已经记录在案。"
	Mybbs.Dvbbs_suc(sucmsg)
End Function

'批量删除
Function Topic_Batch_Delete
	Dim ID,toprs,iBoardTopStr
	Dim ChildNum,istop,Forum_AllTopNum,j,AllTopNum,Board_TopNum,TopNum,BoardTopStr
	ChildNum=0
	AllTopNum = Mybbs.CacheData(28,0)
	Board_TopNum= Mybbs.Board_Data(20,0)
	For I=1 To Request.Form("Announceid").Count
		ID=Replace(Request.Form("Announceid")(I),"'","")
		ID=CLng(ID)
		'更新发贴用户数据
		Set Rs=Mybbs.Execute("Select PostTable,Child,istop from dv_Topic Where BoardID="&Mybbs.BoardID&" And TopicID="&ID)
		If Not Rs.Eof Then
		TotalUseTable=Rs(0)
		ChildNum=ChildNum+Rs(1)
		istop=Rs(2)
		Mybbs.Execute("Update [dv_User] Set Userwealth=Userwealth-"&Mybbs.Forum_user(3)&",Usercp=Usercp-"&Mybbs.Forum_user(13)&",Userep=Userep-"&Mybbs.Forum_user(8)&" Where Userid In (Select PostUserID From "&TotalUseTable&" Where BoardID="&Mybbs.BoardID&" And Rootid="&ID&")")

		'更新帖子数据
		Mybbs.Execute("Update "&TotalUseTable&" Set Locktopic=BoardID,BoardID=444,isbest=0 Where BoardID="&Mybbs.BoardID&" And RootID=" & ID)
		Mybbs.Execute("update dv_Topic Set Locktopic=BoardID,BoardID=444,isbest=0 Where BoardID="&Mybbs.BoardID&" And TopicID="&ID)
		'更新上传附件数据
		Mybbs.Execute("update Dv_Upfile Set F_flag=4 Where F_BoardID="&Mybbs.BoardID&" And F_AnnounceID LIKE  '"&ID&"|"&"%' ")
		Mybbs.Execute("delete from dv_besttopic where rootid="&ID)
		End If
		'判断是否为固顶贴,是则更新固顶数据
		If istop=3 Then
			'将总固顶ID从总设置表去除
			Forum_AllTopNum=Split(AllTopNum,",")
			TopNum=""
			For j=0 to UBound(Forum_AllTopNum)
				If CStr(ID)<> CStr(Trim(Forum_AllTopNum(j))) Then
					If TopNum="" Then
						TopNum=Trim(Forum_AllTopNum(j))
					Else
						TopNum=TopNum&","&Trim(Forum_AllTopNum(j))
					End If
				End If
			Next
			AllTopNum=TopNum
		ElseIf istop=1 Then
			'固顶贴去除版面固顶ID
			Forum_AllTopNum=Split(Board_TopNum,",")
			TopNum=""
			For j=0 to UBound(Forum_AllTopNum)
				If CStr(ID)<> CStr(Trim(Forum_AllTopNum(j))) Then
					If TopNum="" Then
						TopNum=Trim(Forum_AllTopNum(j))
					Else
						TopNum=TopNum&","&Trim(Forum_AllTopNum(j))
					End If
				End If
			Next
			Board_TopNum=TopNum
		ElseIf istop=2 Then
			'查询此贴区固顶的所有版面ID
			Set toprs=Mybbs.Execute("Select BoardID,BoardTopStr From Dv_Board Where BoardTopStr Like '%"&ID&"%'")
			Do While Not TopRs.Eof
			If TopRs(1)="" Or IsNull(TopRs(1)) Then
				iBoardTopStr = ""
			Else
				If InStr(","&TopRs(1)&",",","&ID&",")>0 Then
					BoardTopStr = "," & topRs(1) & ","
					BoardTopStr = Split(BoardTopStr,",")
					For j = 1 To Ubound(BoardTopStr)-1
						If Cstr(Trim(BoardTopStr(j)))<>Cstr(ID) Then
							If iBoardTopStr="" Then
								iBoardTopStr = BoardTopStr(j)
							Else
								iBoardTopStr = iBoardTopStr & "," & BoardTopStr(j)
							End If
						End If
															
					Next
				Else
					iBoardTopStr = topRs(1)
				End If
			End If
			Mybbs.Execute("Update Dv_Board Set BoardTopStr='"&iBoardTopStr&"' Where BoardID="&TopRs(0))
			Mybbs.ReloadBoardInfo(TopRs(0))
			BoardTopStr = ""
			iBoardTopStr = ""
			topRs.Movenext
			Loop
		End If
	Next
	'总固顶数据发生变化,则更新数据
	If AllTopNum <> Mybbs.CacheData(28,0) Then
		Mybbs.Execute("Update Dv_Setup Set Forum_AllTopNum='"&AllTopNum&"'")
		Mybbs.Name="setup"
		Mybbs.ReloadSetup
	End If
	'固顶数据发生变化,则更新数据
	If Board_TopNum <> Mybbs.Board_Data(20,0) Then
		Mybbs.Execute("Update Dv_Board Set BoardTopStr='"&Board_TopNum&"' Where BoardID="&Mybbs.boardid)	
		Mybbs.ReloadBoardInfo(Mybbs.BoardID)
	End If
	'更新版面和总数据
	Set Rs=Mybbs.Execute("Select ParentStr,ParentID from dv_Board Where BoardID="&Mybbs.BoardID)
	If Rs(1)=0 Then
		UpdateBoardID=Mybbs.BoardID
	Else
		UpdateBoardID=Rs(0) & "," & Mybbs.BoardID
	End If
	Del_Math_Forum_Count ChildNum,i-1
	Math_Forum_Today(Mybbs.BoardID)
	LastCount(Mybbs.BoardID)
	SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) Values ("&ID&","&Mybbs.BoardID&",'More','"&Mybbs.Membername&"','批量删除','"&IP&"',3)"
	Mybbs.Execute(SQL)
	sucmsg="<li>帖子批量删除成功。<li>您的操作信息已经记录在案。"

	UpdateBoardID = Split(UpdateBoardID,",")
	For i = 0 To Ubound(UpdateBoardID)
		Mybbs.ReloadBoardInfo(UpdateBoardID(i))
	Next
	Mybbs.Name="setup"
	Mybbs.ReloadSetup
	Mybbs.Dvbbs_suc(sucmsg)
	Set Rs=Nothing
End Function

Function Topic_Batch_Move
	Dim ID,Newboard,Trs,ChildNum
	Dim F_announceID,SplitUpBoardID
	ChildNum=0
	If Request.form("newboard")="" or isnull(Request.form("newboard")) or not isnumeric(Request.form("newboard")) Then
		Response.redirect "showerr.asp?ErrCodes=<li>如果您是批量转移帖子请选择相关论坛。&action=OtherErr"
		Exit Function
	ElseIf Cint(Request.form("newboard"))=Cint(Mybbs.BoardID) Then
		Response.redirect "showerr.asp?ErrCodes=<li>请不要选择相同的论坛进行转移操作。&action=OtherErr"
		Exit Function
	Else
		newboard=Request.form("newboard")
	End If

	For i=1 To Request.Form("Announceid").Count
		Id=Replace(Request.Form("Announceid")(i),"'","")
		ID=CLng(ID)
		Set Rs=Mybbs.Execute("Select PostTable,Isbest,Child,IsTop from dv_Topic Where BoardID="&Mybbs.BoardID&" And TopicID="&ID)
		If Not(Rs.Eof And Rs.Bof) Then
			TotalUseTable = Rs(0)
			ChildNum = ChildNum + Rs(2)
			Mybbs.Execute("UPDATE " & TotalUseTable & " SET BoardID = " & Newboard & " WHERE BoardID = " & Mybbs.BoardID & " AND RootID = " & ID)
			Mybbs.Execute("UPDATE Dv_Topic SET BoardID = " & Newboard & " WHERE BoardID = " & Mybbs.BoardID & " AND TopicID = " & ID)
			If Rs(1) = 1 Then
				Mybbs.Execute("UPDATE Dv_Besttopic Set BoardID = " & Newboard & " WHERE BoardID = " & Mybbs.BoardID & " AND RootID = " & ID)
			End If
			'移动时判断是否固顶并作相关处理 2004-4-25 Mybbs.YangZheng
			If Rs("istop") > 0 Then
				Dim Yrs, TopstrinfoN, TopstrinfoO
				'读取新旧版面的固顶信息
				Set Yrs = Mybbs.Execute("SELECT BoardTopStr From Dv_Board Where Boardid = " & Mybbs.Boardid)
				TopstrinfoO = Yrs(0)
				Set Yrs = Mybbs.Execute("SELECT BoardTopStr From Dv_Board Where Boardid = " & Newboard)
				TopstrinfoN = Yrs(0)
				Yrs.Close:Set Yrs = Nothing
				'删除原固顶主题ID
				TopstrinfoO = Replace(TopstrinfoO, Cstr(ID)&",", "")
				TopstrinfoO = Replace(TopstrinfoO, ","&Cstr(ID), "")
				TopstrinfoO = Replace(TopstrinfoO, Cstr(ID), "")
				If TopstrinfoN = "" Or Isnull(TopstrinfoN) Then
					TopstrinfoN = Cstr(ID)
				ElseIf TopstrinfoN = Cstr(ID) Then
					TopstrinfoN = TopstrinfoN
				ElseIf Instr(TopstrinfoN, ","&Cstr(ID)) > 0 Then
					TopstrinfoN = TopstrinfoN
				Else
					TopstrinfoN = TopstrinfoN & "," & Cstr(ID)
				End If
				'更新当前版面固顶信息及缓存
				Sql = "UPDATE Dv_Board SET BoardTopStr = '" & TopstrinfoO & "' WHERE BoardID = " & Mybbs.Boardid
				Mybbs.Execute(Sql)
				Mybbs.ReloadBoardInfo(Mybbs.Boardid)
				'更新新版面固顶信息及缓存
				Sql = "UPDATE Dv_Board SET BoardTopStr = '" & TopstrinfoN & "' WHERE Boardid = " & Newboard
				Mybbs.Execute(Sql)
				Mybbs.ReloadBoardInfo(Newboard)
			End If
			'shinzeal加入批量移动上传文件数据
			F_announceID = ID & "|"
			Mybbs.Execute("UPDATE DV_Upfile SET F_Boardid = " & Newboard & " WHERE F_boardid = " & Mybbs.Boardid & " AND F_AnnounceID LIKE '" & F_announceID & "%'")
			'shinzeal加入批量移动上传文件数据结束
		End If
	Next
	'更新版面和总数据
	Set Rs=Mybbs.Execute("Select ParentStr from dv_Board Where BoardID="&Mybbs.BoardID)
	UpdateBoardID=Rs(0) & "," & Mybbs.BoardID
	Del_Math_Forum_Count ChildNum,i-1
	UpdateBoardID = Split(UpdateBoardID,",")
	For i = 0 To Ubound(UpdateBoardID)
		Mybbs.ReloadBoardInfo(UpdateBoardID(i))
	Next

	Set Rs=Mybbs.Execute("Select ParentStr from dv_Board Where BoardID="&Newboard)
	UpdateBoardID=Rs(0) & "," & Newboard
	Add_Math_Forum_Count ChildNum,i
	SplitUpBoardID = Split(UpdateBoardID,",")
	For i = 0 To Ubound(SplitUpBoardID)
		Mybbs.ReloadBoardInfo(SplitUpBoardID(i))
	Next
	Mybbs.Name="setup"
	Mybbs.ReloadSetup

	LastCount(Mybbs.BoardID)
	Math_Forum_Today(Mybbs.BoardID)
	Mybbs.ReloadBoardInfo(Mybbs.BoardID)

	LastCount(Newboard)
	Math_Forum_Today(Newboard)
	Mybbs.ReloadBoardInfo(Newboard)

	SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) Values ("&ID&","&Mybbs.BoardID&",'More','"&Mybbs.Membername&"','批量移动','"&IP&"',3)"
	Mybbs.Execute(SQL)

	sucmsg="<li>帖子批量移动成功。<li>您的操作信息已经记录在案。"

	Mybbs.Dvbbs_suc(sucmsg)
	Set Rs=Nothing
End Function

Function Topic_Batch_Istop

	Dim ID
	For I=1 To Request.Form("Announceid").Count
		ID=replace(Request.form("Announceid")(i),"'","")
		ID=CLng(ID)
		If IsSqlDataBase=1 Then
		Mybbs.Execute("update dv_Topic Set Istop=1,LastPostTime=Dateadd(day,100,LastPostTime) Where BoardID="&Mybbs.BoardID&" And TopicID="&ID)
		else
		Mybbs.Execute("update dv_Topic Set Istop=1,LastPostTime=Dateadd('d',100,LastPostTime) Where BoardID="&Mybbs.BoardID&" And TopicID="&ID)
		end if
	Next

	SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) Values ("&ID&","&Mybbs.BoardID&",'More','"&Mybbs.Membername&"','批量固顶','"&IP&"',4)"
	Mybbs.Execute(SQL)
	sucmsg="<li>帖子批量固顶成功。<li>您的操作信息已经记录在案。"

	Mybbs.ReloadBoardInfo(Mybbs.BoardID)

	Mybbs.Dvbbs_suc(sucmsg)

End Function

Function Topic_Batch_Isbest

	Dim ID
	For I=1 To Request.Form("Announceid").Count

		ID=replace(Request.form("Announceid")(i),"'","")
		ID=CLng(ID)
		Set Rs=Mybbs.Execute("Select PostTable from dv_Topic Where BoardID="&Mybbs.BoardID&" And TopicID="&ID)
		TotalUseTable=Rs(0)

		Set Rs=Mybbs.Execute("Select Top 1 * From "&TotalUseTable&" Where RootID="&ID&" Order By AnnounceID")
		If Not (Rs.Eof And Rs.Bof) Then

		SQL="insert into Dv_bestTopic (Title,BoardID,Announceid,Rootid,Postusername,Postuserid,Dateandtime,Expression) Values ('"&Mybbs.Checkstr(Rs("Topic"))&"',"&Rs("BoardID")&","&Rs("Announceid")&","&Rs("Rootid")&",'"&Mybbs.Checkstr(Rs("Username"))&"',"&Rs("Postuserid")&",'"&Rs("Dateandtime")&"','"&Rs("Expression")&"')"
		Mybbs.Execute(SQL)
	
		Mybbs.Execute("Update "&TotalUseTable&" Set Isbest=1 Where AnnounceID=" & Rs("AnnounceID"))
		Mybbs.Execute("update dv_Topic Set Isbest=1 Where TopicID="&ID)

		End If

	Next

	SQL="insert into Dv_Log (L_AnnounceID,L_BoardID,L_ToUser,L_UserName,L_Content,L_IP,l_type) values ("&ID&","&Mybbs.BoardID&",'more','"&Mybbs.Membername&"','批量精华','"&IP&"',3)"
	Mybbs.Execute(SQL)

	sucmsg="<li>帖子批量精华成功。<li>您的操作信息已经记录在案。"

	Mybbs.Dvbbs_suc(sucmsg)
	Set Rs=Nothing

End Function

'更新指定论坛信息
Function LastCount(BoardID)

	Dim LastTopic,body,LastRootid,LastPostTime,LastPostUser
	Dim LastPost,uploadpic_n,Lastpostuserid,Lastid

	Set Rs=Mybbs.Execute("Select Top 1 T.title,B.Announceid,B.Dateandtime,B.Username,B.Postuserid,B.Rootid From "&Mybbs.NowUseBBS&" b Inner Join dv_Topic T On b.rootid=T.TopicID Where B.BoardID="&BoardID&" Order By B.Announceid Desc")

	If Not(Rs.Eof And Rs.Bof) Then
		Lasttopic=replace(left(Rs(0),15),"$","")
		LastRootid=Rs(1)
		LastPostTime=Rs(2)
		LastPostUser=Rs(3)
		LastPostUserid=Rs(4)
		Lastid=Rs(5)
	Else
		LastTopic="无"
		LastRootid=0
		LastPostTime=now()
		LastPostUser="无"
		LastPostUserid=0
		Lastid=0
	End If
	Set Rs=Nothing

	LastPost=LastPostUser & "$" & LastRootid & "$" & LastPostTime & "$" & LastTopic & "$" & uploadpic_n & "$" & LastPostUserID & "$" & LastID & "$" & BoardID

	Dim SplitUpBoardID,SplitLastPost
	SplitUpBoardID=Split(UpdateBoardID,",")

	For i=0 to Ubound(SplitUpBoardID)

		Set Rs=Mybbs.Execute("Select LastPost from dv_Board Where BoardID="&SplitUpBoardID(i))
		If Not (Rs.Eof And Rs.Bof) Then
			SplitLastPost=Split(Rs(0),"$")
			If SplitLastPost(1)="" or Isnull(SplitLastPost(1)) Then SplitLastPost(1)=0
			If Ubound(SplitLastPost)=7 and Clng(LastRootID)<>Clng(SplitLastPost(1)) Then
				Mybbs.Execute("update dv_Board Set LastPost='"&LastPost&"' Where BoardID="&SplitUpBoardID(i))
				Mybbs.ReloadBoardInfo(SplitUpBoardID(i))
			End If
		End If

	Next

	Set Rs=Nothing
End Function

Function Del_Math_Forum_Count(TopicNum,BBSNUM)

	Mybbs.Execute("Update dv_setup Set Forum_postNum=Forum_postNum-"&TopicNum&",Forum_TopicNum=Forum_TopicNum-"&BBSNUM&"")
	Mybbs.Execute("update dv_Board Set postnum=postnum-"&TopicNum&",topicnum=topicnum-"&BBSNUM&" Where BoardID In ("&UpdateBoardID&")")

End Function

Function Add_Math_Forum_Count(TopicNum,BBSNUM)

	Mybbs.Execute("Update dv_setup Set Forum_postNum=Forum_postNum+"&TopicNum&",Forum_TopicNum=Forum_topicNum+"&BBSNUM&"")
	Mybbs.Execute("update dv_Board Set postnum=postnum+"&TopicNum&",topicnum=topicnum+"&BBSNUM&" Where BoardID In ("&UpdateBoardID&")")

End Function


'今日帖子
Function Math_Forum_Today(BoardID)

	Dim MathForumToday
	if IsSqlDataBase=1 then
	Set Rs=Mybbs.Execute("Select Count(*) From "&Mybbs.NowUseBBS&" Where BoardID="&BoardID&" And Datediff(d,Dateandtime,"&SqlNowString&")=0")
	else
	Set Rs=Mybbs.Execute("Select Count(*) From "&Mybbs.NowUseBBS&" Where BoardID="&BoardID&" And Datediff('d',Dateandtime,"&SqlNowString&")=0")
	end if
	MathForumToday=Rs(0)
	Set Rs=Nothing
	If Isnull(MathForumToday) Then MathForumToday=0
	Mybbs.Execute("update dv_Board Set Todaynum="&MathForumToday&" Where Boardid="&BoardID)

	if IsSqlDataBase=1 then
	Set Rs=Mybbs.Execute("Select Count(*) From "&Mybbs.NowUseBBS&" Where (Not BoardID in (444,777)) And Datediff(d,Dateandtime,"&SqlNowString&")=0")
	else
	Set Rs=Mybbs.Execute("Select Count(*) From "&Mybbs.NowUseBBS&" Where (Not BoardID in (444,777)) And Datediff('d',Dateandtime,"&SqlNowString&")=0")
	end if
	MathForumToday=Rs(0)
	Set Rs=Nothing
	If Isnull(MathForumToday) Then MathForumToday=0
	Mybbs.Execute("Update dv_setup Set Forum_Todaynum="&MathForumToday)

End Function 
%>