Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

142 lignes
5.6KB

  1. <%
  2. '=======================================================================================================================
  3. ' Orders Repository
  4. '=======================================================================================================================
  5. Class OrdersRepository_Class
  6. ' Creates a new order row for the given email/jurisdiction, generates a single-use
  7. ' token that expires after OrderTokenExpirationHours, and returns that token.
  8. Public Function CreateOrder(email, jurisdictionNumber)
  9. Dim token, expiresAt
  10. token = NewGuid()
  11. expiresAt = DateAdd("h", TokenExpirationHours(), Now())
  12. DAL.Execute _
  13. "INSERT INTO Orders (Email, JurisdictionNumber, Token, TokenExpiresAt, CreatedAt) VALUES (?, ?, ?, ?, ?)", _
  14. Array(email, jurisdictionNumber, token, expiresAt, Now())
  15. CreateOrder = token
  16. End Function
  17. ' Returns a Scripting.Dictionary of Scripting.Dictionary rows for every order, newest first.
  18. Public Function GetAll()
  19. Dim rs, results, order
  20. Set results = Server.CreateObject("Scripting.Dictionary")
  21. Set rs = DAL.Query( _
  22. "SELECT OrderID, Email, JurisdictionNumber, Token, TokenExpiresAt, TokenUsedAt, CreatedAt FROM Orders ORDER BY OrderID DESC", _
  23. Empty)
  24. Do While Not rs.EOF
  25. Set order = Server.CreateObject("Scripting.Dictionary")
  26. order.Add "OrderID", rs("OrderID").Value
  27. order.Add "Email", rs("Email").Value
  28. order.Add "JurisdictionNumber", rs("JurisdictionNumber").Value
  29. order.Add "Token", rs("Token").Value
  30. order.Add "TokenExpiresAt", rs("TokenExpiresAt").Value
  31. order.Add "TokenUsedAt", rs("TokenUsedAt").Value
  32. order.Add "CreatedAt", rs("CreatedAt").Value
  33. results.Add rs("OrderID").Value, order
  34. rs.MoveNext
  35. Loop
  36. Destroy rs
  37. Set GetAll = results
  38. End Function
  39. ' Returns a Scripting.Dictionary of Scripting.Dictionary rows (newest first) matching searchTerm
  40. ' against Email or JurisdictionNumber (all rows if searchTerm is blank), one page at a time.
  41. ' page_count/record_count are returned by reference for building pagination controls.
  42. Public Function SearchPaged(searchTerm, per_page, page_num, ByRef page_count, ByRef record_count)
  43. Dim sql, params
  44. sql = "SELECT OrderID, Email, JurisdictionNumber, Token, TokenExpiresAt, TokenUsedAt, CreatedAt FROM Orders"
  45. page_count = 0
  46. record_count = 0
  47. If Len(Trim(searchTerm)) > 0 Then
  48. sql = sql & " WHERE Email LIKE ? OR JurisdictionNumber LIKE ?"
  49. params = Array("%" & searchTerm & "%", "%" & searchTerm & "%")
  50. Else
  51. params = Empty
  52. End If
  53. sql = sql & " ORDER BY OrderID DESC"
  54. Dim rs : Set rs = DAL.PagedQuery(sql, params, per_page, page_num)
  55. If Not rs.EOF Then
  56. rs.PageSize = per_page
  57. rs.AbsolutePage = page_num
  58. page_count = rs.PageCount
  59. record_count = rs.RecordCount
  60. End If
  61. Dim results, order, x
  62. Set results = Server.CreateObject("Scripting.Dictionary")
  63. x = 0
  64. Do While (per_page <= 0 Or x < per_page) And Not rs.EOF
  65. Set order = Server.CreateObject("Scripting.Dictionary")
  66. order.Add "OrderID", rs("OrderID").Value
  67. order.Add "Email", rs("Email").Value
  68. order.Add "JurisdictionNumber", rs("JurisdictionNumber").Value
  69. order.Add "Token", rs("Token").Value
  70. order.Add "TokenExpiresAt", rs("TokenExpiresAt").Value
  71. order.Add "TokenUsedAt", rs("TokenUsedAt").Value
  72. order.Add "CreatedAt", rs("CreatedAt").Value
  73. results.Add rs("OrderID").Value, order
  74. x = x + 1
  75. rs.MoveNext
  76. Loop
  77. Destroy rs
  78. Set SearchPaged = results
  79. End Function
  80. ' Returns a Scripting.Dictionary describing the order matching the given token, or Nothing if not found.
  81. Public Function FindByToken(token)
  82. Dim rs
  83. Set rs = DAL.Query( _
  84. "SELECT OrderID, Email, JurisdictionNumber, Token, TokenExpiresAt, TokenUsedAt, CreatedAt FROM Orders WHERE Token = ?", _
  85. Array(token))
  86. If rs.EOF Then
  87. Set FindByToken = Nothing
  88. Else
  89. Dim order : Set order = Server.CreateObject("Scripting.Dictionary")
  90. order.Add "OrderID", rs("OrderID").Value
  91. order.Add "Email", rs("Email").Value
  92. order.Add "JurisdictionNumber", rs("JurisdictionNumber").Value
  93. order.Add "Token", rs("Token").Value
  94. order.Add "TokenExpiresAt", rs("TokenExpiresAt").Value
  95. order.Add "TokenUsedAt", rs("TokenUsedAt").Value
  96. order.Add "CreatedAt", rs("CreatedAt").Value
  97. Set FindByToken = order
  98. End If
  99. Destroy rs
  100. End Function
  101. Public Sub MarkTokenUsed(orderId)
  102. DAL.Execute "UPDATE Orders SET TokenUsedAt = ? WHERE OrderID = ?", Array(Now(), orderId)
  103. End Sub
  104. Private Function TokenExpirationHours()
  105. Dim setting : setting = GetAppSetting("OrderTokenExpirationHours")
  106. If setting = "nothing" Or Not IsNumeric(setting) Then
  107. TokenExpirationHours = 24
  108. Else
  109. TokenExpirationHours = CInt(setting)
  110. End If
  111. End Function
  112. End Class
  113. Dim OrdersRepository__Singleton
  114. Function OrdersRepository()
  115. If IsEmpty(OrdersRepository__Singleton) Then
  116. Set OrdersRepository__Singleton = New OrdersRepository_Class
  117. End If
  118. Set OrdersRepository = OrdersRepository__Singleton
  119. End Function
  120. %>

Powered by TurnKey Linux.