<% ProcessForumPage True %> <% '== BEGIN MAIN ================================================================= Sub Main() Dim objForumRS, objMessageRS Dim objForumCountRS, objMessageCountRS Dim strThreadList Dim iActiveForumId, iActiveForumName Dim iForumMessageCount Dim iPeriodLooper Dim iPeriodToShow Dim iPeriodsToGoBack Dim strForumBreakdownType Dim dStartDate Dim dEndDate iActiveForumId = Request.QueryString("fid") If IsNumeric(iActiveForumId) Then iActiveForumId = CInt(iActiveForumId) Else iActiveForumId = 0 End If iPeriodToShow = Request.QueryString("pts") If IsNumeric(iPeriodToShow) Then iPeriodToShow = CInt(iPeriodToShow) Else iPeriodToShow = 0 End If ' Get Forum Info and count of messages in the forum Set objForumRS = GetRecordset("SELECT * FROM forums;") Set objForumCountRS = GetRecordset("SELECT forum_id, COUNT(*) FROM messages GROUP BY forum_id;") If Not objForumRS.EOF Then objForumRS.MoveFirst Do While Not objForumRS.EOF ' Set to default from script constant strForumBreakdownType = MESSAGE_GROUPING ' Check DB for a value to override If objForumRS.Fields.Count >= 5 Then If objForumRS.Fields(4).Name = "forum_grouping" Then strForumBreakdownType = Trim(LCase(objForumRS.Fields("forum_grouping").Value)) End If End If 'Response.Write strForumBreakdownType ' Position Forum Count RS and get a message count ' Thought this would be faster, but it wasn't! 'objForumCountRS.Filter = "forum_id = " & objForumRS.Fields("forum_id") objForumCountRS.MoveFirst Do Until objForumCountRS.EOF If objForumCountRS.Fields("forum_id") = objForumRS.Fields("forum_id") Then Exit Do objForumCountRS.MoveNext Loop If Not objForumCountRS.EOF Then iForumMessageCount = objForumCountRS.Fields(1) Else iForumMessageCount = 0 End If ' If active forum -> show messages o/w just show forum If objForumRS.Fields("forum_id") = iActiveForumId Then ShowForumLine objForumRS.Fields("forum_id"), "open", objForumRS.Fields("forum_name"), objForumRS.Fields("forum_description"), iForumMessageCount ' Show links to previous months iPeriodsToGoBack = DateDiff("m", objForumRS("forum_start_date"), Now()) ' Make adjustments to periods to go back and show for non-monthly breakdown Select Case strForumBreakdownType Case "7days" iPeriodsToGoBack = iPeriodsToGoBack + 3 Case "monthly" ' Nothing to do! Case Else iPeriodsToGoBack = 0 iPeriodToShow = 0 End Select For iPeriodLooper = 0 To iPeriodsToGoBack If strForumBreakdownType = "7days" Or strForumBreakdownType = "monthly" Then 'Do period message count here. ShowPeriodLine objForumRS.Fields("forum_id"), strForumBreakdownType, iPeriodLooper, 0 End If If iPeriodLooper = iPeriodToShow Then 'Show Root Level Posts for the selected period and their reply count Select Case strForumBreakdownType Case "7days" If iPeriodToShow <= 2 Then dStartDate = Date() - (7 * (iPeriodToShow + 1)) + 1 dEndDate = Date() - (7 * iPeriodToShow) + 1 Else dStartDate = GetNMonthsAgo(iPeriodToShow - 3) dEndDate = GetNMonthsAgo(iPeriodToShow - 4) End If Case "monthly" dStartDate = GetNMonthsAgo(iPeriodToShow) dEndDate = GetNMonthsAgo(iPeriodToShow - 1) Case Else dStartDate = objForumRS.Fields("forum_start_date").Value dEndDate = Date() + 1 End Select 'Response.Write dStartDate & "
" 'Response.Write dEndDate & "
" Set objMessageRS = GetRecordset("SELECT * FROM messages WHERE forum_id=" & iActiveForumId & " AND thread_parent=0 AND " & DB_DATE_DELIMITER & FormatTimestampDB(dStartDate) & DB_DATE_DELIMITER & " < message_timestamp AND message_timestamp < " & DB_DATE_DELIMITER & FormatTimestampDB(dEndDate) & DB_DATE_DELIMITER & " ORDER BY thread_id DESC;") objMessageRS.CacheSize = 100 ' Build the list of root posts we need counts for If Not (objMessageRS.BOF And objMessageRS.EOF) Then objMessageRS.MoveFirst Do While Not objMessageRS.EOF strThreadList = strThreadList & objMessageRS("thread_id") & "," objMessageRS.MoveNext Loop strThreadList = Left(strThreadList, Len(strThreadList) - 1) Else strThreadList = (0) End If Set objMessageCountRS = GetRecordset("SELECT thread_id, COUNT(*) FROM messages WHERE thread_id IN (" & strThreadList & ") GROUP BY thread_id ORDER BY thread_id DESC;") objMessageCountRS.CacheSize = 100 ' We don't worry about a zero count because every thread should have at least 1 message ' Along the same lines, objMessageRS.RecordCount needs to equal objMessageCountRS.RecordCount ' We assume they do. If not we're in deep sh*t! Please never break! I'm, begging here! 'Response.Write objMessageRS.RecordCount & "
" & vbCrLf 'Response.Write objMessageCountRS.RecordCount & "
" & vbCrLf ' Oh what the heck, even if it does break it's only the message count and not checking each record gives us a HUGE SPEED BOOST... ' Screw it, here goes... If Not (objMessageRS.BOF And objMessageRS.EOF) Then objMessageRS.MoveFirst objMessageCountRS.MoveFirst Do While Not objMessageRS.EOF ShowMessageLine 1, objMessageRS.Fields("message_id"), objMessageRS.Fields("message_subject"), objMessageRS.Fields("message_author"), objMessageRS.Fields("message_author_email"), FormatTimestampDisplay(objMessageRS.Fields("message_timestamp")), objMessageCountRS.Fields(1) - 1, "forum", 0 objMessageRS.MoveNext objMessageCountRS.MoveNext Loop End If 'Close Message DB objects objMessageCountRS.Close Set objMessageCountRS = Nothing objMessageRS.Close Set objMessageRS = Nothing End If Next 'iPeriodLooper 'Set active Forum Name for later use in post line iActiveForumName = objForumRS.Fields("forum_name") Else ShowForumLine objForumRS.Fields("forum_id"), "closed", objForumRS.Fields("forum_name"), objForumRS.Fields("forum_description"), iForumMessageCount End If objForumRS.MoveNext Loop Else WriteLine "There are no folders currently open." & "
" End If 'Close Forum DB objects objForumCountRS.Close Set objForumCountRS = Nothing objForumRS.Close Set objForumRS = Nothing If iActiveForumId <> 0 Then %>
Post a New Message to <%= iActiveForumName %>
<% End If ShowSearchForm End Sub ' Main '== END MAIN =================================================================== '== BEGIN SUBS & FUNCTIONS ===================================================== Function GetNMonthsAgo(iMonthsAgo) Dim dPastDate dPastDate = Date() 'Response.Write dPastDate & "
" dPastDate = DateAdd("m", -iMonthsAgo, dPastDate) 'Response.Write dPastDate & "
" dPastDate = DateAdd("d", -(Day(dPastDate) - 1), dPastDate) 'Response.Write dPastDate & "
" GetNMonthsAgo = CDate(dPastDate) End Function ' GetNMonthsAgo '== END SUBS & FUNCTIONS ======================================================= %>