📄 #post_reply.mo
字号:
Option Explicit
If Not TBBS.CheckForum("crt", Request.QueryString("fid")) Then
TBBS.AddError "missing_forum", Array()
ElseIf Not TBBS.CheckTopic(Request.QueryString("id")) Then
TBBS.AddError "missing_topic", Array()
ElseIf atol(TBBS.Topic("follow")) > 0 Then
TBBS.AddError "missing_topic", Array()
ElseIf atol(TBBS.Topic("userid")) <> atol(MyKernel.Memory("seqid")) And TBBS.Permit("reply_topic") = 0 Then
TBBS.AddError "ps_reply_topic", Array()
ElseIf atol(TBBS.Forum("crt.seqid")) <> atol(TBBS.Topic("forumid")) Then
TBBS.AddError "missing_topic", Array()
ElseIf Not TBBS.CheckQuote(Request.QueryString("qid")) Then
TBBS.AddError "missing_quote", Array()
ElseIf atol(TBBS.Topic("locked")) = 1 Then
TBBS.AddError "topic_locked", Array()
Else
Call TBBS.SetTopicNav(True)
TBBS.AddNav "", TBBS.Lang("new_reply")
TBBS.Page("name") = TBBS.GetNav()
TBBS.AddOnline TBBS.Forum("crt.seqid"), TBBS.Page("name")
TBBS.Vars("handle_name") = TBBS.Lang("new_reply")
If atol(TBBS.Quote("seqid")) > 0 Then
TBBS.Vars("action_addr") = GetURL("post.asp", Array("handle", "fid", "id", "qid"), Array("reply", TBBS.Forum("crt.seqid"), TBBS.Topic("seqid"), TBBS.Quote("seqid")))
Else
TBBS.Vars("action_addr") = GetURL("post.asp", Array("handle", "fid", "id"), Array("reply", TBBS.Forum("crt.seqid"), TBBS.Topic("seqid")))
End If
TBBS.Vars("failed") = TBBS.Lang("reply_failed")
Call main()
End If
Private Sub doGet()
TBBS.Vars("state") = 0
TBBS.Vars("title") = "Re: " & TBBS.Topic("title")
TBBS.Vars("content") = GetQuote()
End Sub
Private Sub doPost()
Dim clsCmd
If TBBS.Forum("crt.allow") = "" Then
MyIO.Allow = TBBS.Env("allow")
Else
MyIO.Allow = TBBS.Forum("crt.allow")
End If
TBBS.Vars("state") = 1
TBBS.Vars("title") = Trim(MyIO.Form("title"))
TBBS.Vars("content") = SafeHTML(MyIO.Form("content"))
TBBS.Vars("face") = atoi(MyIO.Form("face"))
If Not TBBS.CheckValidate("post") Then
TBBS.AddHint "invalid_validate", Array()
ElseIf TBBS.Vars("title") <> "" And Len(TBBS.Vars("title")) < atol(TBBS.Env("topic_title_min_size")) Then
TBBS.AddHint "topic_title_too_short", Array()
ElseIf Len(TBBS.Vars("title")) > atol(TBBS.Env("topic_title_max_size")) Then
TBBS.AddHint "topic_title_too_long", Array(TBBS.Env("topic_title_max_size"))
ElseIf Trim(TBBS.Vars("content")) = "" Then
TBBS.AddHint "empty_content", Array()
ElseIf Len(TBBS.Vars("content")) < atol(TBBS.Env("topic_content_min_size")) Then
TBBS.Addhint "topic_content_too_short", Array(TBBS.Env("topic_content_min_size"))
ElseIf Len(TBBS.Vars("content")) > atol(TBBS.Env("topic_content_max_size")) Then
TBBS.AddHint "topic_content_too_long", Array(TBBS.Env("topic_content_max_size"))
ElseIf TodayPosts() > atol(TBBS.Env("max_posts")) And atol(TBBS.Env("max_posts")) > 0 Then
TBBS.AddHint "topic_too_much", Array(TBBS.Env("max_posts"))
ElseIf TBBS.Vars("time") - atol(MyKernel.Memory("LastPostTime")) < atol(TBBS.Env("topic_interval")) Then
TBBS.AddHint "topic_interval", Array(TBBS.Env("topic_interval"))
Else
If TBBS.Vars("title") = "" Then
TBBS.Vars("title") = "Re: " & TBBS.Topic("title")
End If
TBBS.Topic("replies") = TBBS.Topic("replies") + 1
Set clsCmd = MyKernel.Command(T_TOPIC)
clsCmd.CommandType = "INSERT"
clsCmd.Add "forumid", TBBS.Forum("crt.seqid")
clsCmd.Add "forumname", TBBS.Forum("crt.name")
clsCmd.Add "topictype", 0
clsCmd.Add "title", TBBS.Vars("title")
clsCmd.Add "content", TBBS.Vars("content")
clsCmd.Add "face", TBBS.Vars("face")
clsCmd.Add "userid", MyKernel.Memory("seqid")
clsCmd.Add "username", MyKernel.Memory("username")
If atol(TBBS.Topic("follow")) > 0 Then
clsCmd.Add "follow", TBBS.Topic("follow")
Else
clsCmd.Add "follow", TBBS.Topic("seqid")
End If
clsCmd.Add "posttime", TBBS.Vars("time")
clsCmd.Add "postip", MyIO.Env("REMOTE_ADDR")
clsCmd.Add "hits", 0
clsCmd.Add "replies", 0
clsCmd.Add "toptype", 0
clsCmd.Add "state", 0
clsCmd.Add "locked", 0
clsCmd.Add "souled", 0
clsCmd.Add "omited", 0
clsCmd.Add "shield", 0
clsCmd.Add "serial", TBBS.Topic("replies")
clsCmd.Add "mark", TBBS.Forum("crt.mark")
clsCmd.Add "source", IIf(TBBS.NetType = "web", 0, 1)
clsCmd.Exec
Set clsCmd = Nothing
TBBS.Vars("identity") = MyKernel.DB.GetIdentity(T_TOPIC)
TBBS.Vars("topicid") = TBBS.Vars("identity")
TBBS.Vars("topictitle") = TBBS.Vars("title")
Call ParseUpload
If reg_test("\[local\](\d+)\[/local\]", "i", TBBS.Vars("content")) Then
Set clsCmd = MyKernel.Command(T_TOPIC)
clsCmd.CommandType = "UPDATE"
clsCmd.Where = "seqid=" & TBBS.Vars("identity")
clsCmd.Add "content", preg_replace("\[local\](\d+)\[/local\]", "gi", "FormatUpload($1)", TBBS.Vars("content"))
clsCmd.Exec
Set clsCmd = Nothing
End If
Set clsCmd = MyKernel.Command(T_TOPIC)
clsCmd.CommandType = "UPDATE"
clsCmd.Where = "seqid=" & TBBS.Topic("seqid")
clsCmd.Add "lastpostid", TBBS.Vars("identity")
clsCmd.Add "lastposttime", TBBS.Vars("time")
clsCmd.Add "lastpostuserid", MyKernel.Memory("seqid")
clsCmd.Add "lastpostusername", MyKernel.Memory("username")
clsCmd.Add "lastposttitle", TBBS.Vars("title")
clsCmd.Add "replies", TBBS.Topic("replies")
clsCmd.Exec
Set clsCmd = Nothing
Set clsCmd = MyKernel.Command(T_FORUM)
clsCmd.CommandType = "UPDATE"
clsCmd.Where = "seqid=" & TBBS.Forum("crt.seqid")
clsCmd.Add "lastpostid", TBBS.Vars("identity")
clsCmd.Add "lastposttime", TBBS.Vars("time")
clsCmd.Add "lastpostuserid", MyKernel.Memory("seqid")
clsCmd.Add "lastpostusername", MyKernel.Memory("username")
clsCmd.Add "lastposttitle", TBBS.Vars("title")
clsCmd.Add "replies", atol(TBBS.Forum("crt.replies")) + 1
If atol(TBBS.Forum("crt.lastposttime")) < TBBS.Vars("date") Then
clsCmd.Add "todayposts", 1
Else
clsCmd.Add "todayposts", atol(TBBS.Forum("crt.todayposts")) + 1
End If
clsCmd.Exec
Set clsCmd = Nothing
TBBS.SetXMLCache "Forums"
MyKernel.Memory("replies") = atol(MyKernel.Memory("replies")) + 1
If atol(MyKernel.Memory("lastposttime")) < TBBS.Vars("date") Then
MyKernel.Memory("todayposts") = 1
Else
MyKernel.Memory("todayposts") = atol(MyKernel.Memory("todayposts")) + 1
End If
MyKernel.Memory("lastposttime") = TBBS.Vars("time")
MyKernel.Memory("coin") = atol(MyKernel.Memory("coin")) + TBBS.XPEnv("coin", "reply")
MyKernel.Memory("cent") = atol(MyKernel.Memory("cent")) + TBBS.XPEnv("cent", "reply")
MyKernel.Memory("witchery") = atol(MyKernel.Memory("witchery")) + TBBS.XPEnv("witchery", "reply")
Set clsCmd = MyKernel.Command(T_USER)
clsCmd.CommandType = "UPDATE"
clsCmd.Where = "seqid=" & MyKernel.Memory("seqid")
clsCmd.Add "replies", MyKernel.Memory("replies")
clsCmd.Add "lastposttime", TBBS.Vars("time")
clsCmd.Add "todayposts", MyKernel.Memory("todayposts")
clsCmd.Add "coin", MyKernel.Memory("coin")
clsCmd.Add "cent", MyKernel.Memory("cent")
clsCmd.Add "witchery", MyKernel.Memory("witchery")
clsCmd.Exec
Set clsCmd = Nothing
TBBS.Env("index_today") = atol(TBBS.Env("index_today")) + 1
TBBS.Env("index_reply") = atol(TBBS.Env("index_reply")) + 1
TBBS.Vars("state") = 2
Call doRedirect
TBBS.AddHint "reply_ok", Array()
TBBS.AddHint "back_new_reply", Array(TBBS.Vars("redirect"))
TBBS.AddHint "back_forum", Array(TBBS.Forum("crt.seqid"))
TBBS.AddHint "back_home", Array(TBBS.Env("bbs_name"))
End If
Session.Contents.Remove "validate"
End Sub
Private Function TodayPosts()
If atol(MyKernel.Memory("lastposttime")) < TBBS.Vars("date") Then
TodayPosts = 0
Else
TodayPosts = atol(MyKernel.Memory("todayposts"))
End If
End Function
Private Function GetQuote()
If atol(TBBS.Quote("seqid")) < 1 Then Exit Function
Dim ret
ret = GetTemplate("Quote")
ret = Replace(ret, "[username]", TBBS.Quote("username"))
ret = Replace(ret, "[posttime]", FormatTime(GetDate(atol(TBBS.Quote("posttime"))), "Y-m-d H:i:s"))
ret = Replace(Ret, "[content]", LeftC(TBBS.Quote("content"), 512))
GetQuote = ret
End Function
Private Sub doRedirect()
Dim arr1, arr2, strURL
Dim lngRows, intSize
lngRows = atol(TBBS.Topic("replies"))
intSize = 10
arr1 = Array("fid", "id", "page")
arr2 = Array(TBBS.Forum("crt.seqid"), TBBS.Topic("seqid"), GetPageNum(lngRows, intSize))
strURL = "$(URL)#topic$(ID)"
strURL = Replace(strURL, "$(URL)", GetURL("topic.asp", arr1, arr2))
strURL = Replace(strURL, "$(ID)", TBBS.Vars("identity"))
TBBS.Redirect strURL
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -