@@ -0,0 +1,129 @@ | |||
<% Option Explicit %> | |||
<!--#include file="../../include_all.asp"--> | |||
<!--#include file="../../ViewModels/ContactsViewModels.asp"--> | |||
<% | |||
Class ContactsController | |||
Public Model | |||
Public Sub Index | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Contacts" | |||
set Model.Contacts = ContactsRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Contacts/Index.asp"--> <% | |||
End Sub | |||
Public Sub Search | |||
dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Contacts" | |||
set Model.Contacts = ContactsRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","JURISCODE","%" & searchValue & "%","TownshipName","%" & searchValue & "%","CONTACT_NAME","%" & searchValue & "%","TownshipNum","%" & searchValue & "%","BUSINESS_ADDRESS","%" & searchValue & "%","TITLE","%" & searchValue & "%","BUSINESS_ADDRESS2","%" & searchValue & "%","BUSINESS_ADDRESS3","%" & searchValue & "%","MAILING_ADDRESS","%" & searchValue & "%","MAILING_ADDRESS2","%" & searchValue & "%","MAILING_ADDRESS3","%" & searchValue & "%","RESIDENTIAL_ADDRESS","%" & searchValue & "%","RESIDENTIAL_ADDRESS2","%" & searchValue & "%","PHONENUM1","%" & searchValue & "%","RESIDENTIAL_ADDRESS3","%" & searchValue & "%","FAXNUM","%" & searchValue & "%","PHONENUM2","%" & searchValue & "%","EMAIL","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Contacts/Index.asp"--> <% | |||
End Sub | |||
Public Sub Edit | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Edit_ViewModel_Class | |||
set Model.Contacts = ContactsRepository.FindByID(id) | |||
Model.Title = "Edit Contacts" | |||
HTMLSecurity.SetAntiCSRFToken "ContactsEditForm" | |||
%> <!--#include file="../../Views/Contacts/Edit.asp"--> <% | |||
Flash.Success = "Contacts Updated." | |||
End Sub | |||
Public Sub EditPost | |||
MVC.RequirePost | |||
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "ContactsEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) | |||
dim ID : ID = Request.Form("Id") | |||
dim model : set model = ContactsRepository.FindByID(ID) | |||
set model = Automapper.AutoMap(Request.Form, model) | |||
'model.Validate | |||
'If model.Validator.HasErrors then | |||
FormCache.SerializeForm "EditContacts", Request.Form | |||
' Flash.Errors = model.Validator.Errors | |||
' MVC.RedirectToActionExt "Edit", Array("Id",ID) | |||
'Else | |||
ContactsRepository.Update model | |||
FormCache.ClearForm "EditContacts" | |||
Flash.Success = "Contacts updated." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Create | |||
dim form_params : set form_params = FormCache.DeserializeForm("NewContacts") | |||
If Not form_params Is Nothing then | |||
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) | |||
Else | |||
set Model = new Create_ViewModel_Class | |||
End If | |||
HTMLSecurity.SetAntiCSRFToken "ContactsCreateForm" | |||
%> <!--#include file="../../Views/Contacts/Create.asp"--> <% | |||
End Sub | |||
Public Sub CreatePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "ContactsCreateForm", Request.Form("nonce"), "Create" | |||
dim new_Contacts_model : set new_Contacts_model = Automapper.AutoMap(Request.Form, new ContactsModel_Class) | |||
'new_Contacts_model.Validator.Validate | |||
'If new_Contacts_model.Validator.HasErrors then | |||
' FormCache.SerializeForm "NewContacts", Request.Form | |||
' Flash.Errors = new_Contacts_model.Validator.Errors | |||
' MVC.RedirectToAction "Create" | |||
'Else | |||
ContactsRepository.AddNew new_Contacts_model | |||
' FormCache.ClearForm "NewContacts" | |||
Flash.Success = "Contacts added." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Delete | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.Contacts = ContactsRepository.FindByID(id) | |||
Model.Title = "Delete Contacts" | |||
HTMLSecurity.SetAntiCSRFToken "ContactsDeleteForm" | |||
%> <!--#include file="../../Views/Contacts/Delete.asp"--> <% | |||
End Sub | |||
Public Sub DeletePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "ContactsDeleteForm", Request.Form("nonce"), "Create" | |||
dim id : id = Request.Form("Id") | |||
ContactsRepository.Delete id | |||
Flash.Success = "Contacts deleted." | |||
MVC.RedirectToAction "Index" | |||
End Sub | |||
End Class | |||
MVC.Dispatch | |||
%> |
@@ -0,0 +1,12 @@ | |||
<% Option Explicit %> | |||
<!--#include file="../../include_all.asp"--> | |||
<% | |||
Class HomeController | |||
Public Sub Index | |||
%> <!--#include file="../../Views/Home/Index.asp"--> <% | |||
End Sub | |||
End Class | |||
MVC.Dispatch | |||
%> |
@@ -0,0 +1,155 @@ | |||
<% Option Explicit %> | |||
<!--#include file="../../include_all.asp"--> | |||
<!--#include file="../../ViewModels/JurisdictionViewModels.asp"--> | |||
<% | |||
Class JurisdictionController | |||
Public Model | |||
Public Sub Index | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Jurisdiction" | |||
set Model.Jurisdiction = JurisdictionRepository.FindPaged(empty, "JCode", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Jurisdiction/Index.asp"--> <% | |||
End Sub | |||
Public Sub Search | |||
dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Jurisdiction" | |||
set Model.Jurisdiction = JurisdictionRepository.SearchTablePaged(Array("JCode","%" & searchValue & "%","Name","%" & searchValue & "%","Mailing_Address","%" & searchValue & "%","CSZ","%" & searchValue & "%","IMB","%" & searchValue & "%","IMB_Digits","%" & searchValue & "%"),"JCode", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Jurisdiction/Index.asp"--> <% | |||
End Sub | |||
Public Sub Edit | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Edit_ViewModel_Class | |||
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id) | |||
set Model.Contacts = ContactsRepository.Find(Array("JURISCODE = ?",id),empty) | |||
Model.Title = "Edit Jurisdiction" | |||
HTMLSecurity.SetAntiCSRFToken "JurisdictionEditForm" | |||
%> <!--#include file="../../Views/Jurisdiction/Edit.asp"--> <% | |||
Flash.Success = "Jurisdiction Updated." | |||
End Sub | |||
Public Sub EditPost | |||
MVC.RequirePost | |||
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "JurisdictionEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) | |||
dim JCode : JCode = Request.Form("Id") | |||
dim model : set model = JurisdictionRepository.FindByJCode(JCode) | |||
set model = Automapper.AutoMap(Request.Form, model) | |||
'model.Validate | |||
'If model.Validator.HasErrors then | |||
FormCache.SerializeForm "EditJurisdiction", Request.Form | |||
' Flash.Errors = model.Validator.Errors | |||
' MVC.RedirectToActionExt "Edit", Array("Id",JCode) | |||
'Else | |||
JurisdictionRepository.Update model | |||
FormCache.ClearForm "EditJurisdiction" | |||
Flash.Success = "Jurisdiction updated." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Create | |||
dim form_params : set form_params = FormCache.DeserializeForm("NewJurisdiction") | |||
If Not form_params Is Nothing then | |||
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) | |||
Else | |||
set Model = new Create_ViewModel_Class | |||
End If | |||
HTMLSecurity.SetAntiCSRFToken "JurisdictionCreateForm" | |||
%> <!--#include file="../../Views/Jurisdiction/Create.asp"--> <% | |||
End Sub | |||
Public Sub CreatePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "JurisdictionCreateForm", Request.Form("nonce"), "Create" | |||
dim new_Jurisdiction_model : set new_Jurisdiction_model = Automapper.AutoMap(Request.Form, new JurisdictionModel_Class) | |||
'new_Jurisdiction_model.Validator.Validate | |||
'If new_Jurisdiction_model.Validator.HasErrors then | |||
' FormCache.SerializeForm "NewJurisdiction", Request.Form | |||
' Flash.Errors = new_Jurisdiction_model.Validator.Errors | |||
' MVC.RedirectToAction "Create" | |||
'Else | |||
JurisdictionRepository.AddNew new_Jurisdiction_model | |||
' FormCache.ClearForm "NewJurisdiction" | |||
Flash.Success = "Jurisdiction added." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Delete | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id) | |||
Model.Title = "Delete Jurisdiction" | |||
HTMLSecurity.SetAntiCSRFToken "JurisdictionDeleteForm" | |||
%> <!--#include file="../../Views/Jurisdiction/Delete.asp"--> <% | |||
End Sub | |||
Public Sub DeletePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "JurisdictionDeleteForm", Request.Form("nonce"), "Create" | |||
dim id : id = Request.Form("Id") | |||
JurisdictionRepository.Delete id | |||
Flash.Success = "Jurisdiction deleted." | |||
MVC.RedirectToAction "Index" | |||
End Sub | |||
Public Sub Createkit | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id) | |||
Model.Title = "Create Kit" | |||
HTMLSecurity.SetAntiCSRFToken "JurisdictionDeleteForm" | |||
%> <!--#include file="../../Views/Jurisdiction/createkit.asp"--> <% | |||
End sub | |||
Public Sub CreateKitPost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "CreateKitForm", Request.Form("nonce"), "Index" | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.Jurisdiction = JurisdictionRepository.FindByJCode(id) | |||
Model.Title = "Create Kit" | |||
HTMLSecurity.SetAntiCSRFToken "JurisdictionDeleteForm" | |||
%> <!--#include file="../../Views/Jurisdiction/createkit.asp"--> <% | |||
End sub | |||
End Class | |||
MVC.Dispatch | |||
%> |
@@ -0,0 +1,137 @@ | |||
<% Option Explicit %> | |||
<!--#include file="../../include_all.asp"--> | |||
<!--#include file="../../ViewModels/KitViewModels.asp"--> | |||
<% | |||
Class KitController | |||
Public Model | |||
Public Sub Index | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Kit" | |||
set Model.Kit = KitRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Kit/Index.asp"--> <% | |||
End Sub | |||
Public Sub Search | |||
dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Kit" | |||
set Model.Kit = KitRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","JobNumber","%" & searchValue & "%","Jcode","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Kit/Index.asp"--> <% | |||
End Sub | |||
Public Sub Edit | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Edit_ViewModel_Class | |||
set Model.Kit = KitRepository.FindByID(id) | |||
Model.Title = "Edit Kit" | |||
HTMLSecurity.SetAntiCSRFToken "KitEditForm" | |||
%> <!--#include file="../../Views/Kit/Edit.asp"--> <% | |||
Flash.Success = "Kit Updated." | |||
End Sub | |||
Public Sub EditPost | |||
MVC.RequirePost | |||
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "KitEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) | |||
dim ID : ID = Request.Form("Id") | |||
dim model : set model = KitRepository.FindByID(ID) | |||
set model = Automapper.AutoMap(Request.Form, model) | |||
'model.Validate | |||
'If model.Validator.HasErrors then | |||
FormCache.SerializeForm "EditKit", Request.Form | |||
' Flash.Errors = model.Validator.Errors | |||
' MVC.RedirectToActionExt "Edit", Array("Id",ID) | |||
'Else | |||
KitRepository.Update model | |||
FormCache.ClearForm "EditKit" | |||
Flash.Success = "Kit updated." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Create | |||
dim form_params : set form_params = FormCache.DeserializeForm("NewKit") | |||
dim ID : ID = Request.QueryString("Id") | |||
dim model : set model = new Create_ViewModel_Class | |||
model.Title = "Create Kit " | |||
model.JCode = ID | |||
dim ugh : set ugh = JurisdictionRepository.Find(Array("[JCode] = ?",ID),empty) | |||
set model.Jurisdiction = ugh.pop() | |||
'If Not form_params Is Nothing then | |||
' set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) | |||
'Else | |||
' set Model = new Create_ViewModel_Class | |||
'End If | |||
HTMLSecurity.SetAntiCSRFToken "KitCreateForm" | |||
%> <!--#include file="../../Views/Kit/Create.asp"--> <% | |||
End Sub | |||
Public Sub CreatePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitCreateForm", Request.Form("nonce"), "Create" | |||
dim new_Kit_model : set new_Kit_model = Automapper.AutoMap(Request.Form, new KitModel_Class) | |||
'new_Kit_model.Validator.Validate | |||
'If new_Kit_model.Validator.HasErrors then | |||
' FormCache.SerializeForm "NewKit", Request.Form | |||
' Flash.Errors = new_Kit_model.Validator.Errors | |||
' MVC.RedirectToAction "Create" | |||
'Else | |||
KitRepository.AddNew new_Kit_model | |||
' FormCache.ClearForm "NewKit" | |||
Flash.Success = "Kit added." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Delete | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.Kit = KitRepository.FindByID(id) | |||
Model.Title = "Delete Kit" | |||
HTMLSecurity.SetAntiCSRFToken "KitDeleteForm" | |||
%> <!--#include file="../../Views/Kit/Delete.asp"--> <% | |||
End Sub | |||
Public Sub DeletePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitDeleteForm", Request.Form("nonce"), "Create" | |||
dim id : id = Request.Form("Id") | |||
KitRepository.Delete id | |||
Flash.Success = "Kit deleted." | |||
MVC.RedirectToAction "Index" | |||
End Sub | |||
End Class | |||
MVC.Dispatch | |||
%> |
@@ -0,0 +1,129 @@ | |||
<% Option Explicit %> | |||
<!--#include file="../../include_all.asp"--> | |||
<!--#include file="../../ViewModels/KitLabelsViewModels.asp"--> | |||
<% | |||
Class KitLabelsController | |||
Public Model | |||
Public Sub Index | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "KitLabels" | |||
set Model.KitLabels = KitLabelsRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/KitLabels/Index.asp"--> <% | |||
End Sub | |||
Public Sub Search | |||
dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "KitLabels" | |||
set Model.KitLabels = KitLabelsRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","KitId","%" & searchValue & "%","OutboundSerial","%" & searchValue & "%","InBoundSerial","%" & searchValue & "%","OutboundIMB","%" & searchValue & "%","InBoundIMB","%" & searchValue & "%","OutboundIMBDigits","%" & searchValue & "%","InBoundIMBDigits","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/KitLabels/Index.asp"--> <% | |||
End Sub | |||
Public Sub Edit | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Edit_ViewModel_Class | |||
set Model.KitLabels = KitLabelsRepository.FindByID(id) | |||
Model.Title = "Edit KitLabels" | |||
HTMLSecurity.SetAntiCSRFToken "KitLabelsEditForm" | |||
%> <!--#include file="../../Views/KitLabels/Edit.asp"--> <% | |||
Flash.Success = "KitLabels Updated." | |||
End Sub | |||
Public Sub EditPost | |||
MVC.RequirePost | |||
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "KitLabelsEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) | |||
dim ID : ID = Request.Form("Id") | |||
dim model : set model = KitLabelsRepository.FindByID(ID) | |||
set model = Automapper.AutoMap(Request.Form, model) | |||
'model.Validate | |||
'If model.Validator.HasErrors then | |||
FormCache.SerializeForm "EditKitLabels", Request.Form | |||
' Flash.Errors = model.Validator.Errors | |||
' MVC.RedirectToActionExt "Edit", Array("Id",ID) | |||
'Else | |||
KitLabelsRepository.Update model | |||
FormCache.ClearForm "EditKitLabels" | |||
Flash.Success = "KitLabels updated." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Create | |||
dim form_params : set form_params = FormCache.DeserializeForm("NewKitLabels") | |||
If Not form_params Is Nothing then | |||
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) | |||
Else | |||
set Model = new Create_ViewModel_Class | |||
End If | |||
HTMLSecurity.SetAntiCSRFToken "KitLabelsCreateForm" | |||
%> <!--#include file="../../Views/KitLabels/Create.asp"--> <% | |||
End Sub | |||
Public Sub CreatePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitLabelsCreateForm", Request.Form("nonce"), "Create" | |||
dim new_KitLabels_model : set new_KitLabels_model = Automapper.AutoMap(Request.Form, new KitLabelsModel_Class) | |||
'new_KitLabels_model.Validator.Validate | |||
'If new_KitLabels_model.Validator.HasErrors then | |||
' FormCache.SerializeForm "NewKitLabels", Request.Form | |||
' Flash.Errors = new_KitLabels_model.Validator.Errors | |||
' MVC.RedirectToAction "Create" | |||
'Else | |||
KitLabelsRepository.AddNew new_KitLabels_model | |||
' FormCache.ClearForm "NewKitLabels" | |||
Flash.Success = "KitLabels added." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Delete | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.KitLabels = KitLabelsRepository.FindByID(id) | |||
Model.Title = "Delete KitLabels" | |||
HTMLSecurity.SetAntiCSRFToken "KitLabelsDeleteForm" | |||
%> <!--#include file="../../Views/KitLabels/Delete.asp"--> <% | |||
End Sub | |||
Public Sub DeletePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "KitLabelsDeleteForm", Request.Form("nonce"), "Create" | |||
dim id : id = Request.Form("Id") | |||
KitLabelsRepository.Delete id | |||
Flash.Success = "KitLabels deleted." | |||
MVC.RedirectToAction "Index" | |||
End Sub | |||
End Class | |||
MVC.Dispatch | |||
%> |
@@ -0,0 +1,129 @@ | |||
<% Option Explicit %> | |||
<!--#include file="../../include_all.asp"--> | |||
<!--#include file="../../ViewModels/SettingsViewModels.asp"--> | |||
<% | |||
Class SettingsController | |||
Public Model | |||
Public Sub Index | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Settings" | |||
set Model.Settings = SettingsRepository.FindPaged(empty, "ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Settings/Index.asp"--> <% | |||
End Sub | |||
Public Sub Search | |||
dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) | |||
dim page_size : page_size = 10 | |||
dim page_num : page_num = Choice(Len(Request.Querystring("page_num")) > 0, Request.Querystring("page_num"), 1) | |||
dim page_count, record_count | |||
set Model = new PagedIndex_ViewModel_Class | |||
Model.Title = "Settings" | |||
set Model.Settings = SettingsRepository.SearchTablePaged(Array("ID","%" & searchValue & "%","Name","%" & searchValue & "%","Value","%" & searchValue & "%"),"ID", page_size, page_num, page_count, record_count) | |||
Model.CurrentPageNumber = page_num | |||
Model.PageSize = page_size | |||
Model.PageCount = page_count | |||
Model.RecordCount = record_count | |||
%> <!--#include file="../../Views/Settings/Index.asp"--> <% | |||
End Sub | |||
Public Sub Edit | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Edit_ViewModel_Class | |||
set Model.Settings = SettingsRepository.FindByID(id) | |||
Model.Title = "Edit Settings" | |||
HTMLSecurity.SetAntiCSRFToken "SettingsEditForm" | |||
%> <!--#include file="../../Views/Settings/Edit.asp"--> <% | |||
Flash.Success = "Settings Updated." | |||
End Sub | |||
Public Sub EditPost | |||
MVC.RequirePost | |||
HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt "SettingsEditForm", Request.Form("nonce"), "Edit", Array("Id", Request.Form("Id")) | |||
dim ID : ID = Request.Form("Id") | |||
dim model : set model = SettingsRepository.FindByID(ID) | |||
set model = Automapper.AutoMap(Request.Form, model) | |||
'model.Validate | |||
'If model.Validator.HasErrors then | |||
FormCache.SerializeForm "EditSettings", Request.Form | |||
' Flash.Errors = model.Validator.Errors | |||
' MVC.RedirectToActionExt "Edit", Array("Id",ID) | |||
'Else | |||
SettingsRepository.Update model | |||
FormCache.ClearForm "EditSettings" | |||
Flash.Success = "Settings updated." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Create | |||
dim form_params : set form_params = FormCache.DeserializeForm("NewSettings") | |||
If Not form_params Is Nothing then | |||
set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class) | |||
Else | |||
set Model = new Create_ViewModel_Class | |||
End If | |||
HTMLSecurity.SetAntiCSRFToken "SettingsCreateForm" | |||
%> <!--#include file="../../Views/Settings/Create.asp"--> <% | |||
End Sub | |||
Public Sub CreatePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "SettingsCreateForm", Request.Form("nonce"), "Create" | |||
dim new_Settings_model : set new_Settings_model = Automapper.AutoMap(Request.Form, new SettingsModel_Class) | |||
'new_Settings_model.Validator.Validate | |||
'If new_Settings_model.Validator.HasErrors then | |||
' FormCache.SerializeForm "NewSettings", Request.Form | |||
' Flash.Errors = new_Settings_model.Validator.Errors | |||
' MVC.RedirectToAction "Create" | |||
'Else | |||
SettingsRepository.AddNew new_Settings_model | |||
' FormCache.ClearForm "NewSettings" | |||
Flash.Success = "Settings added." | |||
MVC.RedirectToAction "Index" | |||
'End If | |||
End Sub | |||
Public Sub Delete | |||
dim id : id = Request.QueryString("Id") | |||
set Model = new Delete_ViewModel_Class | |||
set Model.Settings = SettingsRepository.FindByID(id) | |||
Model.Title = "Delete Settings" | |||
HTMLSecurity.SetAntiCSRFToken "SettingsDeleteForm" | |||
%> <!--#include file="../../Views/Settings/Delete.asp"--> <% | |||
End Sub | |||
Public Sub DeletePost | |||
MVC.RequirePost | |||
HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction "SettingsDeleteForm", Request.Form("nonce"), "Create" | |||
dim id : id = Request.Form("Id") | |||
SettingsRepository.Delete id | |||
Flash.Success = "Settings deleted." | |||
MVC.RedirectToAction "Index" | |||
End Sub | |||
End Class | |||
MVC.Dispatch | |||
%> |
@@ -0,0 +1,29 @@ | |||
<% | |||
' This class encapsulates database access into one location, isolating database details from the rest of the app. | |||
' Multiple databases can be handled in one of two ways: | |||
' | |||
' Option 1. Use a single DAL_Class instance with separate public properties for each database. | |||
' Ex: To access Orders use DAL.Orders and to access Employees use DAL.Employees. | |||
' | |||
' Option 2. Use a separate DAL_Class instance for each database. | |||
' Ex: | |||
' dim OrdersDAL : set OrdersDAL = new DAL_Class | |||
' OrdersDAL.ConnectionString = "..." <-- you would have to create this property to use this approach | |||
' | |||
' If you only access one database it is easier to just set the global DAL singleton to an instance of the | |||
' Database_Class and use it directly. See the example project for details. | |||
'======================================================================================================================= | |||
' DATA ACCESS LAYER Class | |||
'======================================================================================================================= | |||
dim DAL__Singleton : set DAL__Singleton = Nothing | |||
Function DAL() | |||
If DAL__Singleton is Nothing then | |||
set DAL__Singleton = new Database_Class | |||
DAL__Singleton.Initialize "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "Data\webdata.mdb;" | |||
End If | |||
set DAL = DAL__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,302 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Contacts Model | |||
'======================================================================================================================= | |||
Class ContactsModel_Class | |||
Public Validator | |||
Public Class_Get_Properties | |||
Public ID '90 | |||
Public JURISCODE '106 | |||
Public TownshipName '106 | |||
Public CONTACT_NAME '106 | |||
Public TownshipNum '106 | |||
Public BUSINESS_ADDRESS '106 | |||
Public TITLE '106 | |||
Public BUSINESS_ADDRESS2 '106 | |||
Public BUSINESS_ADDRESS3 '106 | |||
Public MAILING_ADDRESS '106 | |||
Public MAILING_ADDRESS2 '106 | |||
Public MAILING_ADDRESS3 '106 | |||
Public RESIDENTIAL_ADDRESS '106 | |||
Public RESIDENTIAL_ADDRESS2 '106 | |||
Public PHONENUM1 '106 | |||
Public RESIDENTIAL_ADDRESS3 '106 | |||
Public FAXNUM '122 | |||
Public PHONENUM2 '106 | |||
Public EMAIL '106 | |||
Private Sub Class_Initialize | |||
'ValidateExitsts Me, "","" | |||
Class_Get_Properties = Array("ID, JURISCODE, TownshipName, CONTACT_NAME, TownshipNum, BUSINESS_ADDRESS, TITLE, BUSINESS_ADDRESS2, BUSINESS_ADDRESS3, MAILING_ADDRESS, MAILING_ADDRESS2, MAILING_ADDRESS3, RESIDENTIAL_ADDRESS, RESIDENTIAL_ADDRESS2, PHONENUM1, RESIDENTIAL_ADDRESS3, FAXNUM, PHONENUM2, EMAIL") | |||
End Sub | |||
End CLass | |||
'======================================================================================================================= | |||
' Contacts Repository | |||
'======================================================================================================================= | |||
Class ContactsRepository_Class | |||
Public Function FindByID(ID) | |||
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts] WHERE ID = ?" | |||
dim rs : set rs = DAL.Query(sql,ID) | |||
If rs.EOF then | |||
Err.Raise 1, "ContactsRepository_Class", ContactsNotFoundException("ID", ID) | |||
Else | |||
set FindByID = Automapper.AutoMap(rs,"ContactsModel_Class") | |||
End If | |||
End Function | |||
Public Function GetAll(orderBy) | |||
set GetAll = Find(empty,orderBy) | |||
End Function | |||
Public Function Find(where_kvarray, order_string_or_array) | |||
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim rs : set rs = DAL.Query(sql, where_values) | |||
set Find = ContactsList(rs) | |||
Destroy rs | |||
End Function | |||
Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set FindPaged = PagedContactsList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [JURISCODE], [TownshipName], [CONTACT_NAME], [TownshipNum], [BUSINESS_ADDRESS], [TITLE], [BUSINESS_ADDRESS2], [BUSINESS_ADDRESS3], [MAILING_ADDRESS], [MAILING_ADDRESS2], [MAILING_ADDRESS3], [RESIDENTIAL_ADDRESS], [RESIDENTIAL_ADDRESS2], [PHONENUM1], [RESIDENTIAL_ADDRESS3], [FAXNUM], [PHONENUM2], [EMAIL] FROM [Contacts]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " OR" | |||
sql = sql & " " & where_keys(i) & " LIKE ?" | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & " ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set SearchTablePaged = PagedContactsList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Private Function PagedContactsList(rs, per_page) | |||
dim list : set list = new LinkedList_Class | |||
dim x : x =0 | |||
Do While x < per_page and Not rs.EOF | |||
list.Push Automapper.AutoMap(rs, new ContactsModel_Class) | |||
x = x +1 | |||
rs.MoveNext | |||
Loop | |||
set PagedContactsList = list | |||
End Function | |||
Private Function ContactsNotFoundException(ByVal field_name, ByVal field_val) | |||
ContactsNotFoundException = "Contacts was not found with " & field_name & " of '" & field_val & "'." | |||
End Function | |||
Private Function ContactsList(rs) | |||
dim list : set list = new LinkedList_Class | |||
dim model | |||
Do until rs.EOF | |||
set model = new ContactsModel_Class | |||
list.Push Automapper.AutoMap(rs, model) | |||
rs.MoveNext | |||
Loop | |||
set ContactsList = list | |||
End Function | |||
Public Sub AddNew(ByRef model) | |||
dim sql : sql = "INSERT INTO [Contacts] (" &_ | |||
"[JURISCODE]," &_ | |||
"[TownshipName]," &_ | |||
"[CONTACT_NAME]," &_ | |||
"[TownshipNum]," &_ | |||
"[BUSINESS_ADDRESS]," &_ | |||
"[TITLE]," &_ | |||
"[BUSINESS_ADDRESS2]," &_ | |||
"[BUSINESS_ADDRESS3]," &_ | |||
"[MAILING_ADDRESS]," &_ | |||
"[MAILING_ADDRESS2]," &_ | |||
"[MAILING_ADDRESS3]," &_ | |||
"[RESIDENTIAL_ADDRESS]," &_ | |||
"[RESIDENTIAL_ADDRESS2]," &_ | |||
"[PHONENUM1]," &_ | |||
"[RESIDENTIAL_ADDRESS3]," &_ | |||
"[FAXNUM]," &_ | |||
"[PHONENUM2]," &_ | |||
"[EMAIL])" &_ | |||
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" | |||
DAL.Execute sql, Array(model.JURISCODE, _ | |||
model.TownshipName, _ | |||
model.CONTACT_NAME, _ | |||
model.TownshipNum, _ | |||
model.BUSINESS_ADDRESS, _ | |||
model.TITLE, _ | |||
model.BUSINESS_ADDRESS2, _ | |||
model.BUSINESS_ADDRESS3, _ | |||
model.MAILING_ADDRESS, _ | |||
model.MAILING_ADDRESS2, _ | |||
model.MAILING_ADDRESS3, _ | |||
model.RESIDENTIAL_ADDRESS, _ | |||
model.RESIDENTIAL_ADDRESS2, _ | |||
model.PHONENUM1, _ | |||
model.RESIDENTIAL_ADDRESS3, _ | |||
model.FAXNUM, _ | |||
model.PHONENUM2, _ | |||
model.EMAIL) | |||
sql = "SELECT TOP 1 ID FROM [Contacts] ORDER BY ID DESC" | |||
dim rs : set rs = DAL.Query(sql, empty) | |||
model.ID = rs("ID") | |||
Destroy rs | |||
End Sub | |||
Public Sub Update(model) | |||
dim sql : sql = "UPDATE [Contacts] SET [JURISCODE] = ?," &_ | |||
"[TownshipName] = ?," &_ | |||
"[CONTACT_NAME] = ?," &_ | |||
"[TownshipNum] = ?," &_ | |||
"[BUSINESS_ADDRESS] = ?," &_ | |||
"[TITLE] = ?," &_ | |||
"[BUSINESS_ADDRESS2] = ?," &_ | |||
"[BUSINESS_ADDRESS3] = ?," &_ | |||
"[MAILING_ADDRESS] = ?," &_ | |||
"[MAILING_ADDRESS2] = ?," &_ | |||
"[MAILING_ADDRESS3] = ?," &_ | |||
"[RESIDENTIAL_ADDRESS] = ?," &_ | |||
"[RESIDENTIAL_ADDRESS2] = ?," &_ | |||
"[PHONENUM1] = ?," &_ | |||
"[RESIDENTIAL_ADDRESS3] = ?," &_ | |||
"[FAXNUM] = ?," &_ | |||
"[PHONENUM2] = ?," &_ | |||
"[EMAIL] = ?" &_ | |||
" WHERE [ID] = ?" | |||
DAL.Execute sql, Array(model.JURISCODE, _ | |||
model.TownshipName, _ | |||
model.CONTACT_NAME, _ | |||
model.TownshipNum, _ | |||
model.BUSINESS_ADDRESS, _ | |||
model.TITLE, _ | |||
model.BUSINESS_ADDRESS2, _ | |||
model.BUSINESS_ADDRESS3, _ | |||
model.MAILING_ADDRESS, _ | |||
model.MAILING_ADDRESS2, _ | |||
model.MAILING_ADDRESS3, _ | |||
model.RESIDENTIAL_ADDRESS, _ | |||
model.RESIDENTIAL_ADDRESS2, _ | |||
model.PHONENUM1, _ | |||
model.RESIDENTIAL_ADDRESS3, _ | |||
model.FAXNUM, _ | |||
model.PHONENUM2, _ | |||
model.EMAIL, _ | |||
model.ID) | |||
End Sub | |||
Public Sub Delete(id) | |||
dim sql : sql = "DELETE FROM [Contacts] WHERE [ID] = ?" | |||
DAL.Execute sql, id | |||
End Sub | |||
End Class | |||
dim ContactsRepository__Singleton | |||
Function ContactsRepository() | |||
If IsEmpty(ContactsRepository__Singleton) then | |||
set ContactsRepository__Singleton = new ContactsRepository_Class | |||
End If | |||
set ContactsRepository = ContactsRepository__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,237 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Jurisdiction Model | |||
'======================================================================================================================= | |||
Class JurisdictionModel_Class | |||
Public Validator | |||
Public Class_Get_Properties | |||
Public JCode '106 | |||
Public Name '106 | |||
Public Mailing_Address '106 | |||
Public CSZ '106 | |||
Public IMB '106 | |||
Public IMB_Digits '106 | |||
Private Sub Class_Initialize | |||
'ValidateExitsts Me, "","" | |||
Class_Get_Properties = Array("JCode, Name, Mailing_Address, CSZ, IMB, IMB_Digits") | |||
End Sub | |||
End CLass | |||
'======================================================================================================================= | |||
' Jurisdiction Repository | |||
'======================================================================================================================= | |||
Class JurisdictionRepository_Class | |||
Public Function FindByJCode(JCode) | |||
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction] WHERE JCode = ?" | |||
dim rs : set rs = DAL.Query(sql,JCode) | |||
If rs.EOF then | |||
Err.Raise 1, "JurisdictionRepository_Class", JurisdictionNotFoundException("JCode", JCode) | |||
Else | |||
set FindByJCode = Automapper.AutoMap(rs,"JurisdictionModel_Class") | |||
End If | |||
End Function | |||
Public Function GetAll(orderBy) | |||
set GetAll = Find(empty,orderBy) | |||
End Function | |||
Public Function Find(where_kvarray, order_string_or_array) | |||
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim rs : set rs = DAL.Query(sql, where_values) | |||
set Find = JurisdictionList(rs) | |||
Destroy rs | |||
End Function | |||
Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set FindPaged = PagedJurisdictionList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [JCode], [Name], [Mailing_Address], [CSZ], [IMB], [IMB_Digits] FROM [Jurisdiction]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " OR" | |||
sql = sql & " " & where_keys(i) & " LIKE ?" | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & " ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set SearchTablePaged = PagedJurisdictionList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Private Function PagedJurisdictionList(rs, per_page) | |||
dim list : set list = new LinkedList_Class | |||
dim x : x =0 | |||
Do While x < per_page and Not rs.EOF | |||
list.Push Automapper.AutoMap(rs, new JurisdictionModel_Class) | |||
x = x +1 | |||
rs.MoveNext | |||
Loop | |||
set PagedJurisdictionList = list | |||
End Function | |||
Private Function JurisdictionNotFoundException(ByVal field_name, ByVal field_val) | |||
JurisdictionNotFoundException = "Jurisdiction was not found with " & field_name & " of '" & field_val & "'." | |||
End Function | |||
Private Function JurisdictionList(rs) | |||
dim list : set list = new LinkedList_Class | |||
dim model | |||
Do until rs.EOF | |||
set model = new JurisdictionModel_Class | |||
list.Push Automapper.AutoMap(rs, model) | |||
rs.MoveNext | |||
Loop | |||
set JurisdictionList = list | |||
End Function | |||
Public Sub AddNew(ByRef model) | |||
dim sql : sql = "INSERT INTO [Jurisdiction] (" &_ | |||
"[Name]," &_ | |||
"[Mailing_Address]," &_ | |||
"[CSZ]," &_ | |||
"[IMB]," &_ | |||
"[IMB_Digits])" &_ | |||
"VALUES (?,?,?,?,?)" | |||
DAL.Execute sql, Array(model.Name, _ | |||
model.Mailing_Address, _ | |||
model.CSZ, _ | |||
model.IMB, _ | |||
model.IMB_Digits) | |||
sql = "SELECT TOP 1 JCode FROM [Jurisdiction] ORDER BY JCode DESC" | |||
dim rs : set rs = DAL.Query(sql, empty) | |||
model.JCode = rs("JCode") | |||
Destroy rs | |||
End Sub | |||
Public Sub Update(model) | |||
dim sql : sql = "UPDATE [Jurisdiction] SET [Name] = ?," &_ | |||
"[Mailing_Address] = ?," &_ | |||
"[CSZ] = ?," &_ | |||
"[IMB] = ?," &_ | |||
"[IMB_Digits] = ?" &_ | |||
" WHERE [JCode] = ?" | |||
DAL.Execute sql, Array(model.Name, _ | |||
model.Mailing_Address, _ | |||
model.CSZ, _ | |||
model.IMB, _ | |||
model.IMB_Digits, _ | |||
model.JCode) | |||
End Sub | |||
Public Sub Delete(id) | |||
dim sql : sql = "DELETE FROM [Jurisdiction] WHERE [JCode] = ?" | |||
DAL.Execute sql, id | |||
End Sub | |||
End Class | |||
dim JurisdictionRepository__Singleton | |||
Function JurisdictionRepository() | |||
If IsEmpty(JurisdictionRepository__Singleton) then | |||
set JurisdictionRepository__Singleton = new JurisdictionRepository_Class | |||
End If | |||
set JurisdictionRepository = JurisdictionRepository__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,247 @@ | |||
<% | |||
'======================================================================================================================= | |||
' KitLabels Model | |||
'======================================================================================================================= | |||
Class KitLabelsModel_Class | |||
Public Validator | |||
Public Class_Get_Properties | |||
Public ID '90 | |||
Public KitId '122 | |||
Public OutboundSerial '106 | |||
Public InBoundSerial '106 | |||
Public OutboundIMB '106 | |||
Public InBoundIMB '106 | |||
Public OutboundIMBDigits '106 | |||
Public InBoundIMBDigits '106 | |||
Private Sub Class_Initialize | |||
'ValidateExitsts Me, "","" | |||
Class_Get_Properties = Array("ID, KitId, OutboundSerial, InBoundSerial, OutboundIMB, InBoundIMB, OutboundIMBDigits, InBoundIMBDigits") | |||
End Sub | |||
End CLass | |||
'======================================================================================================================= | |||
' KitLabels Repository | |||
'======================================================================================================================= | |||
Class KitLabelsRepository_Class | |||
Public Function FindByID(ID) | |||
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels] WHERE ID = ?" | |||
dim rs : set rs = DAL.Query(sql,ID) | |||
If rs.EOF then | |||
Err.Raise 1, "KitLabelsRepository_Class", KitLabelsNotFoundException("ID", ID) | |||
Else | |||
set FindByID = Automapper.AutoMap(rs,"KitLabelsModel_Class") | |||
End If | |||
End Function | |||
Public Function GetAll(orderBy) | |||
set GetAll = Find(empty,orderBy) | |||
End Function | |||
Public Function Find(where_kvarray, order_string_or_array) | |||
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim rs : set rs = DAL.Query(sql, where_values) | |||
set Find = KitLabelsList(rs) | |||
Destroy rs | |||
End Function | |||
Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set FindPaged = PagedKitLabelsList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [KitId], [OutboundSerial], [InBoundSerial], [OutboundIMB], [InBoundIMB], [OutboundIMBDigits], [InBoundIMBDigits] FROM [KitLabels]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " OR" | |||
sql = sql & " " & where_keys(i) & " LIKE ?" | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & " ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set SearchTablePaged = PagedKitLabelsList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Private Function PagedKitLabelsList(rs, per_page) | |||
dim list : set list = new LinkedList_Class | |||
dim x : x =0 | |||
Do While x < per_page and Not rs.EOF | |||
list.Push Automapper.AutoMap(rs, new KitLabelsModel_Class) | |||
x = x +1 | |||
rs.MoveNext | |||
Loop | |||
set PagedKitLabelsList = list | |||
End Function | |||
Private Function KitLabelsNotFoundException(ByVal field_name, ByVal field_val) | |||
KitLabelsNotFoundException = "KitLabels was not found with " & field_name & " of '" & field_val & "'." | |||
End Function | |||
Private Function KitLabelsList(rs) | |||
dim list : set list = new LinkedList_Class | |||
dim model | |||
Do until rs.EOF | |||
set model = new KitLabelsModel_Class | |||
list.Push Automapper.AutoMap(rs, model) | |||
rs.MoveNext | |||
Loop | |||
set KitLabelsList = list | |||
End Function | |||
Public Sub AddNew(ByRef model) | |||
dim sql : sql = "INSERT INTO [KitLabels] (" &_ | |||
"[KitId]," &_ | |||
"[OutboundSerial]," &_ | |||
"[InBoundSerial]," &_ | |||
"[OutboundIMB]," &_ | |||
"[InBoundIMB]," &_ | |||
"[OutboundIMBDigits]," &_ | |||
"[InBoundIMBDigits])" &_ | |||
"VALUES (?,?,?,?,?,?,?)" | |||
DAL.Execute sql, Array(model.KitId, _ | |||
model.OutboundSerial, _ | |||
model.InBoundSerial, _ | |||
model.OutboundIMB, _ | |||
model.InBoundIMB, _ | |||
model.OutboundIMBDigits, _ | |||
model.InBoundIMBDigits) | |||
sql = "SELECT TOP 1 ID FROM [KitLabels] ORDER BY ID DESC" | |||
dim rs : set rs = DAL.Query(sql, empty) | |||
model.ID = rs("ID") | |||
Destroy rs | |||
End Sub | |||
Public Sub Update(model) | |||
dim sql : sql = "UPDATE [KitLabels] SET [KitId] = ?," &_ | |||
"[OutboundSerial] = ?," &_ | |||
"[InBoundSerial] = ?," &_ | |||
"[OutboundIMB] = ?," &_ | |||
"[InBoundIMB] = ?," &_ | |||
"[OutboundIMBDigits] = ?," &_ | |||
"[InBoundIMBDigits] = ?" &_ | |||
" WHERE [ID] = ?" | |||
DAL.Execute sql, Array(model.KitId, _ | |||
model.OutboundSerial, _ | |||
model.InBoundSerial, _ | |||
model.OutboundIMB, _ | |||
model.InBoundIMB, _ | |||
model.OutboundIMBDigits, _ | |||
model.InBoundIMBDigits, _ | |||
model.ID) | |||
End Sub | |||
Public Sub Delete(id) | |||
dim sql : sql = "DELETE FROM [KitLabels] WHERE [ID] = ?" | |||
DAL.Execute sql, id | |||
End Sub | |||
End Class | |||
dim KitLabelsRepository__Singleton | |||
Function KitLabelsRepository() | |||
If IsEmpty(KitLabelsRepository__Singleton) then | |||
set KitLabelsRepository__Singleton = new KitLabelsRepository_Class | |||
End If | |||
set KitLabelsRepository = KitLabelsRepository__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,222 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Kit Model | |||
'======================================================================================================================= | |||
Class KitModel_Class | |||
Public Validator | |||
Public Class_Get_Properties | |||
Public ID '90 | |||
Public JobNumber '106 | |||
Public Jcode '106 | |||
Private Sub Class_Initialize | |||
'ValidateExitsts Me, "","" | |||
Class_Get_Properties = Array("ID, JobNumber, Jcode") | |||
End Sub | |||
End CLass | |||
'======================================================================================================================= | |||
' Kit Repository | |||
'======================================================================================================================= | |||
Class KitRepository_Class | |||
Public Function FindByID(ID) | |||
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit] WHERE ID = ?" | |||
dim rs : set rs = DAL.Query(sql,ID) | |||
If rs.EOF then | |||
Err.Raise 1, "KitRepository_Class", KitNotFoundException("ID", ID) | |||
Else | |||
set FindByID = Automapper.AutoMap(rs,"KitModel_Class") | |||
End If | |||
End Function | |||
Public Function GetAll(orderBy) | |||
set GetAll = Find(empty,orderBy) | |||
End Function | |||
Public Function Find(where_kvarray, order_string_or_array) | |||
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim rs : set rs = DAL.Query(sql, where_values) | |||
set Find = KitList(rs) | |||
Destroy rs | |||
End Function | |||
Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set FindPaged = PagedKitList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [JobNumber], [Jcode] FROM [Kit]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " OR" | |||
sql = sql & " " & where_keys(i) & " LIKE ?" | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & " ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set SearchTablePaged = PagedKitList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Private Function PagedKitList(rs, per_page) | |||
dim list : set list = new LinkedList_Class | |||
dim x : x =0 | |||
Do While x < per_page and Not rs.EOF | |||
list.Push Automapper.AutoMap(rs, new KitModel_Class) | |||
x = x +1 | |||
rs.MoveNext | |||
Loop | |||
set PagedKitList = list | |||
End Function | |||
Private Function KitNotFoundException(ByVal field_name, ByVal field_val) | |||
KitNotFoundException = "Kit was not found with " & field_name & " of '" & field_val & "'." | |||
End Function | |||
Private Function KitList(rs) | |||
dim list : set list = new LinkedList_Class | |||
dim model | |||
Do until rs.EOF | |||
set model = new KitModel_Class | |||
list.Push Automapper.AutoMap(rs, model) | |||
rs.MoveNext | |||
Loop | |||
set KitList = list | |||
End Function | |||
Public Sub AddNew(ByRef model) | |||
dim sql : sql = "INSERT INTO [Kit] (" &_ | |||
"[JobNumber]," &_ | |||
"[Jcode])" &_ | |||
"VALUES (?,?)" | |||
DAL.Execute sql, Array(model.JobNumber, _ | |||
model.Jcode) | |||
sql = "SELECT TOP 1 ID FROM [Kit] ORDER BY ID DESC" | |||
dim rs : set rs = DAL.Query(sql, empty) | |||
model.ID = rs("ID") | |||
Destroy rs | |||
End Sub | |||
Public Sub Update(model) | |||
dim sql : sql = "UPDATE [Kit] SET [JobNumber] = ?," &_ | |||
"[Jcode] = ?" &_ | |||
" WHERE [ID] = ?" | |||
DAL.Execute sql, Array(model.JobNumber, _ | |||
model.Jcode, _ | |||
model.ID) | |||
End Sub | |||
Public Sub Delete(id) | |||
dim sql : sql = "DELETE FROM [Kit] WHERE [ID] = ?" | |||
DAL.Execute sql, id | |||
End Sub | |||
End Class | |||
dim KitRepository__Singleton | |||
Function KitRepository() | |||
If IsEmpty(KitRepository__Singleton) then | |||
set KitRepository__Singleton = new KitRepository_Class | |||
End If | |||
set KitRepository = KitRepository__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,222 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Settings Model | |||
'======================================================================================================================= | |||
Class SettingsModel_Class | |||
Public Validator | |||
Public Class_Get_Properties | |||
Public ID '90 | |||
Public Name '106 | |||
Public Value '106 | |||
Private Sub Class_Initialize | |||
'ValidateExitsts Me, "","" | |||
Class_Get_Properties = Array("ID, Name, Value") | |||
End Sub | |||
End CLass | |||
'======================================================================================================================= | |||
' Settings Repository | |||
'======================================================================================================================= | |||
Class SettingsRepository_Class | |||
Public Function FindByID(ID) | |||
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings] WHERE ID = ?" | |||
dim rs : set rs = DAL.Query(sql,ID) | |||
If rs.EOF then | |||
Err.Raise 1, "SettingsRepository_Class", SettingsNotFoundException("ID", ID) | |||
Else | |||
set FindByID = Automapper.AutoMap(rs,"SettingsModel_Class") | |||
End If | |||
End Function | |||
Public Function GetAll(orderBy) | |||
set GetAll = Find(empty,orderBy) | |||
End Function | |||
Public Function Find(where_kvarray, order_string_or_array) | |||
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim rs : set rs = DAL.Query(sql, where_values) | |||
set Find = SettingsList(rs) | |||
Destroy rs | |||
End Function | |||
Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " AND " | |||
sql = sql & " " & where_keys(i) & " " | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & "ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set FindPaged = PagedSettingsList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count) | |||
dim sql : sql = "Select [ID], [Name], [Value] FROM [Settings]" | |||
If Not IsEmpty(where_kvarray) then | |||
sql = sql & " WHERE " | |||
dim where_keys, where_values | |||
KVUnzip where_kvarray, where_keys, where_values | |||
dim i | |||
For i = 0 to UBound(where_keys) | |||
If i > 0 then sql = sql & " OR" | |||
sql = sql & " " & where_keys(i) & " LIKE ?" | |||
Next | |||
End If | |||
If Not IsEmpty(order_string_or_array) then | |||
sql = sql & " ORDER BY " | |||
If IsArray(order_string_or_array) then | |||
dim order_array : order_array = order_string_or_array | |||
For i = 0 to UBound(order_array) | |||
If i > 0 then sql = sql & ", " | |||
sql = sql & " " & order_array(i) | |||
Next | |||
Else | |||
sql = sql & order_string_or_array & " " | |||
End If | |||
End If | |||
dim list : set list = new LinkedList_Class | |||
dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num) | |||
If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then | |||
rs.PageSize = per_page | |||
rs.AbsolutePage = page_num | |||
page_count = rs.PageCount | |||
record_count = rs.RecordCount | |||
End If | |||
set SearchTablePaged = PagedSettingsList(rs, per_page) | |||
Destroy rs | |||
End Function | |||
Private Function PagedSettingsList(rs, per_page) | |||
dim list : set list = new LinkedList_Class | |||
dim x : x =0 | |||
Do While x < per_page and Not rs.EOF | |||
list.Push Automapper.AutoMap(rs, new SettingsModel_Class) | |||
x = x +1 | |||
rs.MoveNext | |||
Loop | |||
set PagedSettingsList = list | |||
End Function | |||
Private Function SettingsNotFoundException(ByVal field_name, ByVal field_val) | |||
SettingsNotFoundException = "Settings was not found with " & field_name & " of '" & field_val & "'." | |||
End Function | |||
Private Function SettingsList(rs) | |||
dim list : set list = new LinkedList_Class | |||
dim model | |||
Do until rs.EOF | |||
set model = new SettingsModel_Class | |||
list.Push Automapper.AutoMap(rs, model) | |||
rs.MoveNext | |||
Loop | |||
set SettingsList = list | |||
End Function | |||
Public Sub AddNew(ByRef model) | |||
dim sql : sql = "INSERT INTO [Settings] (" &_ | |||
"[Name]," &_ | |||
"[Value])" &_ | |||
"VALUES (?,?)" | |||
DAL.Execute sql, Array(model.Name, _ | |||
model.Value) | |||
sql = "SELECT TOP 1 ID FROM [Settings] ORDER BY ID DESC" | |||
dim rs : set rs = DAL.Query(sql, empty) | |||
model.ID = rs("ID") | |||
Destroy rs | |||
End Sub | |||
Public Sub Update(model) | |||
dim sql : sql = "UPDATE [Settings] SET [Name] = ?," &_ | |||
"[Value] = ?" &_ | |||
" WHERE [ID] = ?" | |||
DAL.Execute sql, Array(model.Name, _ | |||
model.Value, _ | |||
model.ID) | |||
End Sub | |||
Public Sub Delete(id) | |||
dim sql : sql = "DELETE FROM [Settings] WHERE [ID] = ?" | |||
DAL.Execute sql, id | |||
End Sub | |||
End Class | |||
dim SettingsRepository__Singleton | |||
Function SettingsRepository() | |||
If IsEmpty(SettingsRepository__Singleton) then | |||
set SettingsRepository__Singleton = new SettingsRepository_Class | |||
End If | |||
set SettingsRepository = SettingsRepository__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,716 @@ | |||
Const IncludeDirectory = "F:\Development\VBS Includes\" | |||
includeFile "adovbs" | |||
includeFile "CLogger" | |||
includeFile "Public_Functions" | |||
includeFile "VBSEnvironment" | |||
includeFile "Database_Class" | |||
includeFile "lib.collections" | |||
Dim props,fieldNamesArray | |||
Dim oConn,fso,includedFile,rs | |||
Dim fixedTableName,tableName | |||
Dim PrimaryKeyDictionary | |||
Set oConn = WScript.CreateObject("ADODB.Connection") | |||
Set fso = WScript.CreateObject("Scripting.Filesystemobject") | |||
oConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Development\Tracking_Kits\Data\webdata.mdb" | |||
'oConn.ConnectionString = "Provider=SQLOLEDB;Data Source=danielsubuntu,15789;Initial Catalog=northwind;User Id=sa;Password=SunBrightShine!;" | |||
Init | |||
fixedTableName = Replace(rs("TABLE_NAME")," ","_") | |||
tableName = rs("TABLE_NAME") | |||
Do While Not rs.EOF | |||
fixedTableName = Replace(rs("TABLE_NAME")," ","_") | |||
tableName = rs("TABLE_NAME") | |||
'If tableName <> "meta_migrations" Then | |||
If tableName <> "meta_migrations" AND tableName = "KitLabels" Then | |||
debug.WriteLine(tableName) | |||
If Not fso.FolderExists(ScriptDirectory()& "Controllers\"& fixedTableName) Then fso.CreateFolder(ScriptDirectory()& "Controllers\"& fixedTableName) | |||
If Not fso.FolderExists(ScriptDirectory()& "Controllers\") Then fso.CreateFolder(ScriptDirectory()& "Controllers\") | |||
If Not fso.FolderExists(ScriptDirectory()& "Views\" & Replace(tableName," ","_")) Then fso.CreateFolder(ScriptDirectory()& "Views\" & Replace(tableName," ","_")) | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "DomainModels\" & fixedTableName & "Repository.asp",True) | |||
includedFile.WriteLine("<!--#include file=""DomainModels/"& fixedTableName & "Repository.asp""-->") | |||
file.WriteLine("<%") | |||
file.WriteLine("'=======================================================================================================================") | |||
file.WriteLine("' " & fixedTableName & " Model") | |||
file.WriteLine("'=======================================================================================================================") | |||
file.WriteLine("") | |||
file.WriteLine("Class " & fixedTableName & "Model_Class") | |||
file.WriteLine(" Public Validator") | |||
file.WriteLine(" Public Class_Get_Properties") | |||
file.WriteLine("") | |||
InitFieldNameIterator ' This Sub is werid and needs to be looked at | |||
fieldNamesArray = props.toArray() | |||
file.WriteLine("") | |||
file.WriteLine(" Private Sub Class_Initialize") | |||
file.WriteLine(" 'ValidateExitsts Me, """",""""") | |||
file.WriteLine(" Class_Get_Properties = Array(""" & Join (fieldNamesArray,", ") & """)") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine("End CLass") | |||
file.WriteLine("") | |||
file.WriteLine("'=======================================================================================================================") | |||
file.WriteLine("' " & tableName & " Repository") | |||
file.WriteLine("'=======================================================================================================================") | |||
file.WriteLine("") | |||
file.WriteLine("Class " & fixedTableName & "Repository_Class") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Function FindBy" & PrimaryKeyDictionary(tableName) & "("& PrimaryKeyDictionary(tableName) & ")") | |||
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "] WHERE " & PrimaryKeyDictionary(tableName) & " = ?""") | |||
file.WriteLine(" dim rs : set rs = DAL.Query(sql," & PrimaryKeyDictionary(tableName) & ")") | |||
File.WriteLine(" If rs.EOF then") | |||
File.WriteLine(" Err.Raise 1, """ & fixedTableName & "Repository_Class"", "& fixedTableName &"NotFoundException(""" & PrimaryKeyDictionary(tableName) &""", "& PrimaryKeyDictionary(tableName) & ")") | |||
File.WriteLine(" Else") | |||
File.WriteLine(" set FindBy" & PrimaryKeyDictionary(tableName) & " = Automapper.AutoMap(rs,""" & tableName & "Model_Class" & """)") | |||
file.WriteLine(" End If") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Function GetAll(orderBy)") | |||
file.WriteLine(" set GetAll = Find(empty,orderBy)") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Function Find(where_kvarray, order_string_or_array)") | |||
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "]""") | |||
File.WriteLine("") | |||
File.WriteLine(" If Not IsEmpty(where_kvarray) then") | |||
File.WriteLine(" sql = sql & "" WHERE """) | |||
File.WriteLine(" dim where_keys, where_values") | |||
File.WriteLine(" KVUnzip where_kvarray, where_keys, where_values") | |||
file.WriteLine("") | |||
file.WriteLine(" dim i") | |||
file.WriteLine(" For i = 0 to UBound(where_keys)") | |||
file.WriteLine(" If i > 0 then sql = sql & "" AND """) | |||
file.WriteLine(" sql = sql & "" "" & where_keys(i) & "" """) | |||
file.WriteLine(" Next") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" If Not IsEmpty(order_string_or_array) then") | |||
file.WriteLine(" sql = sql & ""ORDER BY """) | |||
file.WriteLine(" If IsArray(order_string_or_array) then") | |||
file.WriteLine(" dim order_array : order_array = order_string_or_array") | |||
file.WriteLine(" For i = 0 to UBound(order_array)") | |||
file.WriteLine(" If i > 0 then sql = sql & "", """) | |||
file.WriteLine(" sql = sql & "" "" & order_array(i)") | |||
file.WriteLine(" Next") | |||
file.WriteLine(" Else") | |||
file.WriteLine(" sql = sql & order_string_or_array & "" """) | |||
file.WriteLine(" End If") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" dim rs : set rs = DAL.Query(sql, where_values)") | |||
file.WriteLine(" set Find = " & fixedTableName & "List(rs)") | |||
file.WriteLine(" Destroy rs") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Function FindPaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)") | |||
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "]""") | |||
File.WriteLine("") | |||
File.WriteLine(" If Not IsEmpty(where_kvarray) then") | |||
File.WriteLine(" sql = sql & "" WHERE """) | |||
File.WriteLine(" dim where_keys, where_values") | |||
File.WriteLine(" KVUnzip where_kvarray, where_keys, where_values") | |||
file.WriteLine("") | |||
file.WriteLine(" dim i") | |||
file.WriteLine(" For i = 0 to UBound(where_keys)") | |||
file.WriteLine(" If i > 0 then sql = sql & "" AND """) | |||
file.WriteLine(" sql = sql & "" "" & where_keys(i) & "" """) | |||
file.WriteLine(" Next") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" If Not IsEmpty(order_string_or_array) then") | |||
file.WriteLine(" sql = sql & ""ORDER BY """) | |||
file.WriteLine(" If IsArray(order_string_or_array) then") | |||
file.WriteLine(" dim order_array : order_array = order_string_or_array") | |||
file.WriteLine(" For i = 0 to UBound(order_array)") | |||
file.WriteLine(" If i > 0 then sql = sql & "", """) | |||
file.WriteLine(" sql = sql & "" "" & order_array(i)") | |||
file.WriteLine(" Next") | |||
file.WriteLine(" Else") | |||
file.WriteLine(" sql = sql & order_string_or_array & "" """) | |||
file.WriteLine(" End If") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" dim list : set list = new LinkedList_Class") | |||
file.WriteLine(" dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)") | |||
file.WriteLine("") | |||
file.WriteLine(" If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then") | |||
file.WriteLine(" rs.PageSize = per_page") | |||
file.WriteLine(" rs.AbsolutePage = page_num") | |||
file.WriteLine(" page_count = rs.PageCount") | |||
file.WriteLine(" record_count = rs.RecordCount") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" set FindPaged = Paged"& fixedTableName & "List(rs, per_page)") | |||
file.WriteLine(" Destroy rs") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Function SearchTablePaged(where_kvarray, order_string_or_array, per_page, page_num, ByRef page_count, ByRef record_count)") | |||
file.WriteLine(" dim sql : sql = ""Select [" & Join (fieldNamesArray,"], [") & "] FROM [" & tableName & "]""") | |||
File.WriteLine("") | |||
File.WriteLine(" If Not IsEmpty(where_kvarray) then") | |||
File.WriteLine(" sql = sql & "" WHERE """) | |||
File.WriteLine(" dim where_keys, where_values") | |||
File.WriteLine(" KVUnzip where_kvarray, where_keys, where_values") | |||
file.WriteLine("") | |||
file.WriteLine(" dim i") | |||
file.WriteLine(" For i = 0 to UBound(where_keys)") | |||
file.WriteLine(" If i > 0 then sql = sql & "" OR""") | |||
file.WriteLine(" sql = sql & "" "" & where_keys(i) & "" LIKE ?""") | |||
file.WriteLine(" Next") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" If Not IsEmpty(order_string_or_array) then") | |||
file.WriteLine(" sql = sql & "" ORDER BY """) | |||
file.WriteLine(" If IsArray(order_string_or_array) then") | |||
file.WriteLine(" dim order_array : order_array = order_string_or_array") | |||
file.WriteLine(" For i = 0 to UBound(order_array)") | |||
file.WriteLine(" If i > 0 then sql = sql & "", """) | |||
file.WriteLine(" sql = sql & "" "" & order_array(i)") | |||
file.WriteLine(" Next") | |||
file.WriteLine(" Else") | |||
file.WriteLine(" sql = sql & order_string_or_array & "" """) | |||
file.WriteLine(" End If") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" dim list : set list = new LinkedList_Class") | |||
file.WriteLine(" dim rs : set rs = DAL.PagedQuery(sql, where_values, per_page, page_num)") | |||
file.WriteLine("") | |||
file.WriteLine(" If Not rs.EOF and Not (IsEmpty(per_page) and IsEmpty(page_num) and IsEmpty(page_count) and IsEmpty(record_count)) then") | |||
file.WriteLine(" rs.PageSize = per_page") | |||
file.WriteLine(" rs.AbsolutePage = page_num") | |||
file.WriteLine(" page_count = rs.PageCount") | |||
file.WriteLine(" record_count = rs.RecordCount") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" set SearchTablePaged = Paged"& fixedTableName & "List(rs, per_page)") | |||
file.WriteLine(" Destroy rs") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Private Function Paged"& fixedTableName & "List(rs, per_page)") | |||
file.WriteLine(" dim list : set list = new LinkedList_Class") | |||
file.WriteLine("") | |||
file.WriteLine(" dim x : x =0") | |||
file.WriteLine(" Do While x < per_page and Not rs.EOF") | |||
file.WriteLine(" list.Push Automapper.AutoMap(rs, new " & fixedTableName & "Model_Class" & ")") | |||
file.WriteLine(" x = x +1") | |||
file.WriteLine(" rs.MoveNext") | |||
file.WriteLine(" Loop") | |||
file.WriteLine(" set Paged"& fixedTableName & "List = list") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Private Function " & fixedTableName &"NotFoundException(ByVal field_name, ByVal field_val)") | |||
file.WriteLine(" "& fixedTableName & "NotFoundException = """ & fixedTableName & " was not found with "" & field_name & "" of '"" & field_val & ""'.""") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Private Function " & fixedTableName & "List(rs)") | |||
file.WriteLine(" dim list : set list = new LinkedList_Class") | |||
file.WriteLine(" dim model") | |||
file.WriteLine("") | |||
file.WriteLine(" Do until rs.EOF") | |||
file.WriteLine(" set model = new " & fixedTableName & "Model_Class") | |||
file.WriteLine(" list.Push Automapper.AutoMap(rs, model)") | |||
file.WriteLine(" rs.MoveNext") | |||
file.WriteLine(" Loop") | |||
file.WriteLine(" set " & fixedTableName & "List = list") | |||
file.WriteLine(" End Function") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub AddNew(ByRef model)") | |||
file.WriteLine(" dim sql : sql = ""INSERT INTO ["& fixedTableName & "] ("" &_") | |||
For Fields = 1 To UBound(fieldNamesArray)-1 | |||
file.WriteLine(" ""[" & fieldNamesArray(Fields) & "],"" &_") | |||
Next | |||
file.WriteLine(" ""[" & fieldNamesArray(UBound(fieldNamesArray)) & "])"" &_") | |||
file.Write(" ""VALUES (?") | |||
For Fields = 1 To UBound(fieldNamesArray)-1 | |||
file.Write(",?") | |||
Next | |||
file.Write(")""" & VbCrLf) | |||
file.WriteLine(" DAL.Execute sql, Array(model." & fieldNamesArray(1) & ", _") | |||
For Fields = 2 To UBound(fieldNamesArray) -1 | |||
file.WriteLine(" model." & fieldNamesArray(Fields) & ", _") | |||
Next | |||
file.WriteLine(" model." & fieldNamesArray(UBound(fieldNamesArray)) & ")") | |||
file.WriteLine(" sql = ""SELECT TOP 1 " & PrimaryKeyDictionary(tableName) & " FROM [" & fixedTableName & "] ORDER BY "& PrimaryKeyDictionary(tableName) & " DESC""") | |||
file.WriteLine(" dim rs : set rs = DAL.Query(sql, empty)") | |||
file.WriteLine(" model." & PrimaryKeyDictionary(tableName) & " = rs(""" & PrimaryKeyDictionary(tableName) & """)") | |||
file.WriteLine(" Destroy rs") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub Update(model)") | |||
file.WriteLine(" dim sql : sql = ""UPDATE ["& fixedTableName & "] SET [" & fieldNamesArray(1) & "] = ?,"" &_") | |||
For Fields = 2 To UBound(fieldNamesArray) - 1 | |||
file.WriteLine(" ""[" & fieldNamesArray(Fields) & "] = ?,"" &_") | |||
Next | |||
file.Write (" ""[" & fieldNamesArray(UBound(fieldNamesArray)) & "] = ?"" &_" & VbCrLf) | |||
file.WriteLine(" "" WHERE ["& PrimaryKeyDictionary(tableName) & "] = ?""") | |||
file.WriteLine("") | |||
file.WriteLine(" DAL.Execute sql, Array(model." & fieldNamesArray(1) & ", _") | |||
For Fields = 2 To UBound(fieldNamesArray) | |||
file.WriteLine(" model." & fieldNamesArray(Fields) & ", _") | |||
Next | |||
file.Write(" model." & PrimaryKeyDictionary(tableName) & ")" & VbCrLf) | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub Delete(id)") | |||
file.WriteLine(" dim sql : sql = ""DELETE FROM ["& fixedTableName & "] WHERE ["& PrimaryKeyDictionary(tableName) & "] = ?""") | |||
file.WriteLine(" DAL.Execute sql, id") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("End Class") | |||
file.WriteLine("") | |||
File.WriteLine("dim " & fixedTableName & "Repository__Singleton") | |||
File.WriteLine("Function " & fixedTableName & "Repository()") | |||
File.WriteLine(" If IsEmpty(" & fixedTableName & "Repository__Singleton) then") | |||
file.WriteLine(" set " & fixedTableName & "Repository__Singleton = new " & fixedTableName & "Repository_Class") | |||
file.WriteLine(" End If") | |||
file.WriteLine(" set " & fixedTableName & "Repository = " & fixedTableName & "Repository__Singleton") | |||
file.WriteLine("End Function") | |||
file.WriteLine("%>") | |||
file.Close | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "ViewModels\" & fixedTableName & "ViewModels.asp",True) | |||
file.WriteLine("<%") | |||
file.WriteLine("Class PagedIndex_ViewModel_Class") | |||
file.WriteLine(" Public Title") | |||
file.WriteLine(" Public " & fixedTableName) | |||
file.WriteLine("") | |||
file.WriteLine(" Public CurrentPageNumber") | |||
file.WriteLine(" Public PageSize") | |||
file.WriteLine(" Public PageCount") | |||
file.WriteLine(" Public RecordCount") | |||
file.WriteLine("End Class") | |||
file.WriteLine("") | |||
file.WriteLine("Class Edit_ViewModel_Class") | |||
file.WriteLine(" Public Title") | |||
file.WriteLine(" Public " & fixedTableName) | |||
file.WriteLine("") | |||
file.WriteLine("End Class") | |||
file.WriteLine("") | |||
file.WriteLine("Class Create_ViewModel_Class") | |||
For Each fieldName In fieldNamesArray | |||
If Not fieldName = PrimaryKeyDictionary(tableName) then | |||
file.WriteLine(" Public " & fieldName) | |||
End If | |||
Next | |||
file.WriteLine("End Class") | |||
file.WriteLine("") | |||
file.WriteLine("Class Delete_ViewModel_Class") | |||
file.WriteLine(" Public Title") | |||
file.WriteLine(" Public " & fixedTableName ) | |||
file.WriteLine("End Class") | |||
file.WriteLine("") | |||
file.WriteLine("%>") | |||
file.Close | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "Controllers\" & fixedTableName & "\" & fixedTableName & "Controller.asp",True) | |||
file.WriteLine("<% Option Explicit %>") | |||
file.WriteLine("<!--#include file=""../../include_all.asp""-->") | |||
file.WriteLine("<!--#include file=""../../ViewModels/" & fixedTableName & "ViewModels.asp""-->") | |||
file.WriteLine("<%") | |||
file.WriteLine("Class " & fixedTableName & "Controller") | |||
file.WriteLine(" Public Model") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub Index") | |||
file.WriteLine("") | |||
file.WriteLine(" dim page_size : page_size = 10") | |||
file.WriteLine(" dim page_num : page_num = Choice(Len(Request.Querystring(""page_num"")) > 0, Request.Querystring(""page_num""), 1)") | |||
file.WriteLine(" dim page_count, record_count") | |||
file.WriteLine(" set Model = new PagedIndex_ViewModel_Class") | |||
file.WriteLine(" Model.Title = """ & tableName & """") | |||
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.FindPaged(empty, """ & PrimaryKeyDictionary(tableName) & """, page_size, page_num, page_count, record_count)") | |||
file.WriteLine(" Model.CurrentPageNumber = page_num") | |||
file.WriteLine(" Model.PageSize = page_size") | |||
file.WriteLine(" Model.PageCount = page_count") | |||
file.WriteLine(" Model.RecordCount = record_count") | |||
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Index.asp""--> <%") | |||
file.WriteLine("") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine(" Public Sub Search") | |||
file.WriteLine("") | |||
file.WriteLine(" dim searchValue:searchValue = Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))") | |||
file.WriteLine(" dim page_size : page_size = 10") | |||
file.WriteLine(" dim page_num : page_num = Choice(Len(Request.Querystring(""page_num"")) > 0, Request.Querystring(""page_num""), 1)") | |||
file.WriteLine(" dim page_count, record_count") | |||
file.WriteLine(" set Model = new PagedIndex_ViewModel_Class") | |||
file.WriteLine(" Model.Title = """ & tableName & """") | |||
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.SearchTablePaged(Array(""" & Join (fieldNamesArray,""",""%"" & searchValue & ""%"",""") & """,""%"" & searchValue & ""%""),""" & PrimaryKeyDictionary(tableName) & """, page_size, page_num, page_count, record_count)") | |||
file.WriteLine(" Model.CurrentPageNumber = page_num") | |||
file.WriteLine(" Model.PageSize = page_size") | |||
file.WriteLine(" Model.PageCount = page_count") | |||
file.WriteLine(" Model.RecordCount = record_count") | |||
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Index.asp""--> <%") | |||
file.WriteLine("") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub Edit") | |||
file.WriteLine("") | |||
file.WriteLine(" dim id : id = Request.QueryString(""Id"")") | |||
file.WriteLine(" set Model = new Edit_ViewModel_Class") | |||
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.FindBy" & PrimaryKeyDictionary(tableName) & "(id)") | |||
file.WriteLine(" Model.Title = ""Edit " & fixedTableName & """") | |||
file.WriteLine(" HTMLSecurity.SetAntiCSRFToken """ & fixedTableName & "EditForm""") | |||
file.WriteLine(" %> <!--#include file=""../../Views/"& fixedTableName &"/Edit.asp""--> <%") | |||
file.WriteLine(" Flash.Success = """ & fixedTableName & " " & id & " Updated.""") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub EditPost") | |||
file.WriteLine(" MVC.RequirePost") | |||
File.WriteLine(" HTMLSecurity.OnInvalidAntiCsrfTokenRedirectToActionExt """ & fixedTableName & "EditForm"", Request.Form(""nonce""), ""Edit"", Array(""Id"", Request.Form(""Id""))") | |||
File.WriteLine(" dim " & PrimaryKeyDictionary(tableName) & " : " & PrimaryKeyDictionary(tableName) & " = Request.Form(""Id"")") | |||
File.WriteLine(" dim model : set model = " & fixedTableName & "Repository.FindBy" & PrimaryKeyDictionary(tableName) & "(" & PrimaryKeyDictionary(tableName) & ")") | |||
File.WriteLine(" set model = Automapper.AutoMap(Request.Form, model)") | |||
File.WriteLine(" 'model.Validate") | |||
File.WriteLine(" 'If model.Validator.HasErrors then") | |||
File.WriteLine(" FormCache.SerializeForm ""Edit" & fixedTableName & """, Request.Form") | |||
File.WriteLine(" ' Flash.Errors = model.Validator.Errors") | |||
File.WriteLine(" ' MVC.RedirectToActionExt ""Edit"", Array(""Id""," & PrimaryKeyDictionary(tableName) & ")") | |||
File.WriteLine(" 'Else") | |||
File.WriteLine(" " & fixedTableName & "Repository.Update model") | |||
File.WriteLine(" FormCache.ClearForm ""Edit" & fixedTableName & """") | |||
File.WriteLine(" Flash.Success = """ & fixedTableName & " updated.""") | |||
File.WriteLine(" MVC.RedirectToAction ""Index""") | |||
File.WriteLine(" 'End If") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub Create") | |||
file.WriteLine("") | |||
file.WriteLine(" dim form_params : set form_params = FormCache.DeserializeForm(""New" & fixedTableName & """)") | |||
file.WriteLine(" If Not form_params Is Nothing then") | |||
file.WriteLine(" set Model = Automapper.AutoMap(form_params, New Create_ViewModel_Class)") | |||
file.WriteLine(" Else") | |||
file.WriteLine(" set Model = new Create_ViewModel_Class") | |||
file.WriteLine(" End If") | |||
file.WriteLine("") | |||
file.WriteLine(" HTMLSecurity.SetAntiCSRFToken """ & fixedTableName & "CreateForm""") | |||
file.WriteLine("") | |||
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Create.asp""--> <%") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub CreatePost") | |||
file.WriteLine("") | |||
file.WriteLine(" MVC.RequirePost") | |||
file.WriteLine(" HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction """ & fixedTableName & "CreateForm"", Request.Form(""nonce""), ""Create""") | |||
file.WriteLine("") | |||
file.WriteLine(" dim new_" & fixedTableName & "_model : set new_" & fixedTableName & "_model = Automapper.AutoMap(Request.Form, new " & fixedTableName & "Model_Class)") | |||
file.WriteLine("") | |||
file.WriteLine(" 'new_" & fixedTableName & "_model.Validator.Validate") | |||
file.WriteLine("") | |||
file.WriteLine(" 'If new_" & fixedTableName & "_model.Validator.HasErrors then") | |||
file.WriteLine(" ' FormCache.SerializeForm ""New" & fixedTableName & """, Request.Form") | |||
file.WriteLine(" ' Flash.Errors = new_" & fixedTableName & "_model.Validator.Errors") | |||
file.WriteLine(" ' MVC.RedirectToAction ""Create""") | |||
file.WriteLine(" 'Else") | |||
file.WriteLine(" " & fixedTableName & "Repository.AddNew new_" & fixedTableName & "_model") | |||
File.WriteLine(" ' FormCache.ClearForm ""New" & fixedTableName & """") | |||
File.WriteLine(" Flash.Success = """ & fixedTableName & " added.""") | |||
File.WriteLine(" MVC.RedirectToAction ""Index""") | |||
File.WriteLine(" 'End If") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub Delete") | |||
file.WriteLine(" dim id : id = Request.QueryString(""Id"")") | |||
file.WriteLine(" set Model = new Delete_ViewModel_Class") | |||
file.WriteLine(" set Model." & fixedTableName & " = " & fixedTableName & "Repository.FindBy" & PrimaryKeyDictionary(tableName) & "(id)") | |||
file.WriteLine(" Model.Title = ""Delete " & fixedTableName & """") | |||
file.WriteLine("") | |||
file.WriteLine(" HTMLSecurity.SetAntiCSRFToken """ & fixedTableName & "DeleteForm""") | |||
file.WriteLine("") | |||
file.WriteLine(" %> <!--#include file=""../../Views/" & fixedTableName & "/Delete.asp""--> <%") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine(" Public Sub DeletePost") | |||
file.WriteLine(" MVC.RequirePost") | |||
file.WriteLine(" HtmlSecurity.OnInvalidAntiCSRFTokenRedirectToAction """ & fixedTableName & "DeleteForm"", Request.Form(""nonce""), ""Create""") | |||
file.WriteLine("") | |||
file.WriteLine(" dim id : id = Request.Form(""Id"")") | |||
file.WriteLine(" " & fixedTableName & "Repository.Delete id") | |||
file.WriteLine("") | |||
file.WriteLine(" Flash.Success = """ & fixedTableName & " deleted.""") | |||
file.WriteLine(" MVC.RedirectToAction ""Index""") | |||
file.WriteLine(" End Sub") | |||
file.WriteLine("") | |||
file.WriteLine("End Class") | |||
file.WriteLine("MVC.Dispatch") | |||
file.WriteLine("%>") | |||
file.Close | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\edit.asp",True) | |||
file.WriteLine("<h2><%= H(Model.Title) %></h2>") | |||
file.WriteLine("<%= HTML.FormTag("""& tableName & """, ""EditPost"", empty, empty) %>") | |||
file.WriteLine(" <%= HTML.Hidden(""nonce"", HTMLSecurity.GetAntiCSRFToken(""" & fixedTableName & "EditForm"")) %>") | |||
file.WriteLine(" <%= HTML.Hidden(""Id"", Model." & fixedTableName & "." & PrimaryKeyDictionary(tableName) & ") %>") | |||
For Each field In fieldNamesArray | |||
If Not field = PrimaryKeyDictionary(tableName) then | |||
file.WriteLine(" <div class=""row"">") | |||
file.WriteLine(" <div class=""col-md-4"">") | |||
file.WriteLine(" <div class=""form-group"">") | |||
file.WriteLine(" <label for=""" & field & """>" & field & "</label>") | |||
file.WriteLine(" <%= HTML.TextboxExt(""" & field & """, Model." & fixedTableName & "." & field & ", Array(""class"", ""form-control"")) %>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
End if | |||
Next | |||
file.WriteLine("<hr />") | |||
file.WriteLine("<div class=""form-group"">") | |||
file.WriteLine(" <% = HTML.Button(""submit"", ""<i class='glyphicon glyphicon-ok'></i> Save"", ""btn-primary"") %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='glyphicon glyphicon-remove'></i> Delete"", """ & fixedTableName & """, ""Delete"", Array(""id"", Model." & fixedTableName & "." & PrimaryKeyDictionary(tableName) & "), Array(""class"", ""btn btn-danger"")) %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <%= HTML.LinkToExt(""Cancel"", """ & fixedTableName & """, ""Index"", empty, Array(""class"", ""btn btn-default"")) %>") | |||
file.WriteLine("</div>") | |||
file.WriteLine("</form>") | |||
file.Close | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\index.asp",True) | |||
file.WriteLine("<h2><%= H(Model.Title) %></h2>") | |||
file.WriteLine("<div class=""row"">") | |||
file.WriteLine(" <div class=""col-md-8 col-sm-8 col-xs-12"">") | |||
file.WriteLine(" <%= H(Model.RecordCount) %> " & tableName & " found. Showing <%= H(Model.PageSize) %> records per page.") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-plus-square-fill'></i> New"",""" & fixedTableName & """, ""Create"", empty, Array(""class"", ""btn btn-xs btn-primary"")) %>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" <div class=""col-md-4 col-sm-4 col-xs-12"">") | |||
file.WriteLine("") | |||
file.WriteLine(" <%= HTML.FormTag(""" & fixedTableName & """, ""Search"", empty, empty) %>") | |||
file.WriteLine("") | |||
file.WriteLine(" <div class=""col-md-10 col-sm-10 col-xs-12"">") | |||
file.WriteLine(" <label class=""sr-only"" for=""search"">Search</label>") | |||
file.WriteLine(" <div class=""input-group"">") | |||
file.WriteLine(" <input type=""text"" class=""form-control input-search"" value='<%= Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q"")) %>' name=""q"" id=""search"" placeholder=""Search"">") | |||
file.WriteLine(" <span class=""input-group-addon group-icon""><span class=""glyphicon glyphicon-eye-open""></span>") | |||
file.WriteLine(" <button type=""submit"" class=""btn btn-success""><i class=""bi bi-search""></i>Search</buttton>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine("") | |||
file.WriteLine(" </form>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine("</div>") | |||
file.WriteLine("<table id=""" & fixedTableName & """ class=""table table-striped"">") | |||
file.WriteLine(" <thead>") | |||
file.WriteLine(" <tr>") | |||
file.WriteLine(" <th></th>") | |||
For Each field In fieldNamesArray | |||
file.WriteLine(" <th style=""text-align: left"">" & field & "</th>") | |||
Next | |||
file.WriteLine(" <th></th>") | |||
file.WriteLine(" </tr>") | |||
file.WriteLine(" </thead>") | |||
file.WriteLine("<tbody>") | |||
file.WriteLine(" <% dim it : set it = Model." & fixedTableName & ".Iterator %>") | |||
file.WriteLine(" <% dim " & fixedTableName & " %>") | |||
file.WriteLine(" <% While it.HasNext %>") | |||
file.WriteLine(" <% set " & fixedTableName & " = it.GetNext() %>") | |||
file.WriteLine(" <tr>") | |||
file.WriteLine(" <td>") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-search'></i>"", """& fixedTableName &""", ""Edit"", Array(""Id"", " & fixedTableName & "." & PrimaryKeyDictionary(tableName) & "), Array(""class"", ""btn btn-primary"")) %>") | |||
file.WriteLine(" </td>") | |||
For Each field In fieldNamesArray | |||
file.WriteLine(" <td><% = H(" & fixedTableName & "." & field &") %></td>") | |||
Next | |||
file.WriteLine("</tr>") | |||
file.WriteLine(" <% Wend %>") | |||
file.WriteLine(" </tbody>") | |||
file.WriteLine("</table>") | |||
file.WriteLine(" <div>") | |||
file.WriteLine(" <% If Model.CurrentPageNumber <> 1 then %>") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", 1,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-left'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", Model.CurrentPageNumber - 1,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <% Else %>") | |||
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <% End If %>") | |||
file.WriteLine(" <% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %>") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-right'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", Model.CurrentPageNumber + 1,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>"", MVC.ControllerName, MVC.ActionName, Array(""page_num"", Model.PageCount,""q"", Choice(Request.Form.Count = 0,Request.QueryString(""q""),Request.Form(""q""))), Array(""class"", ""btn btn-default"")) %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <% Else %>") | |||
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a>") | |||
file.WriteLine(" ") | |||
file.WriteLine("<% End If %>") | |||
file.WriteLine("</div>") | |||
file.WriteLine("</div>") | |||
file.Close | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\create.asp",True) | |||
file.WriteLine("<h2>Create " & fixedTableName &"</h2>") | |||
file.WriteLine("") | |||
file.WriteLine("<%= HTML.FormTag(""" & fixedTableName &""", ""CreatePost"", empty, empty) %>") | |||
file.WriteLine("<%= HTML.Hidden(""nonce"", HTMLSecurity.GetAntiCSRFToken("""& fixedTableName & "CreateForm"")) %>") | |||
file.WriteLine("<hr />") | |||
file.WriteLine("") | |||
file.WriteLine("<div class=""form-group"">") | |||
For Each field In fieldNamesArray | |||
If Not field = PrimaryKeyDictionary(tableName) then | |||
file.WriteLine(" <div class=""row"">") | |||
file.WriteLine(" <div class=""col-md-4"">") | |||
file.WriteLine(" <div class=""form-group"">") | |||
file.WriteLine(" <label for=""" & field & """>" & field & "</label>") | |||
file.WriteLine(" <%= HTML.TextboxExt(""" & field & """, Model." & field & ", Array(""class"", ""form-control"")) %>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
End if | |||
Next | |||
file.WriteLine(" <%= HTML.Button(""submit"", ""<i class='glyphicon glyphicon-ok'></i> Create"", ""btn-primary"") %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <%= HTML.LinkToExt(""<i class='glyphicon glyphicon-remove'></i> Cancel"", """ & fixedTableName & """, ""Index"", empty, Array(""class"", ""btn btn-default"")) %>") | |||
file.WriteLine("</div>") | |||
file.WriteLine("") | |||
file.WriteLine("</form>") | |||
file.Close | |||
Set file = fso.CreateTextFile(ScriptDirectory()& "Views\" & fixedTableName & "\delete.asp",True) | |||
file.WriteLine("<h2><%= H(Model.Title) %></h2>") | |||
file.WriteLine("") | |||
file.WriteLine("<p class=""alert alert-danger"">Are you sure you want to delete this " & fixedTableName & "?</p>") | |||
file.WriteLine("") | |||
file.WriteLine("<%= HTML.FormTag(""" & fixedTableName & """, ""DeletePost"", empty, Array(""class"", ""form-horizontal"")) %>") | |||
file.WriteLine("<%= HTML.Hidden(""nonce"", HTMLSecurity.GetAntiCSRFToken(""" & fixedTableName & "DeleteForm"")) %>") | |||
file.WriteLine("<%= HTML.Hidden(""Id"", Model." & fixedTableName & "." & PrimaryKeyDictionary(tableName) & ") %>") | |||
file.WriteLine("<div class=""col-md-10"">") | |||
file.WriteLine("<div class=""form-group"">") | |||
file.WriteLine(" <%= HTML.Button(""submit"", ""<i class='glyphicon glyphicon-remove'></i> Confirm Delete"", ""btn-danger"") %>") | |||
file.WriteLine(" ") | |||
file.WriteLine(" <%= HTML.LinkToExt(""Cancel"", """ & fixedTableName & """, ""Index"", empty, Array(""class"", ""btn btn-success"")) %>") | |||
For Each field In fieldNamesArray | |||
If Not field = PrimaryKeyDictionary(tableName) Then | |||
file.WriteLine(" <div class=""row"">") | |||
file.WriteLine(" <div class=""col-md-4"">") | |||
file.WriteLine(" <div class=""form-group"">") | |||
file.WriteLine(" <label for=""" & field & """>" & field & "</label>") | |||
file.WriteLine(" <%= HTML.TextboxExt(""" & field & """, Model." & fixedTableName & "." & field & ", Array(""class"", ""form-control"")) %>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
file.WriteLine(" </div>") | |||
End If | |||
Next | |||
file.WriteLine(" </div>") | |||
file.WriteLine("</div>") | |||
file.WriteLine("</form>") | |||
file.Close | |||
Set objFile = fso.OpenTextFile(ScriptDirectory() & "Views\Shared\layout.header.asp",1) | |||
headerHtml = objFile.ReadAll() | |||
objFile.Close | |||
dropDownLinks = "<li role=""presentation"" class=""dropdown"">" &_ | |||
" <a class=""dropdown-toggle"" data-toggle=""dropdown"" href=""#"" role=""button"" aria-haspopup=""true"" aria-expanded=""false"">" &_ | |||
" Dropdown <span class=""caret""></span></a>" &_ | |||
"" | |||
If InStr(headerHtml,"<li class=""nav-item""><%= Html.LinkTOExt(""" & tableName & """,""" & fixedTableName & """,""Index"",empty,Array(""Class"",""nav-link"")) %></li>") = 0 then | |||
newHeaderHtml = Replace(headerHtml,"<!--nav bar placeholder-->"," <li class=""nav-item""><%= Html.LinkTOExt(""" & tableName & """,""" & fixedTableName & """,""Index"",empty,Array(""Class"",""nav-link"")) %></li>" & vbCrLf & "<!--nav bar placeholder-->") | |||
Set objFile = fso.OpenTextFile(ScriptDirectory() & "Views\Shared\layout.header.asp",2) | |||
objFile.WriteLine newHeaderHtml | |||
End If | |||
objFile.Close | |||
props.Clear | |||
rs.MoveNext | |||
Else | |||
rs.MoveNext | |||
End if | |||
Loop | |||
includedFile.Close | |||
WScript.Quit | |||
Sub includeFile(fSpec) | |||
executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(IncludeDirectory & fSpec & ".vbs").readAll() | |||
End Sub | |||
Function PrimaryKeysFromADOConnectionToDictionary(ADOConn) | |||
Dim rstSchema | |||
Dim returnDictionary | |||
If TypeName(ADOConn) = "Connection" Then | |||
Set rstSchema = oConn.OpenSchema(adSchemaPrimaryKeys) | |||
Set rstableNames = oConn.OpenSchema(20,Array(Empty, Empty, Empty, "Table")) | |||
Set returnDictionary = WScript.CreateObject("scripting.dictionary") | |||
While Not rstSchema.EOF | |||
If returnDictionary.Exists(rstSchema.Fields("TABLE_NAME").Value) = false Then | |||
returnDictionary.Add rstSchema.Fields("TABLE_NAME").Value,rstSchema.Fields("COLUMN_NAME").Value | |||
End If | |||
rstSchema.MoveNext | |||
Wend | |||
rstSchema.Close | |||
End If | |||
Set PrimaryKeysFromADOConnectionToDictionary = returnDictionary | |||
End Function | |||
Sub Init | |||
MsgBox(oConn.State) | |||
If oConn.State = 0 Then | |||
oConn.Open() | |||
'End If | |||
Set PrimaryKeyDictionary = PrimaryKeysFromADOConnectionToDictionary(oConn) | |||
If Not fso.FolderExists(ScriptDirectory()& "DomainModels\") Then fso.CreateFolder(ScriptDirectory()& "DomainModels\") | |||
If Not fso.FolderExists(ScriptDirectory()& "ViewModels\") Then fso.CreateFolder(ScriptDirectory()& "ViewModels\") | |||
If Not fso.FolderExists(ScriptDirectory()& "Controllers\") Then fso.CreateFolder(ScriptDirectory()& "Controllers\") | |||
If Not fso.FolderExists(ScriptDirectory()& "Views\") Then fso.CreateFolder(ScriptDirectory()& "Views\") | |||
Set includedFile = fso.CreateTextFile(ScriptDirectory()& "include_all.asp",True) | |||
includedFile.WriteLine("<!--#include file=""../MVC/lib.all.asp""-->") | |||
includedFile.WriteLine("<!--#include file=""DAL/lib.DAL.asp""-->") | |||
includedFile.WriteLine("<!--#include file=""app.Config.asp""-->") | |||
Set rs = oConn.OpenSchema(20,Array(Empty, Empty, Empty, "Table")) | |||
End If | |||
End Sub | |||
Sub InitFieldNameIterator | |||
Dim cmd | |||
Set cmd = WScript.CreateObject("ADODB.COMMAND") | |||
cmd.ActiveConnection = oConn | |||
cmd.CommandText = "Select * From [" & tableName & "]" | |||
Set FieldsRs = cmd.Execute() | |||
Set fields = FieldsRs.Fields | |||
Set props = New Stack | |||
For Each Field In FieldsRs.Fields | |||
props.Push(Field.Name) | |||
file.WriteLine (" Public " & Field.Name & " '" & Field.Attributes) | |||
Next | |||
FieldsRs.Close | |||
If Not PrimaryKeyDictionary.Exists(tableName) Then | |||
PrimaryKeyDictionary.Add tableName,props.ToArray()(0) | |||
End If | |||
End Sub |
@@ -0,0 +1,44 @@ | |||
<% | |||
Class PagedIndex_ViewModel_Class | |||
Public Title | |||
Public Contacts | |||
Public CurrentPageNumber | |||
Public PageSize | |||
Public PageCount | |||
Public RecordCount | |||
End Class | |||
Class Edit_ViewModel_Class | |||
Public Title | |||
Public Contacts | |||
End Class | |||
Class Create_ViewModel_Class | |||
Public JURISCODE | |||
Public TownshipName | |||
Public CONTACT_NAME | |||
Public TownshipNum | |||
Public BUSINESS_ADDRESS | |||
Public TITLE | |||
Public BUSINESS_ADDRESS2 | |||
Public BUSINESS_ADDRESS3 | |||
Public MAILING_ADDRESS | |||
Public MAILING_ADDRESS2 | |||
Public MAILING_ADDRESS3 | |||
Public RESIDENTIAL_ADDRESS | |||
Public RESIDENTIAL_ADDRESS2 | |||
Public PHONENUM1 | |||
Public RESIDENTIAL_ADDRESS3 | |||
Public FAXNUM | |||
Public PHONENUM2 | |||
Public EMAIL | |||
End Class | |||
Class Delete_ViewModel_Class | |||
Public Title | |||
Public Contacts | |||
End Class | |||
%> |
@@ -0,0 +1,32 @@ | |||
<% | |||
Class PagedIndex_ViewModel_Class | |||
Public Title | |||
Public Jurisdiction | |||
Public CurrentPageNumber | |||
Public PageSize | |||
Public PageCount | |||
Public RecordCount | |||
End Class | |||
Class Edit_ViewModel_Class | |||
Public Title | |||
Public Jurisdiction | |||
Public Contacts | |||
End Class | |||
Class Create_ViewModel_Class | |||
Public Name | |||
Public Mailing_Address | |||
Public CSZ | |||
Public IMB | |||
Public IMB_Digits | |||
End Class | |||
Class Delete_ViewModel_Class | |||
Public Title | |||
Public Jurisdiction | |||
End Class | |||
%> |
@@ -0,0 +1,33 @@ | |||
<% | |||
Class PagedIndex_ViewModel_Class | |||
Public Title | |||
Public KitLabels | |||
Public CurrentPageNumber | |||
Public PageSize | |||
Public PageCount | |||
Public RecordCount | |||
End Class | |||
Class Edit_ViewModel_Class | |||
Public Title | |||
Public KitLabels | |||
End Class | |||
Class Create_ViewModel_Class | |||
Public KitId | |||
Public OutboundSerial | |||
Public InBoundSerial | |||
Public OutboundIMB | |||
Public InBoundIMB | |||
Public OutboundIMBDigits | |||
Public InBoundIMBDigits | |||
End Class | |||
Class Delete_ViewModel_Class | |||
Public Title | |||
Public KitLabels | |||
End Class | |||
%> |
@@ -0,0 +1,31 @@ | |||
<% | |||
Class PagedIndex_ViewModel_Class | |||
Public Title | |||
Public Kit | |||
Public CurrentPageNumber | |||
Public PageSize | |||
Public PageCount | |||
Public RecordCount | |||
End Class | |||
Class Edit_ViewModel_Class | |||
Public Title | |||
Public Kit | |||
End Class | |||
Class Create_ViewModel_Class | |||
Public Title | |||
Public JobNumber | |||
Public Jcode | |||
Public Amount | |||
Public Jurisdiction | |||
End Class | |||
Class Delete_ViewModel_Class | |||
Public Title | |||
Public Kit | |||
End Class | |||
%> |
@@ -0,0 +1,28 @@ | |||
<% | |||
Class PagedIndex_ViewModel_Class | |||
Public Title | |||
Public Settings | |||
Public CurrentPageNumber | |||
Public PageSize | |||
Public PageCount | |||
Public RecordCount | |||
End Class | |||
Class Edit_ViewModel_Class | |||
Public Title | |||
Public Settings | |||
End Class | |||
Class Create_ViewModel_Class | |||
Public Name | |||
Public Value | |||
End Class | |||
Class Delete_ViewModel_Class | |||
Public Title | |||
Public Settings | |||
End Class | |||
%> |
@@ -0,0 +1,157 @@ | |||
<h2>Create Contacts</h2> | |||
<%= HTML.FormTag("Contacts", "CreatePost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("ContactsCreateForm")) %> | |||
<hr /> | |||
<div class="form-group"> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="JURISCODE">JURISCODE</label> | |||
<%= HTML.TextboxExt("JURISCODE", Model.JURISCODE, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TownshipName">TownshipName</label> | |||
<%= HTML.TextboxExt("TownshipName", Model.TownshipName, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="CONTACT_NAME">CONTACT_NAME</label> | |||
<%= HTML.TextboxExt("CONTACT_NAME", Model.CONTACT_NAME, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TownshipNum">TownshipNum</label> | |||
<%= HTML.TextboxExt("TownshipNum", Model.TownshipNum, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS">BUSINESS_ADDRESS</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS", Model.BUSINESS_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TITLE">TITLE</label> | |||
<%= HTML.TextboxExt("TITLE", Model.TITLE, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS2">BUSINESS_ADDRESS2</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS2", Model.BUSINESS_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS3">BUSINESS_ADDRESS3</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS3", Model.BUSINESS_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS">MAILING_ADDRESS</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS", Model.MAILING_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS2">MAILING_ADDRESS2</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS2", Model.MAILING_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS3">MAILING_ADDRESS3</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS3", Model.MAILING_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS">RESIDENTIAL_ADDRESS</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS", Model.RESIDENTIAL_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS2">RESIDENTIAL_ADDRESS2</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS2", Model.RESIDENTIAL_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="PHONENUM1">PHONENUM1</label> | |||
<%= HTML.TextboxExt("PHONENUM1", Model.PHONENUM1, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS3">RESIDENTIAL_ADDRESS3</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS3", Model.RESIDENTIAL_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="FAXNUM">FAXNUM</label> | |||
<%= HTML.TextboxExt("FAXNUM", Model.FAXNUM, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="PHONENUM2">PHONENUM2</label> | |||
<%= HTML.TextboxExt("PHONENUM2", Model.PHONENUM2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="EMAIL">EMAIL</label> | |||
<%= HTML.TextboxExt("EMAIL", Model.EMAIL, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Contacts", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,159 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<p class="alert alert-danger">Are you sure you want to delete this Contacts?</p> | |||
<%= HTML.FormTag("Contacts", "DeletePost", empty, Array("class", "form-horizontal")) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("ContactsDeleteForm")) %> | |||
<%= HTML.Hidden("Id", Model.Contacts.ID) %> | |||
<div class="col-md-10"> | |||
<div class="form-group"> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Contacts", "Index", empty, Array("class", "btn btn-success")) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="JURISCODE">JURISCODE</label> | |||
<%= HTML.TextboxExt("JURISCODE", Model.Contacts.JURISCODE, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TownshipName">TownshipName</label> | |||
<%= HTML.TextboxExt("TownshipName", Model.Contacts.TownshipName, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="CONTACT_NAME">CONTACT_NAME</label> | |||
<%= HTML.TextboxExt("CONTACT_NAME", Model.Contacts.CONTACT_NAME, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TownshipNum">TownshipNum</label> | |||
<%= HTML.TextboxExt("TownshipNum", Model.Contacts.TownshipNum, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS">BUSINESS_ADDRESS</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS", Model.Contacts.BUSINESS_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TITLE">TITLE</label> | |||
<%= HTML.TextboxExt("TITLE", Model.Contacts.TITLE, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS2">BUSINESS_ADDRESS2</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS2", Model.Contacts.BUSINESS_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS3">BUSINESS_ADDRESS3</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS3", Model.Contacts.BUSINESS_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS">MAILING_ADDRESS</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS", Model.Contacts.MAILING_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS2">MAILING_ADDRESS2</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS2", Model.Contacts.MAILING_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS3">MAILING_ADDRESS3</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS3", Model.Contacts.MAILING_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS">RESIDENTIAL_ADDRESS</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS", Model.Contacts.RESIDENTIAL_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS2">RESIDENTIAL_ADDRESS2</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS2", Model.Contacts.RESIDENTIAL_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="PHONENUM1">PHONENUM1</label> | |||
<%= HTML.TextboxExt("PHONENUM1", Model.Contacts.PHONENUM1, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS3">RESIDENTIAL_ADDRESS3</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS3", Model.Contacts.RESIDENTIAL_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="FAXNUM">FAXNUM</label> | |||
<%= HTML.TextboxExt("FAXNUM", Model.Contacts.FAXNUM, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="PHONENUM2">PHONENUM2</label> | |||
<%= HTML.TextboxExt("PHONENUM2", Model.Contacts.PHONENUM2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="EMAIL">EMAIL</label> | |||
<%= HTML.TextboxExt("EMAIL", Model.Contacts.EMAIL, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</form> |
@@ -0,0 +1,157 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<%= HTML.FormTag("Contacts", "EditPost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("ContactsEditForm")) %> | |||
<%= HTML.Hidden("Id", Model.Contacts.ID) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="JURISCODE">JURISCODE</label> | |||
<%= HTML.TextboxExt("JURISCODE", Model.Contacts.JURISCODE, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TownshipName">TownshipName</label> | |||
<%= HTML.TextboxExt("TownshipName", Model.Contacts.TownshipName, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="CONTACT_NAME">CONTACT_NAME</label> | |||
<%= HTML.TextboxExt("CONTACT_NAME", Model.Contacts.CONTACT_NAME, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TownshipNum">TownshipNum</label> | |||
<%= HTML.TextboxExt("TownshipNum", Model.Contacts.TownshipNum, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS">BUSINESS_ADDRESS</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS", Model.Contacts.BUSINESS_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="TITLE">TITLE</label> | |||
<%= HTML.TextboxExt("TITLE", Model.Contacts.TITLE, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS2">BUSINESS_ADDRESS2</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS2", Model.Contacts.BUSINESS_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="BUSINESS_ADDRESS3">BUSINESS_ADDRESS3</label> | |||
<%= HTML.TextboxExt("BUSINESS_ADDRESS3", Model.Contacts.BUSINESS_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS">MAILING_ADDRESS</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS", Model.Contacts.MAILING_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS2">MAILING_ADDRESS2</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS2", Model.Contacts.MAILING_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="MAILING_ADDRESS3">MAILING_ADDRESS3</label> | |||
<%= HTML.TextboxExt("MAILING_ADDRESS3", Model.Contacts.MAILING_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS">RESIDENTIAL_ADDRESS</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS", Model.Contacts.RESIDENTIAL_ADDRESS, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS2">RESIDENTIAL_ADDRESS2</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS2", Model.Contacts.RESIDENTIAL_ADDRESS2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="PHONENUM1">PHONENUM1</label> | |||
<%= HTML.TextboxExt("PHONENUM1", Model.Contacts.PHONENUM1, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="RESIDENTIAL_ADDRESS3">RESIDENTIAL_ADDRESS3</label> | |||
<%= HTML.TextboxExt("RESIDENTIAL_ADDRESS3", Model.Contacts.RESIDENTIAL_ADDRESS3, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="FAXNUM">FAXNUM</label> | |||
<%= HTML.TextboxExt("FAXNUM", Model.Contacts.FAXNUM, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="PHONENUM2">PHONENUM2</label> | |||
<%= HTML.TextboxExt("PHONENUM2", Model.Contacts.PHONENUM2, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="EMAIL">EMAIL</label> | |||
<%= HTML.TextboxExt("EMAIL", Model.Contacts.EMAIL, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<hr /> | |||
<div class="form-group"> | |||
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Contacts", "Delete", Array("id", Model.Contacts.ID), Array("class", "btn btn-danger")) %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Contacts", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,105 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<div class="row"> | |||
<div class="col-md-8 col-sm-8 col-xs-12"> | |||
<%= H(Model.RecordCount) %> Contacts found. Showing <%= H(Model.PageSize) %> records per page. | |||
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Contacts", "Create", empty, Array("class", "btn btn-xs btn-primary")) %> | |||
</div> | |||
<div class="col-md-4 col-sm-4 col-xs-12"> | |||
<%= HTML.FormTag("Contacts", "Search", empty, empty) %> | |||
<div class="col-md-10 col-sm-10 col-xs-12"> | |||
<label class="sr-only" for="search">Search</label> | |||
<div class="input-group"> | |||
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search"> | |||
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span> | |||
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<table id="Contacts" class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th></th> | |||
<th style="text-align: left">ID</th> | |||
<th style="text-align: left">JURISCODE</th> | |||
<th style="text-align: left">TownshipName</th> | |||
<th style="text-align: left">CONTACT_NAME</th> | |||
<th style="text-align: left">TownshipNum</th> | |||
<th style="text-align: left">BUSINESS_ADDRESS</th> | |||
<th style="text-align: left">TITLE</th> | |||
<th style="text-align: left">BUSINESS_ADDRESS2</th> | |||
<th style="text-align: left">BUSINESS_ADDRESS3</th> | |||
<th style="text-align: left">MAILING_ADDRESS</th> | |||
<th style="text-align: left">MAILING_ADDRESS2</th> | |||
<th style="text-align: left">MAILING_ADDRESS3</th> | |||
<th style="text-align: left">RESIDENTIAL_ADDRESS</th> | |||
<th style="text-align: left">RESIDENTIAL_ADDRESS2</th> | |||
<th style="text-align: left">PHONENUM1</th> | |||
<th style="text-align: left">RESIDENTIAL_ADDRESS3</th> | |||
<th style="text-align: left">FAXNUM</th> | |||
<th style="text-align: left">PHONENUM2</th> | |||
<th style="text-align: left">EMAIL</th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<% dim it : set it = Model.Contacts.Iterator %> | |||
<% dim Contacts %> | |||
<% While it.HasNext %> | |||
<% set Contacts = it.GetNext() %> | |||
<tr> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Contacts", "Edit", Array("Id", Contacts.ID), Array("class", "btn btn-primary")) %> | |||
</td> | |||
<td><% = H(Contacts.ID) %></td> | |||
<td><% = H(Contacts.JURISCODE) %></td> | |||
<td><% = H(Contacts.TownshipName) %></td> | |||
<td><% = H(Contacts.CONTACT_NAME) %></td> | |||
<td><% = H(Contacts.TownshipNum) %></td> | |||
<td><% = H(Contacts.BUSINESS_ADDRESS) %></td> | |||
<td><% = H(Contacts.TITLE) %></td> | |||
<td><% = H(Contacts.BUSINESS_ADDRESS2) %></td> | |||
<td><% = H(Contacts.BUSINESS_ADDRESS3) %></td> | |||
<td><% = H(Contacts.MAILING_ADDRESS) %></td> | |||
<td><% = H(Contacts.MAILING_ADDRESS2) %></td> | |||
<td><% = H(Contacts.MAILING_ADDRESS3) %></td> | |||
<td><% = H(Contacts.RESIDENTIAL_ADDRESS) %></td> | |||
<td><% = H(Contacts.RESIDENTIAL_ADDRESS2) %></td> | |||
<td><% = H(Contacts.PHONENUM1) %></td> | |||
<td><% = H(Contacts.RESIDENTIAL_ADDRESS3) %></td> | |||
<td><% = H(Contacts.FAXNUM) %></td> | |||
<td><% = H(Contacts.PHONENUM2) %></td> | |||
<td><% = H(Contacts.EMAIL) %></td> | |||
</tr> | |||
<% Wend %> | |||
</tbody> | |||
</table> | |||
<div> | |||
<% If Model.CurrentPageNumber <> 1 then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a> | |||
| |||
<% End If %> | |||
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a> | |||
| |||
<% End If %> | |||
</div> | |||
</div> |
@@ -0,0 +1,10 @@ | |||
| |||
<h1><%= siteTitle %></h1> | |||
<div class="row"> | |||
<div class="col-md-4" style="background-color: #eee;"> | |||
Left Column | |||
</div> | |||
<div class="col-md-8"> | |||
Right Column | |||
</div> | |||
</div> |
@@ -0,0 +1,53 @@ | |||
<h2>Create Jurisdiction</h2> | |||
<%= HTML.FormTag("Jurisdiction", "CreatePost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionCreateForm")) %> | |||
<hr /> | |||
<div class="form-group"> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Name">Name</label> | |||
<%= HTML.TextboxExt("Name", Model.Name, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Mailing_Address">Mailing_Address</label> | |||
<%= HTML.TextboxExt("Mailing_Address", Model.Mailing_Address, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="CSZ">CSZ</label> | |||
<%= HTML.TextboxExt("CSZ", Model.CSZ, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="IMB">IMB</label> | |||
<%= HTML.TextboxExt("IMB", Model.IMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="IMB_Digits">IMB_Digits</label> | |||
<%= HTML.TextboxExt("IMB_Digits", Model.IMB_Digits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Jurisdiction", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,5 @@ | |||
<h2><%= H(Model.Title) %> For <%=H(Model.Jurisdiction.Name) %></h2> | |||
<%= HTML.FormTag("Jurisdiction", "EditPost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("CreateKitForm")) %> | |||
<%= HTML.Hidden("Id", Model.Jurisdiction.JCode) %> | |||
</form> |
@@ -0,0 +1,55 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<p class="alert alert-danger">Are you sure you want to delete this Jurisdiction?</p> | |||
<%= HTML.FormTag("Jurisdiction", "DeletePost", empty, Array("class", "form-horizontal")) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionDeleteForm")) %> | |||
<%= HTML.Hidden("Id", Model.Jurisdiction.JCode) %> | |||
<div class="col-md-10"> | |||
<div class="form-group"> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Jurisdiction", "Index", empty, Array("class", "btn btn-success")) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Name">Name</label> | |||
<%= HTML.TextboxExt("Name", Model.Jurisdiction.Name, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Mailing_Address">Mailing_Address</label> | |||
<%= HTML.TextboxExt("Mailing_Address", Model.Jurisdiction.Mailing_Address, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="CSZ">CSZ</label> | |||
<%= HTML.TextboxExt("CSZ", Model.Jurisdiction.CSZ, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="IMB">IMB</label> | |||
<%= HTML.TextboxExt("IMB", Model.Jurisdiction.IMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="IMB_Digits">IMB_Digits</label> | |||
<%= HTML.TextboxExt("IMB_Digits", Model.Jurisdiction.IMB_Digits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</form> |
@@ -0,0 +1,54 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<%= HTML.FormTag("Jurisdiction", "EditPost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("JurisdictionEditForm")) %> | |||
<%= HTML.Hidden("Id", Model.Jurisdiction.JCode) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Name">Name</label> | |||
<%= HTML.TextboxExt("Name", Model.Jurisdiction.Name, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Mailing_Address">Mailing_Address</label> | |||
<%= HTML.TextboxExt("Mailing_Address", Model.Jurisdiction.Mailing_Address, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="CSZ">CSZ</label> | |||
<%= HTML.TextboxExt("CSZ", Model.Jurisdiction.CSZ, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="IMB">IMB</label> | |||
<%= HTML.TextboxExt("IMB", Model.Jurisdiction.IMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="IMB_Digits">IMB_Digits</label> | |||
<%= HTML.TextboxExt("IMB_Digits", Model.Jurisdiction.IMB_Digits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<!--#include file="../../Views/Jurisdiction/partial.Jurisdiction.Contacts.asp"--> | |||
<hr /> | |||
<div class="form-group"> | |||
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Jurisdiction", "Delete", Array("id", Model.Jurisdiction.JCode), Array("class", "btn btn-danger")) %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Jurisdiction", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,82 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<div class="row"> | |||
<div class="col-md-8 col-sm-8 col-xs-12"> | |||
<%= H(Model.RecordCount) %> Jurisdiction found. Showing <%= H(Model.PageSize) %> records per page. | |||
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Jurisdiction", "Create", empty, Array("class", "btn btn-xs btn-primary")) %> | |||
</div> | |||
<div class="col-md-4 col-sm-4 col-xs-12"> | |||
<%= HTML.FormTag("Jurisdiction", "Search", empty, empty) %> | |||
<div class="col-md-10 col-sm-10 col-xs-12"> | |||
<label class="sr-only" for="search">Search</label> | |||
<div class="input-group"> | |||
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search"> | |||
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span> | |||
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<table id="Jurisdiction" class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th></th> | |||
<th style="text-align: left">JCode</th> | |||
<th style="text-align: left">Name</th> | |||
<th style="text-align: left">Mailing_Address</th> | |||
<th style="text-align: left">CSZ</th> | |||
<th style="text-align: left">IMB</th> | |||
<th style="text-align: left">IMB_Digits</th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<% dim it : set it = Model.Jurisdiction.Iterator %> | |||
<% dim Jurisdiction %> | |||
<% While it.HasNext %> | |||
<% set Jurisdiction = it.GetNext() %> | |||
<tr> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Jurisdiction", "Edit", Array("Id", Jurisdiction.JCode), Array("class", "btn btn-primary")) %> | |||
</td> | |||
<td><% = H(Jurisdiction.JCode) %></td> | |||
<td><% = H(Jurisdiction.Name) %></td> | |||
<td><% = H(Jurisdiction.Mailing_Address) %></td> | |||
<td><% = H(Jurisdiction.CSZ) %></td> | |||
<td><% = H(Jurisdiction.IMB) %></td> | |||
<td><% = H(Jurisdiction.IMB_Digits) %></td> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Kit", "create", Array("Id", Jurisdiction.JCode), Array("class", "btn btn-primary")) %> | |||
</td> | |||
</tr> | |||
<% Wend %> | |||
</tbody> | |||
</table> | |||
<div> | |||
<% If Model.CurrentPageNumber <> 1 then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a> | |||
| |||
<% End If %> | |||
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a> | |||
| |||
<% End If %> | |||
</div> | |||
</div> |
@@ -0,0 +1,60 @@ | |||
</div> | |||
<table id="Contacts" class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th></th> | |||
<th style="text-align: left">ID</th> | |||
<th style="text-align: left">JURISCODE</th> | |||
<th style="text-align: left">TownshipName</th> | |||
<th style="text-align: left">CONTACT_NAME</th> | |||
<th style="text-align: left">TownshipNum</th> | |||
<th style="text-align: left">BUSINESS_ADDRESS</th> | |||
<th style="text-align: left">TITLE</th> | |||
<th style="text-align: left">BUSINESS_ADDRESS2</th> | |||
<th style="text-align: left">BUSINESS_ADDRESS3</th> | |||
<th style="text-align: left">MAILING_ADDRESS</th> | |||
<th style="text-align: left">MAILING_ADDRESS2</th> | |||
<th style="text-align: left">MAILING_ADDRESS3</th> | |||
<th style="text-align: left">RESIDENTIAL_ADDRESS</th> | |||
<th style="text-align: left">RESIDENTIAL_ADDRESS2</th> | |||
<th style="text-align: left">PHONENUM1</th> | |||
<th style="text-align: left">RESIDENTIAL_ADDRESS3</th> | |||
<th style="text-align: left">FAXNUM</th> | |||
<th style="text-align: left">PHONENUM2</th> | |||
<th style="text-align: left">EMAIL</th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<% dim it : set it = Model.Contacts.Iterator %> | |||
<% dim Contacts %> | |||
<% While it.HasNext %> | |||
<% set Contacts = it.GetNext() %> | |||
<tr> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Contacts", "Edit", Array("Id", Contacts.ID), Array("class", "btn btn-primary")) %> | |||
</td> | |||
<td><% = H(Contacts.ID) %></td> | |||
<td><% = H(Contacts.JURISCODE) %></td> | |||
<td><% = H(Contacts.TownshipName) %></td> | |||
<td><% = H(Contacts.CONTACT_NAME) %></td> | |||
<td><% = H(Contacts.TownshipNum) %></td> | |||
<td><% = H(Contacts.BUSINESS_ADDRESS) %></td> | |||
<td><% = H(Contacts.TITLE) %></td> | |||
<td><% = H(Contacts.BUSINESS_ADDRESS2) %></td> | |||
<td><% = H(Contacts.BUSINESS_ADDRESS3) %></td> | |||
<td><% = H(Contacts.MAILING_ADDRESS) %></td> | |||
<td><% = H(Contacts.MAILING_ADDRESS2) %></td> | |||
<td><% = H(Contacts.MAILING_ADDRESS3) %></td> | |||
<td><% = H(Contacts.RESIDENTIAL_ADDRESS) %></td> | |||
<td><% = H(Contacts.RESIDENTIAL_ADDRESS2) %></td> | |||
<td><% = H(Contacts.PHONENUM1) %></td> | |||
<td><% = H(Contacts.RESIDENTIAL_ADDRESS3) %></td> | |||
<td><% = H(Contacts.FAXNUM) %></td> | |||
<td><% = H(Contacts.PHONENUM2) %></td> | |||
<td><% = H(Contacts.EMAIL) %></td> | |||
</tr> | |||
<% Wend %> | |||
</tbody> | |||
</table> | |||
<div> |
@@ -0,0 +1,38 @@ | |||
<h2><%= H(Model.Title) %> For <%=H(Model.Jurisdiction.Name) %></h2> | |||
<%= HTML.FormTag("Kit", "CreatePost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitCreateForm")) %> | |||
<hr /> | |||
<div class="form-group"> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="JobNumber">JobNumber</label> | |||
<%= HTML.TextboxExt("JobNumber", Model.JobNumber, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Jcode">Jcode</label> | |||
<%= HTML.TextboxExt("Jcode", Model.Jcode, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Amount">Jcode</label> | |||
<%= HTML.TextboxExt("Amount", Model.Jcode, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<p></p> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Kit", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,31 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<p class="alert alert-danger">Are you sure you want to delete this Kit?</p> | |||
<%= HTML.FormTag("Kit", "DeletePost", empty, Array("class", "form-horizontal")) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitDeleteForm")) %> | |||
<%= HTML.Hidden("Id", Model.Kit.ID) %> | |||
<div class="col-md-10"> | |||
<div class="form-group"> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Kit", "Index", empty, Array("class", "btn btn-success")) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="JobNumber">JobNumber</label> | |||
<%= HTML.TextboxExt("JobNumber", Model.Kit.JobNumber, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Jcode">Jcode</label> | |||
<%= HTML.TextboxExt("Jcode", Model.Kit.Jcode, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</form> |
@@ -0,0 +1,29 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<%= HTML.FormTag("Kit", "EditPost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitEditForm")) %> | |||
<%= HTML.Hidden("Id", Model.Kit.ID) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="JobNumber">JobNumber</label> | |||
<%= HTML.TextboxExt("JobNumber", Model.Kit.JobNumber, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Jcode">Jcode</label> | |||
<%= HTML.TextboxExt("Jcode", Model.Kit.Jcode, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<hr /> | |||
<div class="form-group"> | |||
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Kit", "Delete", Array("id", Model.Kit.ID), Array("class", "btn btn-danger")) %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Kit", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,73 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<div class="row"> | |||
<div class="col-md-8 col-sm-8 col-xs-12"> | |||
<%= H(Model.RecordCount) %> Kit found. Showing <%= H(Model.PageSize) %> records per page. | |||
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Kit", "Create", empty, Array("class", "btn btn-xs btn-primary")) %> | |||
</div> | |||
<div class="col-md-4 col-sm-4 col-xs-12"> | |||
<%= HTML.FormTag("Kit", "Search", empty, empty) %> | |||
<div class="col-md-10 col-sm-10 col-xs-12"> | |||
<label class="sr-only" for="search">Search</label> | |||
<div class="input-group"> | |||
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search"> | |||
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span> | |||
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<table id="Kit" class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th></th> | |||
<th style="text-align: left">ID</th> | |||
<th style="text-align: left">JobNumber</th> | |||
<th style="text-align: left">Jcode</th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<% dim it : set it = Model.Kit.Iterator %> | |||
<% dim Kit %> | |||
<% While it.HasNext %> | |||
<% set Kit = it.GetNext() %> | |||
<tr> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Kit", "Edit", Array("Id", Kit.ID), Array("class", "btn btn-primary")) %> | |||
</td> | |||
<td><% = H(Kit.ID) %></td> | |||
<td><% = H(Kit.JobNumber) %></td> | |||
<td><% = H(Kit.Jcode) %></td> | |||
</tr> | |||
<% Wend %> | |||
</tbody> | |||
</table> | |||
<div> | |||
<% If Model.CurrentPageNumber <> 1 then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a> | |||
| |||
<% End If %> | |||
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a> | |||
| |||
<% End If %> | |||
</div> | |||
</div> |
@@ -0,0 +1,69 @@ | |||
<h2>Create KitLabels</h2> | |||
<%= HTML.FormTag("KitLabels", "CreatePost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitLabelsCreateForm")) %> | |||
<hr /> | |||
<div class="form-group"> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="KitId">KitId</label> | |||
<%= HTML.TextboxExt("KitId", Model.KitId, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundSerial">OutboundSerial</label> | |||
<%= HTML.TextboxExt("OutboundSerial", Model.OutboundSerial, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundSerial">InBoundSerial</label> | |||
<%= HTML.TextboxExt("InBoundSerial", Model.InBoundSerial, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundIMB">OutboundIMB</label> | |||
<%= HTML.TextboxExt("OutboundIMB", Model.OutboundIMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundIMB">InBoundIMB</label> | |||
<%= HTML.TextboxExt("InBoundIMB", Model.InBoundIMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundIMBDigits">OutboundIMBDigits</label> | |||
<%= HTML.TextboxExt("OutboundIMBDigits", Model.OutboundIMBDigits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundIMBDigits">InBoundIMBDigits</label> | |||
<%= HTML.TextboxExt("InBoundIMBDigits", Model.InBoundIMBDigits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "KitLabels", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,71 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<p class="alert alert-danger">Are you sure you want to delete this KitLabels?</p> | |||
<%= HTML.FormTag("KitLabels", "DeletePost", empty, Array("class", "form-horizontal")) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitLabelsDeleteForm")) %> | |||
<%= HTML.Hidden("Id", Model.KitLabels.ID) %> | |||
<div class="col-md-10"> | |||
<div class="form-group"> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "KitLabels", "Index", empty, Array("class", "btn btn-success")) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="KitId">KitId</label> | |||
<%= HTML.TextboxExt("KitId", Model.KitLabels.KitId, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundSerial">OutboundSerial</label> | |||
<%= HTML.TextboxExt("OutboundSerial", Model.KitLabels.OutboundSerial, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundSerial">InBoundSerial</label> | |||
<%= HTML.TextboxExt("InBoundSerial", Model.KitLabels.InBoundSerial, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundIMB">OutboundIMB</label> | |||
<%= HTML.TextboxExt("OutboundIMB", Model.KitLabels.OutboundIMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundIMB">InBoundIMB</label> | |||
<%= HTML.TextboxExt("InBoundIMB", Model.KitLabels.InBoundIMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundIMBDigits">OutboundIMBDigits</label> | |||
<%= HTML.TextboxExt("OutboundIMBDigits", Model.KitLabels.OutboundIMBDigits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundIMBDigits">InBoundIMBDigits</label> | |||
<%= HTML.TextboxExt("InBoundIMBDigits", Model.KitLabels.InBoundIMBDigits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</form> |
@@ -0,0 +1,69 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<%= HTML.FormTag("KitLabels", "EditPost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("KitLabelsEditForm")) %> | |||
<%= HTML.Hidden("Id", Model.KitLabels.ID) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="KitId">KitId</label> | |||
<%= HTML.TextboxExt("KitId", Model.KitLabels.KitId, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundSerial">OutboundSerial</label> | |||
<%= HTML.TextboxExt("OutboundSerial", Model.KitLabels.OutboundSerial, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundSerial">InBoundSerial</label> | |||
<%= HTML.TextboxExt("InBoundSerial", Model.KitLabels.InBoundSerial, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundIMB">OutboundIMB</label> | |||
<%= HTML.TextboxExt("OutboundIMB", Model.KitLabels.OutboundIMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundIMB">InBoundIMB</label> | |||
<%= HTML.TextboxExt("InBoundIMB", Model.KitLabels.InBoundIMB, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="OutboundIMBDigits">OutboundIMBDigits</label> | |||
<%= HTML.TextboxExt("OutboundIMBDigits", Model.KitLabels.OutboundIMBDigits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="InBoundIMBDigits">InBoundIMBDigits</label> | |||
<%= HTML.TextboxExt("InBoundIMBDigits", Model.KitLabels.InBoundIMBDigits, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<hr /> | |||
<div class="form-group"> | |||
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "KitLabels", "Delete", Array("id", Model.KitLabels.ID), Array("class", "btn btn-danger")) %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "KitLabels", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,83 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<div class="row"> | |||
<div class="col-md-8 col-sm-8 col-xs-12"> | |||
<%= H(Model.RecordCount) %> KitLabels found. Showing <%= H(Model.PageSize) %> records per page. | |||
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","KitLabels", "Create", empty, Array("class", "btn btn-xs btn-primary")) %> | |||
</div> | |||
<div class="col-md-4 col-sm-4 col-xs-12"> | |||
<%= HTML.FormTag("KitLabels", "Search", empty, empty) %> | |||
<div class="col-md-10 col-sm-10 col-xs-12"> | |||
<label class="sr-only" for="search">Search</label> | |||
<div class="input-group"> | |||
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search"> | |||
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span> | |||
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<table id="KitLabels" class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th></th> | |||
<th style="text-align: left">ID</th> | |||
<th style="text-align: left">KitId</th> | |||
<th style="text-align: left">OutboundSerial</th> | |||
<th style="text-align: left">InBoundSerial</th> | |||
<th style="text-align: left">OutboundIMB</th> | |||
<th style="text-align: left">InBoundIMB</th> | |||
<th style="text-align: left">OutboundIMBDigits</th> | |||
<th style="text-align: left">InBoundIMBDigits</th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<% dim it : set it = Model.KitLabels.Iterator %> | |||
<% dim KitLabels %> | |||
<% While it.HasNext %> | |||
<% set KitLabels = it.GetNext() %> | |||
<tr> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "KitLabels", "Edit", Array("Id", KitLabels.ID), Array("class", "btn btn-primary")) %> | |||
</td> | |||
<td><% = H(KitLabels.ID) %></td> | |||
<td><% = H(KitLabels.KitId) %></td> | |||
<td><% = H(KitLabels.OutboundSerial) %></td> | |||
<td><% = H(KitLabels.InBoundSerial) %></td> | |||
<td><% = H(KitLabels.OutboundIMB) %></td> | |||
<td><% = H(KitLabels.InBoundIMB) %></td> | |||
<td><% = H(KitLabels.OutboundIMBDigits) %></td> | |||
<td><% = H(KitLabels.InBoundIMBDigits) %></td> | |||
</tr> | |||
<% Wend %> | |||
</tbody> | |||
</table> | |||
<div> | |||
<% If Model.CurrentPageNumber <> 1 then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a> | |||
| |||
<% End If %> | |||
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a> | |||
| |||
<% End If %> | |||
</div> | |||
</div> |
@@ -0,0 +1,29 @@ | |||
<h2>Create Settings</h2> | |||
<%= HTML.FormTag("Settings", "CreatePost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("SettingsCreateForm")) %> | |||
<hr /> | |||
<div class="form-group"> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Name">Name</label> | |||
<%= HTML.TextboxExt("Name", Model.Name, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Value">Value</label> | |||
<%= HTML.TextboxExt("Value", Model.Value, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Create", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Cancel", "Settings", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,31 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<p class="alert alert-danger">Are you sure you want to delete this Settings?</p> | |||
<%= HTML.FormTag("Settings", "DeletePost", empty, Array("class", "form-horizontal")) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("SettingsDeleteForm")) %> | |||
<%= HTML.Hidden("Id", Model.Settings.ID) %> | |||
<div class="col-md-10"> | |||
<div class="form-group"> | |||
<%= HTML.Button("submit", "<i class='glyphicon glyphicon-remove'></i> Confirm Delete", "btn-danger") %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Settings", "Index", empty, Array("class", "btn btn-success")) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Name">Name</label> | |||
<%= HTML.TextboxExt("Name", Model.Settings.Name, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Value">Value</label> | |||
<%= HTML.TextboxExt("Value", Model.Settings.Value, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</form> |
@@ -0,0 +1,29 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<%= HTML.FormTag("Settings", "EditPost", empty, empty) %> | |||
<%= HTML.Hidden("nonce", HTMLSecurity.GetAntiCSRFToken("SettingsEditForm")) %> | |||
<%= HTML.Hidden("Id", Model.Settings.ID) %> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Name">Name</label> | |||
<%= HTML.TextboxExt("Name", Model.Settings.Name, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<div class="col-md-4"> | |||
<div class="form-group"> | |||
<label for="Value">Value</label> | |||
<%= HTML.TextboxExt("Value", Model.Settings.Value, Array("class", "form-control")) %> | |||
</div> | |||
</div> | |||
</div> | |||
<hr /> | |||
<div class="form-group"> | |||
<% = HTML.Button("submit", "<i class='glyphicon glyphicon-ok'></i> Save", "btn-primary") %> | |||
| |||
<%= HTML.LinkToExt("<i class='glyphicon glyphicon-remove'></i> Delete", "Settings", "Delete", Array("id", Model.Settings.ID), Array("class", "btn btn-danger")) %> | |||
| |||
<%= HTML.LinkToExt("Cancel", "Settings", "Index", empty, Array("class", "btn btn-default")) %> | |||
</div> | |||
</form> |
@@ -0,0 +1,73 @@ | |||
<h2><%= H(Model.Title) %></h2> | |||
<div class="row"> | |||
<div class="col-md-8 col-sm-8 col-xs-12"> | |||
<%= H(Model.RecordCount) %> Settings found. Showing <%= H(Model.PageSize) %> records per page. | |||
<%= HTML.LinkToExt("<i class='bi bi-plus-square-fill'></i> New","Settings", "Create", empty, Array("class", "btn btn-xs btn-primary")) %> | |||
</div> | |||
<div class="col-md-4 col-sm-4 col-xs-12"> | |||
<%= HTML.FormTag("Settings", "Search", empty, empty) %> | |||
<div class="col-md-10 col-sm-10 col-xs-12"> | |||
<label class="sr-only" for="search">Search</label> | |||
<div class="input-group"> | |||
<input type="text" class="form-control input-search" value='<%= Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q")) %>' name="q" id="search" placeholder="Search"> | |||
<span class="input-group-addon group-icon"><span class="glyphicon glyphicon-eye-open"></span> | |||
<button type="submit" class="btn btn-success"><i class="bi bi-search"></i>Search</buttton> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<table id="Settings" class="table table-striped"> | |||
<thead> | |||
<tr> | |||
<th></th> | |||
<th style="text-align: left">ID</th> | |||
<th style="text-align: left">Name</th> | |||
<th style="text-align: left">Value</th> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<% dim it : set it = Model.Settings.Iterator %> | |||
<% dim Settings %> | |||
<% While it.HasNext %> | |||
<% set Settings = it.GetNext() %> | |||
<tr> | |||
<td> | |||
<%= HTML.LinkToExt("<i class='bi bi-search'></i>", "Settings", "Edit", Array("Id", Settings.ID), Array("class", "btn btn-primary")) %> | |||
</td> | |||
<td><% = H(Settings.ID) %></td> | |||
<td><% = H(Settings.Name) %></td> | |||
<td><% = H(Settings.Value) %></td> | |||
</tr> | |||
<% Wend %> | |||
</tbody> | |||
</table> | |||
<div> | |||
<% If Model.CurrentPageNumber <> 1 then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-left'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber - 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i><i class='bi bi-chevron-left'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-left'></i></a> | |||
| |||
<% End If %> | |||
<% If CInt(Model.CurrentPageNumber) < CInt(Model.PageCount) then %> | |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.CurrentPageNumber + 1,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<%= HTML.LinkToExt("<i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i>", MVC.ControllerName, MVC.ActionName, Array("page_num", Model.PageCount,"q", Choice(Request.Form.Count = 0,Request.QueryString("q"),Request.Form("q"))), Array("class", "btn btn-default")) %> | |||
| |||
<% Else %> | |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i><i class='bi bi-chevron-right'></i></a> | |||
| |||
<a class='btn btn-default disabled'><i class='bi bi-chevron-right'></i></a> | |||
| |||
<% End If %> | |||
</div> | |||
</div> |
@@ -0,0 +1,10 @@ | |||
</div><!-- /.container --> | |||
<!-- Bootstrap core JavaScript | |||
================================================== --> | |||
<!-- Placed at the end of the document so the pages load faster --> | |||
<%= HTML.JSTag(jqueryJs) %> | |||
<%= HTML.JSTag(appBootStrapJs) %> | |||
</body> | |||
</html> |
@@ -0,0 +1,38 @@ | |||
| |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="utf-8"> | |||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
<title><%= siteTitle %></title> | |||
<!-- Latest compiled and minified CSS --> | |||
<%= HTML.StylesheetTag(appCss) %> | |||
<%= HTML.StylesheetTag(iconsCss) %> | |||
</head> | |||
<body> | |||
<ul class="nav"> | |||
<li class="nav-item"><%= Html.LinkTOExt("Jurisdiction","Jurisdiction","Index",empty,Array("Class","nav-link")) %></li> | |||
<li class="nav-item"><%= Html.LinkTOExt("Contacts","Contacts","Index",empty,Array("Class","nav-link")) %></li> | |||
<li class="nav-item"><%= Html.LinkTOExt("Settings","Settings","Index",empty,Array("Class","nav-link")) %></li> | |||
<li class="nav-item"><%= Html.LinkTOExt("Kit","Kit","Index",empty,Array("Class","nav-link")) %></li> | |||
<li class="nav-item"><%= Html.LinkTOExt("KitLabels","KitLabels","Index",empty,Array("Class","nav-link")) %></li> | |||
<!--nav bar placeholder--> | |||
</ul> | |||
<div class="container" style="margin-top: 50px"> | |||
<% | |||
'Flash.ShowErrorsIfPresent | |||
'Flash.ShowSuccessIfPresent | |||
%> | |||
@@ -0,0 +1,14 @@ | |||
<% | |||
dim appCss, appJs, appBootStrapJs, jqueryJs, siteTitle, iconsCss | |||
Routes.Initialize "/App/" | |||
siteTitle = "Clerks and Jurisdictions" | |||
iconsCss = "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" | |||
appCss = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" | |||
appBootStrapJs = "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js' integrity='sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM' crossorigin='anonymous" | |||
jqueryJs = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js' integrity='sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==' crossorigin='anonymous' referrerpolicy='no-referrer" | |||
'======================================================================================================================= | |||
' Set Global Variables Here | |||
'======================================================================================================================= | |||
%> |
@@ -0,0 +1,8 @@ | |||
<!--#include file="../MVC/lib.all.asp"--> | |||
<!--#include file="DAL/lib.DAL.asp"--> | |||
<!--#include file="app.Config.asp"--> | |||
<!--#include file="DomainModels/ContactsRepository.asp"--> | |||
<!--#include file="DomainModels/JurisdictionRepository.asp"--> | |||
<!--#include file="DomainModels/KitRepository.asp"--> | |||
<!--#include file="DomainModels/KitLabelsRepository.asp"--> | |||
<!--#include file="DomainModels/SettingsRepository.asp"--> |
@@ -0,0 +1,2 @@ | |||
create table meta_migrations (version int not null); | |||
insert into meta_migrations (version) values (0); |
@@ -0,0 +1,15 @@ | |||
<% | |||
Class Migration_XX_ | |||
Public Migration | |||
Public Sub Up | |||
Migration.Do "" | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "" | |||
End Sub | |||
End Class | |||
Migrations.Add "Migration_XX_" | |||
%> |
@@ -0,0 +1,15 @@ | |||
<% | |||
Class Example_01_Create_Example_Table | |||
Public Migration | |||
Public Sub Up | |||
Migration.Do "create table Example_Table (id int not null, name varchar(100) not null)" | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "drop table Example_Table" | |||
End Sub | |||
End Class | |||
Migrations.Add "Example_01_Create_Example_Table" | |||
%> |
@@ -0,0 +1,18 @@ | |||
<% | |||
Class Example_02_Insert_Records_To_Example_Table | |||
Public Migration | |||
Public Sub Up | |||
dim i | |||
For i = 1 to 100 | |||
Migration.Do "INSERT INTO Example_Table (id, name) VALUES (" & i & ", 'Name " & i & "');" | |||
Next | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "DELETE FROM Example_Table WHERE id >= 1 and id <= 100" | |||
End Sub | |||
End Class | |||
Migrations.Add "Example_02_Insert_Records_To_Example_Table" | |||
%> |
@@ -0,0 +1,18 @@ | |||
<% | |||
Class Example_03_Insert_More_Records_To_Example_Table | |||
Public Migration | |||
Public Sub Up | |||
dim i | |||
For i = 101 to 200 | |||
Migration.Do "INSERT INTO Example_Table (id, name) VALUES (" & i & ", 'ANOTHER Name " & i & "');" | |||
Next | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "DELETE FROM Example_Table WHERE id >= 101 and id <= 200" | |||
End Sub | |||
End Class | |||
Migrations.Add "Example_03_Insert_More_Records_To_Example_Table" | |||
%> |
@@ -0,0 +1,26 @@ | |||
<% | |||
Class Migration_03_Create_Settings_Table | |||
Public Migration | |||
Public Sub Up | |||
Migration.Do "CREATE TABLE [Settings] (" &_ | |||
"[ID] COUNTER," &_ | |||
"[Name] VARCHAR(255)," &_ | |||
"[Value] VARCHAR(255)" &_ | |||
");" | |||
Migration.Do "CREATE UNIQUE INDEX [ID] ON [Settings]( [ID] ) WITH PRIMARY;" | |||
Migration.Do "INSERT INTO Settings ([Name],[Value]) VALUES ('MailingID', '202248');" | |||
Migration.Do "INSERT INTO Settings ([Name],[Value]) VALUES ('SerialNumberStart','2000000');" | |||
Migration.Do "INSERT INTO Settings ([Name],[Value]) VALUES ('SerialNumberEnd','5000000');" | |||
Migration.Do "INSERT INTO Settings ([Name],[Value]) Values ('SerialOffset','2000000');" | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "DROP TABLE [Settings]" | |||
End Sub | |||
End Class | |||
Migrations.Add "Migration_03_Create_Settings_Table" | |||
%> |
@@ -0,0 +1,19 @@ | |||
<% | |||
Class Migration_04_Create_Kit_Table | |||
Public Migration | |||
Public Sub Up | |||
Migration.Do "CREATE TABLE [Kit] (" &_ | |||
"[ID] COUNTER," &_ | |||
"[JobNumber] VARCHAR(255)," &_ | |||
"[Jcode] VARCHAR(255)" &_ | |||
");" | |||
Migration.Do "CREATE UNIQUE INDEX [ID] ON [Kit]( [ID] ) WITH PRIMARY;" | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "DROP TABLE [Kit]" | |||
End Sub | |||
End Class | |||
Migrations.Add "Migration_04_Create_Kit_Table" | |||
%> |
@@ -0,0 +1,24 @@ | |||
<% | |||
Class Migration_05_Create_Kit_Labels_Table | |||
Public Migration | |||
Public Sub Up | |||
Migration.Do "CREATE TABLE [KitLabels] (" &_ | |||
"[ID] COUNTER," &_ | |||
"[KitId] NUMBER," &_ | |||
"[OutboundSerial] VARCHAR(255)," &_ | |||
"[InBoundSerial] VARCHAR(255)," &_ | |||
"[OutboundIMB] VARCHAR(255)," &_ | |||
"[InBoundIMB] VARCHAR(255)," &_ | |||
"[OutboundIMBDigits] VARCHAR(255)," &_ | |||
"[InBoundIMBDigits] VARCHAR(255)" &_ | |||
");" | |||
Migration.Do "CREATE UNIQUE INDEX [ID] ON [KitLabels]( [ID] ) WITH PRIMARY;" | |||
End Sub | |||
Public Sub Down | |||
Migration.Do "DROP TABLE [KKitLabels]" | |||
End Sub | |||
End Class | |||
Migrations.Add "Migration_05_Create_Kit_Labels_Table" | |||
%> |
@@ -0,0 +1,276 @@ | |||
<% | |||
'Represents a single migration (either up or down) | |||
Class Migration_Class | |||
Private m_name | |||
Private m_migration_instance | |||
Private m_sql_array | |||
Private m_sql_array_size | |||
Private m_connection | |||
Private m_has_errors | |||
Public Tracing 'bool | |||
Public Property Get Name | |||
Name = m_name | |||
End Property | |||
Public Property Get Migration | |||
set Migration = m_migration_instance | |||
End Property | |||
Public Property Set Migration(obj) | |||
set m_migration_instance = obj | |||
End Property | |||
Public Property Get HasErrors | |||
HasErrors = m_has_errors | |||
End Property | |||
Private Sub Class_Initialize | |||
m_sql_array = array() | |||
redim m_sql_array(-1) | |||
m_has_errors = false | |||
End Sub | |||
Public Sub Initialize(name, migration_instance, connection) | |||
m_name = name | |||
set m_migration_instance = migration_instance | |||
set m_migration_instance.Migration = Me 'how circular can we get? ... | |||
set m_connection = connection | |||
End Sub | |||
Private Sub Class_Terminate | |||
'm_connection.Close | |||
'set m_connection = Nothing | |||
End Sub | |||
Public Sub [Do](sql) | |||
dim new_size : new_size = ubound(m_sql_array) + 1 | |||
redim preserve m_sql_array(new_size) | |||
m_sql_array(new_size) = sql | |||
'put "Added command: " & sql | |||
End Sub | |||
Public Sub Irreversible | |||
Err.Raise 1, "Migration_Class:Irreversible", "Migration cannot proceed because this migration is irreversible." | |||
End Sub | |||
Public Sub DownDataWarning | |||
put "Migration can be downversioned but data changes cannot take place due to the nature of the Up migration in this set." | |||
End Sub | |||
Public Function Query(sql) | |||
put "Query: " & sql | |||
set Query = m_connection.Execute(sql) | |||
End Function | |||
Public Sub DoUp | |||
Migration.Up | |||
ShowCommands | |||
ExecuteCommands | |||
End Sub | |||
Public Sub DoDown | |||
Migration.Down | |||
ShowCommands | |||
ExecuteCommands | |||
End Sub | |||
Private Sub ShowCommands | |||
put "" | |||
put "Commands:" | |||
dim i : i = 0 | |||
For i = 0 to ubound(m_sql_array) | |||
put " Command: " & m_sql_array(i) | |||
Next | |||
put "" | |||
End Sub | |||
Private Sub ExecuteCommands | |||
dim i : i = 0 | |||
dim sql | |||
m_connection.BeginTrans 'wrap entire process in transaction, rollback If error encountered on any statement | |||
For i = 0 to ubound(m_sql_array) | |||
sql = m_sql_array(i) | |||
If not m_has_errors then 'avoid further processing If errors exist | |||
On Error Resume Next | |||
put "Executing: " & sql | |||
m_connection.Execute sql | |||
If Err.Number <> 0 then 'something went wrong, rollback the transaction and display an error | |||
m_has_errors = true | |||
m_connection.RollbackTrans | |||
put_error "Error during migration: " & Err.Description | |||
put_error "SQL: " & sql | |||
exit sub | |||
End If | |||
On Error Goto 0 | |||
End If | |||
Next | |||
m_connection.CommitTrans 'surprisingly no errors were encountered, so commit the entire transaction | |||
End Sub | |||
'force font color dIfference | |||
Private Sub put(s) | |||
If Me.Tracing then response.write "<div style='color: #999'>" & s & "</div>" | |||
End Sub | |||
End Class | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Represents the collection of migrations to be performed | |||
Class Migrations_Class | |||
Private m_migrations_array ' 1-based to match migration naming scheme, ignore the first element | |||
Private m_migrations_array_size | |||
Private m_version | |||
Private m_connection | |||
Private m_connection_string | |||
Private m_has_errors | |||
Public Tracing 'bool | |||
Private Sub Class_Initialize | |||
m_migrations_array = array() | |||
m_migrations_array_size = 0 ' 1-based, ignore the first element | |||
redim m_migrations_array(m_migrations_array_size) | |||
m_has_errors = false | |||
End Sub | |||
Private Sub Class_Terminate | |||
On Error Resume Next | |||
m_connection.Close | |||
set m_connection = Nothing | |||
On Error Goto 0 | |||
End Sub | |||
'force font color dIfference | |||
Private Sub put(s) | |||
If Me.Tracing then response.write "<div style='color: #999'>" & s & "</div>" | |||
End Sub | |||
Public Sub Initialize(connection_string) | |||
m_connection_string = connection_string | |||
set m_connection = Server.CreateObject("ADODB.Connection") | |||
m_connection.Open m_connection_string | |||
put "Initialized: " & typename(m_connection) | |||
End Sub | |||
Public Sub Add(name) | |||
m_migrations_array_size = m_migrations_array_size + 1 | |||
redim preserve m_migrations_array(m_migrations_array_size) | |||
dim M : set M = new Migration_Class | |||
dim migration_instance : set migration_instance = eval("new " & name) | |||
M.Initialize name, migration_instance, m_connection | |||
M.Tracing = Me.Tracing | |||
set m_migrations_array(m_migrations_array_size) = M | |||
End Sub | |||
Public Sub MigrateUp | |||
MigrateUpTo m_migrations_array_size | |||
End Sub | |||
Public Sub MigrateUpBy(num) | |||
MigrateUpTo Version + num | |||
End Sub | |||
Public Sub MigrateUpTo(requested_version) | |||
requested_version = CInt(requested_version) | |||
put "Migrating Up To Version " & requested_version | |||
dim M, class_name | |||
If Version >= requested_version then | |||
put_error "DB already at higher version than requested up migration." | |||
ElseIf requested_version > m_migrations_array_size then | |||
put_error "Requested version exceeds available migrations. Only " & m_migrations_array_size & " migrations are available." | |||
Else | |||
While (NextVersion <= requested_version) and (not m_has_errors) | |||
set M = m_migrations_array(NextVersion) | |||
put "" | |||
put "<b>Up: " & M.name & "</b>" | |||
M.DoUp | |||
m_has_errors = M.HasErrors | |||
If not m_has_errors then IncrementVersion | |||
Wend | |||
End If | |||
End Sub | |||
Public Sub MigrateDown | |||
MigrateDownTo 0 | |||
End Sub | |||
Public Sub MigrateDownBy(num) | |||
MigrateDownTo Version - num | |||
End Sub | |||
Public Sub MigrateDownTo(requested_version) | |||
requested_version = CInt(requested_version) | |||
put "Migrating Down To Version: " & requested_version | |||
dim M, class_name | |||
If requested_version < 0 then | |||
put_error "Cannot migrate down to a version less than 0." | |||
ElseIf requested_version > Version then | |||
put_error "Cannot migrate down to a version higher than the current version." | |||
ElseIf requested_version = Version then | |||
put_error "Cannot migrate down to the current version, already there." | |||
Else | |||
While (Version > requested_version) and (not m_has_errors) | |||
set M = m_migrations_array(Version) | |||
put "" | |||
put "<b>Down: " & M.Name & "</b>" | |||
M.DoDown | |||
m_has_errors = M.HasErrors | |||
If not m_has_errors then DecrementVersion | |||
Wend | |||
End If | |||
End Sub | |||
Public Property Get Version | |||
If IsEmpty(m_version) then | |||
m_version = GetDBVersion() | |||
End If | |||
Version = m_version | |||
End Property | |||
Private Property Let Version(val) | |||
m_version = val | |||
m_connection.Execute "update meta_migrations set version = " & m_version | |||
End Property | |||
Public Property Get NextVersion | |||
NextVersion = Version + 1 | |||
End Property | |||
Private Function GetDBVersion() | |||
dim rs : set rs = m_connection.Execute("select version from meta_migrations") | |||
If rs.BOF or rs.EOF then | |||
GetDBVersion = NULL | |||
Else | |||
GetDBVersion = rs("version") | |||
End If | |||
rs.Close | |||
set rs = Nothing | |||
End Function | |||
Private Sub IncrementVersion | |||
If not m_has_errors then Version = Version + 1 | |||
End Sub | |||
Private Sub DecrementVersion | |||
If not m_has_errors then Version = Version - 1 | |||
End Sub | |||
End Class | |||
dim Migrations_Class__Singleton | |||
Function Migrations() | |||
If IsEmpty(Migrations_Class__Singleton) then set Migrations_Class__Singleton = new Migrations_Class | |||
set Migrations = Migrations_Class__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,115 @@ | |||
<% | |||
Option Explicit | |||
Sub put(v) | |||
response.write v & "<br>" | |||
End Sub | |||
Sub put_ | |||
put "" | |||
End Sub | |||
Sub put_error(s) | |||
put "<span style='color: red; font-weight: bold;'>" & s & "</span>" | |||
End Sub | |||
%> | |||
<!--#include file="../../MVC/lib.all.asp"--> | |||
<!--#include file="../../App/DAL/lib.DAL.asp"--> | |||
<!--#include file="lib.Migrations.asp"--> | |||
<% | |||
'Have to initialize Migrations_Class before including any actual migrations, because they each automatically append themselves to the Migrations class for convenience. | |||
'TODO: This can be refactored by not having the individual migration files auto-add themselves, but then this file must manually add each one using a slightly dIfferent | |||
' naming convention, i.e. given include file 01_Create_Users.asp the command would be Migrations.Add "Migration_01_Create_Users" or such. At least this way is automated. | |||
Migrations.Initialize "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "Data\webdata.mdb;" | |||
Migrations.Tracing = false | |||
%> | |||
<!--#include file="Migration_01_Create_Jurisdiction_Table.asp"--> | |||
<!--#include file="Migration_02_Create_Contact_Table.asp"--> | |||
<!--#include file="Migration_03_Create_Settings_Table.asp"--> | |||
<!--#include file="Migration_04_Create_Kit_Table.asp"--> | |||
<!--#include file="Migration_05_Create_Kit_Labels_Table.asp"--> | |||
<% | |||
Sub HandleMigration | |||
putl "<b>Starting Version: " & Migrations.Version & "</b>" | |||
If Request.Form("mode") = "direct" then | |||
If Request.Form("direction") = "Up" then | |||
If Len(Request.Form("to")) > 0 then | |||
Migrations.MigrateUpTo(Request.Form("to")) | |||
Else | |||
Migrations.MigrateUp | |||
End If | |||
ElseIf Request.Form("direction") = "Down" then | |||
If Len(Request.Form("to")) > 0 then | |||
Migrations.MigrateDownTo(Request.Form("to")) | |||
Else | |||
Migrations.MigrateDown | |||
End If | |||
End If | |||
ElseIf Request.Form("mode") = "up_one" then | |||
Migrations.MigrateUpBy 1 | |||
ElseIf Request.Form("mode") = "down_one" then | |||
Migrations.MigrateDownBy 1 | |||
End If | |||
putl "<b style='color: darkgreen'>Final Version: " & Migrations.Version & "</b>" | |||
End Sub | |||
Sub ShowForm | |||
%> | |||
<form action="migrate.asp" method="POST"> | |||
<input type="hidden" name="mode" value="direct"> | |||
<p> | |||
<b>Direction: </b> | |||
<select name="direction"> | |||
<option value="Up">Up</option> | |||
<option value="Down">Down</option> | |||
</select> | |||
| |||
<b>To: </b> | |||
<input type="text" size="5" name="to"> | |||
| |||
<input type="Submit" value="Migrate!"> | |||
</p> | |||
</form> | |||
<form action="migrate.asp" method="POST" style="display: inline"> | |||
<input type="hidden" name="mode" value="up_one"> | |||
<input type="Submit" value="Up 1"> | |||
</form> | |||
<form action="migrate.asp" method="POST"> | |||
<input type="hidden" name="mode" value="down_one"> | |||
<input type="Submit" value="Down 1"> | |||
</form> | |||
<hr> | |||
<% | |||
End Sub | |||
Sub Main | |||
ShowForm | |||
If Len(Request.Form("mode")) > 0 then | |||
HandleMigration | |||
Else | |||
putl "<b>Version: " & Migrations.Version & "</b>" | |||
End If | |||
End Sub | |||
%> | |||
<!doctype html> | |||
<html> | |||
<head> | |||
<style> | |||
body { font-family: calibri; } | |||
</style> | |||
</head> | |||
<body> | |||
<% Main %> | |||
</body> | |||
</html> |
@@ -0,0 +1,83 @@ | |||
<% | |||
Option Explicit | |||
Sub Main | |||
ShowFileList | |||
If Len(Request.Form("filename")) > 0 then | |||
ShowDocs | |||
End If | |||
End Sub | |||
Sub ShowFileList | |||
%> | |||
<h1>Select File</h1> | |||
<form action="docs.asp" method="POST"> | |||
<select name="filename"> | |||
<% | |||
dim fso : set fso = Server.CreateObject("Scripting.FileSystemObject") | |||
dim files : set files = fso.GetFolder(Server.MapPath(".")).Files | |||
dim file | |||
For Each file in files | |||
If fso.GetExtensionName(file.Path) = "asp" and file.Name <> "docs.asp" and InStr(file.Name, "_old") = 0 then | |||
response.write "<option value='" & file.Name & "'>" & file.Name & "</option>" | |||
End If | |||
Next | |||
%> | |||
</select> | |||
<input type="submit" value="Get Docs"> | |||
</form> | |||
<hr> | |||
<% | |||
End Sub | |||
Sub ShowDocs | |||
dim fso : set fso = Server.CreateObject("Scripting.FileSystemObject") | |||
dim path : path = fso.GetFolder(Server.MapPath(".")).Path | |||
dim file : set file = fso.OpenTextFile(path & "\" & Request.Form("filename")) | |||
dim re : set re = new RegExp | |||
With re | |||
.Pattern = "Public Property|Public Sub|Public Function" | |||
.Global = true | |||
.IgnoreCase = true | |||
End With | |||
dim line, matches, result | |||
Do Until file.AtEndOfStream | |||
line = file.ReadLine() | |||
set matches = re.Execute(line) | |||
If matches.Count > 0 then | |||
result = line | |||
result = Replace(result, "Public Property", "<span class='subdued'>Property</span>") | |||
result = Replace(result, "Public Sub", "<span class='subdued'>Sub</span>") | |||
result = Replace(result, "Public Function", "<span class='subdued'>Function</span>") | |||
response.write "<p>" & result & "</p>" | |||
End If | |||
Loop | |||
End Sub | |||
%> | |||
<!doctype html> | |||
<html> | |||
<head> | |||
<style> | |||
body { font-family: calibri; } | |||
p { font-weight: bold; } | |||
.subdued { font-weight: normal; color: #999; } | |||
</style> | |||
</head> | |||
<body> | |||
<% Call Main %> | |||
</body> | |||
</html> |
@@ -0,0 +1,160 @@ | |||
<% | |||
'======================================================================================================================= | |||
' AUTOMAPPER CLASS | |||
'======================================================================================================================= | |||
'Side Effects: Since src and target are passed ByRef to reduce unnecessary copying, if src is a recordset then the | |||
' current record pointer is modified using src.MoveFirst and src.MoveNext. The end result is the current | |||
' record pointer ends the operation at src.EOF. | |||
Class Automapper_Class | |||
Private m_src | |||
Private m_target | |||
Private m_statements | |||
Private m_statements_count | |||
Private Property Get Src : set Src = m_src : End Property | |||
Private Property Get Target : set Target = m_target : End Property | |||
Private Sub Class_Initialize | |||
m_statements = Array() | |||
m_statements_count = 0 | |||
redim m_statements(m_statements_count) | |||
End Sub | |||
Private Sub ResetState | |||
m_statements_count = 0 | |||
redim m_statements(m_statements_count) | |||
set m_src = Nothing | |||
set m_target = Nothing | |||
End Sub | |||
'Maps all rs or object fields to corresponding fields in the specified class. | |||
Public Function AutoMap(src_obj, target_obj) | |||
Set AutoMap = FlexMap(src_obj, target_obj, empty) | |||
End Function | |||
'Only maps fields specified in the field_names array (array of strings). | |||
'If field_names is empty, attempts to map all fields from the passed rs or object. | |||
Public Function FlexMap(src_obj, target_obj, field_names) | |||
Set FlexMap = DynMap(src_obj, target_obj, field_names, empty) | |||
End Function | |||
'Only maps fields specified in the field_names array (array of strings). | |||
'If field_names is empty then src MUST be a recordset as it attempts to map all fields from the recordset. | |||
'Since there is no reflection in vbscript, there is no way around this short of pseudo-reflection. | |||
Public Function DynMap(src_obj, target_obj, field_names, exprs) | |||
SetSource src_obj | |||
SetTarget target_obj | |||
dim field_name | |||
dim field_idx 'loop counter | |||
if IsEmpty(field_names) then 'map everything | |||
if typename(src_obj) = "Recordset" then | |||
for field_idx = 0 to src_obj.Fields.Count - 1 | |||
field_name = src_obj.Fields.Item(field_idx).Name | |||
'AddStatement field_name | |||
AddStatement BuildStatement(field_name) | |||
next | |||
elseif InStr(typename(src_obj), "Dictionary") > 0 then 'enables Scripting.Dictionary and IRequestDictionary for Request.Querystring and Request.Form | |||
for each field_name in src_obj | |||
AddStatement BuildStatement(field_name) | |||
next | |||
elseif not IsEmpty(src_obj.Class_Get_Properties) then | |||
dim props : props = src_obj.Class_Get_Properties | |||
for field_idx = 0 to ubound(props) | |||
field_name = props(field_idx) | |||
'AddStatement field_name | |||
AddStatement BuildStatement(field_name) | |||
next | |||
else 'some invalid type of object | |||
Err.Raise 9, "Automapper.DynMap", "Cannot automatically map this source object. Expected recordset or object implementing Class_Get_Properties reflection, got: " & typename(src_obj) | |||
end if | |||
else 'map only specified fields | |||
for field_idx = lbound(field_names) to ubound(field_names) | |||
field_name = field_names(field_idx) | |||
'AddStatement field_name | |||
AddStatement BuildStatement(field_name) | |||
next | |||
end if | |||
dim exprs_idx | |||
if not IsEmpty(exprs) then | |||
if typename(exprs) = "Variant()" then | |||
for exprs_idx = lbound(exprs) to ubound(exprs) | |||
'field_name = exprs(exprs_idx) | |||
'AddStatement field_name | |||
AddStatement exprs(exprs_idx) | |||
next | |||
else 'assume string or string-like default value | |||
AddStatement exprs | |||
end if | |||
end if | |||
'Can't pre-join the statements because if one fails the rest of them fail too... :( | |||
'dim joined_statements : joined_statements = Join(m_statements, " : ") | |||
'put joined_statements | |||
'suspend errors to prevent failing when attempting to map a field that does not exist in the class | |||
on error resume next | |||
dim stmt_idx | |||
for stmt_idx = 0 to ubound(m_statements) | |||
Execute m_statements(stmt_idx) | |||
next | |||
on error goto 0 | |||
set DynMap = m_target | |||
ResetState | |||
End Function | |||
Private Sub SetSource(ByVal src_obj) | |||
set m_src = src_obj | |||
End Sub | |||
Private Sub SetTarget(ByVal target_obj) | |||
if typename(target_obj) = "String" then | |||
set m_target = eval("new " & target_obj) | |||
else | |||
set m_target = target_obj | |||
end if | |||
End Sub | |||
'Builds a statement and adds it to the internal statements array | |||
Private Sub AddStatement(ByVal stmt) | |||
redim preserve m_statements(m_statements_count + 1) | |||
m_statements(m_statements_count) = stmt | |||
m_statements_count = m_statements_count + 1 | |||
End Sub | |||
Private Function BuildStatement(ByVal field_name) | |||
dim result | |||
if typename(m_src) = "Recordset" or InStr(typename(m_src), "Dictionary") > 0 then | |||
result = "m_target." & field_name & " = m_src(""" & field_name & """)" | |||
else | |||
'Funky magic... | |||
'If src.field_name is an object, ensure the set statement is used | |||
if IsObject(eval("m_src." & field_name)) then | |||
result = "set " | |||
else | |||
'result = "m_target." & field_name & " = m_src." & field_name | |||
end if | |||
result = result & " m_target." & field_name & " = m_src." & field_name | |||
end if | |||
BuildStatement = result | |||
End Function | |||
End Class | |||
Function Automapper() | |||
Set Automapper = new Automapper_Class | |||
End Function | |||
%> |
@@ -0,0 +1,57 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Bootstrap Helper - Provides some convenience methods for Bootstrap use | |||
'======================================================================================================================= | |||
Class Bootstrap_Helper_Class | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Forms | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Creates .control-label for Bootstrap styling | |||
Public Function ControlLabel(name, for_name) | |||
ControlLabel = HTML.LabelExt(name, for_name, Array("class", "control-label")) | |||
End Function | |||
Public Function Control(label_text, control_name, controls_html) | |||
Control = "<div class='control-group'>" & ControlLabel(label_text, control_name) & "<div class='controls'>" & controls_html & "</div></div>" | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Modals | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function ModalLinkTo(link_text, controller_name, action_name, modal_name, html_class_attrib) | |||
ModalLinkTo = ModalLinkToExt(link_text, controller_name, action_name, params_array, modal_name, html_class_attrib, empty) | |||
End Function | |||
Public Function ModalLinkToExt(link_text, controller_name, action_name, params_array, modal_name, html_class_attrib, html_attribs_array) | |||
ModalLinkToExt = "<a href='" & Server.HTMLEncode(Routes.UrlTo(controller_name, action_name, params_array)) & "'" &_ | |||
" class='" & html_class_attrib & " modal-link' data-modal='" & modal_name & "' " &_ | |||
HTML.HtmlAttribs(html_attribs_array) & ">" & link_text & "</a>" | |||
End Function | |||
'Generates the jQuery handler for the modal dialogs | |||
Public Function ModalHandlerScript() | |||
dim s | |||
s = " <script type='text/javascript'> " & vbCR &_ | |||
" // when a .modal-link is clicked, display the href target in the popup modal " & vbCR &_ | |||
" $(function() { " & vbCR &_ | |||
" $('a.modal-link').click(function(event) { " & vbCR &_ | |||
" event.preventDefault(); " & vbCR &_ | |||
" var modalName = $(this).attr('data-modal'); " & vbCR &_ | |||
" $('#' + modalName).removeData('modal').modal( { remote: $(this).attr('href') } ); " & vbCR &_ | |||
" }); " & vbCR &_ | |||
" }); " & vbCR &_ | |||
" </script> " | |||
ModalHandlerScript = s | |||
End Function | |||
End Class | |||
dim Bootstrap_Helper_Class__Singleton | |||
Function Bootstrap() | |||
If IsEmpty(Bootstrap_Helper_Class__Singleton) then set Bootstrap_Helper_Class__Singleton = new Bootstrap_Helper_Class | |||
set Bootstrap = Bootstrap_Helper_Class__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,740 @@ | |||
<% | |||
'======================================================================================================================= | |||
' KVArray | |||
' Relatively painless implementation of key/value pair arrays without requiring a full Scripting.Dictionary COM instance. | |||
' A KVArray is a standard array where element i is the key and element i+1 is the value. Loops must step by 2. | |||
'======================================================================================================================= | |||
'given a KVArray and key index, returns the key and value | |||
'pre: kv_array has at least key_idx and key_idx + 1 values | |||
'post: key and val are populated | |||
Sub KeyVal(kv_array, key_idx, ByRef key, ByRef val) | |||
if (key_idx + 1 > ubound(kv_array)) then err.raise 1, "KeyVal", "expected key_idx < " & ubound(kv_array) - 1 & ", got: " & key_idx | |||
key = kv_array(key_idx) | |||
val = kv_array(key_idx + 1) | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Given a KVArray, a key and a value, appends the key and value to the end of the KVArray | |||
Sub KVAppend(ByRef kv_array, key, val) | |||
dim i : i = ubound(kv_array) | |||
redim preserve kv_array(i + 2) | |||
kv_array(i + 1) = key | |||
kv_array(i + 2) = val | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
'Given a KVArray and two variants, populates the first variant with all keys and the second variant with all values. | |||
'If | |||
'Pre: kv_array has at least key_idx and key_idx + 1 values | |||
'Post: key_array contains all keys in kvarray. | |||
' val_array contains all values in kvarray. | |||
' key_array and val_array values are in corresponding order, i.e. key_array(i) corresponds to val_array(i). | |||
Sub KVUnzip(kv_array, key_array, val_array) | |||
dim kv_array_size : kv_array_size = ubound(kv_array) | |||
dim num_pairs : num_pairs = (kv_array_size + 1) / 2 | |||
dim result_array_size : result_array_size = num_pairs - 1 | |||
'Extend existing key_array or create new array to hold the keys | |||
If IsArray(key_array) then | |||
redim preserve key_array(ubound(key_array) + result_array_size) | |||
Else | |||
key_array = Array() | |||
redim key_array(result_array_size) | |||
End If | |||
'Extend existing val array or create new array to hold the values | |||
If IsArray(val_array) then | |||
redim preserve val_array(ubound(val_array) + result_array_size) | |||
Else | |||
val_array = Array() | |||
redim val_array(num_pairs - 1) | |||
End If | |||
'Unzip the KVArray into the two output arrays | |||
dim i, key, val | |||
dim key_val_arrays_idx : key_val_arrays_idx = 0 ' used to sync loading the key_array and val_array | |||
For i = 0 to ubound(kv_array) step 2 | |||
KeyVal kv_array, i, key, val | |||
key_array(key_val_arrays_idx) = key | |||
val_array(key_val_arrays_idx) = val | |||
key_val_arrays_idx = key_val_arrays_idx + 1 ' increment by 1 because loop goes to next pair in kv_array | |||
Next | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Given a KVArray, dumps it to the screen. Useful for debugging purposes. | |||
Sub DumpKVArray(kv_array) | |||
dim i, key, val | |||
For i = 0 to ubound(kv_array) step 2 | |||
KeyVal kv_array, i, key, val | |||
put key & " => " & val & "<br>" | |||
Next | |||
End Sub | |||
'======================================================================================================================= | |||
' Pair Class | |||
' Holds a pair of values, i.e. a key value pair, recordset field name/value pair, etc. | |||
' Similar to the C++ STL std::pair class. Useful for some iteration and the like. | |||
' | |||
' This was an interesting idea but so far has not really been used, oh well...... | |||
'======================================================================================================================= | |||
Class Pair_Class | |||
Private m_first, m_second | |||
Public Property Get First : First = m_first : End Property | |||
Public Property Get [Second] : [Second] = m_second : End Property | |||
Public Default Property Get TO_String | |||
TO_String = First & " " & [Second] | |||
End Property | |||
Public Sub Initialize(ByVal firstval, ByVal secondval) | |||
Assign m_first, firstval | |||
Assign m_second, secondval | |||
End Sub | |||
'Swaps the two values | |||
Public Sub Swap | |||
dim tmp | |||
Assign tmp, m_second | |||
Assign m_second, m_first | |||
Assign m_first, tmp | |||
End Sub | |||
End Class | |||
Function MakePair(ByVal firstval, ByVal secondval) | |||
dim P : set P = new Pair_Class | |||
P.Initialize firstval, secondval | |||
set MakePair = P | |||
End Function | |||
'======================================================================================================================= | |||
' Linked List - From the Tolerable lib | |||
'======================================================================================================================= | |||
' This is just here for reference | |||
Class Iterator_Class | |||
Public Function HasNext() | |||
End Function | |||
Public Function PeekNext() | |||
End Function | |||
Public Function GetNext() | |||
End Function | |||
Public Function HasPrev() | |||
End Function | |||
Public Function PeekPrev() | |||
End Function | |||
Public Function GetPrev() | |||
End Function | |||
End Class | |||
Class Enumerator_Source_Iterator_Class | |||
Private m_iter | |||
Public Sub Initialize(ByVal iter) | |||
Set m_iter = iter | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Set m_iter = Nothing | |||
End Sub | |||
Public Sub GetNext(ByRef retval, ByRef successful) | |||
If m_iter.HasNext Then | |||
Assign retval, m_iter.GetNext | |||
successful = True | |||
Else | |||
successful = False | |||
End If | |||
End Sub | |||
End Class | |||
Public Function En_Iterator(ByVal iter) | |||
Dim retval | |||
Set retval = New Enumerator_Source_Iterator_Class | |||
retval.Initialize iter | |||
Set En_Iterator = Enumerator(retval) | |||
End Function | |||
Class LinkedList_Node_Class | |||
Public m_prev | |||
Public m_next | |||
Public m_value | |||
Private Sub Class_Initialize() | |||
Set m_prev = Nothing | |||
Set m_next = Nothing | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Set m_prev = Nothing | |||
Set m_next = Nothing | |||
Set m_value = Nothing | |||
End Sub | |||
Public Sub SetValue(ByVal value) | |||
Assign m_value, value | |||
End Sub | |||
End Class | |||
Class Iterator_LinkedList_Class | |||
Private m_left | |||
Private m_right | |||
Public Sub Initialize(ByVal r) | |||
Set m_left = Nothing | |||
Set m_right = r | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Set m_Left = Nothing | |||
Set m_Right = Nothing | |||
End Sub | |||
Public Function HasNext() | |||
HasNext = Not(m_right Is Nothing) | |||
End Function | |||
Public Function PeekNext() | |||
Assign PeekNext, m_right.m_value | |||
End Function | |||
Public Function GetNext() | |||
Assign GetNext, m_right.m_value | |||
Set m_left = m_right | |||
Set m_right = m_right.m_next | |||
End Function | |||
Public Function HasPrev() | |||
HasPrev = Not(m_left Is Nothing) | |||
End Function | |||
Public Function PeekPrev() | |||
Assign PeekPrev, m_left.m_value | |||
End Function | |||
Public Function GetPrev() | |||
Assign GetPrev, m_left.m_value | |||
Set m_right = m_left | |||
Set m_left = m_left.m_prev | |||
End Function | |||
End Class | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class LinkedList_Class | |||
Private m_first | |||
Private m_last | |||
Private m_size | |||
Private Sub Class_Initialize() | |||
Me.Reset | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Me.Reset | |||
End Sub | |||
Public Function Clear() | |||
Set m_first = Nothing | |||
Set m_last = Nothing | |||
m_size = 0 | |||
Set Clear = Me | |||
End Function | |||
Private Function NewNode(ByVal value) | |||
Dim retval | |||
Set retval = New LinkedList_Node_Class | |||
retval.SetValue value | |||
Set NewNode = retval | |||
End Function | |||
Public Sub Reset() | |||
Set m_first = Nothing | |||
Set m_last = Nothing | |||
m_size = 0 | |||
End Sub | |||
Public Function IsEmpty() | |||
IsEmpty = (m_last Is Nothing) | |||
End Function | |||
Public Property Get Count | |||
Count = m_size | |||
End Property | |||
'I just like .Size better than .Count sometimes, sue me | |||
Public Property Get Size | |||
Size = m_size | |||
End Property | |||
Public Function Iterator() | |||
Dim retval | |||
Set retval = New Iterator_LinkedList_Class | |||
retval.Initialize m_first | |||
Set Iterator = retval | |||
End Function | |||
Public Function Push(ByVal value) | |||
Dim temp | |||
Set temp = NewNode(value) | |||
If Me.IsEmpty Then | |||
Set m_first = temp | |||
Set m_last = temp | |||
Else | |||
Set temp.m_prev = m_last | |||
Set m_last.m_next = temp | |||
Set m_last = temp | |||
End If | |||
m_size = m_size + 1 | |||
Set Push = Me | |||
End Function | |||
Public Function Peek() | |||
' TODO: Error handling | |||
Assign Peek, m_last.m_value | |||
End Function | |||
' Alias for Peek | |||
Public Function Back() | |||
' TODO: Error handling | |||
Assign Back, m_last.m_value | |||
End Function | |||
Public Function Pop() | |||
Dim temp | |||
' TODO: Error Handling | |||
Assign Pop, m_last.m_value | |||
Set temp = m_last | |||
Set m_last = temp.m_prev | |||
Set temp.m_prev = Nothing | |||
If m_last Is Nothing Then | |||
Set m_first = Nothing | |||
Else | |||
Set m_last.m_next = Nothing | |||
End If | |||
m_size = m_size - 1 | |||
End Function | |||
Public Function Unshift(ByVal value) | |||
Dim temp | |||
Set temp = NewNode(value) | |||
If Me.IsEmpty Then | |||
Set m_first = temp | |||
Set m_last = temp | |||
Else | |||
Set temp.m_next = m_first | |||
Set m_first.m_prev = temp | |||
Set m_first = temp | |||
End If | |||
m_size = m_size + 1 | |||
Set Unshift = Me | |||
End Function | |||
' Alias for Peek | |||
Public Function Front() | |||
' TODO: Error handling | |||
Assign Front, m_first.m_value | |||
End Function | |||
Public Function Shift() | |||
Dim temp | |||
' TODO: Error Handling | |||
Assign Shift, m_first.m_value | |||
Set temp = m_first | |||
Set m_first = temp.m_next | |||
Set temp.m_next = Nothing | |||
If m_first Is Nothing Then | |||
Set m_last = Nothing | |||
Else | |||
Set m_first.m_prev = Nothing | |||
End If | |||
m_size = m_size - 1 | |||
End Function | |||
Public Function TO_Array() | |||
Dim i, iter | |||
ReDim retval(Me.Count - 1) | |||
i = 0 | |||
Set iter = Me.Iterator | |||
While iter.HasNext | |||
retval(i) = iter.GetNext | |||
i = i + 1 | |||
Wend | |||
TO_Array = retval | |||
End Function | |||
Public Function TO_En() | |||
Set TO_En = En_Iterator(Iterator) | |||
End Function | |||
End Class | |||
'======================================================================================================================= | |||
' Dynamic Array - From the Tolerable lib | |||
'======================================================================================================================= | |||
Class DynamicArray_Class | |||
Private m_data | |||
Private m_size | |||
Public Sub Initialize(ByVal d, ByVal s) | |||
m_data = d | |||
m_size = s | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Set m_data = Nothing | |||
End Sub | |||
Public Property Get Capacity | |||
Capacity = UBOUND(m_data) + 1 | |||
End Property | |||
Public Property Get Count | |||
Count = m_size | |||
End Property | |||
' Alias for Count | |||
Public Property Get Size | |||
Size = m_size | |||
End Property | |||
Public Function IsEmpty() | |||
IsEmpty = (m_size = 0) | |||
End Function | |||
Public Function Clear() | |||
m_size = 0 | |||
Set Clear = Me | |||
End Function | |||
Private Sub Grow | |||
' TODO: There's probably a better way to | |||
' do this. Doubling might be excessive | |||
ReDim Preserve m_data(UBOUND(m_data) * 2) | |||
End Sub | |||
Public Function Push(ByVal val) | |||
If m_size >= UBOUND(m_data) Then | |||
Grow | |||
End If | |||
Assign m_data(m_size), val | |||
m_size = m_size + 1 | |||
Set Push = Me | |||
End Function | |||
' Look at the last element | |||
Public Function Peek() | |||
Assign Peek, m_data(m_size - 1) | |||
End Function | |||
' Look at the last element and | |||
' pop it off of the list | |||
Public Function Pop() | |||
Assign Pop, m_data(m_size - 1) | |||
m_size = m_size - 1 | |||
End Function | |||
' If pseudo_index < 0, then we assume we're counting | |||
' from the back of the Array. | |||
Private Function CalculateIndex(ByVal pseudo_index) | |||
If pseudo_index >= 0 Then | |||
CalculateIndex = pseudo_index | |||
Else | |||
CalculateIndex = m_size + pseudo_index | |||
End If | |||
End Function | |||
Public Default Function Item(ByVal i) | |||
Assign Item, m_data(CalculateIndex(i)) | |||
End Function | |||
' This does not treat negative indices as wrap-around. | |||
' Thus, it is slightly faster. | |||
Public Function FastItem(ByVal i) | |||
Assign FastItem, m_data(i) | |||
End Function | |||
Public Function Slice(ByVal s, ByVal e) | |||
s = CalculateIndex(s) | |||
e = CalculateIndex(e) | |||
If e < s Then | |||
Set Slice = DynamicArray() | |||
Else | |||
ReDim retval(e - s) | |||
Dim i, j | |||
j = 0 | |||
For i = s to e | |||
Assign retval(j), m_data(i) | |||
j = j + 1 | |||
Next | |||
Set Slice = DynamicArray1(retval) | |||
End If | |||
End Function | |||
Public Function Iterator() | |||
Dim retval | |||
Set retval = New Iterator_DynamicArray_Class | |||
retval.Initialize Me | |||
Set Iterator = retval | |||
End Function | |||
Public Function TO_En() | |||
Set TO_En = En_Iterator(Me.Iterator) | |||
End Function | |||
Public Function TO_Array() | |||
Dim i | |||
ReDim retval(m_size - 1) | |||
For i = 0 to UBOUND(retval) | |||
Assign retval(i), m_data(i) | |||
Next | |||
TO_Array = retval | |||
End Function | |||
End Class | |||
Public Function DynamicArray() | |||
ReDim data(3) | |||
Set DynamicArray = DynamicArray2(data, 0) | |||
End Function | |||
Public Function DynamicArray1(ByVal data) | |||
Set DynamicArray1 = DynamicArray2(data, UBOUND(data) + 1) | |||
End Function | |||
Private Function DynamicArray2(ByVal data, ByVal size) | |||
Dim retval | |||
Set retval = New DynamicArray_Class | |||
retval.Initialize data, size | |||
Set DynamicArray2 = retval | |||
End Function | |||
Class Iterator_DynamicArray_Class | |||
Private m_dynamic_array | |||
Private m_index | |||
Public Sub Initialize(ByVal dynamic_array) | |||
Set m_dynamic_array = dynamic_array | |||
m_index = 0 | |||
End Sub | |||
Private Sub Class_Terminate | |||
Set m_dynamic_array = Nothing | |||
End Sub | |||
Public Function HasNext() | |||
HasNext = (m_index < m_dynamic_array.Size) | |||
End Function | |||
Public Function PeekNext() | |||
Assign PeekNext, m_dynamic_array.FastItem(m_index) | |||
End Function | |||
Public Function GetNext() | |||
Assign GetNext, m_dynamic_array.FastItem(m_index) | |||
m_index = m_index + 1 | |||
End Function | |||
Public Function HasPrev() | |||
HasPrev = (m_index > 0) | |||
End Function | |||
Public Function PeekPrev() | |||
Assign PeekPrev, m_dynamic_array.FastItem(m_index - 1) | |||
End Function | |||
Public Function GetPrev() | |||
Assign GetPrev, m_dynamic_array.FastItem(m_index - 1) | |||
m_index = m_index - 1 | |||
End Function | |||
End Class | |||
'======================================================================================================================= | |||
' Other Iterators | |||
'======================================================================================================================= | |||
'!!! EXPERIMENTAL !!! May not be very useful, oh well... | |||
Class Iterator_Recordset_Class | |||
Private m_rs | |||
Private m_record_count | |||
Private m_current_index | |||
Private m_field_names 'cached array | |||
Public Sub Initialize(ByVal rs) | |||
Set m_rs = rs | |||
m_rs.MoveFirst | |||
m_rs.MovePrevious | |||
m_record_count = rs.RecordCount | |||
m_current_index = 0 | |||
'cache field names | |||
m_field_names = array() | |||
redim m_field_names(m_rs.Fields.Count) | |||
dim field | |||
dim i : i = 0 | |||
for each field in m_rs.Fields | |||
m_field_names(i) = field.Name | |||
next | |||
End Sub | |||
Private Sub Class_Terminate | |||
Set m_rs = Nothing | |||
End Sub | |||
Public Function HasNext() | |||
HasNext = (m_current_index < m_record_count) | |||
put "m_current_index := " & m_current_index | |||
put "m_record_count := " & m_record_count | |||
End Function | |||
Public Function PeekNext | |||
if HasNext then | |||
m_rs.MoveNext | |||
Assign PeekNext, GetPairs | |||
m_rs.MovePrevious | |||
else | |||
set PeekNext = Nothing | |||
end if | |||
End Function | |||
Private Function GetPairs | |||
End Function | |||
Public Function GetNext | |||
if m_current_index < m_record_count then | |||
Assign GetNext, m_rs | |||
m_rs.MoveNext | |||
m_current_index = m_current_index + 1 | |||
else | |||
set GetNext = Nothing | |||
end if | |||
End Function | |||
Public Function HasPrev() | |||
if m_rs.BOF then | |||
HasPrev = false | |||
else | |||
m_rs.MovePrevious | |||
HasPrev = Choice(m_rs.BOF, false, true) | |||
m_rs.MoveNext | |||
end if | |||
End Function | |||
Public Function PeekPrev | |||
m_rs.MovePrevious | |||
if m_rs.BOF then | |||
set PeekPrev = Nothing | |||
else | |||
Assign PeekPrev, m_rs | |||
end if | |||
m_rs.MoveNext | |||
End Function | |||
Public Function GetPrev | |||
m_rs.MovePrevious | |||
if m_rs.BOF then | |||
set GetPrev = Nothing | |||
else | |||
Assign GetPrev, m_rs | |||
end if | |||
End Function | |||
End Class | |||
Class Iterator_Dictionary_Class | |||
Private m_dic | |||
Private m_keys 'array | |||
Private m_idx 'current array index | |||
Private m_keys_ubound 'cached ubound(m_keys) | |||
Public Sub Initialize(ByVal dic) | |||
set m_dic = dic | |||
m_keys = m_dic.Keys() | |||
m_idx = -1 | |||
m_keys_ubound = ubound(m_keys) | |||
End Sub | |||
Private Sub Class_Terminate | |||
set m_dic = Nothing | |||
End Sub | |||
Public Function HasNext() | |||
HasNext = (m_idx < m_keys_ubound) | |||
End Function | |||
Public Function PeekNext() | |||
Assign PeekNext, m_dic(m_keys(m_idx + 1)) | |||
End Function | |||
Public Function GetNext() | |||
Assign GetNext, m_dic(m_keys(m_idx + 1)) | |||
m_idx = m_idx + 1 | |||
End Function | |||
Public Function HasPrev() | |||
HasPrev = (m_idx > 0) | |||
End Function | |||
Public Function PeekPrev() | |||
Assign PeekPrev, m_dic(m_keys(m_idx - 1)) | |||
End Function | |||
Public Function GetPrev() | |||
Assign GetPrev, m_dic(m_keys(m_idx - 1)) | |||
m_idx = m_idx - 1 | |||
End Function | |||
End Class | |||
'======================================================================================================================= | |||
' Iterator Factory | |||
'======================================================================================================================= | |||
'Returns the appropriate iterator for the passed-in collection. Errors if unknown collection. | |||
Function IteratorFor(col) | |||
dim result | |||
select case typename(col) | |||
case "LinkedList_Class" : set result = new Iterator_LinkedList_Class | |||
case "Dictionary" : set result = new Iterator_Dictionary_Class | |||
case "Recordset" : set result = new Iterator_Recordset_Class | |||
end select | |||
result.Initialize col | |||
set IteratorFor = result | |||
End Function | |||
%> |
@@ -0,0 +1,95 @@ | |||
<% | |||
Class Database_Class | |||
Private m_connection | |||
Private m_connection_string | |||
Private m_trace_enabled | |||
Public Sub set_trace(bool) : m_trace_enabled = bool : End Sub | |||
Public Property Get is_trace_enabled : is_trace_enabled = m_trace_enabled : End Property | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Initialize(connection_string) | |||
m_connection_string = connection_string | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function Query(sql, params) | |||
dim cmd : set cmd = server.createobject("adodb.command") | |||
set cmd.ActiveConnection = Connection | |||
cmd.CommandText = sql | |||
dim rs | |||
If IsArray(params) then | |||
set rs = cmd.Execute(, params) | |||
ElseIf Not IsEmpty(params) then ' one parameter | |||
set rs = cmd.Execute(, Array(params)) | |||
Else | |||
set rs = cmd.Execute() | |||
End If | |||
set Query = rs | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function PagedQuery(sql, params, per_page, page_num) | |||
dim cmd : set cmd = server.createobject("adodb.command") | |||
set cmd.ActiveConnection = Connection | |||
cmd.CommandText = sql | |||
cmd.CommandType = 1 'adCmdText | |||
cmd.ActiveConnection.CursorLocation = 3 'adUseClient | |||
dim rs | |||
If IsArray(params) then | |||
set rs = cmd.Execute(, params) | |||
ElseIf Not IsEmpty(params) then ' one parameter | |||
set rs = cmd.Execute(, Array(params)) | |||
Else | |||
set rs = cmd.Execute() | |||
End If | |||
If Not rs.EOF then | |||
rs.PageSize = 1 | |||
rs.CacheSize = 1 | |||
rs.AbsolutePage = 1 | |||
End If | |||
set PagedQuery = rs | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub [Execute](sql, params) | |||
me.query sql, params | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub BeginTransaction | |||
Connection.BeginTrans | |||
End Sub | |||
Public Sub RollbackTransaction | |||
Connection.RollbackTrans | |||
End Sub | |||
Public Sub CommitTransaction | |||
Connection.CommitTrans | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Private Methods | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Private Sub Class_terminate | |||
Destroy m_connection | |||
End Sub | |||
Private Function Connection | |||
if not isobject(m_connection) then | |||
set m_connection = Server.CreateObject("adodb.connection") | |||
m_connection.open m_connection_string | |||
end if | |||
set Connection = m_connection | |||
End Function | |||
end Class | |||
%> |
@@ -0,0 +1,202 @@ | |||
<% | |||
Class EnumerableHelper_Class | |||
Private m_list | |||
Public Sub Init(list) | |||
set m_list = list | |||
End Sub | |||
Public Sub Class_Terminate | |||
set m_list = Nothing | |||
End Sub | |||
Public Default Function Data() | |||
set Data = m_list | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Convenience wrappers | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function Count() | |||
Count = m_list.Count() | |||
End Function | |||
Public Function First() | |||
Assign First, m_list.Front() | |||
End Function | |||
Public Function Last() | |||
Assign Last, m_list.Back() | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Methods that return a single value | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'true if all elements of the list satisfy the condition | |||
Public Function All(condition) | |||
dim item_, all_matched : all_matched = true | |||
dim it : set it = m_list.Iterator | |||
Do While it.HasNext | |||
Assign item_, it.GetNext() | |||
If "String" = typename(condition) then | |||
If Not eval(condition) then | |||
all_matched = false | |||
End If | |||
Else | |||
If Not condition(item_) then | |||
all_matched = false | |||
End If | |||
End If | |||
If Not all_matched then Exit Do | |||
Loop | |||
All = all_matched | |||
End Function | |||
'true if any element of the list satisfies the condition | |||
Public Function Any(condition) | |||
Any = Not All("Not " & condition) | |||
End Function | |||
Public Function Max(expr) | |||
dim V_, item_, maxval | |||
dim it : set it = m_list.Iterator | |||
If "String" = typename(expr) then | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
Assign V_, eval(expr) | |||
If V_ > maxval then maxval = V_ | |||
Wend | |||
Else | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
Assign V_, expr(item_) | |||
If V_ > maxval then maxval = V_ | |||
Wend | |||
End If | |||
Max = maxval | |||
End Function | |||
Public Function Min(expr) | |||
dim V_, item_, minval | |||
dim it : set it = m_list.Iterator | |||
If "String" = typename(expr) then | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
If IsEmpty(minval) then ' empty is always less than everything so set it on first pass | |||
Assign minval, item_ | |||
End If | |||
Assign V_, eval(expr) | |||
If V_ < minval then minval = V_ | |||
Wend | |||
Else | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
If IsEmpty(minval) then | |||
Assign minval, item_ | |||
End If | |||
V_ = expr(item_) | |||
If V_ < minval then minval = V_ | |||
Wend | |||
End If | |||
Min = minval | |||
End Function | |||
Public Function Sum(expr) | |||
dim V_, item_ | |||
dim it : set it = m_list.Iterator | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
execute "V_ = V_ + " & expr | |||
Wend | |||
Sum = V_ | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Methods that return a new instance of this class | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'returns a list that results from running lambda_or_proc once for every element in the list | |||
Public Function Map(lambda_or_proc) | |||
dim list2 : set list2 = new LinkedList_Class | |||
dim it : set it = m_list.Iterator | |||
dim item_ | |||
If "String" = typename(lambda_or_proc) then | |||
dim V_ | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
execute lambda_or_proc | |||
list2.Push V_ | |||
Wend | |||
Else | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
list2.Push lambda_or_proc(item_) | |||
Wend | |||
End If | |||
set Map = Enumerable(list2) | |||
End Function | |||
'alias to match IEnumerable for convenience | |||
Public Function [Select](lambda_or_proc) | |||
set [Select] = Map(lambda_or_proc) | |||
End Function | |||
'returns list containing first n items | |||
Public Function Take(n) | |||
dim list2 : set list2 = new LinkedList_Class | |||
dim it : set it = m_list.Iterator | |||
dim i : i = 1 | |||
While it.HasNext And i <= n | |||
list2.Push it.GetNext() | |||
i = i + 1 | |||
Wend | |||
set Take = Enumerable(list2) | |||
End Function | |||
'returns list containing elements as long as the condition is true, and skips the remaining elements | |||
Public Function TakeWhile(condition) | |||
dim list2 : set list2 = new LinkedList_Class | |||
dim item_, V_, bln | |||
dim it : set it = m_list.Iterator | |||
Do While it.HasNext | |||
Assign item_, it.GetNext() | |||
If "String" = typename(condition) then | |||
'execute condition | |||
If Not eval(condition) then Exit Do | |||
Else | |||
If Not condition(item_) then Exit Do | |||
End If | |||
list2.Push item_ | |||
Loop | |||
set TakeWhile = Enumerable(list2) | |||
End Function | |||
'returns a list containing only elements that satisfy the condition | |||
Public Function Where(condition) | |||
dim list2 : set list2 = new LinkedList_Class | |||
dim it : set it = m_list.Iterator | |||
dim item_ | |||
While it.HasNext | |||
Assign item_, it.GetNext() | |||
If "String" = typename(condition) then | |||
If eval(condition) then list2.Push item_ | |||
Else | |||
If condition(item_) then list2.Push item_ | |||
End If | |||
Wend | |||
set Where = Enumerable(list2) | |||
End Function | |||
End Class | |||
Function Enumerable(list) | |||
dim E : set E = new EnumerableHelper_Class | |||
E.Init list | |||
set Enumerable = E | |||
End Function | |||
%> |
@@ -0,0 +1,118 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Flash Message Class | |||
'======================================================================================================================= | |||
Class Flash_Class | |||
Private m_errors_key | |||
Private m_success_key | |||
Private Sub Class_Initialize | |||
m_errors_key = "mvc.flash.errors_array" | |||
m_success_key = "mvc.flash.success_message" | |||
End Sub | |||
'helper methods to avoid if..then statements in views | |||
Public Sub ShowErrorsIfPresent | |||
if HasErrors then ShowErrors | |||
End Sub | |||
Public Sub ShowSuccessIfPresent | |||
if HasSuccess then ShowSuccess | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Errors | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Property Get HasErrors | |||
HasErrors = (Not IsEmpty(Session(m_errors_key))) | |||
End Property | |||
Public Property Get Errors | |||
Errors = Session(m_errors_key) | |||
End Property | |||
Public Property Let Errors(ary) | |||
Session(m_errors_key) = ary | |||
End Property | |||
Public Sub AddError(msg) | |||
dim ary | |||
if IsEmpty(Session(m_errors_key)) then | |||
ary = Array() | |||
redim ary(-1) | |||
else | |||
ary = Session(m_errors_key) | |||
end if | |||
redim preserve ary(ubound(ary) + 1) | |||
ary(ubound(ary)) = msg | |||
Session(m_errors_key) = ary | |||
End Sub | |||
'Public Sub ShowErrors | |||
' ClearErrors | |||
'End Sub | |||
Public Sub ShowErrors | |||
if HasErrors then | |||
%> | |||
<div class="alert alert-error"> | |||
<button type="button" class="close" data-dismiss="alert">×</button> | |||
<h4>Error!</h4> | |||
<ul> | |||
<% | |||
dim ary, i | |||
ary = Errors | |||
for i = 0 to ubound(ary) | |||
put "<li>" | |||
put H(ary(i)) | |||
put "</li>" | |||
next | |||
%> | |||
</ul> | |||
</div> | |||
<% | |||
ClearErrors | |||
end if | |||
End Sub | |||
Public Sub ClearErrors | |||
Session.Contents.Remove(m_errors_key) | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Success | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Property Get HasSuccess | |||
HasSuccess = (Not IsEmpty(Session(m_success_key))) | |||
End Property | |||
Public Property Get Success | |||
Success = Session(m_success_key) | |||
End Property | |||
Public Property Let Success(msg) | |||
Session(m_success_key) = msg | |||
End Property | |||
Public Sub ShowSuccess | |||
if HasSuccess then | |||
%> | |||
<div class="alert alert-success"> | |||
<button type="button" class="close" data-dismiss="alert">×</button> | |||
<%= H(Success) %> | |||
</div> | |||
<% | |||
ClearSuccess | |||
end if | |||
End Sub | |||
Public Sub ClearSuccess | |||
Session.Contents.Remove(m_success_key) | |||
End Sub | |||
End Class | |||
Function Flash() | |||
set Flash = new Flash_Class | |||
End Function | |||
%> |
@@ -0,0 +1,67 @@ | |||
<% | |||
Class FormCache_Class | |||
'given a form name and IRequestDictionary params (request.form) object, caches form values | |||
Public Sub SerializeForm(form_name, params) | |||
dim form_key, form_val, serialized_key | |||
For Each form_key in params | |||
form_val = params(form_key) | |||
serialized_key = CachedFormKeyName(form_name, form_key) | |||
'put "serialize<br>" | |||
'put "--form_key := " & form_key & "<br>" | |||
'put "--form_val := " & form_val & "<br>" | |||
'put "--serialized_key := " & serialized_key & "<br>" | |||
Session(serialized_key) = form_val | |||
Next | |||
End Sub | |||
'given a form name, returns a dict with the form's stored values | |||
Public Function DeserializeForm(form_name) | |||
dim dict : set dict = Nothing | |||
dim serialized_key, serialized_val, form_key, form_val | |||
For Each serialized_key in Session.Contents | |||
'put "serialized_key: " & serialized_key & "<br>" | |||
If InStr(serialized_key, "mvc.form." & form_name) > 0 then | |||
'put "--match" & "<br>" | |||
If dict Is Nothing then | |||
set dict = Server.CreateObject("Scripting.Dictionary") | |||
'put "dict created<br>" | |||
End If | |||
form_val = Session(serialized_key) | |||
form_key = Replace(serialized_key, "mvc.form." & form_name & ".", "") | |||
dict(form_key) = form_val | |||
'Session.Contents.Remove serialized_key | |||
'put "--serialized_val: " & serialized_val & "<br>" | |||
'put "--form_val: " & form_val & "<br>" | |||
End If | |||
Next | |||
set DeserializeForm = dict | |||
End Function | |||
'given a form name, clears the keys for that form | |||
Public Sub ClearForm(form_name) | |||
dim key | |||
For Each key in Session.Contents | |||
If InStr(key, CachedFormKeyName(form_name, key)) > 0 then | |||
Session.Contents.Remove key | |||
End If | |||
Next | |||
End Sub | |||
Private Function CachedFormKeyName(form_name, key) | |||
CachedFormKeyName = "mvc.form." & form_name & "." & key | |||
End Function | |||
End Class | |||
dim FormCache__Singleton | |||
Function FormCache() | |||
if IsEmpty(FormCache__Singleton) then | |||
set FormCache__Singleton = new FormCache_Class | |||
end if | |||
set FormCache = FormCache__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,260 @@ | |||
<% | |||
'======================================================================================================================= | |||
' HTML HELPER | |||
'======================================================================================================================= | |||
Class HTML_Helper_Class | |||
'Duplicate of Routes.NoCacheToken, copied to avoid extra lookup into the Routes object for such a trivial function. | |||
'Allows caller to reference HTML.NoCacheToken in cases where it seems to feel right. | |||
Public Property Get NoCacheToken | |||
NoCacheToken = Timer() * 100 | |||
End Property | |||
'Ensures safe output | |||
Public Function Encode(ByVal value) | |||
If Not IsEmpty(value) and Not IsNull(value) then | |||
Encode = Server.HtmlEncode(value) | |||
End If | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'LinkTo and its relatives DO NOT HTMLEncode the link_text! This allows use of HTML within the link, especially | |||
'useful for Bootstrap icons and the like. | |||
' | |||
'Bottom Line: If you need to HTMLEncode the link text YOU MUST DO IT YOURSELF! The H() method makes this easy! | |||
Public Function LinkTo(link_text, controller_name, action_name) | |||
LinkTo = LinkToExt(link_text, controller_name, action_name, empty, empty) | |||
End Function | |||
Public Function LinkToExt(link_text, controller_name, action_name, params_array, attribs_array) | |||
LinkToExt = "<a href='" & Encode(Routes.UrlTo(controller_name, action_name, params_array)) & "'" &_ | |||
HtmlAttribs(attribs_array) & ">" & link_text & "</a>" & vbCR | |||
End Function | |||
Public Function LinkToIf(condition, link_text, controller_name, action_name) | |||
if condition then | |||
LinkToIf = LinkToExt(link_text, controller_name, action_name, empty, empty) | |||
end if | |||
End Function | |||
Public Function LinkToExtIf(condition, link_text, controller_name, action_name, params_array, attribs_array) | |||
if condition then | |||
LinkToExtIf = LinkToExt(link_text, controller_name, action_name, params_array, attribs_array) | |||
end if | |||
End Function | |||
Public Function LinkToUnless(condition, link_text, controller_name, action_name) | |||
if not condition then | |||
LinkToIf = LinkToExt(link_text, controller_name, action_name, empty, empty) | |||
end if | |||
End Function | |||
Public Function LinkToExtUnless(condition, link_text, controller_name, action_name, params_array, attribs_array) | |||
if not condition then | |||
LinkToExtUnless = LinkToExt(link_text, controller_name, action_name, params_array, attribs_array) | |||
end if | |||
End Function | |||
'' | |||
' Creates a form button and a hidden form to enforce POST submissions. Params are in hidden fields. | |||
'' | |||
'Public Function PostButtonLinkTo(controller_name, action_name, params) | |||
' dim id : id = "post_button__" & controller_name & action_name | |||
' dim s | |||
' s = "<form id='" & id & "' action='" & Routes.UrlTo(controller_name, action_name, empty) & "' method='POST'>" | |||
' dim i, key, val | |||
' for i = 0 to ubound(params) step 2 | |||
' KeyVal params, i, key, val | |||
' s = s & "<input type='hidden' name='" & key & "' value='" & val & "'>" | |||
' next | |||
' s = s & "<input type='submit' value='>>'>" | |||
' s = s & "</form>" | |||
' PostButtonLinkTo = s | |||
'End Function | |||
Public Function PostButtonTo(button_contents, controller_name, action_name, form_fields) | |||
PostButtonTo = PostButtonToExt(button_contents, controller_name, action_name, form_fields, empty) | |||
End Function | |||
Public Function PostButtonToExt(button_contents, controller_name, action_name, form_fields, url_params) | |||
dim s : s = "<form action='" & Routes.UrlTo(controller_name, action_name, url_params) & "' method='POST' style='margin: 0;'>" | |||
dim i, key, val | |||
for i = 0 to ubound(form_fields) step 2 | |||
KeyVal form_fields, i, key, val | |||
s = s & HTML.Hidden(key, val) | |||
next | |||
s = s & HTML.SubmitButton(button_contents) | |||
s = s & "</form>" & vbCR | |||
PostButtonToExt = s | |||
End Function | |||
Public Function AppStylesheetTag | |||
AppStylesheetTag = StylesheetTag(Routes.StylesheetsURL & "App.css") | |||
End Function | |||
Public Function ControllerStylesheetTag | |||
ControllerStylesheetTag = StylesheetTag(Routes.StylesheetsUrl & MVC.ControllerName & "Controller.css") | |||
End Function | |||
Public Function StylesheetTag(url) | |||
StylesheetTag = "<link rel='stylesheet' href='" & Encode(url) & "?" & Year(now) & Month(now) & Day(now) & Hour(now) & Minute(now) & Second(now) & "'>" & vbCR | |||
End Function | |||
Public Function JSTag(url) | |||
JSTag = "<script type='text/javascript' src='" & Encode(url) & "'></script>" & vbCR | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Form Helpers | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function FormTag(controller_name, action_name, route_attribs, form_attribs) | |||
FormTag = "<form action='" & Routes.UrlTo(controller_name, action_name, route_attribs) & "' method='POST' " & HtmlAttribs(form_attribs) & ">" & vbCR | |||
End Function | |||
Public Function Label(name, for_name) | |||
Label = LabelExt(name, for_name, empty) | |||
End Function | |||
Public Function LabelExt(name, for_name, attribs) | |||
LabelExt = "<label for='" & Encode(for_name) & "' " & HtmlAttribs(attribs) & ">" & Encode(name) & "</label>" & vbCR | |||
End Function | |||
Public Function Hidden(id, value) | |||
Hidden = HiddenExt(id, value, empty) | |||
End Function | |||
Public Function HiddenExt(id, value, attribs) | |||
HiddenExt = "<input type='hidden' id='" & Encode(id) & "' name='" & Encode(id) & "' value='" & Encode(value) & "' " & HtmlAttribs(attribs) & " >" & vbCR | |||
End Function | |||
Public Function TextBox(id, value) | |||
TextBox = TextBoxExt(id, value, empty) | |||
End Function | |||
Public Function TextBoxExt(id, value, attribs) | |||
TextBoxExt = "<input type='text' id='" & Encode(id) & "' name='" & Encode(id) & "' value='" & Encode(value) & "' " & HtmlAttribs(attribs) & " >" & vbCR | |||
End Function | |||
Public Function TextArea(id, value, rows, cols) | |||
TextArea = TextAreaExt(id, value, rows, cols, empty) | |||
End Function | |||
Public Function TextAreaExt(id, value, rows, cols, attribs) | |||
TextAreaExt = "<textarea id='" & Encode(id) & "' name='" & Encode(id) & "' cols='" & Encode(cols) & "' rows='" & Encode(rows) & "' " & HtmlAttribs(attribs) & " >" &_ | |||
Encode(value) & "</textarea>" & vbCR | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'If list is a recordset then option_value_field and option_text_field are required. | |||
'If list is an array the method assumes it is a KVArray and those parameters are ignored. | |||
Public Function DropDownList(id, selected_value, list, option_value_field, option_text_field) | |||
DropDownList = DropDownListExt(id, selected_value, list, option_value_field, option_text_field, empty) | |||
End Function | |||
Public Function DropDownListExt(id, selected_value, list, option_value_field, option_text_field, attribs) | |||
If IsNull(selected_value) then | |||
selected_value = "" | |||
Else | |||
selected_value = CStr(selected_value) | |||
End If | |||
dim item, options, opt_val, opt_txt | |||
options = "<option value=''>" ' first value is "non-selected" blank state | |||
select case typename(list) | |||
case "Recordset" | |||
do until list.EOF | |||
If IsNull(list(option_value_field)) then | |||
opt_val = "" | |||
Else | |||
opt_val = CStr(list(option_value_field)) | |||
End If | |||
opt_txt = list(option_text_field) | |||
If Not IsNull(opt_val) And Not IsEmpty(opt_val) then | |||
options = options & "<option value='" & Encode(opt_val) & "' " & Choice((CStr(opt_val) = CStr(selected_value)), "selected='selected'", "") & ">" & Encode(opt_txt) & "</option>" & vbCR | |||
End If | |||
list.MoveNext | |||
loop | |||
case "Variant()" 'assumes KVArray | |||
dim i | |||
for i = 0 to ubound(list) step 2 | |||
KeyVal list, i, opt_val, opt_txt | |||
options = options & "<option value='" & Encode(opt_val) & "' " & Choice((CStr(opt_val) = CStr(selected_value)), "selected='selected'", "") & ">" & Encode(opt_txt) & "</option>" & vbCR | |||
next | |||
end select | |||
DropDownListExt = "<select id='" & Encode(id) & "' name='" & Encode(id) & "' " & HtmlAttribs(attribs) & " >" & vbCR & options & "</select>" & vbCR | |||
End Function | |||
Public Function Checkbox(id, value) | |||
Checkbox = CheckboxExt(id, value, empty) | |||
End Function | |||
Public Function CheckboxExt(id, value, attribs) | |||
CheckBoxExt = "<input type='checkbox' id='" & Encode(id) & "' name='" & Encode(id) & "' " & Choice( (value = 1) or (value = true) or (LCase(value) = "true") or (LCase(value) = "on"), "checked='checked'", "") & " " & HtmlAttribs(attribs) & ">" & vbCR | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Button text IS NOT ENCODED! As with LinkTo, this allows use of Bootstrap icons and other arbitrary HTML in the | |||
'button. If you need to HTMLEncode the text you MUST do it yourself! | |||
Public Function SubmitButton(text) | |||
SubmitButton = "<button type='submit' class='btn'>" & text & "</button>" & vbCR | |||
End Function | |||
Public Function Button(button_type, text, class_name) | |||
Button = "<button type='" & Encode(button_type) & "' class='btn " & Encode(class_name) & "'>" & text & "</button>" & vbCR | |||
End Function | |||
Public Function ButtonExt(button_type, text, attribs_array) | |||
ButtonExt = "<button type='" & Encode(button_type) & "' " & HtmlAttribs(attribs_array) & ">" & text & "</button>" & vbCR | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function Tag(Tag_name, attribs_array) | |||
Tag = "<" & Encode(tag_name) & " " & HtmlAttribs(attribs_array) & ">" | |||
End Function | |||
Public Function Tag_(Tag_name) | |||
Tag_ = "</" & Encode(tag_name) & ">" | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Function HtmlAttribs(attribs) | |||
dim result : result = "" | |||
if not IsEmpty(attribs) then | |||
if IsArray(attribs) then | |||
dim idx | |||
for idx = lbound(attribs) to ubound(attribs) step 2 | |||
result = result & " " & HtmlAttrib(attribs, idx) & " " | |||
next | |||
else ' assume string or string-like default value | |||
result = attribs | |||
end if | |||
end if | |||
HtmlAttribs = result | |||
End Function | |||
Public Function HtmlAttrib(attribs_array, key_idx) | |||
dim key, val | |||
KeyVal attribs_array, key_idx, key, val | |||
HtmlAttrib = Encode(key) & "='" & Encode(val) & "'" | |||
End Function | |||
End Class | |||
dim HTML_Helper__Singleton : set HTML_Helper__Singleton = Nothing | |||
Function HTML() | |||
if HTML_Helper__Singleton Is Nothing then | |||
set HTML_Helper__Singleton = new HTML_Helper_Class | |||
End if | |||
set HTML = HTML_Helper__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,77 @@ | |||
<% | |||
'======================================================================================================================= | |||
' HTML SECURITY HELPER | |||
'======================================================================================================================= | |||
Class HTML_Security_Helper_Class | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Uses Scriptlet.TypeLib to generate a GUID. There may be a better/faster way than this to generate a nonce. | |||
Public Function Nonce() | |||
dim TL : set TL = CreateObject("Scriptlet.TypeLib") | |||
Nonce = Left(CStr(TL.Guid), 38) 'avoids issue w/ strings appended after this token not being displayed on screen, MSFT bug | |||
set TL = Nothing | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Name is probably the combined ControllerName and ActionName of the form generator by convention | |||
Public Sub SetAntiCSRFToken(name) | |||
Session(name & ".anti_csrf_token") = Nonce() | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Returns the CSRF token nonce from the session corresponding to the passed name | |||
Public Function GetAntiCSRFToken(name) | |||
dim token : token = Session(name & ".anti_csrf_token") | |||
If Len(token) = 0 then | |||
SetAntiCSRFToken name | |||
End If | |||
GetAntiCSRFToken = token | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Removes the current CSRF token nonce for the passed name | |||
Public Sub ClearAntiCSRFToken(name) | |||
Session.Contents.Remove(name & ".anti_csrf_token") | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Returns true if passed nonce matches the stored CSRF token nonce for the specified name, false if not | |||
Public Function IsValidAntiCSRFToken(name, nonce) | |||
IsValidAntiCSRFToken = (GetAntiCSRFToken(name) = nonce) | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'If an invalid CSRF nonce is passed, sets the flash and redirects using the appropriate MVC.Redirect* method. | |||
'If a valid CSRF nonce is passed, clears it from the cache to reset the state to the beginning. | |||
Public Sub OnInvalidAntiCSRFTokenRedirectToAction(token_name, token, action_name) | |||
OnInvalidAntiCSRFTokenRedirectToExt token_name, token, MVC.ControllerName, action_name, empty | |||
End Sub | |||
Public Sub OnInvalidAntiCSRFTokenRedirectToActionExt(token_name, token, action_name, params) | |||
OnInvalidAntiCSRFTokenRedirectToExt token_name, token, MVC.ControllerName, action_name, params | |||
End Sub | |||
Public Sub OnInvalidAntiCSRFTokenRedirectTo(token_name, token, controller_name, action_name) | |||
OnInvalidAntiCSRFTokenRedirectToExt token_name, token, controller_name, action_name | |||
End Sub | |||
Public Sub OnInvalidAntiCSRFTokenRedirectToExt(token_name, token, controller_name, action_name, params) | |||
If IsValidAntiCSRFToken(token_name, token) then | |||
ClearAntiCSRFToken token_name | |||
Else | |||
ClearAntiCSRFToken token_name | |||
Flash.AddError "Invalid form state. Please try again." | |||
MVC.RedirectToExt controller_name, action_name, params | |||
End If | |||
End Sub | |||
End Class | |||
dim HTML_Security_Helper__Singleton | |||
Function HTMLSecurity() | |||
If IsEmpty(HTML_Security_Helper__Singleton) Then | |||
set HTML_Security_Helper__Singleton = new HTML_Security_Helper_Class | |||
End If | |||
set HTMLSecurity = HTML_Security_Helper__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,361 @@ | |||
<% | |||
'======================================================================================================================= | |||
' IO Helpers | |||
'======================================================================================================================= | |||
Sub put(v) | |||
Select Case typename(v) | |||
Case "LinkedList_Class" : response.write join(v.TO_Array, ", ") | |||
Case "DynamicArray_Class" : response.write JoinList(v) | |||
Case "Variant()" : response.write join(v, ", ") | |||
Case else : response.write v | |||
End Select | |||
End Sub | |||
Sub put_ | |||
put "<br>" | |||
End Sub | |||
Sub putl(v) | |||
put v | |||
put_ | |||
End Sub | |||
'accepts anything that can have an iterator, including lists, arrays, and recordsets | |||
Sub putlist(col, prefix, suffix) | |||
dim it : set it = IteratorFor(col) | |||
Do While it.HasNext | |||
put prefix & it.GetNext & suffix | |||
Loop | |||
End Sub | |||
'same as join() for arrays, but for any arbitrary collection | |||
Function JoinList(col) | |||
dim s : s = "" | |||
dim it : set it = IteratorFor(col) | |||
Do While it.HasNext | |||
s = s & ", " | |||
Loop | |||
JoinList = Left(s, Len(s) - 2) | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Wrapper for Server.HTMLEncode() -- makes it easier on the eyes when reading the HTML code | |||
Function H(s) | |||
If Not IsEmpty(s) and Not IsNull(s) then | |||
H = Server.HTMLEncode(s) | |||
Else | |||
H = "" | |||
End If | |||
End Function | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
'allows tracing of output on demand without interfering with layout | |||
Sub trace(s) | |||
comment s | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
'outputs an HTML comment, useful for tracing etc | |||
Sub Comment(text) | |||
response.write vbcrlf & vbcrlf & "<!--" & vbcrlf & H(text) & vbcrlf & "-->" & vbcrlf & vbcrlf | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
'pseudo-design-by-contract capability, allows strong-typing of methods and views | |||
Sub ExpectType(obj_type, obj) | |||
if typename(obj) <> obj_type then Err.Raise 1, "lib.Helpers:ExpectType", "View expected object of type '" & obj_type & "' but received type '" & typename(obj) & "'." | |||
End Sub | |||
'======================================================================================================================= | |||
' Dump* functions for dumping variables, objects, lists, etc for debugging purposes | |||
'======================================================================================================================= | |||
Class DataDumper_Class | |||
Public Sub Dump(V) | |||
put "<pre>" | |||
DumpIt V | |||
put "</pre>" | |||
End Sub | |||
Private m_indent | |||
Private Sub Indent | |||
m_indent = m_indent + 1 | |||
'putl "INDENT: " & m_indent | |||
'puti m_indent | |||
'put_ | |||
End Sub | |||
Private Sub Dedent | |||
m_indent = m_indent - 1 | |||
'putl "INDENT: " & m_indent | |||
End Sub | |||
Private Sub Class_Initialize | |||
m_indent = -1 'first indent takes it to 0 | |||
End Sub | |||
'prepends indents | |||
Private Sub puti(v) | |||
put Spaces(m_indent) & v | |||
End Sub | |||
Private Sub DumpIt(V) | |||
If Typename(V) = "LinkedList_Class" then | |||
DumpList V | |||
ElseIf Instr(Typename(V), "_Class") > 0 then | |||
DumpClass V | |||
ElseIf Typename(V) = "Variant()" then | |||
DumpArray V | |||
ElseIf Typename(V) = "Recordset" then | |||
DumpRecordset V | |||
Else | |||
put "«" & H(V) & "»" | |||
End If | |||
End Sub | |||
Private Sub DumpList(V) | |||
Indent | |||
dim it : set it = V.Iterator | |||
dim item | |||
dim i : i = 1 | |||
put_ | |||
puti "[List:" & vbCR | |||
While it.HasNext | |||
Indent | |||
set item = it.GetNext() | |||
puti i & " => " | |||
DumpIt item | |||
put_ | |||
Dedent | |||
i = i + 1 | |||
Wend | |||
puti "]" | |||
Dedent | |||
End Sub | |||
Private Sub DumpArray(V) | |||
Indent | |||
dim i | |||
put_ | |||
puti "[Array:" & vbCR | |||
Indent | |||
For i = 0 to UBound(V) | |||
puti i & " => " | |||
DumpIt V(i) | |||
put_ | |||
Next | |||
Dedent | |||
puti "]" | |||
Dedent | |||
End Sub | |||
Private Sub DumpClass(C) | |||
Indent | |||
dim i | |||
put_ | |||
puti "{" & Typename(C) & ": " & vbCR | |||
Indent | |||
On Error Resume Next | |||
If Ubound(C.Class_Get_Properties) > 0 then | |||
dim property_name, the_property | |||
For i = 0 to UBound(C.Class_Get_Properties) | |||
property_name = C.Class_Get_Properties(i) | |||
Execute "Assign the_property, C." & C.Class_Get_Properties(i) | |||
'put "property_name: " & property_name & " (" & typename(the_property) & ")" & vbCR | |||
If typename(the_property) = "LinkedList_Class" then | |||
puti " " & property_name & " : LinkedList_Class => " | |||
DumpList(the_property) | |||
ElseIf InStr(typename(the_property), "_Class") then | |||
puti " " & property_name & " : " & typename(the_property) & " => " | |||
DumpClass(the_property) | |||
Else | |||
puti " " & property_name & " : " & typename(the_property) & " => " '& Eval("C." & property_name) | |||
DumpIt(the_property) | |||
If i <> UBound(C.Class_Get_Properties) then put ", " | |||
put vbCR | |||
End If | |||
Next | |||
Else | |||
End If | |||
On Error Goto 0 | |||
Dedent | |||
puti "}" & vbCR & vbCR | |||
Dedent | |||
End Sub | |||
Sub DumpRecordset(R) | |||
Indent | |||
dim field | |||
put "<table border='1' cellpadding='5' >" | |||
put "<tr style='background-color: #333; color: white'>" | |||
For each field in R.Fields | |||
put "<th>" & field.Name & "</th>" | |||
Next | |||
put "</tr>" | |||
Do until R.EOF | |||
put "<tr style='background-color: white'>" | |||
For each field in R.Fields | |||
put "<td>" & H(R(field.Name)) & "</td>" | |||
Next | |||
put "</tr>" | |||
R.MoveNext | |||
Loop | |||
put "</table>" | |||
Dedent | |||
End Sub | |||
Private Function Spaces(num) | |||
dim s : s = "" | |||
dim i | |||
For i = 1 to num | |||
s = s & " " | |||
Next | |||
Spaces = s | |||
End Function | |||
End Class | |||
dim DataDumper_Class__Singleton | |||
Sub Dump(V) | |||
If IsEmpty(DataDumper_Class__Singleton) then | |||
set DataDumper_Class__Singleton = new DataDumper_Class | |||
End If | |||
DataDumper_Class__Singleton.Dump V | |||
End Sub | |||
'======================================================================================================================= | |||
' Strings | |||
'======================================================================================================================= | |||
'Capitalizes first word of the_string, leaves rest as-is | |||
Function Capitalize(the_string) | |||
Capitalize = ucase(left(the_string, 1)) & mid(the_string, 2) | |||
End Function | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Function Wrap(s, prefix, suffix) | |||
Wrap = prefix & s & suffix | |||
End Function | |||
'======================================================================================================================= | |||
' Logic (i.e. decisions, searches, etc) | |||
'======================================================================================================================= | |||
'TODO: Expand this to accept arbitrary sets, e.g. string, recordset, dictionary, list, etc. | |||
Function Contains(data, value) | |||
Contains = false | |||
dim idx | |||
select case typename(data) | |||
case "String" | |||
Contains = Choice(instr(data, value) > 0, true, false) | |||
case "Variant()" | |||
for idx = lbound(data) to ubound(data) | |||
if value = data(idx) then | |||
Contains = true | |||
exit for | |||
end if | |||
next | |||
case else | |||
Err.Raise 9, "mvc.helpers#Contains", "Unexpected type 'data', received: " & typename(data) | |||
end select | |||
End Function | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
'Boolean type checkers | |||
'Don't forget IsArray is built-in! | |||
Function IsString(value) | |||
IsString = Choice(typename(value) = "String", true, false) | |||
End Function | |||
Function IsDict(value) | |||
IsDict = Choice(typename(value) = "Dictionary", true, false) | |||
End Function | |||
Function IsRecordset(value) | |||
IsRecordset = Choice(typename(value) = "Recordset", true, false) | |||
End Function | |||
Function IsLinkedList(value) | |||
IsLinkedList = Choice(typename(value) = "LinkedList_Class", true, false) | |||
End Function | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Sub Destroy(o) | |||
if isobject(o) then | |||
if not o is nothing then | |||
on error resume next | |||
o.close | |||
on error goto 0 | |||
set o = nothing | |||
end if | |||
end if | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Sub Quit | |||
response.end | |||
End Sub | |||
Sub Die(msg) | |||
put "<span style='color: #f00'>" & msg & "</span>" | |||
Quit | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Sub DumpSession | |||
put "SESSION" & "<br>" | |||
dim session_item | |||
for each session_item in session.contents | |||
put "<b>" & session_item & "</b> : " & session.contents(session_item) & "<br>" | |||
next | |||
End Sub | |||
'======================================================================================================================= | |||
' Adapted from Tolerable library | |||
'======================================================================================================================= | |||
' This subroutine allows us to ignore the difference | |||
' between object and primitive assignments. This is | |||
' essential for many parts of the engine. | |||
Public Sub Assign(ByRef var, ByVal val) | |||
If IsObject(val) Then | |||
Set var = val | |||
Else | |||
var = val | |||
End If | |||
End Sub | |||
' This is similar to the ? : operator of other languages. | |||
' Unfortunately, both the if_true and if_false "branches" | |||
' will be evalauted before the condition is even checked. So, | |||
' you'll only want to use this for simple expressions. | |||
Public Function Choice(ByVal cond, ByVal if_true, ByVal if_false) | |||
If cond Then | |||
Assign Choice, if_true | |||
Else | |||
Assign Choice, if_false | |||
End If | |||
End Function | |||
' Allows single-quotes to be used in place of double-quotes. | |||
' Basically, this is a cheap trick that can make it easier | |||
' to specify Lambdas. | |||
Public Function Q(ByVal input) | |||
Q = Replace(input, "'", """") | |||
End Function | |||
%> |
@@ -0,0 +1,168 @@ | |||
<% | |||
Response.ExpiresAbsolute = "2000-01-01" | |||
Response.AddHeader "pragma", "no-cache" | |||
Response.AddHeader "cache-control", "private, no-cache, must-revalidate" | |||
'======================================================================================================================= | |||
' MVC Dispatcher | |||
'======================================================================================================================= | |||
Class MVC_Dispatcher_Class | |||
Private m_controller_name | |||
Private m_action_name | |||
Private m_default_action_name | |||
Private m_action_params | |||
Private m_controller_instance | |||
Private m_is_partial | |||
Private Sub Class_initialize | |||
m_default_action_name = "Index" | |||
SetControllerActionNames | |||
'SetActionParams | |||
End Sub | |||
Public Property Get ControllerName | |||
ControllerName = m_controller_name | |||
end Property | |||
Public Property Get ActionName | |||
ActionName = m_action_name | |||
end Property | |||
Public Property Get IsPartial | |||
IsPartial = m_is_partial | |||
End Property | |||
'Public Property Get ActionParams | |||
' if IsEmpty(m_action_params) then set m_action_params = Server.CreateObject("Scripting.Dictionary") | |||
' set ActionParams = m_action_params | |||
'end Property | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Instantiates the controller and executes the requested action on the controller. | |||
Public Sub Dispatch | |||
dim class_name : class_name = m_controller_name & "Controller" | |||
'set the global controller reference | |||
executeglobal "dim Controller : set Controller = new " & class_name | |||
If Request.Querystring("_P").Count = 1 then ' = 1 Or Request.Querystring("_P") = "true" then | |||
m_is_partial = true | |||
Else | |||
m_is_partial = false | |||
End If | |||
If Not IsPartial then | |||
%> | |||
<!--#include file="../App/Views/Shared/layout.header.asp"--> | |||
<% | |||
End If | |||
ExecuteAction ActionName | |||
If Not IsPartial then | |||
%> | |||
<!--#include file="../App/Views/Shared/layout.footer.asp"--> | |||
<% | |||
End If | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Executes the requested action on the current already-instantiated controller | |||
Private Sub ExecuteAction(action_name) | |||
' no longer want to pass Request.Form as a parameter to actions -- allows actions to be called any way, more flexibility | |||
Execute "Controller." & action_name | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' Ensures an action request comes in via HTTP POST only. Raises error if not. | |||
Public Sub RequirePost | |||
If Request.Form.Count = 0 Then Err.Raise 1, "MVC_Helper_Class:RequirePost", "Action only responds to POST requests." | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub RedirectTo(controller_name, action_name) | |||
RedirectToExt controller_name, action_name, empty | |||
End Sub | |||
' Redirects the browser to the specified action on the specified controller with the specified querystring parameters. | |||
' params is a KVArray of querystring parameters. | |||
Public Sub RedirectToExt(controller_name, action_name, params) | |||
Response.Redirect Routes.UrlTo(controller_name, action_name, params) | |||
End Sub | |||
' Shortcut for RedirectToActionExt that does not require passing a parameters argument. | |||
Public Sub RedirectToAction(ByVal action_name) | |||
RedirectToActionExt action_name, empty | |||
End Sub | |||
' Redirects the browser to the specified action in the current controller, passing the included parameters. | |||
' params is a KVArray of querystring parameters. | |||
Public Sub RedirectToActionExt(ByVal action_name, ByVal params) | |||
RedirectToExt ControllerName, action_name, params | |||
End Sub | |||
' Redirects to the specified action using a form POST. | |||
Public Sub RedirectToActionPOST(action_name) | |||
RedirectToActionExtPOST action_name, empty | |||
End Sub | |||
' Redirects to the specified action name on the current controller using a form post | |||
Public Sub RedirectToActionExtPOST(action_name, params) | |||
put "<form id='mvc_redirect_to_action_post' action='" & Routes.UrlTo(ControllerName, action_name, empty) & "' method='POST'>" | |||
put "<input type='hidden' name='mvc_redirect_to_action_post_flag' value='1'>" | |||
if Not IsEmpty(params) then | |||
dim i, key, val | |||
for i = 0 to ubound(params) step 2 | |||
KeyVal params, i, key, val | |||
put "<input type='hidden' name='" & key & "' value='" & val & "'>" | |||
next | |||
end if | |||
put "</form>" | |||
put "<script type='text/javascript'>" | |||
put "$('#mvc_redirect_to_action_post').submit();" | |||
put "</script>" | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' PRIVATE | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Private Sub SetControllerActionNames | |||
dim full_path : full_path = request.servervariables("path_info") | |||
dim part_path : part_path = split(full_path, Routes.ControllersUrl)(1) | |||
dim part_path_split : part_path_split = split(part_path, "/") | |||
m_controller_name = part_path_split(0) | |||
m_action_name = Choice(request("_A") <> "", request("_A"), m_default_action_name) | |||
End Sub | |||
' This is deprecated to avoid creating a Dictionary object with every request. | |||
' Hasn't been used in forever anyway. | |||
'Private Sub SetActionParams | |||
' dim key, val | |||
' 'set m_action_params = Server.CreateObject("scripting.dictionary") | |||
' for each key in request.querystring | |||
' val = request.querystring(key) | |||
' 'ignore service keys | |||
' if instr(1, "_A", key, 1) = 0 then | |||
' ActionParams.add key, CStr(val) | |||
' end if | |||
' next | |||
'End Sub | |||
end Class | |||
dim MVC_Dispatcher_Class__Singleton | |||
Function MVC() | |||
if IsEmpty(MVC_Dispatcher_Class__Singleton) then | |||
set MVC_Dispatcher_Class__Singleton = new MVC_Dispatcher_Class | |||
end if | |||
set MVC = MVC_Dispatcher_Class__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,84 @@ | |||
<% | |||
'======================================================================================================================= | |||
' ROUTING HELPER | |||
'======================================================================================================================= | |||
Class Route_Helper_Class | |||
Public Property Get NoCacheToken | |||
NoCacheToken = Timer() * 100 | |||
End Property | |||
Public Sub Initialize(app_url) | |||
m_app_url = app_url | |||
m_content_url = m_app_url & "Content/" | |||
m_stylesheets_url = m_content_url & "Styles/" | |||
m_controllers_url = m_app_url & "Controllers/" | |||
End Sub | |||
Public Property Get AppURL | |||
AppURL = m_app_url | |||
end Property | |||
Public Property Get ContentURL | |||
ContentURL = m_content_url | |||
end Property | |||
Public Property Get ControllersURL | |||
ControllersUrl = m_controllers_url | |||
end Property | |||
Public Property Get StylesheetsURL | |||
StylesheetsURL = m_stylesheets_url | |||
end Property | |||
'' | |||
' Generates a URL to the specified controller + action combo, with querystring parameters appended if included. | |||
' | |||
' @param controller_name String name of the controller | |||
' @param action_name String name of the controller action | |||
' @param params_array KV Array key/value pair array, to be converted to &key1=val1&key2=val2&...&keyn=valn | |||
' @returns | |||
'' | |||
Public Function UrlTo(controller_name, action_name, params_array) | |||
dim qs : qs = TO_Querystring(params_array) | |||
if len(qs) > 0 then qs = "&" & qs | |||
UrlTo = Me.ControllersURL & controller_name & "/" & controller_name & "Controller.asp?_A=" & action_name & qs & "&_NC=" & NoCacheToken | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' PRIVATE | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Private m_app_url | |||
Private m_content_url | |||
Private m_stylesheets_url | |||
Private m_controllers_url | |||
Private Function TO_Querystring(the_array) | |||
dim result : result = "" | |||
if not isempty(the_array) then | |||
dim idx | |||
for idx = lbound(the_array) to ubound(the_array) step 2 | |||
result = result & GetParam(the_array, idx) | |||
'append & between parameters, but not on the last parameter | |||
if not (idx = ubound(the_array) - 1) then result = result & "&" | |||
next | |||
end if | |||
TO_Querystring = result | |||
End Function | |||
Private Function GetParam(params_array, key_idx) | |||
dim key, val | |||
KeyVal params_array, key_idx, key, val | |||
GetParam = key & "=" & val | |||
End Function | |||
end class | |||
dim Route_Helper__Singleton : set Route_Helper__Singleton = Nothing | |||
Function Routes() | |||
if Route_Helper__Singleton is Nothing then | |||
set Route_Helper__Singleton = new Route_Helper_Class | |||
end if | |||
set Routes = Route_Helper__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,73 @@ | |||
<% | |||
'======================================================================================================================= | |||
' StringBuilder Class | |||
'======================================================================================================================= | |||
Class StringBuilder_Class | |||
dim m_array | |||
dim m_array_size | |||
dim m_cur_pos | |||
Private Sub Class_Initialize | |||
m_array = Array | |||
m_array_size = 100 | |||
redim m_array(m_array_size) | |||
m_cur_pos = -1 | |||
End Sub | |||
Private Sub Extend | |||
m_array_size = m_array_size + 100 | |||
redim preserve m_array(m_array_size) | |||
End Sub | |||
Public Sub Add(s) | |||
m_cur_pos = m_cur_pos + 1 | |||
m_array(m_cur_pos) = s | |||
if m_cur_pos = m_array_size then Extend | |||
End Sub | |||
Public Function [Get](delim) | |||
'have to create a new array containing only the slots actually used, otherwise Join() happily adds delim | |||
'for *every* slot even the unused ones... | |||
dim new_array : new_array = Array() | |||
redim new_array(m_cur_pos) | |||
dim i | |||
for i = 0 to m_cur_pos | |||
new_array(i) = m_array(i) | |||
next | |||
[Get] = Join(new_array, delim) | |||
End Function | |||
Public Default Property Get TO_String | |||
TO_String = Join(m_array, "") | |||
End Property | |||
End Class | |||
Function StringBuilder() | |||
set StringBuilder = new StringBuilder_Class | |||
End Function | |||
'======================================================================================================================= | |||
' Misc | |||
'======================================================================================================================= | |||
Function Excerpt(text, length) | |||
Excerpt = Left(text, length) & " ..." | |||
End Function | |||
Function IsBlank(text) | |||
If IsObject(text) then | |||
If text Is Nothing then | |||
IsBlank = true | |||
Else | |||
IsBlank = false | |||
End If | |||
Else | |||
If IsEmpty(text) or IsNull(text) or Len(text) = 0 then | |||
IsBlank = true | |||
Else | |||
IsBlank = false | |||
End If | |||
End If | |||
End Function | |||
%> |
@@ -0,0 +1,250 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Validation Classes | |||
'======================================================================================================================= | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
' Exists Validation | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class ExistsValidation_Class | |||
Private m_instance | |||
Private m_field_name | |||
Private m_message | |||
Private m_ok | |||
Public Function Initialize(instance, field_name, message) | |||
set m_instance = instance | |||
m_field_name = field_name | |||
m_message = message | |||
m_ok = true | |||
set Initialize = Me | |||
End Function | |||
Public Sub Check | |||
If Len(eval("m_instance." & m_field_name)) = 0 then | |||
m_ok = false | |||
End If | |||
End Sub | |||
Public Property Get OK | |||
OK = m_ok | |||
End Property | |||
Public Property Get Message | |||
Message = m_message | |||
End Property | |||
End Class | |||
Sub ValidateExists(instance, field_name, message) | |||
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class | |||
instance.Validator.AddValidation new ExistsValidation_Class.Initialize(instance, field_name, message) | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
' Minimum Length Validation | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class MinLengthValidation_Class | |||
Private m_instance | |||
Private m_field_name | |||
Private m_size | |||
Private m_message | |||
Private m_ok | |||
Public Function Initialize(instance, field_name, size, message) | |||
set m_instance = instance | |||
m_field_name = field_name | |||
m_size = size | |||
m_message = message | |||
m_ok = true | |||
set Initialize = Me | |||
End Function | |||
Public Sub Check | |||
If Len(eval("m_instance." & m_field_name)) < m_size then m_ok = false | |||
End Sub | |||
Public Property Get OK | |||
OK = m_ok | |||
End Property | |||
Public Property Get Message | |||
Message = m_message | |||
End Property | |||
End Class | |||
Sub ValidateMinLength(instance, field_name, size, message) | |||
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class | |||
instance.Validator.AddValidation new MinLengthValidation_Class.Initialize(instance, field_name, size, message) | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
' Max Length Validation | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class MaxLengthValidation_Class | |||
Private m_instance | |||
Private m_field_name | |||
Private m_size | |||
Private m_message | |||
Private m_ok | |||
Public Function Initialize(instance, field_name, size, message) | |||
set m_instance = instance | |||
m_field_name = field_name | |||
m_size = size | |||
m_message = message | |||
m_ok = true | |||
set Initialize = Me | |||
End Function | |||
Public Sub Check | |||
If Len(eval("m_instance." & m_field_name)) > m_size then m_ok = false | |||
End Sub | |||
Public Property Get OK | |||
OK = m_ok | |||
End Property | |||
Public Property Get Message | |||
Message = m_message | |||
End Property | |||
End Class | |||
Sub ValidateMaxLength(instance, field_name, size, message) | |||
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class | |||
instance.Validator.AddValidation new MaxLengthValidation_Class.Initialize(instance, field_name, size, message) | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
' Numeric Validation | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class NumericValidation_Class | |||
Private m_instance | |||
Private m_field_name | |||
Private m_message | |||
Private m_ok | |||
Public Function Initialize(instance, field_name, message) | |||
set m_instance = instance | |||
m_field_name = field_name | |||
m_message = message | |||
m_ok = true | |||
set Initialize = Me | |||
End Function | |||
Public Sub Check | |||
If Not IsNumeric(eval("m_instance." & m_field_name)) then m_ok = false | |||
End Sub | |||
Public Property Get OK | |||
OK = m_ok | |||
End Property | |||
Public Property Get Message | |||
Message = m_message | |||
End Property | |||
End Class | |||
Sub ValidateNumeric(instance, field_name, message) | |||
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class | |||
instance.Validator.AddValidation new NumericValidation_Class.Initialize(instance, field_name, message) | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
' Regular Expression Pattern Validation | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class PatternValidation_Class | |||
Private m_instance | |||
Private m_field_name | |||
Private m_pattern | |||
Private m_message | |||
Private m_ok | |||
Public Function Initialize(instance, field_name, pattern, message) | |||
set m_instance = instance | |||
m_field_name = field_name | |||
m_pattern = pattern | |||
m_message = message | |||
m_ok = true | |||
set Initialize = Me | |||
End Function | |||
Public Sub Check | |||
dim re : set re = new RegExp | |||
With re | |||
.Pattern = m_pattern | |||
.Global = true | |||
.IgnoreCase = true | |||
End With | |||
dim matches : set matches = re.Execute(eval("m_instance." & m_field_name)) | |||
if matches.Count = 0 then | |||
m_ok = false | |||
end if | |||
End Sub | |||
Public Property Get OK | |||
OK = m_ok | |||
End Property | |||
Public Property Get Message | |||
Message = m_message | |||
End Property | |||
End Class | |||
Sub ValidatePattern(instance, field_name, pattern, message) | |||
if not IsObject(instance.Validator) then set instance.Validator = new Validator_Class | |||
instance.Validator.AddValidation new PatternValidation_Class.Initialize(instance, field_name, pattern, message) | |||
End Sub | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
' Validator Class | |||
' This class is not intended to be used directly. Models should use the Validate* subs instead. | |||
'----------------------------------------------------------------------------------------------------------------------- | |||
Class Validator_Class | |||
Private m_validations | |||
Private m_errors | |||
Private Sub Class_Initialize | |||
m_validations = Array() | |||
redim m_validations(-1) | |||
m_errors = Array() | |||
redim m_errors(-1) | |||
End Sub | |||
Public Property Get Errors | |||
Errors = m_errors | |||
End Property | |||
Public Sub AddValidation(validation) | |||
dim n : n = ubound(m_validations) + 1 | |||
redim preserve m_validations(n) | |||
set m_validations(n) = validation | |||
End Sub | |||
Public Sub Validate | |||
dim n : n = ubound(m_validations) | |||
dim i, V | |||
for i = 0 to n | |||
set V = m_validations(i) | |||
V.Check | |||
if not V.OK then | |||
AddError V.Message | |||
end if | |||
next | |||
End Sub | |||
Public Property Get HasErrors | |||
HasErrors = (ubound(m_errors) > -1) | |||
End Property | |||
'Public to allow other errors to be added by the controller for circumstances not accounted for by the validators | |||
Public Sub AddError(msg) | |||
redim preserve m_errors(ubound(m_errors) + 1) | |||
m_errors(ubound(m_errors)) = msg | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,15 @@ | |||
<!--#include file="lib.Strings.asp"--> | |||
<!--#include file="lib.HTMLSecurity.asp"--> | |||
<!--#include file="lib.HTML.asp"--> | |||
<!--#include file="lib.Collections.asp"--> | |||
<!--#include file="lib.Routes.asp"--> | |||
<!--#include file="lib.MVC.asp"--> | |||
<!--#include file="lib.Automapper.asp"--> | |||
<!--#include file="lib.Data.asp"--> | |||
<!--#include file="lib.Helpers.asp"--> | |||
<!--#include file="lib.Validations.asp"--> | |||
<!--#include file="lib.Flash.asp"--> | |||
<!--#include file="lib.Bootstrap.asp"--> | |||
<!--#include file="lib.Enumerable.asp"--> | |||
<!--#include file="lib.FormCache.asp"--> | |||
<!--#include file="lib.json.asp"--> |
@@ -0,0 +1,281 @@ | |||
<% | |||
'January 2021 - Version 1.1 by Gerrit van Kuipers | |||
Class aspJSON | |||
Public data | |||
Private p_JSONstring | |||
Private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound | |||
Private Sub Class_Initialize() | |||
Set data = Collection() | |||
Set aj_RegExp = New regexp | |||
aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}" | |||
aj_RegExp.Global = False | |||
aj_RegExp.IgnoreCase = True | |||
aj_RegExp.Multiline = True | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Set data = Nothing | |||
Set aj_RegExp = Nothing | |||
End Sub | |||
Public Sub loadJSON(inputsource) | |||
inputsource = aj_MultilineTrim(inputsource) | |||
If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load." | |||
Select Case Left(inputsource, 1) | |||
Case "{", "[" | |||
Case Else | |||
Set aj_XmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP") | |||
aj_XmlHttp.open "POST", inputsource, False | |||
aj_XmlHttp.setRequestHeader "Content-Type", "text/json" | |||
aj_XmlHttp.setRequestHeader "CharSet", "UTF-8" | |||
aj_XmlHttp.Send | |||
inputsource = aj_XmlHttp.responseText | |||
Set aj_XmlHttp = Nothing | |||
End Select | |||
p_JSONstring = CleanUpJSONstring(inputsource) | |||
aj_lines = Split(p_JSONstring, Chr(13) & Chr(10)) | |||
Dim level(99) | |||
aj_currentlevel = 1 | |||
Set level(aj_currentlevel) = data | |||
For Each aj_line In aj_lines | |||
aj_currentkey = "" | |||
aj_currentvalue = "" | |||
If Instr(aj_line, ":") > 0 Then | |||
aj_in_string = False | |||
aj_in_escape = False | |||
aj_colonfound = False | |||
For aj_i_tmp = 1 To Len(aj_line) | |||
If aj_in_escape Then | |||
aj_in_escape = False | |||
Else | |||
Select Case Mid(aj_line, aj_i_tmp, 1) | |||
Case """" | |||
aj_in_string = Not aj_in_string | |||
Case ":" | |||
If Not aj_in_escape And Not aj_in_string Then | |||
aj_currentkey = Left(aj_line, aj_i_tmp - 1) | |||
aj_currentvalue = Mid(aj_line, aj_i_tmp + 1) | |||
aj_colonfound = True | |||
Exit For | |||
End If | |||
Case "\" | |||
aj_in_escape = True | |||
End Select | |||
End If | |||
Next | |||
if aj_colonfound then | |||
aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """") | |||
If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, "" | |||
end if | |||
End If | |||
If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then | |||
If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count | |||
Set level(aj_currentlevel).Item(aj_currentkey) = Collection() | |||
Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey) | |||
aj_currentlevel = aj_currentlevel + 1 | |||
aj_currentkey = "" | |||
ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then | |||
aj_currentlevel = aj_currentlevel - 1 | |||
ElseIf Len(Trim(aj_line)) > 0 Then | |||
If Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line | |||
aj_currentvalue = getJSONValue(aj_currentvalue) | |||
If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count | |||
level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue | |||
End If | |||
Next | |||
End Sub | |||
Public Function Collection() | |||
Set Collection = Server.CreateObject("Scripting.Dictionary") | |||
End Function | |||
Public Function AddToCollection(dictobj) | |||
If TypeName(dictobj) <> "Dictionary" Then Err.Raise 1, "AddToCollection Error", "Not a collection." | |||
aj_newlabel = dictobj.Count | |||
dictobj.Add aj_newlabel, Collection() | |||
Set AddToCollection = dictobj.item(aj_newlabel) | |||
end function | |||
Private Function CleanUpJSONstring(aj_originalstring) | |||
aj_originalstring = Replace(aj_originalstring, Chr(13) & Chr(10), "") | |||
aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2) | |||
aj_in_string = False : aj_in_escape = False : aj_s_tmp = "" | |||
For aj_i_tmp = 1 To Len(aj_originalstring) | |||
aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1) | |||
If aj_in_escape Then | |||
aj_in_escape = False | |||
aj_s_tmp = aj_s_tmp & aj_char_tmp | |||
Else | |||
Select Case aj_char_tmp | |||
Case "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = True | |||
Case """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_string | |||
Case "{", "[" | |||
aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) | |||
Case "}", "]" | |||
aj_s_tmp = aj_s_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) & aj_char_tmp | |||
Case "," : aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) | |||
Case Else : aj_s_tmp = aj_s_tmp & aj_char_tmp | |||
End Select | |||
End If | |||
Next | |||
CleanUpJSONstring = "" | |||
aj_s_tmp = Split(aj_s_tmp, Chr(13) & Chr(10)) | |||
For Each aj_line_tmp In aj_s_tmp | |||
aj_line_tmp = Replace(Replace(aj_line_tmp, Chr(10), ""), Chr(13), "") | |||
CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10) | |||
Next | |||
End Function | |||
Private Function getJSONValue(ByVal val) | |||
val = Trim(val) | |||
If Left(val,1) = ":" Then val = Mid(val, 2) | |||
If Right(val,1) = "," Then val = Left(val, Len(val) - 1) | |||
val = Trim(val) | |||
Select Case val | |||
Case "true" : getJSONValue = True | |||
Case "false" : getJSONValue = False | |||
Case "null" : getJSONValue = Null | |||
Case Else | |||
If (Instr(val, """") = 0) Then | |||
If IsNumeric(val) Then | |||
getJSONValue = aj_ReadNumericValue(val) | |||
Else | |||
getJSONValue = val | |||
End If | |||
Else | |||
If Left(val,1) = """" Then val = Mid(val, 2) | |||
If Right(val,1) = """" Then val = Left(val, Len(val) - 1) | |||
getJSONValue = aj_JSONDecode(Trim(val)) | |||
End If | |||
End Select | |||
End Function | |||
Private JSONoutput_level | |||
Public Function JSONoutput() | |||
Dim wrap_dicttype, aj_label | |||
JSONoutput_level = 1 | |||
wrap_dicttype = "[]" | |||
For Each aj_label In data | |||
If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}" | |||
Next | |||
JSONoutput = Left(wrap_dicttype, 1) & Chr(13) & Chr(10) & GetDict(data) & Right(wrap_dicttype, 1) | |||
End Function | |||
Private Function GetDict(objDict) | |||
Dim aj_item, aj_keyvals, aj_label, aj_dicttype | |||
For Each aj_item In objDict | |||
Select Case TypeName(objDict.Item(aj_item)) | |||
Case "Dictionary" | |||
GetDict = GetDict & Space(JSONoutput_level * 4) | |||
aj_dicttype = "[]" | |||
For Each aj_label In objDict.Item(aj_item).Keys | |||
If Not aj_IsInt(aj_label) Then aj_dicttype = "{}" | |||
Next | |||
If aj_IsInt(aj_item) Then | |||
GetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10)) | |||
Else | |||
GetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10)) | |||
End If | |||
JSONoutput_level = JSONoutput_level + 1 | |||
aj_keyvals = objDict.Keys | |||
GetDict = GetDict & (GetSubDict(objDict.Item(aj_item)) & Space(JSONoutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10)) | |||
Case Else | |||
aj_keyvals = objDict.Keys | |||
GetDict = GetDict & (Space(JSONoutput_level * 4) & aj_InlineIf(aj_IsInt(aj_item), "", """" & aj_JSONEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10)) | |||
End Select | |||
Next | |||
End Function | |||
Private Function aj_IsInt(val) | |||
aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long") | |||
End Function | |||
Private Function GetSubDict(objSubDict) | |||
GetSubDict = GetDict(objSubDict) | |||
JSONoutput_level= JSONoutput_level -1 | |||
End Function | |||
Private Function WriteValue(ByVal val) | |||
Select Case TypeName(val) | |||
Case "Double", "Integer", "Long": WriteValue = replace(val, ",", ".") | |||
Case "Null" : WriteValue = "null" | |||
Case "Boolean" : WriteValue = aj_InlineIf(val, "true", "false") | |||
Case Else : WriteValue = """" & aj_JSONEncode(val) & """" | |||
End Select | |||
End Function | |||
Private Function aj_JSONEncode(ByVal val) | |||
val = Replace(val, "\", "\\") | |||
val = Replace(val, """", "\""") | |||
'val = Replace(val, "/", "\/") | |||
val = Replace(val, Chr(8), "\b") | |||
val = Replace(val, Chr(12), "\f") | |||
val = Replace(val, Chr(10), "\n") | |||
val = Replace(val, Chr(13), "\r") | |||
val = Replace(val, Chr(9), "\t") | |||
aj_JSONEncode = Trim(val) | |||
End Function | |||
Private Function aj_JSONDecode(ByVal val) | |||
val = Replace(val, "\""", """") | |||
val = Replace(val, "\\", "\") | |||
val = Replace(val, "\/", "/") | |||
val = Replace(val, "\b", Chr(8)) | |||
val = Replace(val, "\f", Chr(12)) | |||
val = Replace(val, "\n", Chr(10)) | |||
val = Replace(val, "\r", Chr(13)) | |||
val = Replace(val, "\t", Chr(9)) | |||
aj_JSONDecode = Trim(val) | |||
End Function | |||
Private Function aj_InlineIf(condition, returntrue, returnfalse) | |||
If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse | |||
End Function | |||
Private Function aj_Strip(ByVal val, stripper) | |||
If Left(val, 1) = stripper Then val = Mid(val, 2) | |||
If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1) | |||
aj_Strip = val | |||
End Function | |||
Private Function aj_MultilineTrim(TextData) | |||
aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1") | |||
End Function | |||
Private Function aj_Trim(val) | |||
aj_Trim = Trim(val) | |||
Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : Loop | |||
Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop | |||
aj_Trim = Trim(aj_Trim) | |||
End Function | |||
Private Function aj_ReadNumericValue(ByVal val) | |||
If Instr(val, ".") > 0 Then | |||
numdecimals = Len(val) - Instr(val, ".") | |||
val = Clng(Replace(val, ".", "")) | |||
val = val / (10 ^ numdecimals) | |||
aj_ReadNumericValue = val | |||
Else | |||
aj_ReadNumericValue = Clng(val) | |||
End If | |||
End Function | |||
End Class | |||
dim json_Class__Singleton | |||
Function json() | |||
if IsEmpty(json_Class__Singleton) then | |||
set json_Class__Singleton = new aspJSON | |||
end if | |||
set json = json_Class__Singleton | |||
End Function | |||
%> |
@@ -0,0 +1,38 @@ | |||
<% | |||
Class TCTest | |||
Public Function TestCaseNames() | |||
TestCaseNames = Array("test", "test2", "test3") | |||
End Function | |||
Public Sub SetUp() | |||
'Response.Write("SetUp<br>") | |||
End Sub | |||
Public Sub TearDown() | |||
'Response.Write("TearDown<br>") | |||
End Sub | |||
Public Sub test(oTestResult) | |||
'Response.Write("test<br>") | |||
'Err.Raise 5, "hello", "error" | |||
End Sub | |||
Public Sub test2(oTestResult) | |||
'Response.Write("test2<br>") | |||
oTestResult.Assert False, "Assert False!" | |||
oTestResult.AssertEquals 4, 4, "4 = 4, Should not fail!" | |||
oTestResult.AssertEquals 4, 5, "4 != 5, Should fail!" | |||
oTestResult.AssertNotEquals 5, 5, "AssertNotEquals(5, = 5) should fail!" | |||
oTestResult.AssertExists new TestResult, "new TestResult Should not fail!" | |||
oTestResult.AssertExists Nothing, "Nothing: Should not exist!" | |||
oTestResult.AssertExists 4, "4 Should exist?!" | |||
End Sub | |||
Public Sub test3(oTestResult) | |||
oTestResult.Assert True, "Success" | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,12 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!-- #include file="../include/ASPUnitRunner.asp"--> | |||
<!-- #include file="TCTest.asp"--> | |||
<% | |||
Dim oRunner | |||
Set oRunner = New UnitRunner | |||
oRunner.AddTestContainer New TCTest | |||
oRunner.Display() | |||
%> |
@@ -0,0 +1,335 @@ | |||
<% | |||
'******************************************************************** | |||
' Name: ASPUnit.asp | |||
' | |||
' Purpose: Contains the main ASPUnit classes | |||
'******************************************************************** | |||
Class TestSuite | |||
Private m_oTestCases | |||
Private Sub Class_Initialize() | |||
Set m_oTestCases = Server.CreateObject("Scripting.Dictionary") | |||
End Sub | |||
Private Sub Class_Terminate() | |||
Set m_oTestCases = Nothing | |||
End Sub | |||
Public Sub AddTestCase(oTestContainer, sTestMethod) | |||
Dim oTestCase | |||
Set oTestCase = New TestCase | |||
Set oTestCase.TestContainer = oTestContainer | |||
oTestCase.TestMethod = sTestMethod | |||
m_oTestCases.Add oTestCase, oTestCase | |||
End Sub | |||
Public Sub AddAllTestCases(oTestContainer) | |||
Dim oTestCase, sTestMethod | |||
For Each sTestMethod In oTestContainer.TestCaseNames() | |||
AddTestCase oTestContainer, sTestMethod | |||
Next | |||
End Sub | |||
Public Function Count() | |||
Count = m_oTestCases.Count | |||
End Function | |||
Public Sub Run(oTestResult) | |||
Dim oTestCase | |||
For Each oTestCase In m_oTestCases.Items | |||
oTestCase.Run oTestResult | |||
Next | |||
End Sub | |||
End Class | |||
Class TestCase | |||
Private m_oTestContainer | |||
Private m_sTestMethod | |||
Public Property Get TestContainer() | |||
Set TestContainer = m_oTestContainer | |||
End Property | |||
Public Property Set TestContainer(oTestContainer) | |||
Set m_oTestContainer = oTestContainer | |||
End Property | |||
Public Property Get TestMethod() | |||
TestMethod = m_sTestMethod | |||
End Property | |||
Public Property Let TestMethod(sTestMethod) | |||
m_sTestMethod = sTestMethod | |||
End Property | |||
Public Sub Run(oTestResult) | |||
Dim iOldFailureCount | |||
Dim iOldErrorCount | |||
iOldFailureCount = oTestResult.Failures.Count | |||
iOldErrorCount = oTestResult.Errors.Count | |||
On Error Resume Next | |||
oTestResult.StartTest Me | |||
m_oTestContainer.SetUp() | |||
If (Err.Number <> 0) Then | |||
oTestResult.AddError Err | |||
Else | |||
' Response.Write("m_oTestContainer." & m_sTestMethod & "(oTestResult)<br>") | |||
Execute("m_oTestContainer." & m_sTestMethod & "(oTestResult)") | |||
If (Err.Number <> 0) Then | |||
' Response.Write(Err.Description & "<br>") | |||
oTestResult.AddError Err | |||
End If | |||
End If | |||
Err.Clear() | |||
m_oTestContainer.TearDown() | |||
If (Err.Number <> 0) Then | |||
oTestResult.AddError Err | |||
End If | |||
'Log success if no failures or errors occurred | |||
If oTestResult.Failures.Count = iOldFailureCount And oTestResult.Errors.Count = iOldErrorCount Then | |||
oTestResult.AddSuccess | |||
End If | |||
oTestResult.EndTest | |||
On Error Goto 0 | |||
End Sub | |||
End Class | |||
Class TestResult | |||
Private m_dicErrors | |||
Private m_dicFailures | |||
Private m_dicSuccesses | |||
Private m_dicObservers | |||
Private m_iRunTests | |||
Private m_oCurrentTestCase | |||
Private Sub Class_Initialize | |||
Set m_dicErrors = Server.CreateObject("Scripting.Dictionary") | |||
Set m_dicFailures = Server.CreateObject("Scripting.Dictionary") | |||
Set m_dicSuccesses = Server.CreateObject("Scripting.Dictionary") | |||
Set m_dicObservers = Server.CreateObject("Scripting.Dictionary") | |||
m_iRunTests = 0 | |||
End Sub | |||
Private Sub Class_Terminate | |||
Set m_dicErrors = Nothing | |||
Set m_dicFailures = Nothing | |||
Set m_dicSuccesses = Nothing | |||
Set m_dicObservers = Nothing | |||
Set m_oCurrentTestCase = Nothing | |||
End Sub | |||
Public Property Get Errors() | |||
Set Errors = m_dicErrors | |||
End Property | |||
Public Property Get Failures() | |||
Set Failures = m_dicFailures | |||
End Property | |||
Public Property Get Successes() | |||
Set Successes = m_dicSuccesses | |||
End Property | |||
Public Property Get RunTests() | |||
RunTests = m_iRunTests | |||
End Property | |||
Public Sub StartTest(oTestCase) | |||
Set m_oCurrentTestCase = oTestCase | |||
Dim oObserver | |||
For Each oObserver In m_dicObservers.Items | |||
oObserver.OnStartTest | |||
Next | |||
End Sub | |||
Public Sub EndTest() | |||
m_iRunTests = m_iRunTests + 1 | |||
Dim oObserver | |||
For Each oObserver In m_dicObservers.Items | |||
oObserver.OnEndTest | |||
Next | |||
End Sub | |||
Public Sub AddObserver(oObserver) | |||
m_dicObservers.Add oOserver, oObserver | |||
End Sub | |||
Public Function AddError(oError) | |||
Dim oTestError | |||
Set oTestError = New TestError | |||
oTestError.Initialize m_oCurrentTestCase, oError.Number, oError.Source, oError.Description | |||
m_dicErrors.Add oTestError, oTestError | |||
Dim oObserver | |||
For Each oObserver In m_dicObservers.Items | |||
oObserver.OnError | |||
Next | |||
Set AddError = oTestError | |||
End Function | |||
Public Function AddFailure(sMessage) | |||
Dim oTestError | |||
Set oTestError = New TestError | |||
oTestError.Initialize m_oCurrentTestCase, 0, " ", sMessage | |||
m_dicFailures.Add oTestError, oTestError | |||
Dim oObserver | |||
For Each oObserver In m_dicObservers.Items | |||
oObserver.OnFailure | |||
Next | |||
Set AddFailure = oTestError | |||
End Function | |||
Public Function AddSuccess | |||
Dim oTestError | |||
Set oTestError = New TestError | |||
oTestError.Initialize m_oCurrentTestCase, 0, " ", "Test completed without failures" | |||
m_dicSuccesses.Add oTestError, oTestError | |||
Dim oObserver | |||
For Each oObserver In m_dicObservers.Items | |||
oObserver.OnSuccess | |||
Next | |||
End Function | |||
Public Sub Assert(bCondition, sMessage) | |||
If Not bCondition Then | |||
AddFailure sMessage | |||
End If | |||
End Sub | |||
Public Sub AssertEquals(vExpected, vActual, sMessage) | |||
If vExpected <> vActual Then | |||
AddFailure NotEqualsMessage(sMessage, vExpected, vActual) | |||
End If | |||
End Sub | |||
'Build a message about a failed equality check | |||
Function NotEqualsMessage(sMessage, vExpected, vActual) | |||
'NotEqualsMessage = sMessage & " expected: " & CStr(vExpected) & " but was: " & CStr(vActual) | |||
NotEqualsMessage = sMessage & "<br>" &_ | |||
"<table><tr><th class='expected'>Expected</th><td class='expected'><span class='left-delim'>(" & typename(vExpected) & ") [</span>" & CStr(vExpected) & "<span class='right-delim'>]</span></td></tr><tr><th class='actual'>Actual</th><td class='actual'><span class='left-delim'>(" & typename(vActual) & ") [</span>" & CStr(vActual) & "<span class='right-delim'>]</span></td></tr></table>" | |||
End Function | |||
Public Sub AssertNotEquals(vExpected, vActual, sMessage) | |||
If vExpected = vActual Then | |||
AddFailure sMessage & " expected: " & CStr(vExpected) & " and actual: " & CStr(vActual) & " should not be equal." | |||
End If | |||
End Sub | |||
Public Sub AssertExists(vVariable, sMessage) | |||
If IsObject(vVariable) Then | |||
If (vVariable Is Nothing) Then | |||
AddFailure sMessage & " - Variable of type " & TypeName(vVariable) & " is Nothing." | |||
End If | |||
ElseIf IsEmpty(vVariable) Then | |||
AddFailure sMessage & " - Variable " & TypeName(vVariable) & " is Empty (Uninitialized)." | |||
End If | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' CUSTOM ASSERTIONS | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub AssertFalse(bCondition, sMessage) | |||
If bCondition then | |||
AddFailure sMessage | |||
End If | |||
End Sub | |||
Public Sub AssertEqual(vExpected, vActual, sMessage) | |||
AssertEquals vExpected, vActual, sMessage | |||
End Sub | |||
Public Sub AssertNotEqual(vExpected, vActual, sMessage) | |||
AssertNotEqual vExpected, vActual, sMessage | |||
End Sub | |||
Public Sub AssertNotExists(vVariable, sMessage) | |||
If IsObject(vVariable) then | |||
If (vVariable Is Not Nothing) then | |||
AddFailure sMessage & " - Variable of type " & TypeName(vVariable) & " should be Nothing." | |||
End If | |||
ElseIf Not IsEmpty(vVariable) then | |||
AddFailure sMessage & " - Variable " & TypeName(vVariable) & " should be Empty (Uninitialized)." | |||
End If | |||
End Sub | |||
'Ensures (obj1 Is obj2) = true | |||
Public Sub AssertSame(obj1, obj2, sMessage) | |||
Assert (obj1 Is obj2), sMessage | |||
End Sub | |||
'Ensures (obj1 Is obj2) = false | |||
Public Sub AssertDifferent(obj1, obj2, sMessage) | |||
Assert (not (obj1 Is obj2)), sMessage | |||
End Sub | |||
'Forces a test failure | |||
Public Sub Fail(sMessage) | |||
AddFailure "Forced Failure: " & sMessage | |||
End Sub | |||
'Flags a test as needing implementation, otherwise an empty test will silently pass | |||
Public Sub NotImplemented | |||
AddFailure "Test not implemented." | |||
End Sub | |||
Public Sub AssertType(sTypeName, vVariable, sMessage) | |||
AssertEqual sTypeName, typename(vVariable), sMessage | |||
End Sub | |||
End Class | |||
Class TestError | |||
Private m_oTestCase | |||
Private m_lErrNumber | |||
Private m_sSource | |||
Private m_sDescription | |||
Public Sub Initialize(oTestCase, lErrNumber, sSource, sDescription) | |||
Set m_oTestCase = oTestCase | |||
m_lErrNumber = lErrNumber | |||
m_sSource = sSource | |||
m_sDescription = sDescription | |||
End Sub | |||
Public Property Get TestCase | |||
Set TestCase = m_oTestCase | |||
End Property | |||
Public Property Get ErrNumber | |||
ErrNumber = m_lErrNumber | |||
End Property | |||
Public Property Get Source | |||
Source = m_sSource | |||
End Property | |||
Public Property Get Description | |||
Description = m_sDescription | |||
End Property | |||
End Class | |||
%> |
@@ -0,0 +1,68 @@ | |||
/* | |||
.warning | |||
{ | |||
BACKGROUND-COLOR: gold | |||
} | |||
.error | |||
{ | |||
BACKGROUND-COLOR: indianred | |||
} | |||
.success | |||
{ | |||
BACKGROUND-COLOR: #33cc33 | |||
} | |||
BODY | |||
{ | |||
FONT-SIZE: 10px | |||
FONT-FAMILY: Verdana; | |||
BACKGROUND-COLOR: lightskyblue | |||
} | |||
TABLE | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
FORM | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
SELECT | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
INPUT | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
*/ | |||
/*---------------------------------------------------------------------------------------------------------------------- | |||
CUSTOMIZATIONS | |||
----------------------------------------------------------------------------------------------------------------------*/ | |||
body { padding: 20px; font-family: calibri; font-size: 14pt; color: #333; background-color: #fcfcfc; } | |||
table.Form { width: auto; } | |||
table.Form th, | |||
table.Form td { padding-right: 20px; } | |||
table.Form input.Submit { height: 40px; } | |||
table.Results { width: 98%; } | |||
table.Results th, | |||
table.Results td { padding: 5px; vertical-align: top; } | |||
table.Results th.expected, | |||
table.Results th.actual { text-align: right; color: #c00; } | |||
table.Results td.expected, | |||
table.Results td.actual { font-family: consolas; } | |||
table.Results span.left-delim, | |||
table.Results span.right-delim { font-weight: bold; color: #c00; } | |||
.warning { background-color: #feedab; color: #333; } | |||
.error { background-color: #ffb3b3; color: darkred; } | |||
.success { background-color: #dbf0b8; color: darkgreen; } |
@@ -0,0 +1,58 @@ | |||
/* | |||
.warning | |||
{ | |||
BACKGROUND-COLOR: gold | |||
} | |||
.error | |||
{ | |||
BACKGROUND-COLOR: indianred | |||
} | |||
.success | |||
{ | |||
BACKGROUND-COLOR: #33cc33 | |||
} | |||
BODY | |||
{ | |||
FONT-SIZE: 10px | |||
FONT-FAMILY: Verdana; | |||
BACKGROUND-COLOR: lightskyblue | |||
} | |||
TABLE | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
FORM | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
SELECT | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
INPUT | |||
{ | |||
FONT-SIZE: 10px | |||
} | |||
*/ | |||
/*---------------------------------------------------------------------------------------------------------------------- | |||
CUSTOMIZATIONS | |||
----------------------------------------------------------------------------------------------------------------------*/ | |||
body { padding: 20px; font-family: calibri; font-size: 14pt; color: #333; background-color: #fcfcfc; } | |||
table.Form { width: auto; } | |||
table.Form th, | |||
table.Form td { padding-right: 20px; } | |||
table.Form input.Submit { height: 40px; } | |||
table.Results { width: 98%; } | |||
table.Results th, | |||
table.Results td { padding: 5px; } | |||
.warning { background-color: #feedab; color: #333; } | |||
.error { background-color: #ffb3b3; color: darkred; } | |||
.success { background-color: #dbf0b8; color: darkgreen; } |
@@ -0,0 +1,273 @@ | |||
<% | |||
'******************************************************************** | |||
' Name: ASPUnitRunner.asp | |||
' | |||
' Purpose: Contains the UnitRunner class which is used to render the unit testing UI | |||
'******************************************************************** | |||
'******************************************************************** | |||
' Include Files | |||
'******************************************************************** | |||
%> | |||
<!-- #include file="ASPUnit.asp"--> | |||
<% | |||
Const ALL_TESTCONTAINERS = "All Test Containers" | |||
Const ALL_TESTCASES = "All Test Cases" | |||
Const FRAME_PARAMETER = "UnitRunner" | |||
Const FRAME_SELECTOR = "selector" | |||
Const FRAME_RESULTS = "results" | |||
Const STYLESHEET = "aspunit/include/ASPUnit.css" | |||
Const SCRIPTFILE = "aspunit/include/ASPUnitRunner.js" | |||
Class UnitRunner | |||
Private m_dicTestContainer | |||
Private Sub Class_Initialize() | |||
Set m_dicTestContainer = CreateObject("Scripting.Dictionary") | |||
End Sub | |||
Public Sub AddTestContainer(oTestContainer) | |||
m_dicTestContainer.Add TypeName(oTestContainer), oTestContainer | |||
End Sub | |||
Public Function Display() | |||
If (Request.QueryString(FRAME_PARAMETER) = FRAME_SELECTOR) Then | |||
DisplaySelector | |||
ElseIf (Request.QueryString(FRAME_PARAMETER) = FRAME_RESULTS) Then | |||
DisplayResults | |||
Else | |||
ShowFrameSet | |||
End if | |||
End Function | |||
'******************************************************************** | |||
' Frameset | |||
'******************************************************************** | |||
Private Function ShowFrameSet() | |||
%> | |||
<HTML> | |||
<HEAD> | |||
<TITLE>ASPUnit Test Runner</TITLE> | |||
</HEAD> | |||
<FRAMESET ROWS="70, *" BORDER=0 FRAMEBORDER=0 FRAMESPACING=0> | |||
<FRAME NAME="<% = FRAME_SELECTOR %>" src="<% = GetSelectorFrameSrc %>" marginwidth="0" marginheight="0" scrolling="auto" border=0 frameborder=0 noresize> | |||
<FRAME NAME="<% = FRAME_RESULTS %>" src="<% = GetResultsFrameSrc %>" marginwidth="0" marginheight="0" scrolling="auto" border=0 frameborder=0 noresize> | |||
</FRAMESET> | |||
<% | |||
End Function | |||
Private Function GetSelectorFrameSrc() | |||
GetSelectorFrameSrc = Request.ServerVariables("SCRIPT_NAME") & "?" & FRAME_PARAMETER & "=" & FRAME_SELECTOR | |||
End Function | |||
Private Function GetResultsFrameSrc() | |||
GetResultsFrameSrc = Request.ServerVariables("SCRIPT_NAME") & "?" & FRAME_PARAMETER & "=" & FRAME_RESULTS | |||
End Function | |||
'******************************************************************** | |||
' Selector Frame | |||
'******************************************************************** | |||
Private Function DisplaySelector() | |||
%> | |||
<HTML> | |||
<HEAD> | |||
<LINK REL="stylesheet" HREF="<% = STYLESHEET %>" MEDIA="screen" TYPE="text/css"> | |||
<SCRIPT> | |||
function ComboBoxUpdate(strSelectorFrameSrc, strSelectorFrameName) | |||
{ | |||
document.frmSelector.action = strSelectorFrameSrc; | |||
document.frmSelector.target = strSelectorFrameName; | |||
document.frmSelector.submit(); | |||
} | |||
</SCRIPT> | |||
</HEAD> | |||
<BODY> | |||
<FORM NAME="frmSelector" ACTION="<% = GetResultsFrameSrc %>" TARGET="<% = FRAME_RESULTS %>" METHOD=POST> | |||
<TABLE class='Form'> | |||
<TR> | |||
<TD> | |||
<INPUT TYPE="Submit" NAME="cmdRun" class="Submit" VALUE="Run Tests"> | |||
</TD> | |||
<TD ALIGN="right">Test:</TD> | |||
<TD> | |||
<SELECT NAME="cboTestContainers" OnChange="ComboBoxUpdate('<% = GetSelectorFrameSrc %>', '<% = FRAME_SELECTOR %>');"> | |||
<OPTION><% = ALL_TESTCONTAINERS %> | |||
<% | |||
AddTestContainers | |||
%> | |||
</SELECT> | |||
</TD> | |||
<TD ALIGN="right">Test Method:</TD> | |||
<TD> | |||
<SELECT NAME="cboTestCases"> | |||
<OPTION><% = ALL_TESTCASES %> | |||
<% | |||
AddTestMethods | |||
%> | |||
</SELECT> | |||
<TD> | |||
<INPUT TYPE="checkbox" NAME="chkShowSuccess"> Show Passing Tests</INPUT> | |||
</TD> | |||
</TD> | |||
</TR> | |||
</TABLE> | |||
</FORM> | |||
</BODY> | |||
</HTML> | |||
<% | |||
End Function | |||
Private Function AddTestContainers() | |||
Dim oTestContainer, sTestContainer | |||
For Each oTestContainer In m_dicTestContainer.Items() | |||
sTestContainer = TypeName(oTestContainer) | |||
If (sTestContainer = Request.Form("cboTestContainers")) Then | |||
Response.Write("<OPTION SELECTED>" & sTestContainer) | |||
Else | |||
Response.Write("<OPTION>" & sTestContainer) | |||
End If | |||
Next | |||
End Function | |||
Private Function AddTestMethods() | |||
Dim oTestContainer, sContainer, sTestMethod | |||
If (Request.Form("cboTestContainers") <> ALL_TESTCONTAINERS And Request.Form("cboTestContainers") <> "") Then | |||
sContainer = CStr(Request.Form("cboTestContainers")) | |||
Set oTestContainer = m_dicTestContainer.Item(sContainer) | |||
For Each sTestMethod In oTestContainer.TestCaseNames() | |||
Response.Write("<OPTION>" & sTestMethod) | |||
Next | |||
End If | |||
End Function | |||
Private Function TestName(oResult) | |||
If (oResult.TestCase Is Nothing) Then | |||
TestName = "" | |||
Else | |||
TestName = TypeName(oResult.TestCase.TestContainer) & "." & oResult.TestCase.TestMethod | |||
End If | |||
End Function | |||
'******************************************************************** | |||
' Results Frame | |||
'******************************************************************** | |||
Private Function DisplayResults() | |||
%> | |||
<HTML> | |||
<HEAD> | |||
<LINK REL="stylesheet" HREF="<% = STYLESHEET %>" MEDIA="screen" TYPE="text/css"> | |||
</HEAD> | |||
<BODY> | |||
<% | |||
Dim oTestResult, oTestSuite | |||
Set oTestResult = New TestResult | |||
' Create TestSuite | |||
Set oTestSuite = BuildTestSuite() | |||
' Run Tests | |||
oTestSuite.Run oTestResult | |||
' Display Results | |||
DisplayResultsTable oTestResult | |||
%> | |||
</BODY> | |||
</HTML> | |||
<% | |||
End Function | |||
Private Function BuildTestSuite() | |||
Dim oTestSuite, oTestContainer, sContainer | |||
Set oTestSuite = New TestSuite | |||
If (Request.Form("cmdRun") <> "") Then | |||
If (Request.Form("cboTestContainers") = ALL_TESTCONTAINERS) Then | |||
For Each oTestContainer In m_dicTestContainer.Items() | |||
If Not(oTestContainer Is Nothing) Then | |||
oTestSuite.AddAllTestCases oTestContainer | |||
End If | |||
Next | |||
Else | |||
sContainer = CStr(Request.Form("cboTestContainers")) | |||
Set oTestContainer = m_dicTestContainer.Item(sContainer) | |||
Dim sTestMethod | |||
sTestMethod = Request.Form("cboTestCases") | |||
If (sTestMethod = ALL_TESTCASES) Then | |||
oTestSuite.AddAllTestCases oTestContainer | |||
Else | |||
oTestSuite.AddTestCase oTestContainer, sTestMethod | |||
End If | |||
End If | |||
End If | |||
Set BuildTestSuite = oTestSuite | |||
End Function | |||
Private Function DisplayResultsTable(oTestResult) | |||
%> | |||
<TABLE BORDER="1" class='Results'> | |||
<TR><TH WIDTH="10%" class="Type">Type</TH><TH WIDTH="20%" class="Test">Test</TH><TH WIDTH="70%" class="Desc">Description</TH></TR> | |||
<% | |||
If Not(oTestResult Is Nothing) Then | |||
Dim oResult | |||
If (Request.Form("chkShowSuccess") <> "") Then | |||
For Each oResult in oTestResult.Successes | |||
Response.Write(" <TR CLASS=""success""><TD class='Type'>Success</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Source & oResult.Description & "</TD></TR>") | |||
Next | |||
End If | |||
For Each oResult In oTestResult.Errors | |||
Response.Write(" <TR CLASS=""error""><TD class='Type'>Error</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Source & " (" & Trim(oResult.ErrNumber) & "): " & oResult.Description & "</TD></TR>") | |||
Next | |||
For Each oResult In oTestResult.Failures | |||
Response.Write(" <TR CLASS=""warning""><TD class='Type'>Failure</TD><TD class='Test'>" & TestName(oResult) & "</TD><TD class='Desc'>" & oResult.Description & "</TD></TR>") | |||
Next | |||
Response.Write " <TR><TD ALIGN=""center"" COLSPAN=3 class='" & ResultRowClass(oTestResult) & "'>" & "Tests: " & oTestResult.RunTests & ", Errors: " & oTestResult.Errors.Count & ", Failures: " & oTestResult.Failures.Count & "</TD></TR>" | |||
End If | |||
%> | |||
</TABLE> | |||
<% | |||
End Function | |||
Private Function ResultRowClass(oTestResult) | |||
if oTestResult.Errors.Count > 0 then | |||
ResultRowClass = "error" | |||
elseif oTestResult.Failures.Count > 0 then | |||
ResultRowClass = "warning" | |||
elseif oTestResult.Successes.Count > 0 then | |||
ResultRowClass = "success" | |||
end if | |||
End Function | |||
Public Sub OnStartTest() | |||
End Sub | |||
Public Sub OnEndTest() | |||
End Sub | |||
Public Sub OnError() | |||
End Sub | |||
Public Sub OnFailure() | |||
End Sub | |||
Public Sub OnSuccess() | |||
End Sub | |||
End Class | |||
%> | |||
@@ -0,0 +1,6 @@ | |||
function ComboBoxUpdate(strSelectorFrameSrc, strSelectorFrameName) | |||
{ | |||
document.frmSelector.action = strSelectorFrameSrc; | |||
document.frmSelector.target = strSelectorFrameName; | |||
document.frmSelector.submit(); | |||
} |
@@ -0,0 +1,43 @@ | |||
<html> | |||
<head> | |||
<title>ASPUnit: an ASP Unit Testing Framework</title> | |||
</head> | |||
<body> | |||
<a name="top"></a> | |||
<h1>ASPUnit 0.9.2</h1> | |||
<h2>Introduction</h2> | |||
ASPUnit is a unit testing framework based on the architecture of | |||
<a href="http://www.junit.org">JUnit</a>, the current open source | |||
<i>de facto</i> standard for unit testing. ASPUnit is a web-based port of | |||
<a href="http://comunit.sourceforge.net">COMUnit</a> using Active Server Pages. | |||
It is a VBScript implementation that has been tested to run on top of Microsoft | |||
Internet Information Server 5.0 or 5.1. | |||
<h2>Demonstration</h2> | |||
Try out the <a href="http://www32.brinkster.com/aspunit/TestASPUnit/TestASPUnit.asp">ASPUnit demonstration</a>. | |||
<h2>Download</h2> | |||
Download <a href="http://sourceforge.net/project/showfiles.php?group_id=32444">ASPUnit 0.9.2</a>. | |||
<h2>Feedback</h2> | |||
Questions? Comments? Suggestions? Feel free to send us an email about it: | |||
<a href="mailto:aspunit-developer@lists.sourceforge.net">aspunit-developer@lists.sourceforge.net</a> | |||
<h2>Contributors:</h2> | |||
<ul> | |||
<li>Bernard Vander Beken</li> | |||
<li>Tamara L. Cravit</li> | |||
<li>Stephane Lussier (sl@fecondcarcan.com)</li> | |||
<li>Richard Quinn</li> | |||
</ul> | |||
<h2>Links</h2> | |||
<ul> | |||
<li><a href="http://comunit.sourceforge.net">COMUnit</a>: a unit testing framework for COM components | |||
<li><A href="http://www.xprogramming.com">www.xprogramming.com</A>: download source for all xUnits | |||
<li><a href="http://www.junit.org">www.junit.org</a>: home of the original JUnit | |||
</ul> | |||
</body> | |||
</html> |
@@ -0,0 +1,127 @@ | |||
<% | |||
Class Test_AutoMap_Class | |||
Public SomeString, SomeInt, SomeDate | |||
Public Property Get Class_Get_Properties : Class_Get_Properties = Array("SomeString", "SomeInt", "SomeDate") : End Property | |||
End Class | |||
Class AutoMap_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_From_Recordset_To_Existing_Class_Instance", _ | |||
"Test_From_Recordset_To_New_Class_Instance", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance", _ | |||
"Test_From_Class_Instance_To_New_Class_Instance") | |||
End Function | |||
Private Sub Destroy(o) | |||
on error resume next | |||
o.close | |||
on error goto 0 | |||
set o = nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_Existing_Class_Instance(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim target : set target = new Test_Automap_Class | |||
dim result : set result = Automapper().Automap(src, target) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_New_Class_Instance(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", 200, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim result : set result = Automapper().Automap(src, "Test_Automap_Class") | |||
T.AssertEqual "Test_AutoMap_Class", typename(result), "AutoMap should have returned an instance of Test_AutoMap_Class." | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_Automap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_Automap_Class | |||
dim result : set result = Automapper().Automap(src, target) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_New_Class_Instance(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_Automap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim result : set result = Automapper().Automap(src, "Test_Automap_Class") | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,281 @@ | |||
<% | |||
Class Test_DynMap_Class | |||
Public SomeString, SomeInt, SomeDate | |||
Public Property Get Class_Get_Properties : Class_Get_Properties = Array("SomeString", "SomeInt", "SomeDate") : End Property | |||
End Class | |||
Class DynMap_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_One_Expression", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Multiple_Expressions") | |||
End Function | |||
Private Sub Destroy(o) | |||
on error resume next | |||
o.close | |||
on error goto 0 | |||
set o = nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim target : set target = new Test_DynMap_Class | |||
dim result : set result = Automapper().DynMap(src, target, empty, empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim target : set target = new Test_DynMap_Class | |||
target.SomeInt = 54321 | |||
dim result : set result = Automapper().DynMap(src, target, array("SomeString", "SomeDate"), empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left untouched, but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim result : set result = Automapper().DynMap(src, "Test_DynMap_Class", empty, empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim result : set result = Automapper().DynMap(src, "Test_DynMap_Class", array("SomeString", "SomeDate"), empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_DynMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_DynMap_Class | |||
dim result : set result = Automapper.DynMap(src, target, empty, empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_DynMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_DynMap_Class | |||
target.SomeInt = 54321 | |||
dim result : set result = Automapper.DynMap(src, target, array("SomeString", "SomeDate"), empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left alone but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_DynMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim result : set result = Automapper.DynMap(src, "Test_DynMap_Class", empty, empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_DynMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim result : set result = Automapper.DynMap(src, "Test_DynMap_Class", array("SomeString", "SomeDate"), empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_One_Expression(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_DynMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_DynMap_Class | |||
dim result : set result = Automapper.DynMap(src, target, empty, "target.SomeString = ucase(src.SomeString)") | |||
T.AssertEqual "SOME STRING HERE", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Multiple_Expressions(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_DynMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_DynMap_Class | |||
dim result : set result = Automapper.DynMap(src, target, empty, _ | |||
array("target.SomeString = ucase(src.SomeString)", _ | |||
"target.SomeInt = src.SomeInt * 2", _ | |||
"target.SomeDate = Year(src.SomeDate)")) | |||
T.AssertEqual "SOME STRING HERE", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual (12345 * 2), result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual Year(dtm), result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,236 @@ | |||
<% | |||
Class Test_FlexMap_Class | |||
Public SomeString, SomeInt, SomeDate | |||
Public Property Get Class_Get_Properties : Class_Get_Properties = Array("SomeString", "SomeInt", "SomeDate") : End Property | |||
End Class | |||
Class FlexMap_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields", _ | |||
"Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields", _ | |||
"Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields") | |||
End Function | |||
Private Sub Destroy(o) | |||
on error resume next | |||
o.close | |||
on error goto 0 | |||
set o = nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim target : set target = new Test_FlexMap_Class | |||
dim result : set result = Automapper().FlexMap(src, target, empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim target : set target = new Test_FlexMap_Class | |||
target.SomeInt = 54321 | |||
dim result : set result = Automapper().FlexMap(src, target, array("SomeString", "SomeDate")) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left untouched, but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim result : set result = Automapper().FlexMap(src, "Test_FlexMap_Class", empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Recordset_To_New_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim src : set src = Server.CreateObject("ADODB.Recordset") | |||
with src.Fields | |||
.Append "SomeString", adVarChar, 100 | |||
.Append "SomeInt", adInteger | |||
.Append "SomeDate", adDate | |||
end with | |||
dim dtm : dtm = Now | |||
src.Open | |||
src.AddNew | |||
src("SomeString") = "Some string here" | |||
src("SomeInt") = 12345 | |||
src("SomeDate") = dtm | |||
src.Update | |||
src.MoveFirst | |||
dim result : set result = Automapper().FlexMap(src, "Test_FlexMap_Class", array("SomeString", "SomeDate")) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_FlexMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_FlexMap_Class | |||
dim result : set result = Automapper.FlexMap(src, target, empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_Existing_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_FlexMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim target : set target = new Test_FlexMap_Class | |||
target.SomeInt = 54321 | |||
dim result : set result = Automapper.FlexMap(src, target, array("SomeString", "SomeDate")) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
'T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway." | |||
T.AssertEqual 54321, result.SomeInt, "SomeInt should have been left alone but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy target | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_New_Class_Instance_With_Empty_Fields_Array_Maps_All_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_FlexMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim result : set result = Automapper.FlexMap(src, "Test_FlexMap_Class", empty) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertEqual 12345, result.SomeInt, "Failed to map SomeInt." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_From_Class_Instance_To_New_Class_Instance_Maps_Only_Specified_Fields(T) | |||
dim dtm : dtm = Now | |||
dim src : set src = new Test_FlexMap_Class | |||
src.SomeString = "Some string here" | |||
src.SomeInt = 12345 | |||
src.SomeDate = dtm | |||
dim result : set result = Automapper.FlexMap(src, "Test_FlexMap_Class", array("SomeString", "SomeDate")) | |||
T.AssertEqual "Some string here", result.SomeString, "Failed to map SomeString." | |||
T.AssertNotExists result.SomeInt, "SomeInt should have been left uninitialized, but was mapped anyway." | |||
T.AssertEqual dtm, result.SomeDate, "Failed to map SomeDate." | |||
Destroy src | |||
Destroy result | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,24 @@ | |||
<% | |||
'======================================================================================================================= | |||
' Automapper Function Test Cases | |||
'======================================================================================================================= | |||
Class Automapper_Function_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_Automap_Function_Returns_Instance", "Test_Automap_Function_Returns_New_Instance") | |||
End Function | |||
Public Sub Test_Automap_Function_Returns_Instance(T) | |||
T.AssertEquals "Automapper_Class", typename(Automapper()), "Function Automapper() should return a new instance of Automapper_Class" | |||
End Sub | |||
Public Sub Test_Automap_Function_Returns_New_Instance(T) | |||
dim a : set a = Automapper() | |||
dim b : set b = Automapper() | |||
T.AssertFalse (a is b), "Automapper() function should return distinct instances of the Automapper_Class" | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,349 @@ | |||
<% | |||
Class EnumerableHelper_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_Enumerable_Function_Returns_EnumerableHelper_Instance", _ | |||
"Test_Map_Returns_EnumerableHelper_Instance", _ | |||
"Test_Map_Lambda", _ | |||
"Test_Map_Proc", _ | |||
"Test_Max_Lambda", _ | |||
"Test_Max_Proc", _ | |||
"Test_Min_Lambda", _ | |||
"Test_Min_Proc", _ | |||
"Test_Take", _ | |||
"Test_TakeWhile_Lambda", _ | |||
"Test_TakeWhile_Proc", _ | |||
"Test_Sum", _ | |||
"Test_All", _ | |||
"Test_Any", _ | |||
"Test_Where_Lambda", _ | |||
"Test_Where_Proc", _ | |||
"Test_Count", _ | |||
"Test_First", _ | |||
"Test_Last", _ | |||
"Test_Chained") | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Enumerable_Function_Returns_EnumerableHelper_Instance(T) | |||
dim list : set list = new LinkedList_Class | |||
dim E : set E = Enumerable(list) | |||
T.Assert typename(E) = "EnumerableHelper_Class", "did not return correct instance" | |||
T.Assert typename(E.Data) = "LinkedList_Class", "Data() is of type " & typename(E.Data) | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Map_Returns_EnumerableHelper_Instance(T) | |||
dim list : set list = new LinkedList_Class | |||
dim E : set E = Enumerable(list).Map("") | |||
T.Assert typename(E) = "EnumerableHelper_Class", "returned type " & typename(E) | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Map_Lambda(T) | |||
dim list : set list = OrderedList(10) | |||
dim E : set E = Enumerable(list).Map("dim x : x = item_ + 1 : V_ = x") | |||
T.Assert 10 = E.Data.Count, "count: " & E.Data.Count | |||
dim A : A = list.To_Array() | |||
dim B : B = E.Data.To_Array() | |||
T.Assert UBound(A) = UBound(B), "A = " & UBound(A) & ", B = " & UBound(B) | |||
dim i | |||
For i = 0 to UBound(A) | |||
T.Assert B(i) = A(i) + 1, "B(" & i & ") = " & B(i) & ", A(" & i & ") = " & A(i) | |||
Next | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Map_Proc(T) | |||
dim list : set list = OrderedList(10) | |||
dim E : set E = Enumerable(list).Map(GetRef("AddOne")) | |||
T.Assert 10 = E.Data.Count, "count: " & E.Data.Count | |||
dim A : A = list.To_Array() | |||
dim B : B = E.Data.To_Array() | |||
T.Assert UBound(A) = UBound(B), "A = " & UBound(A) & ", B = " & UBound(B) | |||
dim i | |||
For i = 0 to UBound(A) | |||
T.Assert B(i) = A(i) + 1, "B(" & i & ") = " & B(i) & ", A(" & i & ") = " & A(i) | |||
Next | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Max_Lambda(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim val : val = Enumerable(list).Max("len(item_)") | |||
T.Assert 7 = val, "val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Max_Proc(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim val : val = Enumerable(list).Max(GetRef("GetLength")) | |||
T.Assert 7 = val, "val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Min_Lambda(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim val : val = Enumerable(list).Min("len(item_)") | |||
T.Assert 3 = val, "val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Min_Proc(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim val : val = Enumerable(list).Min(GetRef("GetLength")) | |||
T.Assert 3 = val, "val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Take(T) | |||
dim list : set list = OrderedList(3) | |||
dim firstTwo : set firstTwo = Enumerable(list).Take(2) | |||
T.Assert typename(firstTwo) = "EnumerableHelper_Class", "typename = " & typename(firstTwo) | |||
dim L : set L = firstTwo.Data | |||
T.AssertEqual 2, L.Count, "Count = " & L.Count | |||
T.AssertEqual 1, L.Front, "Front = " & L.Front | |||
T.AssertEqual 2, L.Back, "Back = " & L.Back | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_TakeWhile_Lambda(T) | |||
dim list : set list = OrderedList(5) | |||
dim firstTwo : set firstTwo = Enumerable(list).TakeWhile("item_ < 3") | |||
T.Assert typename(firstTwo) = "EnumerableHelper_Class", "typename = " & typename(firstTwo) | |||
dim L : set L = firstTwo.Data | |||
T.AssertEqual 2, L.Count, "Count = " & L.Count | |||
T.AssertEqual 1, L.Front, "Front = " & L.Front | |||
T.AssertEqual 2, L.Back, "Back = " & L.Back | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_TakeWhile_Proc(T) | |||
dim list : set list = OrderedList(5) | |||
dim firstTwo : set firstTwo = Enumerable(list).TakeWhile(GetRef("IsLessThanThree")) | |||
T.Assert typename(firstTwo) = "EnumerableHelper_Class", "typename = " & typename(firstTwo) | |||
dim L : set L = firstTwo.Data | |||
T.AssertEqual 2, L.Count, "Count = " & L.Count | |||
T.AssertEqual 1, L.Front, "Front = " & L.Front | |||
T.AssertEqual 2, L.Back, "Back = " & L.Back | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Sum(T) | |||
dim list : set list = OrderedList(5) | |||
dim val : val = Enumerable(list).Sum("item_") | |||
T.AssertEqual val, 15, "simple: val = " & val | |||
val = Enumerable(list).Sum("item_ * item_") | |||
T.AssertEqual val, 55, "squares: val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_All(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim val | |||
val = Enumerable(list).All("len(item_) >= 3") | |||
T.Assert val, "Len >= 3: val = " & val | |||
val = Enumerable(list).All("len(item_) = 3") | |||
T.AssertFalse val, "Len = 3: val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Any(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim val | |||
val = Enumerable(list).Any("len(item_) >= 3") | |||
T.Assert val, "Len >= 3: val = " & val | |||
val = Enumerable(list).Any("len(item_) < 3") | |||
T.AssertFalse val, "Len < 3: val = " & val | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Where_Lambda(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim list2 | |||
set list2 = Enumerable(list).Where("len(item_) > 4") | |||
T.AssertEqual 2, list2.Data.Count, "list2.Count = " & list2.Data.Count | |||
T.AssertEqual "Alice", list2.Data.Front(), "list2.Data.Front = " & list2.Data.Front() | |||
T.AssertEqual "Charlie", list2.Data.Back(), "list2.Data.Front = " & list2.Data.Back() | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Where_Proc(T) | |||
dim list : set list = new LinkedList_Class | |||
list.Push "Alice" | |||
list.Push "Bob" | |||
list.Push "Charlie" | |||
list.Push "Doug" | |||
dim E : set E = Enumerable(list).Where(GetRef("IsMoreThanFourChars")) | |||
T.AssertEqual 2, E.Data.Count, "E.Count = " & E.Data.Count | |||
T.AssertEqual "Alice", E.Data.Front(), "E.Data.Front = " & E.Data.Front() | |||
T.AssertEqual "Charlie", E.Data.Back(), "E.Data.Front = " & E.Data.Back() | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Count(T) | |||
dim list : set list = OrderedList(10) | |||
dim E : set E = Enumerable(list) | |||
T.AssertEqual 10, E.Count(), empty | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_First(T) | |||
dim list : set list = OrderedList(10) | |||
dim E : set E = Enumerable(list) | |||
T.AssertEqual 1, E.First(), empty | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Last(T) | |||
dim list : set list = OrderedList(10) | |||
dim E : set E = Enumerable(list) | |||
T.AssertEqual 10, E.Last(), empty | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Chained(T) | |||
dim list : set list = OrderedList(10) | |||
dim it, item | |||
dim A : set A = Enumerable(list).Take(5).Where("item_ mod 2 <> 0") | |||
T.AssertEqual 3, A.Data.Count, "A.Count = " & A.Data.Count | |||
set it = A.Data.Iterator | |||
item = it.GetNext() | |||
T.AssertEqual 1, item, "A 1st item = " & item | |||
item = it.GetNext() | |||
T.AssertEqual 3, item, "A 2nd item = " & item | |||
item = it.GetNext() | |||
T.AssertEqual 5, item, "A 3rd item = " & item | |||
dim B : set B = Enumerable(list).Take(5).Select("V_ = item_ * item_") | |||
T.AssertEqual 5, B.Data.Count, "B.Count = " & B.Data.Count | |||
set it = B.Data.Iterator | |||
item = it.GetNext() | |||
T.AssertEqual 1, item, "B 1st item = " & item | |||
item = it.GetNext() | |||
T.AssertEqual 4, item, "B 2nd item = " & item | |||
item = it.GetNext() | |||
T.AssertEqual 9, item, "B 3rd item = " & item | |||
item = it.GetNext() | |||
T.AssertEqual 16, item, "B 4th item = " & item | |||
item = it.GetNext() | |||
T.AssertEqual 25, item, "B 5th item = " & item | |||
dim list2 : set list2 = new LinkedList_Class | |||
list2.Push "Alice" | |||
list2.Push "Bob" | |||
list2.Push "Charlie" | |||
list2.Push "Doug" | |||
list2.Push "Edward" | |||
list2.Push "Franklin" | |||
list2.Push "George" | |||
list2.Push "Hal" | |||
list2.Push "Isaac" | |||
list2.Push "Jeremy" | |||
dim C : C = Enumerable(list2) _ | |||
.Where("len(item_) > 5") _ | |||
.Map("set V_ = new ChainedExample_Class : V_.Data = item_ : V_.Length = len(item_)") _ | |||
.Max("item_.Length") | |||
T.AssertEqual 8, C, "C" | |||
End Sub | |||
End Class | |||
Class ChainedExample_Class | |||
Public Data | |||
Public Length | |||
End Class | |||
Function OrderedList(maxnum) | |||
dim list : set list = new LinkedList_Class | |||
dim i | |||
For i = 1 to maxnum | |||
list.Push i | |||
Next | |||
set OrderedList = list | |||
End Function | |||
Function AddOne(x) | |||
AddOne = x + 1 | |||
End Function | |||
Function GetLength(s) | |||
GetLength = Len(s) | |||
End Function | |||
Function IsLessThanThree(x) | |||
IsLessThanThree = x < 3 | |||
End Function | |||
Function IsMoreThanFourChars(s) | |||
IsMoreThanFourChars = Len(s) > 4 | |||
End Function | |||
%> |
@@ -0,0 +1,16 @@ | |||
<% | |||
Class HtmlHelper_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Public Sub DropDownList_Should_Handle_Recordsets") | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub DropDownList_Should_Handle_Recordsets(T) | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,261 @@ | |||
<% | |||
Const SMALL_SIZE = 10 | |||
Const MEDIUM_SIZE = 100 | |||
Const LARGE_SIZE = 1000 | |||
Const EXTREME_SIZE = 10000 | |||
Class Performance_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Private m_output | |||
Private Sub Out(s) | |||
m_output = m_output & s | |||
End Sub | |||
Private Sub OutLn(s) | |||
Out s & "<br>" | |||
End Sub | |||
Private Sub Class_Initialize | |||
m_output = "" | |||
OutLn "<table width='30%'>" | |||
End Sub | |||
Private Sub Class_Terminate | |||
Out "</table>" | |||
response.write m_output | |||
End Sub | |||
Private Sub Header(s) | |||
Out "<tr><th colspan='2'><h1>" & s & "</h1></th></tr>" | |||
Out "<tr><th style='text-align: left'>Name</th><th style='text-align: left'>Duration</th></tr>" | |||
End Sub | |||
Private Sub Blank | |||
Out "<tr><td> </td></tr>" | |||
End Sub | |||
Private Sub Profile(name, size, start, finish) | |||
Out "<tr><td>" & name & " (" & size & " nodes)</td><td>" & Round(finish - start, 2) * 1000 & "ms</td></tr>" | |||
End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_LinkedList", "Test_DynamicArray", "Test_ArrayList") | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'Linked List Performance Tests | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_LinkedList(T) | |||
Header "LinkedList_Class" | |||
LL_Push SMALL_SIZE | |||
LL_Get SMALL_SIZE | |||
LL_Remove SMALL_SIZE | |||
Blank | |||
LL_Push MEDIUM_SIZE | |||
LL_Get MEDIUM_SIZE | |||
LL_Remove MEDIUM_SIZE | |||
Blank | |||
LL_Push LARGE_SIZE | |||
LL_Get LARGE_SIZE | |||
LL_Remove LARGE_SIZE | |||
Blank | |||
LL_Push EXTREME_SIZE | |||
LL_Get EXTREME_SIZE | |||
LL_Remove EXTREME_SIZE | |||
End Sub | |||
Private Sub LL_Push(num_nodes) | |||
dim start, finish | |||
dim list : set list = new LinkedList_Class | |||
dim i | |||
start = Timer | |||
for i = 1 to num_nodes | |||
list.Push i | |||
next | |||
finish = Timer | |||
Profile "Add all nodes", num_nodes, start, finish | |||
End Sub | |||
Private Sub LL_Get(num_nodes) | |||
dim start, finish | |||
dim list : set list = new LinkedList_Class | |||
dim i | |||
start = Timer | |||
dim it : set it = list.Iterator | |||
while it.HasNext | |||
it.GetNext | |||
wend | |||
finish = Timer | |||
Profile "Get all nodes", num_nodes, start, finish | |||
End Sub | |||
Private Sub LL_Remove(num_nodes) | |||
dim start, finish | |||
dim list : set list = new LinkedList_Class | |||
dim i | |||
start = Timer | |||
while list.Count > 0 | |||
list.Pop | |||
wend | |||
finish = Timer | |||
Profile "Remove all nodes", num_nodes, start, finish | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
'ArrayList Performance Tests | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_ArrayList(T) | |||
Header ".NET ArrayList" | |||
AL_Add SMALL_SIZE | |||
AL_Get SMALL_SIZE | |||
AL_Remove SMALL_SIZE | |||
Blank | |||
AL_Add MEDIUM_SIZE | |||
AL_Get MEDIUM_SIZE | |||
AL_Remove MEDIUM_SIZE | |||
Blank | |||
AL_Add LARGE_SIZE | |||
AL_Get LARGE_SIZE | |||
AL_Remove LARGE_SIZE | |||
Blank | |||
AL_Add EXTREME_SIZE | |||
AL_Get EXTREME_SIZE | |||
AL_Remove EXTREME_SIZE | |||
End Sub | |||
Private Sub AL_Add(num_nodes) | |||
dim start, finish | |||
dim list : set list = Server.CreateObject("System.Collections.ArrayList") | |||
dim i | |||
start = Timer | |||
for i = 1 to num_nodes | |||
list.Add i | |||
next | |||
finish = Timer | |||
Profile "Add all nodes", num_nodes, start, finish | |||
End Sub | |||
Private Sub AL_Get(num_nodes) | |||
dim start, finish | |||
dim list : set list = Server.CreateObject("System.Collections.ArrayList") | |||
dim i | |||
start = Timer | |||
dim elt | |||
for each elt in list | |||
'nop | |||
next | |||
finish = Timer | |||
Profile "Get all nodes", num_nodes, start, finish | |||
End Sub | |||
Private Sub AL_Remove(num_nodes) | |||
dim start, finish | |||
dim list : set list = Server.CreateObject("System.Collections.ArrayList") | |||
dim i | |||
start = Timer | |||
list.RemoveRange 0, list.Count | |||
finish = Timer | |||
Profile "Remove all nodes", num_nodes, start, finish | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
' DynamicArray Tests | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_DynamicArray(T) | |||
Header "DynamicArray_Class" | |||
DA_Push SMALL_SIZE | |||
DA_Get SMALL_SIZE | |||
DA_Pop SMALL_SIZE | |||
Blank | |||
'DA_Push MEDIUM_SIZE | |||
'DA_Get MEDIUM_SIZE | |||
'DA_Pop MEDIUM_SIZE | |||
' | |||
'Blank | |||
' | |||
'DA_Push LARGE_SIZE | |||
'DA_Get LARGE_SIZE | |||
'DA_Pop LARGE_SIZE | |||
' | |||
'Blank | |||
' | |||
'DA_Push EXTREME_SIZE | |||
'DA_Get EXTREME_SIZE | |||
'DA_Pop EXTREME_SIZE | |||
End Sub | |||
Private Sub DA_Push(num_nodes) | |||
dim start, finish | |||
'dim arr : arr = array() | |||
'redim arr(100) | |||
'dim list : set list = DynamicArray(arr) | |||
dim list : set list = DynamicArray() | |||
dim i | |||
start = Timer | |||
for i = 1 to num_nodes | |||
list.Push i | |||
next | |||
finish = Timer | |||
Profile "Add all nodes", num_nodes, start, finish | |||
End Sub | |||
Private Sub DA_Get(num_nodes) | |||
dim start, finish | |||
dim list : set list = new DynamicArray_Class | |||
dim arr : arr = array() | |||
list.Initialize arr, 100 | |||
dim i | |||
start = Timer | |||
dim it : set it = list.Iterator | |||
while it.HasNext | |||
it.GetNext | |||
wend | |||
finish = Timer | |||
Profile "Get all nodes", num_nodes, start, finish | |||
End Sub | |||
Private Sub DA_Pop(num_nodes) | |||
dim start, finish | |||
dim list : set list = new DynamicArray_Class | |||
dim arr : arr = array() | |||
list.Initialize arr, 100 | |||
dim i | |||
start = Timer | |||
while list.Count > 0 | |||
list.Pop | |||
wend | |||
finish = Timer | |||
Profile "Remove all nodes", num_nodes, start, finish | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,60 @@ | |||
<% | |||
Class StringBuilder_Tests | |||
Public Sub Setup : End Sub | |||
Public Sub Teardown : End Sub | |||
Public Function TestCaseNames | |||
TestCaseNames = Array("Test_Initialized_Object_Should_Be_Empty", _ | |||
"Test_StringBuilder_Function_Should_Return_Initialized_Object", _ | |||
"Test_Default_Property_Should_Be_String", _ | |||
"Test_Default_String_Should_Not_Have_Spaces_Between_Entries", _ | |||
"Test_Join_Should_Allow_Custom_Delimiter_Between_Entries") | |||
End Function | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Initialized_Object_Should_Be_Empty(T) | |||
dim SB : set SB = new StringBuilder_Class | |||
T.AssertEqual "", SB.TO_String, "Initialized object does not have an empty string." | |||
set SB = Nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_StringBuilder_Function_Should_Return_Initialized_Object(T) | |||
dim SB : set SB = new StringBuilder_Class | |||
T.AssertEqual "", SB.TO_String, "StringBuilder() function did not return initialized object." | |||
set SB = Nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Default_Property_Should_Be_String(T) | |||
dim SB : set SB = StringBuilder() | |||
T.AssertType "String", typename( (SB) ), "Object should default to string output." | |||
set SB = Nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Default_String_Should_Not_Have_Spaces_Between_Entries(T) | |||
dim SB : set SB = StringBuilder() | |||
SB.Add "foo" | |||
SB.Add "bar" | |||
SB.Add "baz" | |||
T.AssertEqual "foobarbaz", SB.TO_String, "Default string should not have spaces between entries." | |||
set SB = Nothing | |||
End Sub | |||
'--------------------------------------------------------------------------------------------------------------------- | |||
Public Sub Test_Join_Should_Allow_Custom_Delimiter_Between_Entries(T) | |||
dim SB : set SB = StringBuilder() | |||
SB.Add "foo" | |||
SB.Add "bar" | |||
SB.Add "baz" | |||
T.AssertEqual "foo bar baz", SB.Get(" "), "Get() should allow a space between entries." | |||
T.AssertEqual "foo---bar---baz", SB.Get("---"), "Get() should allow --- between entries." | |||
T.AssertEqual "foo" & Chr(27) & "bar" & Chr(27) & "baz", SB.Get(Chr(27)), "Get() should allow non-standard ASCII character between entries." | |||
set SB = Nothing | |||
End Sub | |||
End Class | |||
%> |
@@ -0,0 +1,30 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!--#include file="../MVC/lib.all.asp"--> | |||
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"--> | |||
<!--#include file="TestCase_Automapper_Function.asp"--> | |||
<!--#include file="TestCase_Automapper_AutoMap.asp"--> | |||
<!--#include file="TestCase_Automapper_FlexMap.asp"--> | |||
<!--#include file="TestCase_Automapper_DynMap.asp"--> | |||
<!--#include file="TestCase_StringBuilder.asp"--> | |||
<!--#include file="TestCase_HtmlHelperDropdownLists.asp"--> | |||
<% | |||
'Used in some of the test case classes included into this file. | |||
'Could remove and just use inline numbers in the classes and comment what they mean when called. | |||
'Ref: http://www.w3schools.com/ado/ado_datatypes.asp | |||
dim adVarChar : adVarChar = CInt(200) | |||
dim adInteger : adInteger = CInt(3) | |||
dim adBoolean : adBoolean = CInt(11) | |||
dim adDate : adDate = CInt(7) | |||
dim Runner : set Runner = new UnitRunner | |||
Runner.AddTestContainer new Automapper_Function_Tests | |||
Runner.AddTestContainer new AutoMap_Tests | |||
Runner.AddTestContainer new FlexMap_Tests | |||
Runner.AddTestContainer new DynMap_Tests | |||
Runner.AddTestContainer new StringBuilder_Tests | |||
Runner.Display | |||
%> |
@@ -0,0 +1,26 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!--#include file="../MVC/lib.Automapper.asp"--> | |||
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"--> | |||
<!--#include file="TestCase_Automapper_Function.asp"--> | |||
<!--#include file="TestCase_Automapper_AutoMap.asp"--> | |||
<!--#include file="TestCase_Automapper_FlexMap.asp"--> | |||
<!--#include file="TestCase_Automapper_DynMap.asp"--> | |||
<% | |||
'Used in each of the test case classes included into this file | |||
'could remove and just use inline numbers in the classes and comment what they mean when called | |||
'Ref: http://www.w3schools.com/ado/ado_datatypes.asp | |||
dim adVarChar : adVarChar = CInt(200) | |||
dim adInteger : adInteger = CInt(3) | |||
dim adBoolean : adBoolean = CInt(11) | |||
dim adDate : adDate = CInt(7) | |||
dim Runner : set Runner = new UnitRunner | |||
Runner.AddTestContainer new Automapper_Function_Tests | |||
Runner.AddTestContainer new AutoMap_Tests | |||
Runner.AddTestContainer new FlexMap_Tests | |||
Runner.AddTestContainer new DynMap_Tests | |||
Runner.Display | |||
%> |
@@ -0,0 +1,12 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!--#include file="../MVC/lib.all.asp"--> | |||
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"--> | |||
<!--#include file="TestCase_EnumerableHelper.asp"--> | |||
<% | |||
dim Runner | |||
set Runner = new UnitRunner | |||
Runner.AddTestContainer new EnumerableHelper_Tests | |||
Runner.Display | |||
%> |
@@ -0,0 +1,12 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!--#include file="../MVC/lib.Strings.asp"--> | |||
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"--> | |||
<!--#include file="TestCase_HtmlHelperDropdownLists.asp"--> | |||
<% | |||
dim Runner | |||
set Runner = new UnitRunner | |||
Runner.AddTestContainer new HtmlHelper_Tests | |||
Runner.Display | |||
%> |
@@ -0,0 +1,12 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!--#include file="../MVC/lib.all.asp"--> | |||
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"--> | |||
<!--#include file="TestCase_Performance.asp"--> | |||
<% | |||
dim Runner | |||
set Runner = new UnitRunner | |||
Runner.AddTestContainer new Performance_Tests | |||
Runner.Display | |||
%> |
@@ -0,0 +1,12 @@ | |||
<% | |||
Option Explicit | |||
%> | |||
<!--#include file="../MVC/lib.Strings.asp"--> | |||
<!--#include file="ASPUnit/include/ASPUnitRunner.asp"--> | |||
<!--#include file="TestCase_StringBuilder.asp"--> | |||
<% | |||
dim Runner | |||
set Runner = new UnitRunner | |||
Runner.AddTestContainer new StringBuilder_Tests | |||
Runner.Display | |||
%> |
@@ -0,0 +1,3 @@ | |||
<% Response.Redirect "App/Controllers/Jurisdiction/JurisdictionController.asp" %> | |||
@@ -0,0 +1,10 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<configuration> | |||
<system.webServer> | |||
<defaultDocument> | |||
<files> | |||
<add value="index.asp" /> | |||
</files> | |||
</defaultDocument> | |||
</system.webServer> | |||
</configuration> |
Powered by TurnKey Linux.