Committed as-is on 2026-08-26 while retiring this repo, so the working tree that existed at reformat time is preserved in history rather than only in the NAS backup.
187 lines
5.8 KiB
Plaintext
187 lines
5.8 KiB
Plaintext
<%@ Language=VBScript %>
|
|
<!--#include file="../shopdb/includes/sql.asp"-->
|
|
<%
|
|
' ============================================================================
|
|
' API Endpoint: Get Notifications (Safe Version with Parameterized Query)
|
|
' Returns current and upcoming notifications in JSON format
|
|
' Uses shared sql.asp connection from shopdb project
|
|
' ============================================================================
|
|
|
|
Option Explicit
|
|
Response.ContentType = "application/json"
|
|
Response.Charset = "UTF-8"
|
|
|
|
Dim objCmd, objRS
|
|
Dim now, future
|
|
Dim currentEvents(), upcomingEvents()
|
|
Dim currentCount, upcomingCount
|
|
Dim jsonOutput
|
|
|
|
' Initialize
|
|
currentCount = 0
|
|
upcomingCount = 0
|
|
ReDim currentEvents(0)
|
|
ReDim upcomingEvents(0)
|
|
|
|
On Error Resume Next
|
|
|
|
' Calculate time window
|
|
now = Now()
|
|
future = DateAdd("h", 72, now)
|
|
|
|
' objConn is already created and opened by includes/sql.asp
|
|
' No need to create our own connection
|
|
|
|
' Create command with parameters
|
|
Set objCmd = Server.CreateObject("ADODB.Command")
|
|
Set objCmd.ActiveConnection = objConn
|
|
objCmd.CommandText = "SELECT n.notificationid, n.notification, n.starttime, n.endtime, " & _
|
|
"n.ticketnumber, n.link, n.isactive, n.isshopfloor, " & _
|
|
"nt.typename, nt.typecolor " & _
|
|
"FROM notifications n " & _
|
|
"LEFT JOIN notificationtypes nt ON n.notificationtypeid = nt.notificationtypeid " & _
|
|
"WHERE n.isactive = 1 AND n.isshopfloor = 1 " & _
|
|
"AND ((n.starttime <= ? AND (n.endtime IS NULL OR n.endtime >= ?)) " & _
|
|
" OR (n.starttime BETWEEN ? AND ?)) " & _
|
|
"ORDER BY n.starttime ASC"
|
|
|
|
objCmd.CommandType = 1 ' adCmdText
|
|
|
|
' Add parameters
|
|
objCmd.Parameters.Append objCmd.CreateParameter("future1", 135, 1, , future) ' adDBTimeStamp
|
|
objCmd.Parameters.Append objCmd.CreateParameter("now1", 135, 1, , now)
|
|
objCmd.Parameters.Append objCmd.CreateParameter("now2", 135, 1, , now)
|
|
objCmd.Parameters.Append objCmd.CreateParameter("future2", 135, 1, , future)
|
|
|
|
Set objRS = objCmd.Execute
|
|
|
|
If Err.Number <> 0 Then
|
|
Response.Write "{""success"":false,""error"":""Query error: " & EscapeJSON(Err.Description) & """}"
|
|
objConn.Close
|
|
Response.End
|
|
End If
|
|
|
|
' Process records
|
|
Do While Not objRS.EOF
|
|
Dim startTime, endTime, isCurrent
|
|
|
|
startTime = objRS("starttime")
|
|
endTime = objRS("endtime")
|
|
|
|
' Check if current
|
|
isCurrent = False
|
|
If IsDate(startTime) And startTime <= now Then
|
|
If IsNull(endTime) Or endTime >= now Then
|
|
isCurrent = True
|
|
End If
|
|
End If
|
|
|
|
' Build event object
|
|
Dim eventObj
|
|
Set eventObj = BuildEventJSON(objRS)
|
|
|
|
' Add to appropriate array
|
|
If isCurrent Then
|
|
ReDim Preserve currentEvents(currentCount)
|
|
currentEvents(currentCount) = eventObj
|
|
currentCount = currentCount + 1
|
|
Else
|
|
ReDim Preserve upcomingEvents(upcomingCount)
|
|
upcomingEvents(upcomingCount) = eventObj
|
|
upcomingCount = upcomingCount + 1
|
|
End If
|
|
|
|
objRS.MoveNext
|
|
Loop
|
|
|
|
objRS.Close
|
|
' objConn is managed by sql.asp - don't close it here
|
|
|
|
' Build JSON response
|
|
jsonOutput = "{""success"":true," & _
|
|
"""timestamp"":""" & ISO8601(Now()) & """," & _
|
|
"""current"":[" & JoinArray(currentEvents, currentCount) & "]," & _
|
|
"""upcoming"":[" & JoinArray(upcomingEvents, upcomingCount) & "]}"
|
|
|
|
Response.Write jsonOutput
|
|
|
|
' ============================================================================
|
|
' Functions
|
|
' ============================================================================
|
|
|
|
Function BuildEventJSON(rs)
|
|
Dim json
|
|
json = "{" & _
|
|
"""notificationid"":" & rs("notificationid") & "," & _
|
|
"""notification"":""" & EscapeJSON(rs("notification")) & """," & _
|
|
"""starttime"":""" & ISO8601(rs("starttime")) & """," & _
|
|
"""endtime"":" & NullOrString(rs("endtime")) & "," & _
|
|
"""ticketnumber"":" & NullOrString(rs("ticketnumber")) & "," & _
|
|
"""link"":" & NullOrString(rs("link")) & "," & _
|
|
"""isactive"":" & BoolStr(rs("isactive")) & "," & _
|
|
"""isshopfloor"":" & BoolStr(rs("isshopfloor")) & "," & _
|
|
"""typename"":""" & EscapeJSON(rs("typename")) & """," & _
|
|
"""typecolor"":""" & EscapeJSON(rs("typecolor")) & """" & _
|
|
"}"
|
|
BuildEventJSON = json
|
|
End Function
|
|
|
|
Function JoinArray(arr, count)
|
|
If count = 0 Then
|
|
JoinArray = ""
|
|
Exit Function
|
|
End If
|
|
Dim i, result
|
|
result = ""
|
|
For i = 0 To count - 1
|
|
If i > 0 Then result = result & ","
|
|
result = result & arr(i)
|
|
Next
|
|
JoinArray = result
|
|
End Function
|
|
|
|
Function EscapeJSON(str)
|
|
If IsNull(str) Then
|
|
EscapeJSON = ""
|
|
Exit Function
|
|
End If
|
|
Dim result
|
|
result = CStr(str)
|
|
result = Replace(result, "\", "\\")
|
|
result = Replace(result, """", "\""")
|
|
result = Replace(result, Chr(13), "\r")
|
|
result = Replace(result, Chr(10), "\n")
|
|
result = Replace(result, Chr(9), "\t")
|
|
EscapeJSON = result
|
|
End Function
|
|
|
|
Function ISO8601(dt)
|
|
If IsNull(dt) Or Not IsDate(dt) Then
|
|
ISO8601 = ""
|
|
Exit Function
|
|
End If
|
|
ISO8601 = Year(dt) & "-" & _
|
|
Right("0" & Month(dt), 2) & "-" & _
|
|
Right("0" & Day(dt), 2) & "T" & _
|
|
Right("0" & Hour(dt), 2) & ":" & _
|
|
Right("0" & Minute(dt), 2) & ":" & _
|
|
Right("0" & Second(dt), 2)
|
|
End Function
|
|
|
|
Function NullOrString(val)
|
|
If IsNull(val) Then
|
|
NullOrString = "null"
|
|
Else
|
|
NullOrString = """" & EscapeJSON(val) & """"
|
|
End If
|
|
End Function
|
|
|
|
Function BoolStr(val)
|
|
If CBool(val) Then
|
|
BoolStr = "true"
|
|
Else
|
|
BoolStr = "false"
|
|
End If
|
|
End Function
|
|
%>
|