/// <summary> Read the contact form system configuration file from within the config subfolder on the web app </summary>
        /// <param name="ConfigFile"> Complete path and name of the configuration file to read </param>
        /// <returns> Built configuration object for the contact form </returns>
        public static ContactForm_Configuration Read_Config(string ConfigFile)
        {
            ContactForm_Configuration returnValue = new ContactForm_Configuration();

            // Streams used for reading
            Stream readerStream = null;
            XmlTextReader readerXml = null;

            try
            {
                // Open a link to the file
                readerStream = new FileStream(ConfigFile, FileMode.Open, FileAccess.Read);

                // Open a XML reader connected to the file
                readerXml = new XmlTextReader(readerStream);

                while (readerXml.Read())
                {
                    if (readerXml.NodeType == XmlNodeType.Element)
                    {
                        switch (readerXml.Name.ToLower())
                        {
                            case "contactform":
                                Read_ContactForm_Details(readerXml.ReadSubtree(), returnValue);
                                break;
                        }
                    }
                }
            }
            catch (Exception ee)
            {
                returnValue.Error = ee.Message;
            }
            finally
            {
                if (readerXml != null)
                {
                    readerXml.Close();
                }
                if (readerStream != null)
                {
                    readerStream.Close();
                }
            }

            return returnValue;
        }
        /// <summary> Constructor for a new instance of the InstanceWide_Configuration class </summary>
        public InstanceWide_Configuration()
        {
            // Create some of the configuration stuff
            Authentication = new Authentication_Configuration();
            BriefItemMapping = new BriefItemMapping_Configuration();
            ContactForm = new ContactForm_Configuration();
            Engine = new Engine_Server_Configuration();
            Extensions = new Extension_Configuration();
            QualityControlTool = new QualityControl_Configuration();
            Metadata = new Metadata_Configuration();
            OAI_PMH = new OAI_PMH_Configuration();
            UI = new InstanceWide_UI_Configuration();
            Source = new Configuration_Source_Info();

            // Set some defaults
            HasData = false;
        }
Esempio n. 3
0
        /// <summary> Constructor for a new instance of the InstanceWide_Configuration class </summary>
        public InstanceWide_Configuration()
        {
            // Create some of the configuration stuff
            Authentication     = new Authentication_Configuration();
            BriefItemMapping   = new BriefItemMapping_Configuration();
            ContactForm        = new ContactForm_Configuration();
            Engine             = new Engine_Server_Configuration();
            Extensions         = new Extension_Configuration();
            QualityControlTool = new QualityControl_Configuration();
            Metadata           = new Metadata_Configuration();
            OAI_PMH            = new OAI_PMH_Configuration();
            UI     = new InstanceWide_UI_Configuration();
            Source = new Configuration_Source_Info();

            // Set some defaults
            HasData = false;
        }
        private static void Read_ContactForm_Details(XmlReader readerXml, ContactForm_Configuration config)
        {
            // Read the attributes
            if (readerXml.MoveToAttribute("Name"))
                config.Name = readerXml.Value.Trim();

            // Just step through the subtree of this
            while (readerXml.Read())
            {
                if (readerXml.NodeType == XmlNodeType.Element)
                {
                    switch (readerXml.Name.ToLower())
                    {
                        case "elements":
                            read_contactform_elements(readerXml.ReadSubtree(), config);
                            break;
                    }
                }
            }
        }
        private static void read_contactform_element(XmlReader readerXml, ContactForm_Configuration config, ContactForm_Configuration_Element_Type_Enum type)
        {
            // Create the element object
            ContactForm_Configuration_Element newElement = new ContactForm_Configuration_Element(type);

            // Read the attributes
            if (readerXml.MoveToAttribute("Name"))
            {
                newElement.Name = readerXml.Value.Trim();
                if (String.IsNullOrEmpty(newElement.QueryText.DefaultValue))
                    newElement.QueryText.DefaultValue = newElement.Name.Replace("_", " ") + ":";
            }
            if (readerXml.MoveToAttribute("CssClass"))
                newElement.CssClass = readerXml.Value.Trim();
            if (readerXml.MoveToAttribute("Query"))
                newElement.QueryText.DefaultValue = readerXml.Value.Trim();
            else if (readerXml.MoveToAttribute("Text"))
                newElement.QueryText.DefaultValue = readerXml.Value.Trim();
            if (readerXml.MoveToAttribute("UserAttribute"))
            {
                string attr = readerXml.Value.Trim();
                newElement.UserAttribute = User_Object_Attribute_Mapping_Enum_Converter.ToEnum(attr);
            }
            if (readerXml.MoveToAttribute("AlwaysShow"))
            {
                string alwaysShow = readerXml.Value.Trim();
                switch (alwaysShow.ToLower())
                {
                    case "false":
                        newElement.AlwaysShow = false;
                        break;

                    case "true":
                        newElement.AlwaysShow = true;
                        break;
                }
            }
            if (readerXml.MoveToAttribute("Required"))
            {
                string required = readerXml.Value.Trim();
                switch (required.ToLower())
                {
                    case "false":
                        newElement.Required = false;
                        break;

                    case "true":
                        newElement.Required = true;
                        break;
                }
            }

            readerXml.MoveToElement();

            // Just step through the subtree of this
            XmlReader subTreeReader = readerXml.ReadSubtree();
            while (subTreeReader.Read())
            {
                if (subTreeReader.NodeType == XmlNodeType.Element)
                {
                    switch (subTreeReader.Name.ToLower())
                    {
                        case "option":
                            if (!subTreeReader.IsEmptyElement)
                            {
                                subTreeReader.Read();
                                if (newElement.Options == null)
                                    newElement.Options = new List<string>();
                                newElement.Options.Add(subTreeReader.Value.Trim());
                            }
                            break;

                        case "language":
                            if (!subTreeReader.IsEmptyElement)
                            {
                                if (subTreeReader.MoveToAttribute("Code"))
                                {
                                    string language_code = subTreeReader.Value.Trim();
                                    Web_Language_Enum enum_lang = Web_Language_Enum_Converter.Code_To_Enum(language_code);
                                    if (enum_lang != Web_Language_Enum.UNDEFINED)
                                    {
                                        subTreeReader.Read();
                                        newElement.QueryText.Add_Translation(enum_lang, subTreeReader.Value.Trim());
                                    }
                                }
                            }
                            break;
                    }
                }
            }

            config.Add_Element(newElement);
        }
        private static void read_contactform_elements(XmlReader readerXml, ContactForm_Configuration config)
        {
            // Just step through the subtree of this
            while (readerXml.Read())
            {
                if (readerXml.NodeType == XmlNodeType.Element)
                {
                    switch (readerXml.Name.ToLower())
                    {
                        case "explanationtext":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.ExplanationText);
                            break;

                        case "hiddenvalue":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.HiddenValue);
                            break;

                        case "textbox":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.TextBox);
                            break;

                        case "selectbox":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.SelectBox);
                            break;

                        case "subject":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.Subject);
                            break;

                        case "email":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.Email);
                            break;

                        case "radioset":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.RadioSet);
                            break;

                        case "checkboxset":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.CheckBoxSet);
                            break;

                        case "textarea":
                            read_contactform_element(readerXml, config, ContactForm_Configuration_Element_Type_Enum.TextArea);
                            break;
                    }
                }
            }
        }
        /// <summary> Constructor for a new instance of the Contact_HtmlSubwriter class </summary>
        /// <param name="Last_Mode"> URL for the last mode this user was in before selecting contact us</param>
        /// <param name="UserHistoryRequestInfo"> Some history and user information to include in the final email </param>
        /// <param name="RequestSpecificValues"> All the necessary, non-global data specific to the current request </param>
        public Contact_HtmlSubwriter(string Last_Mode, string UserHistoryRequestInfo, RequestCache RequestSpecificValues)
            : base(RequestSpecificValues)
        {
            // Save the parameters
            lastMode = Last_Mode;

            // Set the error message to an empty string to start with
            errorMsg = String.Empty;

            // Determine the configuration to use for this contact us form
            configuration = UI_ApplicationCache_Gateway.Settings.ContactForm;
            if ((RequestSpecificValues.Hierarchy_Object != null) && (RequestSpecificValues.Hierarchy_Object.ContactForm != null))
                configuration = RequestSpecificValues.Hierarchy_Object.ContactForm;

            postBackValues = new Dictionary<string, string>();
            foreach (string thisKey in HttpContext.Current.Request.Form.AllKeys)
            {
                if (thisKey != "item_action")
                {
                    string value = HttpContext.Current.Request.Form[thisKey];
                    if (!String.IsNullOrEmpty(value))
                    {
                        postBackValues[thisKey] = value;
                    }
                }
            }

            // If this is a post back, send email
            if (HttpContext.Current.Request.Form["item_action"] == null) return;

            string action = HttpContext.Current.Request.Form["item_action"];
            if (action == "email")
            {
                // Some values to collect information
                string subject = "Contact [" + RequestSpecificValues.Current_Mode.Instance_Abbreviation + " Submission]";
                string message_from = RequestSpecificValues.Current_Mode.Instance_Abbreviation + "<" + UI_ApplicationCache_Gateway.Settings.Email.Setup.DefaultFromAddress + ">";
                if (!String.IsNullOrEmpty(UI_ApplicationCache_Gateway.Settings.Email.Setup.DefaultFromDisplay))
                {
                    message_from = UI_ApplicationCache_Gateway.Settings.Email.Setup.DefaultFromDisplay + "<" + UI_ApplicationCache_Gateway.Settings.Email.Setup.DefaultFromAddress + ">";
                }
                int text_area_count = configuration.TextAreaElementCount;
                StringBuilder emailBuilder = new StringBuilder();

                // Make sure all the required fields are completed and build the emails
                StringBuilder errorBuilder = new StringBuilder();
                int control_count = 1;
                foreach (ContactForm_Configuration_Element thisElement in configuration.FormElements)
                {
                    if ((thisElement.Element_Type != ContactForm_Configuration_Element_Type_Enum.HiddenValue) && (thisElement.Element_Type != ContactForm_Configuration_Element_Type_Enum.ExplanationText))
                    {
                        // Determine the name of this control
                        string control_name = String.Empty;
                        if (!String.IsNullOrEmpty(thisElement.Name))
                            control_name = thisElement.Name.Replace(" ", "_");
                        if (thisElement.Element_Type == ContactForm_Configuration_Element_Type_Enum.Subject)
                            control_name = "subject";
                        if (thisElement.Element_Type == ContactForm_Configuration_Element_Type_Enum.Email)
                            control_name = "email";
                        if (String.IsNullOrEmpty(control_name))
                            control_name = "Control" + control_count;

                        if (!postBackValues.ContainsKey(control_name))
                        {
                            if (thisElement.Required)
                                errorBuilder.Append(thisElement.QueryText.Get_Value(RequestSpecificValues.Current_Mode.Language).Replace(":", "") + "<br />");
                        }
                        else
                        {
                            if (thisElement.Element_Type == ContactForm_Configuration_Element_Type_Enum.Subject)
                            {
                                subject = postBackValues[control_name] + " [" + RequestSpecificValues.Current_Mode.Instance_Abbreviation + " Submission]";
                            }
                            else if (thisElement.Element_Type == ContactForm_Configuration_Element_Type_Enum.Email)
                            {
                                string entered_message_from = postBackValues[control_name];

                                if (!IsValidEmail(entered_message_from))
                                {
                                    errorBuilder.Append(thisElement.QueryText.Get_Value(RequestSpecificValues.Current_Mode.Language).Replace(":", "") + " (INVALID) <br />");
                                }

                                message_from = RequestSpecificValues.Current_Mode.Instance_Abbreviation + "<" + entered_message_from + ">";
                                if (!String.IsNullOrEmpty(UI_ApplicationCache_Gateway.Settings.Email.Setup.DefaultFromDisplay))
                                {
                                    message_from = UI_ApplicationCache_Gateway.Settings.Email.Setup.DefaultFromDisplay + "<" + entered_message_from + ">";
                                }

                                emailBuilder.Append("Email:\t\t" + entered_message_from + "\n");

                            }
                            else if (thisElement.Element_Type == ContactForm_Configuration_Element_Type_Enum.TextArea)
                            {
                                if (text_area_count == 1)
                                {
                                    emailBuilder.Insert(0, postBackValues[control_name] + "\n\n");
                                }
                                else
                                {
                                    if (emailBuilder.Length > 0)
                                        emailBuilder.Append("\n");
                                    emailBuilder.Append(thisElement.QueryText.Get_Value(RequestSpecificValues.Current_Mode.Language) + "\n");
                                    emailBuilder.Append(postBackValues[control_name] + "\n\n");
                                }
                            }
                            else
                            {

                                emailBuilder.Append(control_name.Replace("_", " ") + ":\t\t" + postBackValues[control_name] + "\n");
                            }
                        }

                        control_count++;
                    }
                }

                if (errorBuilder.Length > 0)
                {
                    errorMsg = errorBuilder.ToString();
                    return;
                }

                // Create the final body
                string email_body = emailBuilder + "\n\n" + UserHistoryRequestInfo;

                // Determine the sendee
                string sendTo = UI_ApplicationCache_Gateway.Settings.Email.System_Email;
                if ((RequestSpecificValues.Hierarchy_Object != null) && (!String.IsNullOrEmpty(RequestSpecificValues.Hierarchy_Object.Contact_Email)))
                {
                    sendTo = RequestSpecificValues.Hierarchy_Object.Contact_Email.Replace(";", ",");
                }

                int userid = -1;
                if (RequestSpecificValues.Current_User != null)
                    userid = RequestSpecificValues.Current_User.UserID;

                EmailInfo newEmail = new EmailInfo
                {
                    Body = email_body,
                    isContactUs = true,
                    isHTML = false,
                    RecipientsList = sendTo,
                    Subject = subject,
                    UserID = userid,
                    FromAddress = message_from
                };

                string error_msg;
                bool email_error = !Email_Helper.SendEmail(newEmail, out error_msg);

                // Send back to the home for this collection, sub, or group
                if (email_error)
                {
                    HttpContext.Current.Response.Redirect(UI_ApplicationCache_Gateway.Settings.Servers.System_Error_URL, false);
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                }
                else
                {
                    // Send back to the home for this collection, sub, or group
                    RequestSpecificValues.Current_Mode.Mode = Display_Mode_Enum.Contact_Sent;
                    UrlWriterHelper.Redirect(RequestSpecificValues.Current_Mode);
                }
            }
        }