Imports Page1Solutions.VirtualCounselor.DataObjects Imports Page1Solutions.VirtualCounselor.FormHandler Imports System.Collections.Generic Partial Class theBennett Inherits System.Web.UI.Page 'edit this section based on the client Private url As String = "http://www.carolforpeace.com" Private Shadows clientID As Int16 = 386 Private _errorPage As String = "error.html" Private _thankYouPage As String = "thanks.html" 'end edit section Private reg As String = "http(s)?://([\w-]+\.)+[\w-]+" Private Shadows ReadOnly Property ErrorPage() As String Get Dim re As Regex = New Regex(reg, RegexOptions.IgnoreCase) Dim m As Match = re.Match(url) Return m.ToString & "/" & _errorPage End Get End Property Private ReadOnly Property ThankYouPage() As String Get Dim re As Regex = New Regex(reg, RegexOptions.IgnoreCase) Dim m As Match = re.Match(url) Return m.ToString & "/" & _thankYouPage End Get End Property Private _accessID As Guid Protected ReadOnly Property AccessID() As Guid Get If ViewState("AccessID") Is Nothing Then _accessID = Guid.NewGuid ViewState("AccessID") = _accessID Else _accessID = ViewState("AccessID") End If Return _accessID End Get End Property Private formFieldID As Integer Private formHandler As New FormProcessor Private _formID As String Protected ReadOnly Property FormID() As String Get If ViewState("FormID") Is Nothing Then _formID = Request.Form("hfFormID") ViewState("FormID") = Request.Form("hfFormID") Else _formID = ViewState("FormID") End If Return _formID End Get End Property Private formHandlerResponse As objVCResponse Private _formPanel As Panel = Nothing Protected ReadOnly Property FormPanel() As Panel Get If _formPanel Is Nothing Then _formPanel = Page.FindControl("pnl" & FormID) End If Return _formPanel End Get End Property Private _pageReferrer As String Public Property PageReferrer() As String Get If Not ViewState("PageReferrer") Is Nothing Then _pageReferrer = ViewState("PageReferrer") End If Return _pageReferrer End Get Set(ByVal value As String) ViewState("PageReferrer") = value _pageReferrer = value End Set End Property Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then Try If Request.Form("hfFormID") Is Nothing Then Response.Redirect(ErrorPage, False) End If Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 1", ex.Message, ex.StackTrace & "
ClientID: " & clientID) Response.Redirect(ErrorPage, False) Return End Try Try If Session("FormCollection") Is Nothing Then Session.Remove("FormCollection") End If Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 2", ex.Message, ex.StackTrace & "
ClientID: " & clientID) Response.Redirect(ErrorPage, False) Return End Try Try If Not Request.ServerVariables("HTTP_REFERER") Is Nothing Then PageReferrer = Request.ServerVariables("HTTP_REFERER") Else PageReferrer = "N/A" End If Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 3", ex.Message, ex.StackTrace & "
ClientID: " & clientID) Response.Redirect(ErrorPage, False) Return End Try Dim stringBuilder As New StringBuilder Dim i As Integer = 0 Dim formCollection As New List(Of objFormSubmission) For Each item As String In Request.Form stringBuilder.Append("Item " & item & "
") Next Try If Not Request.Form Is Nothing Then For Each item As String In Request.Form If (Not item.Contains("hfFormID")) And (CType(Request.Form.Keys(i), String)).Contains(FormID) Then If Not Request.Form(i) Is Nothing Then formCollection.Add(New objFormSubmission(Request.Form.Keys(i), Server.HtmlEncode(Request.Form(i)))) End If End If i += 1 Next End If Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 4", ex.Message, ex.StackTrace & "
ClientID: " & clientID & "
i: " & i & "
Form: " & stringBuilder.ToString) Response.Redirect(ErrorPage, False) Return End Try If formCollection.Count = 0 Then Response.Redirect(ErrorPage, False) Return Else 'Validate html form formHandlerResponse = New objVCResponse Try formHandlerResponse = formHandler.ProcessForm(clientID, FormID, formCollection, False, PageReferrer, Request.UserHostAddress, Session.SessionID, AccessID) Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 5", ex.Message, ex.StackTrace & "
ClientID: " & clientID) Response.Redirect(ErrorPage, False) Return End Try If formHandlerResponse.Result = -1 Then Response.Redirect(ErrorPage, False) Return ElseIf formHandlerResponse.Result = 0 Then If Not FormPanel Is Nothing Then 'Show the form FormPanel.Visible = True 'Populate Controls Try Populate_Controls(formCollection) Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 6", ex.Message, ex.StackTrace & "
ClientID: " & clientID) End Try 'Set Attributes Try Set_Attributes(formCollection) Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler 7", ex.Message, ex.StackTrace & "
ClientID: " & clientID) End Try Else 'panel doesn't exist 'redirect the user to the thank you page (false positive) Response.Redirect(ThankYouPage, False) Return End If Session.Remove("FormCollection") Dim errors As New StringBuilder errors.Append("") lblErrors.Text = errors.ToString ElseIf formHandlerResponse.Result = 1 Then 'Form is valid 'Hide the form 'formCollection needs to be available for the submit button FormPanel.Visible = False Session("FormCollection") = formCollection Return ElseIf formHandlerResponse.Result = 2 Then Response.Redirect(ThankYouPage, False) Return End If End If End If End Sub Private Sub Populate_Controls(ByVal formCollection As List(Of objFormSubmission)) Dim checkBox As CheckBox Dim checkBoxList As CheckBoxList Dim cbl As Int16 Dim cblValues() As String Dim dropDownList As DropDownList Dim listBox As ListBox Dim lb As Int16 Dim lbValues() As String Dim radioButton As RadioButton Dim radioButtonList As RadioButtonList Dim textBox As TextBox 'For Each control As Control In FormPanel.Controls For Each item As objFormSubmission In formCollection If item.FieldName.Contains("cb" & _formID & "ID") Then 'checkBox checkBox = FormPanel.FindControl(item.FieldName) If Not checkBox Is Nothing Then If checkBox.Text = item.FieldValue Then checkBox.Checked = True End If End If ElseIf item.FieldName.Contains("cbl" & _formID & "ID") Then 'checkBoxList cbl = 0 checkBoxList = FormPanel.FindControl(item.FieldName) If Not checkBoxList Is Nothing Then cblValues = item.FieldValue.Split(",") For Each s As String In cblValues If checkBoxList.Items.Contains(New ListItem(cblValues(cbl))) Then checkBoxList.Items.FindByValue(cblValues(cbl)).Selected = True cbl += 1 End If Next End If ElseIf item.FieldName.Contains("ddl" & _formID & "ID") Then 'dropDownList Dim listItem As New ListItem(item.FieldValue) dropDownList = FormPanel.FindControl(item.FieldName) If Not dropDownList Is Nothing Then dropDownList.ClearSelection() If dropDownList.Items.Contains(New ListItem(item.FieldValue)) Then dropDownList.Items.FindByValue(item.FieldValue).Selected = True End If End If ElseIf item.FieldName.Contains("lb" & _formID & "ID") Then 'listBox lb = 0 listBox = FormPanel.FindControl(item.FieldName) If Not listBox Is Nothing Then lbValues = item.FieldValue.Split(",") For Each s As String In lbValues If listBox.Items.Contains(New ListItem(lbValues(lb))) Then listBox.Items.FindByValue(lbValues(lb)).Selected = True lb += 1 End If Next End If ElseIf item.FieldName.Contains("rb" & _formID & "ID") Then 'radioButton radioButton = FormPanel.FindControl(item.FieldName) If Not radioButton Is Nothing Then If radioButton.Text = item.FieldValue Then radioButton.Checked = True End If End If ElseIf item.FieldName.Contains("rbl" & _formID & "ID") Then 'radioButtonList radioButtonList = FormPanel.FindControl(item.FieldName) If Not radioButtonList Is Nothing Then radioButtonList.SelectedValue = item.FieldValue End If ElseIf item.FieldName.Contains("txt" & _formID & "ID") Then 'textBox textBox = FormPanel.FindControl(item.FieldName) If Not textBox Is Nothing Then textBox.Text = item.FieldValue End If End If Next 'Next End Sub Private Sub Set_Attributes(ByVal formCollection As List(Of objFormSubmission)) Dim initialValue As String = "" Dim initialValueCollection As New List(Of objInitialValue) Dim initialValueMatch As New List(Of objInitialValue) Dim textBox As TextBox initialValueCollection = formHandler.GetInitialValues(clientID, FormID) If Not initialValueCollection Is Nothing Then For Each control As Control In FormPanel.Controls If control.GetType.ToString = "System.Web.UI.WebControls.TextBox" Then textBox = FormPanel.FindControl(control.ID) If textBox.ID.Contains("txt" & _formID & "ID") Then formFieldID = textBox.ID.Replace("txt" & _formID & "ID", Nothing) End If initialValueMatch = initialValueCollection.FindAll(AddressOf FindInitialValue) For Each item As objInitialValue In initialValueMatch initialValue = item.InitialValue Next If textBox.Text = initialValue Then textBox.Attributes.Add("onFocus", "clearText(this);") textBox.Attributes.Add("onBlur", "replaceText(this);") Else textBox.Attributes.Remove("onFocus") textBox.Attributes.Remove("onBlur") End If End If Next End If End Sub Private Function FindInitialValue(ByVal item As objInitialValue) As Boolean If item.FormFieldID = formFieldID Then Return True Else Return False End If End Function Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Try Dim formCollection As New List(Of objFormSubmission) If Not Session("FormCollection") Is Nothing Then formCollection = Session("FormCollection") Else FormPanel.Visible = True 'Validate form Dim control As Control Dim controlID As String Dim i As Int16 = 0 Dim t As Int16 = 0 Dim type As String Dim cblItems As New StringBuilder Dim lbItems As New StringBuilder Dim ci As Int16 = 0 Dim li As Int16 = 0 Dim ri As Int16 = 0 For Each controls As Control In FormPanel.Controls If Not FormPanel.Controls(i).ID = "" Then controlID = FormPanel.Controls(i).ID control = FormPanel.FindControl(controlID) type = FormPanel.Controls(i).GetType().ToString If type = "System.Web.UI.WebControls.CheckBox" Then Dim checkBox As CheckBox = FormPanel.FindControl(controlID) If checkBox.Checked = True Then formCollection.Add(New objFormSubmission(checkBox.ID, checkBox.Text)) End If ElseIf type = "System.Web.UI.WebControls.CheckBoxList" Then Dim checkBoxList As CheckBoxList = FormPanel.FindControl(controlID) ci = 0 For Each item As ListItem In checkBoxList.Items If checkBoxList.Items(ci).Selected = True Then cblItems.Append(checkBoxList.Items(ci).Value) cblItems.Append(", ") End If ci += 1 Next If cblItems.Length > 0 Then cblItems.Remove(cblItems.ToString.Length - 2, 2) formCollection.Add(New objFormSubmission(checkBoxList.ID, cblItems.ToString)) End If ElseIf type = "System.Web.UI.WebControls.DropDownList" Then Dim dropDownList As DropDownList = FormPanel.FindControl(controlID) formCollection.Add(New objFormSubmission(dropDownList.ID, dropDownList.SelectedValue)) ElseIf type = "System.Web.UI.WebControls.ListBox" Then li = 0 Dim listBox As ListBox = FormPanel.FindControl(controlID) For Each item As ListItem In listBox.Items If listBox.Items(li).Selected = True Then lbItems.Append(listBox.Items(li).Value) lbItems.Append(", ") End If li += 1 Next If lbItems.Length > 0 Then lbItems.Remove(lbItems.ToString.Length - 2, 2) formCollection.Add(New objFormSubmission(listBox.ID, lbItems.ToString)) End If ElseIf type = "System.Web.UI.WebControls.RadioButton" Then Dim radioButton As RadioButton = FormPanel.FindControl(controlID) If radioButton.Checked = True Then formCollection.Add(New objFormSubmission(radioButton.ID, radioButton.Text)) End If ElseIf type = "System.Web.UI.WebControls.RadioButtonList" Then Dim radioButtonList As RadioButtonList = FormPanel.FindControl(controlID) ri = 0 For Each item As ListItem In radioButtonList.Items If radioButtonList.Items(ri).Selected = True Then formCollection.Add(New objFormSubmission(radioButtonList.ID, radioButtonList.Items(ri).Value)) End If ri += 1 Next ElseIf type = "System.Web.UI.WebControls.TextBox" Then Dim textBox As TextBox = FormPanel.FindControl(controlID) If Not textBox.Text.Length = 0 Then formCollection.Add(New objFormSubmission(textBox.ID, textBox.Text)) End If End If End If i += 1 Next Session("FormCollection") = formCollection End If If Page.IsValid Then If Session("FormCollection") Is Nothing Then FormPanel.Visible = True End If formHandlerResponse = New objVCResponse formHandlerResponse = formHandler.ProcessForm(clientID, FormID, Session("FormCollection"), True, PageReferrer, Request.UserHostAddress, Session.SessionID, AccessID) Dim errors As New StringBuilder errors.Append("") lblErrors.Text = errors.ToString If formHandlerResponse.Result = -1 Then Response.Redirect(ErrorPage, False) ElseIf formHandlerResponse.Result = 0 Then Session.Remove("FormCollection") FormPanel.Visible = True Else 'Redirect to the thank you page Session.Remove("FormCollection") Response.Redirect(ThankYouPage, False) End If End If Catch ex As Exception Dim mailError As New Page1Solutions.VirtualCounselor.Mail.MailError mailError.SendFormHandlerError("FormHandler btnSubmit_Click", ex.Message, ex.StackTrace) End Try End Sub End Class