// // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com) // // Authors: // Vladimir Krasnov // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // #if NET_2_0 using System; using System.Web; using System.Web.UI; using System.Web.Security; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Text; using System.Net.Mail; namespace System.Web.UI.WebControls { [BindableAttribute (false)] public class CreateUserWizard : Wizard { public static readonly string ContinueButtonCommandName = "Continue"; private string _password = ""; private string _confirmPassword = ""; private MembershipProvider _provider = null; private ITextControl _errorMessageLabel = null; private MailDefinition _mailDefinition = null; private Style _textBoxStyle = null; private Style _validatorTextStyle = null; private TableItemStyle _completeSuccessTextStyle = null; private TableItemStyle _errorMessageStyle = null; private TableItemStyle _hyperLinkStyle = null; private TableItemStyle _instructionTextStyle = null; private TableItemStyle _labelStyle = null; private TableItemStyle _passwordHintStyle = null; private TableItemStyle _titleTextStyle = null; Style _createUserButtonStyle; Style _continueButtonStyle; private static readonly object CreatedUserEvent = new object (); private static readonly object CreateUserErrorEvent = new object (); private static readonly object CreatingUserEvent = new object (); private static readonly object ContinueButtonClickEvent = new object (); private static readonly object SendingMailEvent = new object (); private static readonly object SendMailErrorEvent = new object (); private CompleteWizardStep _completeWizardStep = null; private CreateUserWizardStep _createUserWizardStep = null; public CreateUserWizard () { } #region Public Properties public override int ActiveStepIndex { get { return base.ActiveStepIndex; } set { base.ActiveStepIndex = value; } } [LocalizableAttribute (true)] [ThemeableAttribute (false)] public virtual string Answer { get { object o = ViewState ["Answer"]; return (o == null) ? String.Empty : (string) o; } set { if (value == null) ViewState.Remove ("Answer"); else ViewState ["Answer"] = value; } } [LocalizableAttribute (true)] public virtual string AnswerLabelText { get { object o = ViewState ["AnswerLabelText"]; return (o == null) ? Locale.GetText ("Security Answer:") : (string) o; } set { if (value == null) ViewState.Remove ("AnswerLabelText"); else ViewState ["AnswerLabelText"] = value; } } [LocalizableAttribute (true)] public virtual string AnswerRequiredErrorMessage { get { object o = ViewState ["AnswerRequiredErrorMessage"]; return (o == null) ? Locale.GetText ("Security answer is required.") : (string) o; } set { if (value == null) ViewState.Remove ("AnswerRequiredErrorMessage"); else ViewState ["AnswerRequiredErrorMessage"] = value; } } [ThemeableAttribute (false)] public virtual bool AutoGeneratePassword { get { object o = ViewState ["AutoGeneratePassword"]; return (o == null) ? false : (bool) o; } set { ViewState ["AutoGeneratePassword"] = value; } } public CompleteWizardStep CompleteStep { get { if (_completeWizardStep == null) { for (int i = 0; i < WizardSteps.Count; i++) if (WizardSteps [i] is CompleteWizardStep) { _completeWizardStep = (CompleteWizardStep) WizardSteps [i]; if (_completeWizardStep.Wizard == null) _completeWizardStep.SetWizard (this); } } return _completeWizardStep; } } [LocalizableAttribute (true)] public virtual string CompleteSuccessText { get { object o = ViewState ["CompleteSuccessText"]; return (o == null) ? Locale.GetText ("Your account has been successfully created.") : (string) o; } set { if (value == null) ViewState.Remove ("CompleteSuccessText"); else ViewState ["CompleteSuccessText"] = value; } } public TableItemStyle CompleteSuccessTextStyle { get { if (_completeSuccessTextStyle == null) { _completeSuccessTextStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _completeSuccessTextStyle).TrackViewState (); } return _completeSuccessTextStyle; } } public virtual string ConfirmPassword { get { return _confirmPassword; } } [LocalizableAttribute (true)] public virtual string ConfirmPasswordCompareErrorMessage { get { object o = ViewState ["ConfirmPasswordCompareErrorMessage"]; return (o == null) ? Locale.GetText ("The Password and Confirmation Password must match.") : (string) o; } set { if (value == null) ViewState.Remove ("ConfirmPasswordCompareErrorMessage"); else ViewState ["ConfirmPasswordCompareErrorMessage"] = value; } } [LocalizableAttribute (true)] public virtual string ConfirmPasswordLabelText { get { object o = ViewState ["ConfirmPasswordLabelText"]; return (o == null) ? Locale.GetText ("Confirm Password:") : (string) o; } set { if (value == null) ViewState.Remove ("ConfirmPasswordLabelText"); else ViewState ["ConfirmPasswordLabelText"] = value; } } [LocalizableAttribute (true)] public virtual string ConfirmPasswordRequiredErrorMessage { get { object o = ViewState ["ConfirmPasswordRequiredErrorMessage"]; return (o == null) ? Locale.GetText ("Confirm Password is required.") : (string) o; } set { if (value == null) ViewState.Remove ("ConfirmPasswordRequiredErrorMessage"); else ViewState ["ConfirmPasswordRequiredErrorMessage"] = value; } } public virtual string ContinueButtonImageUrl { get { return ViewState.GetString ("ContinueButtonImageUrl", String.Empty); } set { ViewState ["ContinueButtonImageUrl"] = value; } } public Style ContinueButtonStyle { get { if (_continueButtonStyle == null) { _continueButtonStyle = new Style (); if (IsTrackingViewState) ((IStateManager) _continueButtonStyle).TrackViewState (); } return _continueButtonStyle; } } [LocalizableAttribute (true)] public virtual string ContinueButtonText { get { return ViewState.GetString ("ContinueButtonText", "Continue"); } set { ViewState ["ContinueButtonText"] = value; } } public virtual ButtonType ContinueButtonType { get { object v = ViewState ["ContinueButtonType"]; return v != null ? (ButtonType) v : ButtonType.Button; } set { ViewState ["ContinueButtonType"] = value; } } [ThemeableAttribute (false)] public virtual string ContinueDestinationPageUrl { get { object o = ViewState ["ContinueDestinationPageUrl"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("ContinueDestinationPageUrl"); else ViewState ["ContinueDestinationPageUrl"] = value; } } public virtual string CreateUserButtonImageUrl { get { return ViewState.GetString ("CreateUserButtonImageUrl", String.Empty); } set { ViewState ["CreateUserButtonImageUrl"] = value; } } public Style CreateUserButtonStyle { get { if (_createUserButtonStyle == null) { _createUserButtonStyle = new Style (); if (IsTrackingViewState) ((IStateManager) _createUserButtonStyle).TrackViewState (); } return _createUserButtonStyle; } } [LocalizableAttribute (true)] public virtual string CreateUserButtonText { get { return ViewState.GetString ("CreateUserButtonText", "Create User"); } set { ViewState ["CreateUserButtonText"] = value; } } public virtual ButtonType CreateUserButtonType { get { object v = ViewState ["CreateUserButtonType"]; return v != null ? (ButtonType) v : ButtonType.Button; } set { ViewState ["CreateUserButtonType"] = value; } } public CreateUserWizardStep CreateUserStep { get { if (_createUserWizardStep == null) { for (int i = 0; i < WizardSteps.Count; i++) if (WizardSteps [i] is CreateUserWizardStep) { _createUserWizardStep = (CreateUserWizardStep) WizardSteps [i]; if (_createUserWizardStep.Wizard == null) _createUserWizardStep.SetWizard (this); } } return _createUserWizardStep; } } [ThemeableAttribute (false)] public virtual bool DisableCreatedUser { get { object o = ViewState ["DisableCreatedUser"]; return (o == null) ? false : (bool) o; } set { ViewState ["DisableCreatedUser"] = value; } } public override bool DisplaySideBar { get { return ViewState.GetBool ("DisplaySideBar", false); } set { ViewState ["DisplaySideBar"] = value; ChildControlsCreated = false; } } [LocalizableAttribute (true)] public virtual string DuplicateEmailErrorMessage { get { object o = ViewState ["DuplicateEmailErrorMessage"]; return (o == null) ? Locale.GetText ("The e-mail address that you entered is already in use. Please enter a different e-mail address.") : (string) o; } set { if (value == null) ViewState.Remove ("DuplicateEmailErrorMessage"); else ViewState ["DuplicateEmailErrorMessage"] = value; } } [LocalizableAttribute (true)] public virtual string DuplicateUserNameErrorMessage { get { object o = ViewState ["DuplicateUserNameErrorMessage"]; return (o == null) ? Locale.GetText ("Please enter a different user name.") : (string) o; } set { if (value == null) ViewState.Remove ("DuplicateUserNameErrorMessage"); else ViewState ["DuplicateUserNameErrorMessage"] = value; } } public virtual string EditProfileIconUrl { get { object o = ViewState ["EditProfileIconUrl"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("EditProfileIconUrl"); else ViewState ["EditProfileIconUrl"] = value; } } [LocalizableAttribute (true)] public virtual string EditProfileText { get { object o = ViewState ["EditProfileText"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("EditProfileText"); else ViewState ["EditProfileText"] = value; } } public virtual string EditProfileUrl { get { object o = ViewState ["EditProfileUrl"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("EditProfileUrl"); else ViewState ["EditProfileUrl"] = value; } } public virtual string Email { get { object o = ViewState ["Email"]; return (o == null) ? String.Empty : (string) o; } set { if (value == null) ViewState.Remove ("Email"); else ViewState ["Email"] = value; } } [LocalizableAttribute (true)] public virtual string EmailLabelText { get { object o = ViewState ["EmailLabelText"]; return (o == null) ? Locale.GetText ("E-mail:") : (string) o; } set { if (value == null) ViewState.Remove ("EmailLabelText"); else ViewState ["EmailLabelText"] = value; } } public virtual string EmailRegularExpression { get { object o = ViewState ["EmailRegularExpression"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("EmailRegularExpression"); else ViewState ["EmailRegularExpression"] = value; } } public virtual string EmailRegularExpressionErrorMessage { get { object o = ViewState ["EmailRegularExpressionErrorMessage"]; return (o == null) ? Locale.GetText ("Please enter a different e-mail.") : (string) o; } set { if (value == null) ViewState.Remove ("EmailRegularExpressionErrorMessage"); else ViewState ["EmailRegularExpressionErrorMessage"] = value; } } [LocalizableAttribute (true)] public virtual string EmailRequiredErrorMessage { get { object o = ViewState ["EmailRequiredErrorMessage"]; return (o == null) ? Locale.GetText ("E-mail is required.") : (string) o; } set { if (value == null) ViewState.Remove ("EmailRequiredErrorMessage"); else ViewState ["EmailRequiredErrorMessage"] = value; } } public TableItemStyle ErrorMessageStyle { get { if (_errorMessageStyle == null) { _errorMessageStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _errorMessageStyle).TrackViewState (); } return _errorMessageStyle; } } public virtual string HelpPageIconUrl { get { object o = ViewState ["HelpPageIconUrl"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("HelpPageIconUrl"); else ViewState ["HelpPageIconUrl"] = value; } } [LocalizableAttribute (true)] public virtual string HelpPageText { get { object o = ViewState ["HelpPageText"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("HelpPageText"); else ViewState ["HelpPageText"] = value; } } public virtual string HelpPageUrl { get { object o = ViewState ["HelpPageUrl"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("HelpPageUrl"); else ViewState ["HelpPageUrl"] = value; } } public TableItemStyle HyperLinkStyle { get { if (_hyperLinkStyle == null) { _hyperLinkStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _hyperLinkStyle).TrackViewState (); } return _hyperLinkStyle; } } [LocalizableAttribute (true)] public virtual string InstructionText { get { object o = ViewState ["InstructionText"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("InstructionText"); else ViewState ["InstructionText"] = value; } } public TableItemStyle InstructionTextStyle { get { if (_instructionTextStyle == null) { _instructionTextStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _instructionTextStyle).TrackViewState (); } return _instructionTextStyle; } } [LocalizableAttribute (true)] public virtual string InvalidAnswerErrorMessage { get { object o = ViewState ["InvalidAnswerErrorMessage"]; return (o == null) ? Locale.GetText ("Please enter a different security answer.") : (string) o; } set { if (value == null) ViewState.Remove ("InvalidAnswerErrorMessage"); else ViewState ["InvalidAnswerErrorMessage"] = value; } } [LocalizableAttribute (true)] public virtual string InvalidEmailErrorMessage { get { object o = ViewState ["InvalidEmailErrorMessage"]; return (o == null) ? Locale.GetText ("Please enter a valid e-mail address.") : (string) o; } set { if (value == null) ViewState.Remove ("InvalidEmailErrorMessage"); else ViewState ["InvalidEmailErrorMessage"] = value; } } [MonoTODO ("take the values from membership provider")] [LocalizableAttribute (true)] public virtual string InvalidPasswordErrorMessage { get { object o = ViewState ["InvalidPasswordErrorMessage"]; return (o == null) ? Locale.GetText ("Password length minimum: {0}. Non-alphanumeric characters required: {1}.") : (string) o; } set { if (value == null) ViewState.Remove ("InvalidPasswordErrorMessage"); else ViewState ["InvalidPasswordErrorMessage"] = value; } } [LocalizableAttribute (true)] public virtual string InvalidQuestionErrorMessage { get { object o = ViewState ["InvalidQuestionErrorMessage"]; return (o == null) ? Locale.GetText ("Please enter a different security question.") : (string) o; } set { if (value == null) ViewState.Remove ("InvalidQuestionErrorMessage"); else ViewState ["InvalidQuestionErrorMessage"] = value; } } public TableItemStyle LabelStyle { get { if (_labelStyle == null) { _labelStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _labelStyle).TrackViewState (); } return _labelStyle; } } [ThemeableAttribute (false)] public virtual bool LoginCreatedUser { get { object o = ViewState ["LoginCreatedUser"]; return (o == null) ? true : (bool) o; } set { ViewState ["LoginCreatedUser"] = value; } } [ThemeableAttribute (false)] public MailDefinition MailDefinition { get { if (this._mailDefinition == null) { this._mailDefinition = new MailDefinition(); if (IsTrackingViewState) ((IStateManager) _mailDefinition).TrackViewState (); } return _mailDefinition; } } [ThemeableAttribute (false)] public virtual string MembershipProvider { get { object o = ViewState ["MembershipProvider"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("MembershipProvider"); else ViewState ["MembershipProvider"] = value; _provider = null; } } internal virtual MembershipProvider MembershipProviderInternal { get { if (_provider == null) InitMemberShipProvider (); return _provider; } } public virtual string Password { get { return _password; } } public TableItemStyle PasswordHintStyle { get { if (_passwordHintStyle == null) { _passwordHintStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _passwordHintStyle).TrackViewState (); } return _passwordHintStyle; } } [LocalizableAttribute (true)] public virtual string PasswordHintText { get { object o = ViewState ["PasswordHintText"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("PasswordHintText"); else ViewState ["PasswordHintText"] = value; } } [LocalizableAttribute (true)] public virtual string PasswordLabelText { get { object o = ViewState ["PasswordLabelText"]; return (o == null) ? Locale.GetText ("Password:") : (string) o; } set { if (value == null) ViewState.Remove ("PasswordLabelText"); else ViewState ["PasswordLabelText"] = value; } } public virtual string PasswordRegularExpression { get { object o = ViewState ["PasswordRegularExpression"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("PasswordRegularExpression"); else ViewState ["PasswordRegularExpression"] = value; } } public virtual string PasswordRegularExpressionErrorMessage { get { object o = ViewState ["PasswordRegularExpressionErrorMessage"]; return (o == null) ? Locale.GetText ("Please enter a different password.") : (string) o; } set { if (value == null) ViewState.Remove ("PasswordRegularExpressionErrorMessage"); else ViewState ["PasswordRegularExpressionErrorMessage"] = value; } } [LocalizableAttribute (true)] public virtual string PasswordRequiredErrorMessage { get { object o = ViewState ["PasswordRequiredErrorMessage"]; return (o == null) ? Locale.GetText ("Password is required.") : (string) o; } set { if (value == null) ViewState.Remove ("PasswordRequiredErrorMessage"); else ViewState ["PasswordRequiredErrorMessage"] = value; } } [LocalizableAttribute (true)] [ThemeableAttribute (false)] public virtual string Question { get { object o = ViewState ["Question"]; return (o == null) ? String.Empty : (string) o; } set { if (value == null) ViewState.Remove ("Question"); else ViewState ["Question"] = value; } } [LocalizableAttribute (true)] public virtual string QuestionLabelText { get { object o = ViewState ["QuestionLabelText"]; return (o == null) ? Locale.GetText ("Security Question:") : (string) o; } set { if (value == null) ViewState.Remove ("QuestionLabelText"); else ViewState ["QuestionLabelText"] = value; } } [LocalizableAttribute (true)] public virtual string QuestionRequiredErrorMessage { get { object o = ViewState ["QuestionRequiredErrorMessage"]; return (o == null) ? Locale.GetText ("Security question is required.") : (string) o; } set { if (value == null) ViewState.Remove ("QuestionRequiredErrorMessage"); else ViewState ["QuestionRequiredErrorMessage"] = value; } } [ThemeableAttribute (false)] public virtual bool RequireEmail { get { object o = ViewState ["RequireEmail"]; return (o == null) ? true : (bool) o; } set { ViewState ["RequireEmail"] = value; } } [MonoTODO ("doesnt work")] public override string SkipLinkText { get { object o = ViewState ["SkipLinkText"]; return (o == null) ? "" : (string) o; } set { if (value == null) ViewState.Remove ("SkipLinkText"); else ViewState ["SkipLinkText"] = value; } } public Style TextBoxStyle { get { if (_textBoxStyle == null) { _textBoxStyle = new Style (); if (IsTrackingViewState) ((IStateManager) _textBoxStyle).TrackViewState (); } return _textBoxStyle; } } public TableItemStyle TitleTextStyle { get { if (_titleTextStyle == null) { _titleTextStyle = new TableItemStyle (); if (IsTrackingViewState) ((IStateManager) _titleTextStyle).TrackViewState (); } return _titleTextStyle; } } [LocalizableAttribute (true)] public virtual string UnknownErrorMessage { get { object o = ViewState ["UnknownErrorMessage"]; return (o == null) ? Locale.GetText ("Your account was not created. Please try again.") : (string) o; } set { if (value == null) ViewState.Remove ("UnknownErrorMessage"); else ViewState ["UnknownErrorMessage"] = value; } } public virtual string UserName { get { object o = ViewState ["UserName"]; return (o == null) ? String.Empty : (string) o; } set { if (value == null) ViewState.Remove ("UserName"); else ViewState ["UserName"] = value; } } [LocalizableAttribute (true)] public virtual string UserNameLabelText { get { object o = ViewState ["UserNameLabelText"]; return (o == null) ? Locale.GetText ("User Name:") : (string) o; } set { if (value == null) ViewState.Remove ("UserNameLabelText"); else ViewState ["UserNameLabelText"] = value; } } [LocalizableAttribute (true)] public virtual string UserNameRequiredErrorMessage { get { object o = ViewState ["UserNameRequiredErrorMessage"]; return (o == null) ? Locale.GetText ("User Name is required.") : (string) o; } set { if (value == null) ViewState.Remove ("UserNameRequiredErrorMessage"); else ViewState ["UserNameRequiredErrorMessage"] = value; } } public Style ValidatorTextStyle { get { if (_validatorTextStyle == null) { _validatorTextStyle = new Style (); if (IsTrackingViewState) ((IStateManager) _validatorTextStyle).TrackViewState (); } return _validatorTextStyle; } } [ThemeableAttribute (false)] public override WizardStepCollection WizardSteps { get { return base.WizardSteps; } } #endregion #region Protected Properties protected internal bool QuestionAndAnswerRequired { get { return MembershipProviderInternal.RequiresQuestionAndAnswer; } } public event EventHandler ContinueButtonClick { add { Events.AddHandler (ContinueButtonClickEvent, value); } remove { Events.RemoveHandler (ContinueButtonClickEvent, value); } } public event EventHandler CreatedUser { add { Events.AddHandler (CreatedUserEvent, value); } remove { Events.RemoveHandler (CreatedUserEvent, value); } } public event CreateUserErrorEventHandler CreateUserError { add { Events.AddHandler (CreateUserErrorEvent, value); } remove { Events.RemoveHandler (CreateUserErrorEvent, value); } } public event LoginCancelEventHandler CreatingUser { add { Events.AddHandler (CreatingUserEvent, value); } remove { Events.RemoveHandler (CreatingUserEvent, value); } } public event MailMessageEventHandler SendingMail { add { Events.AddHandler (SendingMailEvent, value); } remove { Events.RemoveHandler (SendingMailEvent, value); } } public event SendMailErrorEventHandler SendMailError { add { Events.AddHandler (SendMailErrorEvent, value); } remove { Events.RemoveHandler (SendMailErrorEvent, value); } } #endregion #region Internal Properties internal override void InstantiateTemplateStep (TemplatedWizardStep step) { if (step is CreateUserWizardStep) { InstantiateCreateUserWizardStep ((CreateUserWizardStep) step); } else if (step is CompleteWizardStep) { InstantiateCompleteWizardStep ((CompleteWizardStep) step); } else { base.InstantiateTemplateStep (step); } } private void InstantiateCompleteWizardStep (CompleteWizardStep step) { CompleteStepContainer contentTemplateContainer = new CompleteStepContainer (this); if (step.ContentTemplate != null) { step.ContentTemplate.InstantiateIn (contentTemplateContainer.InnerCell); } else { new CompleteStepTemplate (this).InstantiateIn (contentTemplateContainer.InnerCell); contentTemplateContainer.ConfirmDefaultTemplate (); } step.ContentTemplateContainer = contentTemplateContainer; step.Controls.Clear (); step.Controls.Add (contentTemplateContainer); BaseWizardNavigationContainer customNavigationTemplateContainer = new BaseWizardNavigationContainer (); if (step.CustomNavigationTemplate != null) { step.CustomNavigationTemplate.InstantiateIn (customNavigationTemplateContainer); RegisterCustomNavigation (step, customNavigationTemplateContainer); } step.CustomNavigationTemplateContainer = customNavigationTemplateContainer; } void InstantiateCreateUserWizardStep (CreateUserWizardStep step) { CreateUserStepContainer contentTemplateContainer = new CreateUserStepContainer (this); if (step.ContentTemplate != null) { step.ContentTemplate.InstantiateIn (contentTemplateContainer.InnerCell); } else { new CreateUserStepTemplate (this).InstantiateIn (contentTemplateContainer.InnerCell); contentTemplateContainer.ConfirmDefaultTemplate (); contentTemplateContainer.EnsureValidatorsState (); } step.ContentTemplateContainer = contentTemplateContainer; step.Controls.Clear (); step.Controls.Add (contentTemplateContainer); CreateUserNavigationContainer customNavigationTemplateContainer = new CreateUserNavigationContainer (this); if (step.CustomNavigationTemplate != null) { step.CustomNavigationTemplate.InstantiateIn (customNavigationTemplateContainer); } else { new CreateUserStepNavigationTemplate (this).InstantiateIn (customNavigationTemplateContainer); customNavigationTemplateContainer.ConfirmDefaultTemplate (); } RegisterCustomNavigation (step, customNavigationTemplateContainer); step.CustomNavigationTemplateContainer = customNavigationTemplateContainer; } internal override ITemplate SideBarItemTemplate { get { return new SideBarLabelTemplate (this); } } #endregion #region Protected Methods protected internal override void CreateChildControls () { if (CreateUserStep == null) WizardSteps.AddAt (0, new CreateUserWizardStep ()); if (CompleteStep == null) WizardSteps.AddAt (WizardSteps.Count, new CompleteWizardStep ()); base.CreateChildControls (); } protected override void CreateControlHierarchy () { base.CreateControlHierarchy (); CreateUserStepContainer container = CreateUserStep.ContentTemplateContainer as CreateUserStepContainer; if (container != null) { IEditableTextControl editable; editable = container.UserNameTextBox as IEditableTextControl; if (editable != null) editable.TextChanged += new EventHandler (UserName_TextChanged); if (!AutoGeneratePassword) { editable = container.PasswordTextBox as IEditableTextControl; if (editable != null) editable.TextChanged += new EventHandler (Password_TextChanged); editable = container.ConfirmPasswordTextBox as IEditableTextControl; if (editable != null) editable.TextChanged += new EventHandler (ConfirmPassword_TextChanged); } if (RequireEmail) { editable = container.EmailTextBox as IEditableTextControl; if (editable != null) editable.TextChanged += new EventHandler (Email_TextChanged); } if (QuestionAndAnswerRequired) { editable = container.QuestionTextBox as IEditableTextControl; if (editable != null) editable.TextChanged += new EventHandler (Question_TextChanged); editable = container.AnswerTextBox as IEditableTextControl; if (editable != null) editable.TextChanged += new EventHandler (Answer_TextChanged); } _errorMessageLabel = container.ErrorMessageLabel; } } [MonoTODO ("Not Implemented")] protected override IDictionary GetDesignModeState () { throw new NotImplementedException (); } protected override bool OnBubbleEvent (object source, EventArgs e) { CommandEventArgs args = e as CommandEventArgs; if (e != null && args.CommandName == ContinueButtonCommandName) { ProcessContinueEvent (); return true; } return base.OnBubbleEvent (source, e); } private void ProcessContinueEvent () { OnContinueButtonClick (EventArgs.Empty); if (ContinueDestinationPageUrl.Length > 0) { Context.Response.Redirect (ContinueDestinationPageUrl); } } protected virtual void OnContinueButtonClick (EventArgs e) { if (Events != null) { EventHandler eh = (EventHandler) Events [ContinueButtonClickEvent]; if (eh != null) eh (this, e); } } protected virtual void OnCreatedUser (EventArgs e) { if (Events != null) { EventHandler eh = (EventHandler) Events [CreatedUserEvent]; if (eh != null) eh (this, e); } } protected virtual void OnCreateUserError (CreateUserErrorEventArgs e) { if (Events != null) { CreateUserErrorEventHandler eh = (CreateUserErrorEventHandler) Events [CreateUserErrorEvent]; if (eh != null) eh (this, e); } } protected virtual void OnCreatingUser (LoginCancelEventArgs e) { if (Events != null) { LoginCancelEventHandler eh = (LoginCancelEventHandler) Events [CreatingUserEvent]; if (eh != null) eh (this, e); } } protected override void OnNextButtonClick (WizardNavigationEventArgs e) { if (ActiveStep == CreateUserStep) { bool userCreated = CreateUser (); if (!userCreated) e.Cancel = true; else if (LoginCreatedUser) Login (); } base.OnNextButtonClick (e); } protected internal override void OnPreRender (EventArgs e) { base.OnPreRender (e); } protected virtual void OnSendingMail (MailMessageEventArgs e) { if (Events != null) { MailMessageEventHandler eh = (MailMessageEventHandler) Events [SendingMailEvent]; if (eh != null) eh (this, e); } } protected virtual void OnSendMailError (SendMailErrorEventArgs e) { if (Events != null) { SendMailErrorEventHandler eh = (SendMailErrorEventHandler) Events [SendMailErrorEvent]; if (eh != null) eh (this, e); } } protected override void LoadViewState (object savedState) { if (savedState == null) { base.LoadViewState (null); return; } object [] states = (object []) savedState; base.LoadViewState (states [0]); if (states [1] != null) ((IStateManager) TextBoxStyle).LoadViewState (states [1]); if (states [2] != null) ((IStateManager) ValidatorTextStyle).LoadViewState (states [2]); if (states [3] != null) ((IStateManager) CompleteSuccessTextStyle).LoadViewState (states [3]); if (states [4] != null) ((IStateManager) ErrorMessageStyle).LoadViewState (states [4]); if (states [5] != null) ((IStateManager) HyperLinkStyle).LoadViewState (states [5]); if (states [6] != null) ((IStateManager) InstructionTextStyle).LoadViewState (states [6]); if (states [7] != null) ((IStateManager) LabelStyle).LoadViewState (states [7]); if (states [8] != null) ((IStateManager) PasswordHintStyle).LoadViewState (states [8]); if (states [9] != null) ((IStateManager) TitleTextStyle).LoadViewState (states [9]); if (states [10] != null) ((IStateManager) CreateUserButtonStyle).LoadViewState (states [10]); if (states [11] != null) ((IStateManager) ContinueButtonStyle).LoadViewState (states [11]); if (states [12] != null) ((IStateManager) MailDefinition).LoadViewState (states [12]); ((CreateUserStepContainer) CreateUserStep.ContentTemplateContainer).EnsureValidatorsState (); } protected override object SaveViewState () { object [] state = new object [13]; state [0] = base.SaveViewState (); if (_textBoxStyle != null) state [1] = ((IStateManager) _textBoxStyle).SaveViewState (); if (_validatorTextStyle != null) state [2] = ((IStateManager) _validatorTextStyle).SaveViewState (); if (_completeSuccessTextStyle != null) state [3] = ((IStateManager) _completeSuccessTextStyle).SaveViewState (); if (_errorMessageStyle != null) state [4] = ((IStateManager) _errorMessageStyle).SaveViewState (); if (_hyperLinkStyle != null) state [5] = ((IStateManager) _hyperLinkStyle).SaveViewState (); if (_instructionTextStyle != null) state [6] = ((IStateManager) _instructionTextStyle).SaveViewState (); if (_labelStyle != null) state [7] = ((IStateManager) _labelStyle).SaveViewState (); if (_passwordHintStyle != null) state [8] = ((IStateManager) _passwordHintStyle).SaveViewState (); if (_titleTextStyle != null) state [9] = ((IStateManager) _titleTextStyle).SaveViewState (); if (_createUserButtonStyle != null) state [10] = ((IStateManager) _createUserButtonStyle).SaveViewState (); if (_continueButtonStyle != null) state [11] = ((IStateManager) _continueButtonStyle).SaveViewState (); if (_mailDefinition != null) state [12] = ((IStateManager) _mailDefinition).SaveViewState (); for (int n = 0; n < state.Length; n++) if (state [n] != null) return state; return null; } [MonoTODO ("for design-time usage - no more details available")] protected override void SetDesignModeState (IDictionary data) { base.SetDesignModeState (data); } protected override void TrackViewState () { base.TrackViewState (); if (_textBoxStyle != null) ((IStateManager) _textBoxStyle).TrackViewState (); if (_validatorTextStyle != null) ((IStateManager) _validatorTextStyle).TrackViewState (); if (_completeSuccessTextStyle != null) ((IStateManager) _completeSuccessTextStyle).TrackViewState (); if (_errorMessageStyle != null) ((IStateManager) _errorMessageStyle).TrackViewState (); if (_hyperLinkStyle != null) ((IStateManager) _hyperLinkStyle).TrackViewState (); if (_instructionTextStyle != null) ((IStateManager) _instructionTextStyle).TrackViewState (); if (_labelStyle != null) ((IStateManager) _labelStyle).TrackViewState (); if (_passwordHintStyle != null) ((IStateManager) _passwordHintStyle).TrackViewState (); if (_titleTextStyle != null) ((IStateManager) _titleTextStyle).TrackViewState (); if (_createUserButtonStyle != null) ((IStateManager) _createUserButtonStyle).TrackViewState (); if (_continueButtonStyle != null) ((IStateManager) _continueButtonStyle).TrackViewState (); if (_mailDefinition != null) ((IStateManager) _mailDefinition).TrackViewState (); } #endregion #region Private event handlers private void UserName_TextChanged (object sender, EventArgs e) { UserName = ((ITextControl) sender).Text; } private void Password_TextChanged (object sender, EventArgs e) { _password = ((ITextControl) sender).Text; } private void ConfirmPassword_TextChanged (object sender, EventArgs e) { _confirmPassword = ((ITextControl) sender).Text; } private void Email_TextChanged (object sender, EventArgs e) { Email = ((ITextControl) sender).Text; } private void Question_TextChanged (object sender, EventArgs e) { Question = ((ITextControl) sender).Text; } private void Answer_TextChanged (object sender, EventArgs e) { Answer = ((ITextControl) sender).Text; } #endregion #region Private Methods private void InitMemberShipProvider () { string mp = MembershipProvider; _provider = (mp.Length == 0) ? _provider = Membership.Provider : Membership.Providers [mp]; if (_provider == null) throw new HttpException (Locale.GetText ("No provider named '{0}' could be found.", mp)); } private bool CreateUser () { if (!Page.IsValid) return false; if (AutoGeneratePassword) _password = GeneratePassword (); OnCreatingUser (new LoginCancelEventArgs (false)); MembershipCreateStatus status; MembershipUser newUser = MembershipProviderInternal.CreateUser ( UserName, Password, Email, Question, Answer, !DisableCreatedUser, null, out status); if ((newUser != null) && (status == MembershipCreateStatus.Success)) { OnCreatedUser (new EventArgs ()); SendPasswordByMail (newUser, Password); return true; } switch (status) { case MembershipCreateStatus.DuplicateUserName: ShowErrorMessage (DuplicateUserNameErrorMessage); break; case MembershipCreateStatus.InvalidPassword: ShowErrorMessage (String.Format (InvalidPasswordErrorMessage, MembershipProviderInternal.MinRequiredPasswordLength, MembershipProviderInternal.MinRequiredNonAlphanumericCharacters)); break; case MembershipCreateStatus.DuplicateEmail: ShowErrorMessage (DuplicateEmailErrorMessage); break; case MembershipCreateStatus.InvalidEmail: ShowErrorMessage (InvalidEmailErrorMessage); break; case MembershipCreateStatus.InvalidQuestion: ShowErrorMessage (InvalidQuestionErrorMessage); break; case MembershipCreateStatus.InvalidAnswer: ShowErrorMessage (InvalidAnswerErrorMessage); break; case MembershipCreateStatus.UserRejected: case MembershipCreateStatus.InvalidUserName: case MembershipCreateStatus.ProviderError: case MembershipCreateStatus.InvalidProviderUserKey: ShowErrorMessage (UnknownErrorMessage); break; } OnCreateUserError (new CreateUserErrorEventArgs (status)); return false; } private void SendPasswordByMail (MembershipUser user, string password) { if (user == null) return; if (_mailDefinition == null) return; string messageText = "A new account has been created for you. Please go to the site and log in using the following information.\nUser Name: <%USERNAME%>\nPassword: <%PASSWORD%>"; ListDictionary dictionary = new ListDictionary (); dictionary.Add ("<%USERNAME%>", user.UserName); dictionary.Add ("<%PASSWORD%>", password); MailMessage message = null; if (MailDefinition.BodyFileName.Length == 0) message = MailDefinition.CreateMailMessage (user.Email, dictionary, messageText, this); else message = MailDefinition.CreateMailMessage (user.Email, dictionary, this); if (string.IsNullOrEmpty (message.Subject)) message.Subject = "Account information"; MailMessageEventArgs args = new MailMessageEventArgs (message); OnSendingMail (args); SmtpClient smtpClient = new SmtpClient (); try { smtpClient.Send (message); } catch (Exception e) { SendMailErrorEventArgs mailArgs = new SendMailErrorEventArgs (e); OnSendMailError (mailArgs); if (!mailArgs.Handled) throw e; } } private void Login () { bool userValidated = MembershipProviderInternal.ValidateUser (UserName, Password); if (userValidated) FormsAuthentication.SetAuthCookie (UserName, false); } private void ShowErrorMessage (string errorMessage) { if (_errorMessageLabel != null) _errorMessageLabel.Text = errorMessage; } private string GeneratePassword () { return Membership.GeneratePassword (8, 3); } #endregion #region SideBarLabelTemplate class SideBarLabelTemplate : ITemplate { Wizard wizard; public SideBarLabelTemplate (Wizard wizard) { this.wizard = wizard; } public void InstantiateIn (Control control) { Label b = new Label (); wizard.RegisterApplyStyle (b, wizard.SideBarButtonStyle); control.Controls.Add (b); control.DataBinding += Bound; } void Bound (object s, EventArgs args) { WizardStepBase step = DataBinder.GetDataItem (s) as WizardStepBase; if (step != null) { Control c = (Control) s; Label b = (Label) c.Controls [0]; b.ID = SideBarButtonID; b.Text = step.Title; } } } #endregion sealed class CreateUserNavigationContainer : DefaultNavigationContainer { CreateUserWizard _createUserWizard; public CreateUserNavigationContainer (CreateUserWizard createUserWizard) : base (createUserWizard) { _createUserWizard = createUserWizard; } protected override void UpdateState () { // previous if (_createUserWizard.AllowNavigationToStep (_createUserWizard.ActiveStepIndex - 1)) { UpdateNavButtonState (Wizard.StepPreviousButtonID + Wizard.StepPreviousButtonType, Wizard.StepPreviousButtonText, Wizard.StepPreviousButtonImageUrl, Wizard.StepPreviousButtonStyle); } else { ((Table) Controls [0]).Rows [0].Cells [0].Visible = false; } // create user UpdateNavButtonState (Wizard.StepNextButtonID + _createUserWizard.CreateUserButtonType, _createUserWizard.CreateUserButtonText, _createUserWizard.CreateUserButtonImageUrl, _createUserWizard.CreateUserButtonStyle); // cancel if (Wizard.DisplayCancelButton) { UpdateNavButtonState (Wizard.CancelButtonID + Wizard.CancelButtonType, Wizard.CancelButtonText, Wizard.CancelButtonImageUrl, Wizard.CancelButtonStyle); } else { ((Table) Controls [0]).Rows [0].Cells [2].Visible = false; } } } sealed class CreateUserStepNavigationTemplate : ITemplate { readonly CreateUserWizard _createUserWizard; public CreateUserStepNavigationTemplate (CreateUserWizard createUserWizard) { _createUserWizard = createUserWizard; } #region ITemplate Members public void InstantiateIn (Control container) { Table t = new Table (); t.CellPadding = 5; t.CellSpacing = 5; t.Width = Unit.Percentage (100); t.Height = Unit.Percentage (100); TableRow row = new TableRow (); AddButtonCell (row, _createUserWizard.CreateButtonSet (Wizard.StepPreviousButtonID, Wizard.MovePreviousCommandName, false)); AddButtonCell (row, _createUserWizard.CreateButtonSet (Wizard.StepNextButtonID, Wizard.MoveNextCommandName)); AddButtonCell (row, _createUserWizard.CreateButtonSet (Wizard.CancelButtonID, Wizard.CancelCommandName, false)); t.Rows.Add (row); container.Controls.Add (t); } void AddButtonCell (TableRow row, params Control [] controls) { TableCell cell = new TableCell (); cell.HorizontalAlign = HorizontalAlign.Right; for (int i = 0; i < controls.Length; i++) cell.Controls.Add (controls[i]); row.Cells.Add (cell); } #endregion } sealed class CreateUserStepContainer : DefaultContentContainer { CreateUserWizard _createUserWizard; public CreateUserStepContainer (CreateUserWizard createUserWizard) : base (createUserWizard) { _createUserWizard = createUserWizard; } public Control UserNameTextBox { get { Control c = FindControl ("UserName"); if (c == null) throw new HttpException ("CreateUserWizardStep.ContentTemplate does not contain an IEditableTextControl with ID UserName for the username."); return c; } } public Control PasswordTextBox { get { Control c = FindControl ("Password"); if (c == null) throw new HttpException ("CreateUserWizardStep.ContentTemplate does not contain an IEditableTextControl with ID Password for the new password, this is required if AutoGeneratePassword = true."); return c; } } public Control ConfirmPasswordTextBox { get { Control c = FindControl ("Password"); return c; } } public Control EmailTextBox { get { Control c = FindControl ("Email"); if (c == null) throw new HttpException ("CreateUserWizardStep.ContentTemplate does not contain an IEditableTextControl with ID Email for the e-mail, this is required if RequireEmail = true."); return c; } } public Control QuestionTextBox { get { Control c = FindControl ("Question"); if (c == null) throw new HttpException ("CreateUserWizardStep.ContentTemplate does not contain an IEditableTextControl with ID Question for the security question, this is required if your membership provider requires a question and answer."); return c; } } public Control AnswerTextBox { get { Control c = FindControl ("Answer"); if (c == null) throw new HttpException ("CreateUserWizardStep.ContentTemplate does not contain an IEditableTextControl with ID Answer for the security answer, this is required if your membership provider requires a question and answer."); return c; } } public ITextControl ErrorMessageLabel { get { return FindControl ("ErrorMessage") as ITextControl; } } protected override void UpdateState () { // Row #0 - title if (String.IsNullOrEmpty (_createUserWizard.CreateUserStep.Title)) { ((Table) InnerCell.Controls [0]).Rows [0].Visible = false; } else { ((Table) InnerCell.Controls [0]).Rows [0].Cells [0].Text = _createUserWizard.CreateUserStep.Title; } // Row #1 - InstructionText if (String.IsNullOrEmpty (_createUserWizard.InstructionText)) { ((Table) InnerCell.Controls [0]).Rows [1].Visible = false; } else { ((Table) InnerCell.Controls [0]).Rows [1].Cells [0].Text = _createUserWizard.InstructionText; } // Row #2 Label UserNameLabel = (Label) ((Table) InnerCell.Controls [0]).Rows [2].Cells [0].Controls [0]; UserNameLabel.Text = _createUserWizard.UserNameLabelText; RequiredFieldValidator UserNameRequired = (RequiredFieldValidator) FindControl ("UserNameRequired"); UserNameRequired.ErrorMessage = _createUserWizard.UserNameRequiredErrorMessage; UserNameRequired.ToolTip = _createUserWizard.UserNameRequiredErrorMessage; if (_createUserWizard.AutoGeneratePassword) { ((Table) InnerCell.Controls [0]).Rows [3].Visible = false; ((Table) InnerCell.Controls [0]).Rows [4].Visible = false; ((Table) InnerCell.Controls [0]).Rows [5].Visible = false; } else { // Row #3 Label PasswordLabel = (Label) ((Table) InnerCell.Controls [0]).Rows [3].Cells [0].Controls [0]; PasswordLabel.Text = _createUserWizard.PasswordLabelText; RequiredFieldValidator PasswordRequired = (RequiredFieldValidator) FindControl ("PasswordRequired"); PasswordRequired.ErrorMessage = _createUserWizard.PasswordRequiredErrorMessage; PasswordRequired.ToolTip = _createUserWizard.PasswordRequiredErrorMessage; // Row #4 if (String.IsNullOrEmpty (_createUserWizard.PasswordHintText)) { ((Table) InnerCell.Controls [0]).Rows [4].Visible = false; } else { ((Table) InnerCell.Controls [0]).Rows [4].Cells [1].Text = _createUserWizard.PasswordHintText; } // Row #5 Label ConfirmPasswordLabel = (Label) ((Table) InnerCell.Controls [0]).Rows [5].Cells [0].Controls [0]; ConfirmPasswordLabel.Text = _createUserWizard.ConfirmPasswordLabelText; RequiredFieldValidator ConfirmPasswordRequired = (RequiredFieldValidator) FindControl ("ConfirmPasswordRequired"); ConfirmPasswordRequired.ErrorMessage = _createUserWizard.ConfirmPasswordRequiredErrorMessage; ConfirmPasswordRequired.ToolTip = _createUserWizard.ConfirmPasswordRequiredErrorMessage; } // Row #6 if (_createUserWizard.RequireEmail) { Label EmailLabel = (Label) ((Table) InnerCell.Controls [0]).Rows [6].Cells [0].Controls [0]; EmailLabel.Text = _createUserWizard.EmailLabelText; RequiredFieldValidator EmailRequired = (RequiredFieldValidator) FindControl ("EmailRequired"); EmailRequired.ErrorMessage = _createUserWizard.EmailRequiredErrorMessage; EmailRequired.ToolTip = _createUserWizard.EmailRequiredErrorMessage; } else { ((Table) InnerCell.Controls [0]).Rows [6].Visible = false; } if (_createUserWizard.QuestionAndAnswerRequired) { // Row #7 Label QuestionLabel = (Label) ((Table) InnerCell.Controls [0]).Rows [7].Cells [0].Controls [0]; QuestionLabel.Text = _createUserWizard.QuestionLabelText; RequiredFieldValidator QuestionRequired = (RequiredFieldValidator) FindControl ("QuestionRequired"); QuestionRequired.ErrorMessage = _createUserWizard.QuestionRequiredErrorMessage; QuestionRequired.ToolTip = _createUserWizard.QuestionRequiredErrorMessage; // Row #8 Label AnswerLabel = (Label) ((Table) InnerCell.Controls [0]).Rows [8].Cells [0].Controls [0]; AnswerLabel.Text = _createUserWizard.AnswerLabelText; RequiredFieldValidator AnswerRequired = (RequiredFieldValidator) FindControl ("AnswerRequired"); AnswerRequired.ErrorMessage = _createUserWizard.AnswerRequiredErrorMessage; AnswerRequired.ToolTip = _createUserWizard.AnswerRequiredErrorMessage; } else { ((Table) InnerCell.Controls [0]).Rows [7].Visible = false; ((Table) InnerCell.Controls [0]).Rows [8].Visible = false; } // Row #9 if (_createUserWizard.AutoGeneratePassword) { ((Table) InnerCell.Controls [0]).Rows [9].Visible = false; } else { CompareValidator PasswordCompare = (CompareValidator) FindControl ("PasswordCompare"); PasswordCompare.ErrorMessage = _createUserWizard.ConfirmPasswordCompareErrorMessage; } // Row #10 if (_createUserWizard.AutoGeneratePassword || String.IsNullOrEmpty (_createUserWizard.PasswordRegularExpression)) { ((Table) InnerCell.Controls [0]).Rows [10].Visible = false; } else { RegularExpressionValidator PasswordRegEx = (RegularExpressionValidator) FindControl ("PasswordRegEx"); PasswordRegEx.ValidationExpression = _createUserWizard.PasswordRegularExpression; PasswordRegEx.ErrorMessage = _createUserWizard.PasswordRegularExpressionErrorMessage; } // Row #11 if (!_createUserWizard.RequireEmail || String.IsNullOrEmpty (_createUserWizard.EmailRegularExpression)) { ((Table) InnerCell.Controls [0]).Rows [11].Visible = false; } else { RegularExpressionValidator EmailRegEx = (RegularExpressionValidator) FindControl ("EmailRegEx"); EmailRegEx.ErrorMessage = _createUserWizard.EmailRegularExpressionErrorMessage; EmailRegEx.ValidationExpression = _createUserWizard.EmailRegularExpression; } // Row #12 if (String.IsNullOrEmpty (ErrorMessageLabel.Text)) { ((Table) InnerCell.Controls [0]).Rows [12].Visible = false; } // Row #13 // HelpPageIconUrl Image img = (Image) ((Table) InnerCell.Controls [0]).Rows [13].Cells [0].Controls [0]; if (String.IsNullOrEmpty (_createUserWizard.HelpPageIconUrl)) { img.Visible = false; } else { img.ImageUrl = _createUserWizard.HelpPageIconUrl; img.AlternateText = _createUserWizard.HelpPageText; } // HelpPageText HyperLink link = (HyperLink) ((Table) InnerCell.Controls [0]).Rows [13].Cells [0].Controls [1]; if (String.IsNullOrEmpty (_createUserWizard.HelpPageText)) { link.Visible = false; } else { link.Text = _createUserWizard.HelpPageText; link.NavigateUrl = _createUserWizard.HelpPageUrl; } ((Table) InnerCell.Controls [0]).Rows [13].Visible = img.Visible || link.Visible; } public void EnsureValidatorsState () { if (!IsDefaultTemplate) return; ((RequiredFieldValidator) FindControl ("PasswordRequired")).Enabled = !_createUserWizard.AutoGeneratePassword; ((RequiredFieldValidator) FindControl ("ConfirmPasswordRequired")).Enabled = !_createUserWizard.AutoGeneratePassword; ((CompareValidator) FindControl ("PasswordCompare")).Enabled = !_createUserWizard.AutoGeneratePassword; RegularExpressionValidator PasswordRegEx = (RegularExpressionValidator) FindControl ("PasswordRegEx"); PasswordRegEx.Enabled = !_createUserWizard.AutoGeneratePassword && !String.IsNullOrEmpty (_createUserWizard.PasswordRegularExpression); PasswordRegEx.ValidationExpression = _createUserWizard.PasswordRegularExpression; ((RequiredFieldValidator) FindControl ("EmailRequired")).Enabled = _createUserWizard.RequireEmail; RegularExpressionValidator EmailRegEx = (RegularExpressionValidator) FindControl ("EmailRegEx"); EmailRegEx.Enabled = _createUserWizard.RequireEmail && !String.IsNullOrEmpty (_createUserWizard.EmailRegularExpression); EmailRegEx.ValidationExpression = _createUserWizard.EmailRegularExpression; ((RequiredFieldValidator) FindControl ("QuestionRequired")).Enabled = _createUserWizard.QuestionAndAnswerRequired; ((RequiredFieldValidator) FindControl ("AnswerRequired")).Enabled = _createUserWizard.QuestionAndAnswerRequired; } } sealed class CreateUserStepTemplate : ITemplate { readonly CreateUserWizard _createUserWizard; public CreateUserStepTemplate (CreateUserWizard createUserWizard) { _createUserWizard = createUserWizard; } #region ITemplate Members TableRow CreateRow (Control c0, Control c1, Control c2, Style s0, Style s1) { TableRow row = new TableRow (); TableCell cell0 = new TableCell (); TableCell cell1 = new TableCell (); if (c0 != null) cell0.Controls.Add (c0); row.Controls.Add (cell0); if ((c1 != null) && (c2 != null)) { cell1.Controls.Add (c1); cell1.Controls.Add (c2); cell0.HorizontalAlign = HorizontalAlign.Right; if (s0 != null) _createUserWizard.RegisterApplyStyle (cell0, s0); if (s1 != null) _createUserWizard.RegisterApplyStyle (cell1, s1); row.Controls.Add (cell1); } else { cell0.ColumnSpan = 2; cell0.HorizontalAlign = HorizontalAlign.Center; if (s0 != null) _createUserWizard.RegisterApplyStyle (cell0, s0); } return row; } public void InstantiateIn (Control container) { Table table = new Table (); table.ControlStyle.Width = Unit.Percentage (100); table.ControlStyle.Height = Unit.Percentage (100); // Row #0 table.Controls.Add (CreateRow (null, null, null, _createUserWizard.TitleTextStyle, null)); // Row #1 table.Controls.Add (CreateRow (null, null, null, _createUserWizard.InstructionTextStyle, null)); // Row #2 TextBox UserName = new TextBox (); UserName.ID = "UserName"; _createUserWizard.RegisterApplyStyle (UserName, _createUserWizard.TextBoxStyle); Label UserNameLabel = new Label (); UserNameLabel.AssociatedControlID = "UserName"; RequiredFieldValidator UserNameRequired = new RequiredFieldValidator (); UserNameRequired.ID = "UserNameRequired"; // alternatively we can create only required validators // and reinstantiate collection when relevant property changes UserNameRequired.EnableViewState = false; UserNameRequired.ControlToValidate = "UserName"; UserNameRequired.Text = "*"; UserNameRequired.ValidationGroup = _createUserWizard.ID; _createUserWizard.RegisterApplyStyle (UserNameRequired, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (UserNameLabel, UserName, UserNameRequired, _createUserWizard.LabelStyle, null)); // Row #3 TextBox Password = new TextBox (); Password.ID = "Password"; Password.TextMode = TextBoxMode.Password; _createUserWizard.RegisterApplyStyle (Password, _createUserWizard.TextBoxStyle); Label PasswordLabel = new Label (); PasswordLabel.AssociatedControlID = "Password"; RequiredFieldValidator PasswordRequired = new RequiredFieldValidator (); PasswordRequired.ID = "PasswordRequired"; PasswordRequired.EnableViewState = false; PasswordRequired.ControlToValidate = "Password"; PasswordRequired.Text = "*"; //PasswordRequired.EnableViewState = false; PasswordRequired.ValidationGroup = _createUserWizard.ID; _createUserWizard.RegisterApplyStyle (PasswordRequired, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (PasswordLabel, Password, PasswordRequired, _createUserWizard.LabelStyle, null)); // Row #4 table.Controls.Add (CreateRow (new LiteralControl (""), new LiteralControl (""), new LiteralControl (""), null, _createUserWizard.PasswordHintStyle)); // Row #5 TextBox ConfirmPassword = new TextBox (); ConfirmPassword.ID = "ConfirmPassword"; ConfirmPassword.TextMode = TextBoxMode.Password; _createUserWizard.RegisterApplyStyle (ConfirmPassword, _createUserWizard.TextBoxStyle); Label ConfirmPasswordLabel = new Label (); ConfirmPasswordLabel.AssociatedControlID = "ConfirmPassword"; RequiredFieldValidator ConfirmPasswordRequired = new RequiredFieldValidator (); ConfirmPasswordRequired.ID = "ConfirmPasswordRequired"; ConfirmPasswordRequired.EnableViewState = false; ConfirmPasswordRequired.ControlToValidate = "ConfirmPassword"; ConfirmPasswordRequired.Text = "*"; ConfirmPasswordRequired.ValidationGroup = _createUserWizard.ID; _createUserWizard.RegisterApplyStyle (ConfirmPasswordRequired, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (ConfirmPasswordLabel, ConfirmPassword, ConfirmPasswordRequired, _createUserWizard.LabelStyle, null)); // Row #6 TextBox Email = new TextBox (); Email.ID = "Email"; _createUserWizard.RegisterApplyStyle (Email, _createUserWizard.TextBoxStyle); Label EmailLabel = new Label (); EmailLabel.AssociatedControlID = "Email"; RequiredFieldValidator EmailRequired = new RequiredFieldValidator (); EmailRequired.ID = "EmailRequired"; EmailRequired.EnableViewState = false; EmailRequired.ControlToValidate = "Email"; EmailRequired.Text = "*"; EmailRequired.ValidationGroup = _createUserWizard.ID; _createUserWizard.RegisterApplyStyle (EmailRequired, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (EmailLabel, Email, EmailRequired, _createUserWizard.LabelStyle, null)); // Row #7 TextBox Question = new TextBox (); Question.ID = "Question"; _createUserWizard.RegisterApplyStyle (Question, _createUserWizard.TextBoxStyle); Label QuestionLabel = new Label (); QuestionLabel.AssociatedControlID = "Question"; RequiredFieldValidator QuestionRequired = new RequiredFieldValidator (); QuestionRequired.ID = "QuestionRequired"; QuestionRequired.EnableViewState = false; QuestionRequired.ControlToValidate = "Question"; QuestionRequired.Text = "*"; QuestionRequired.ValidationGroup = _createUserWizard.ID; _createUserWizard.RegisterApplyStyle (QuestionRequired, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (QuestionLabel, Question, QuestionRequired, _createUserWizard.LabelStyle, null)); // Row #8 TextBox Answer = new TextBox (); Answer.ID = "Answer"; _createUserWizard.RegisterApplyStyle (Answer, _createUserWizard.TextBoxStyle); Label AnswerLabel = new Label (); AnswerLabel.AssociatedControlID = "Answer"; RequiredFieldValidator AnswerRequired = new RequiredFieldValidator (); AnswerRequired.ID = "AnswerRequired"; AnswerRequired.EnableViewState = false; AnswerRequired.ControlToValidate = "Answer"; AnswerRequired.Text = "*"; AnswerRequired.ValidationGroup = _createUserWizard.ID; _createUserWizard.RegisterApplyStyle (AnswerRequired, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (AnswerLabel, Answer, AnswerRequired, _createUserWizard.LabelStyle, null)); // Row #9 CompareValidator PasswordCompare = new CompareValidator (); PasswordCompare.ID = "PasswordCompare"; PasswordCompare.EnableViewState = false; PasswordCompare.ControlToCompare = "Password"; PasswordCompare.ControlToValidate = "ConfirmPassword"; PasswordCompare.Display = ValidatorDisplay.Static; PasswordCompare.ValidationGroup = _createUserWizard.ID; PasswordCompare.Display = ValidatorDisplay.Dynamic; _createUserWizard.RegisterApplyStyle (PasswordCompare, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (PasswordCompare, null, null, null, null)); // Row #10 RegularExpressionValidator PasswordRegEx = new RegularExpressionValidator (); PasswordRegEx.ID = "PasswordRegEx"; PasswordRegEx.EnableViewState = false; PasswordRegEx.ControlToValidate = "Password"; PasswordRegEx.Display = ValidatorDisplay.Static; PasswordRegEx.ValidationGroup = _createUserWizard.ID; PasswordRegEx.Display = ValidatorDisplay.Dynamic; _createUserWizard.RegisterApplyStyle (PasswordRegEx, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (PasswordRegEx, null, null, null, null)); // Row #11 RegularExpressionValidator EmailRegEx = new RegularExpressionValidator (); EmailRegEx.ID = "EmailRegEx"; EmailRegEx.EnableViewState = false; EmailRegEx.ControlToValidate = "Email"; EmailRegEx.Display = ValidatorDisplay.Static; EmailRegEx.ValidationGroup = _createUserWizard.ID; EmailRegEx.Display = ValidatorDisplay.Dynamic; _createUserWizard.RegisterApplyStyle (EmailRegEx, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (EmailRegEx, null, null, null, null)); // Row #12 Label ErrorMessage = new Label (); ErrorMessage.ID = "ErrorMessage"; ErrorMessage.EnableViewState = false; _createUserWizard.RegisterApplyStyle (ErrorMessage, _createUserWizard.ValidatorTextStyle); table.Controls.Add (CreateRow (ErrorMessage, null, null, null, null)); // Row #13 TableRow row13 = CreateRow (new Image (), null, null, null, null); HyperLink HelpLink = new HyperLink (); HelpLink.ID = "HelpLink"; _createUserWizard.RegisterApplyStyle (HelpLink, _createUserWizard.HyperLinkStyle); row13.Cells [0].Controls.Add (HelpLink); row13.Cells [0].HorizontalAlign = HorizontalAlign.Left; table.Controls.Add (row13); // container.Controls.Add (table); } #endregion } sealed class CompleteStepContainer : DefaultContentContainer { CreateUserWizard _createUserWizard; public CompleteStepContainer (CreateUserWizard createUserWizard) : base (createUserWizard) { _createUserWizard = createUserWizard; } protected override void UpdateState () { // title if (String.IsNullOrEmpty (_createUserWizard.CompleteStep.Title)) { ((Table) InnerCell.Controls [0]).Rows [0].Visible = false; } else { ((Table) InnerCell.Controls [0]).Rows [0].Cells [0].Text = _createUserWizard.CompleteStep.Title; } // CompleteSuccessText if (String.IsNullOrEmpty (_createUserWizard.CompleteSuccessText)) { ((Table) InnerCell.Controls [0]).Rows [1].Visible = false; } else { ((Table) InnerCell.Controls [0]).Rows [1].Cells [0].Text = _createUserWizard.CompleteSuccessText; } // ContinueButton UpdateNavButtonState ("ContinueButton" + _createUserWizard.ContinueButtonType, _createUserWizard.ContinueButtonText, _createUserWizard.ContinueButtonImageUrl, _createUserWizard.ContinueButtonStyle); // EditProfileIconUrl Image img = (Image) ((Table) InnerCell.Controls [0]).Rows [3].Cells [0].Controls [0]; if (String.IsNullOrEmpty (_createUserWizard.EditProfileIconUrl)) { img.Visible = false; } else { img.ImageUrl = _createUserWizard.EditProfileIconUrl; img.AlternateText = _createUserWizard.EditProfileText; } // EditProfileText HyperLink link = (HyperLink) ((Table) InnerCell.Controls [0]).Rows [3].Cells [0].Controls [1]; if (String.IsNullOrEmpty (_createUserWizard.EditProfileText)) { link.Visible = false; } else { link.Text = _createUserWizard.EditProfileText; link.NavigateUrl = _createUserWizard.EditProfileUrl; } ((Table) InnerCell.Controls [0]).Rows [3].Visible = img.Visible || link.Visible; } void UpdateNavButtonState (string id, string text, string image, Style style) { WebControl b = (WebControl) FindControl (id); foreach (Control c in b.Parent.Controls) c.Visible = b == c; ((IButtonControl) b).Text = text; ImageButton imgbtn = b as ImageButton; if (imgbtn != null) imgbtn.ImageUrl = image; b.ApplyStyle (style); } } sealed class CompleteStepTemplate : ITemplate { readonly CreateUserWizard _createUserWizard; public CompleteStepTemplate (CreateUserWizard createUserWizard) { _createUserWizard = createUserWizard; } #region ITemplate Members public void InstantiateIn (Control container) { Table table = new Table (); // Row #0 TableRow row0 = new TableRow (); TableCell cell00 = new TableCell (); cell00.HorizontalAlign = HorizontalAlign.Center; cell00.ColumnSpan = 2; _createUserWizard.RegisterApplyStyle (cell00, _createUserWizard.TitleTextStyle); row0.Cells.Add (cell00); // Row #1 TableRow row1 = new TableRow (); TableCell cell10 = new TableCell (); cell10.HorizontalAlign = HorizontalAlign.Center; _createUserWizard.RegisterApplyStyle (cell10, _createUserWizard.CompleteSuccessTextStyle); row1.Cells.Add (cell10); // Row #2 TableRow row2 = new TableRow (); TableCell cell20 = new TableCell (); cell20.HorizontalAlign = HorizontalAlign.Right; cell20.ColumnSpan = 2; row2.Cells.Add (cell20); Control[] b = _createUserWizard.CreateButtonSet ("ContinueButton", CreateUserWizard.ContinueButtonCommandName); for (int i = 0; i < b.Length; i++) cell20.Controls.Add (b [i]); // Row #3 TableRow row3 = new TableRow (); TableCell cell30 = new TableCell (); cell30.Controls.Add (new Image ()); HyperLink link = new HyperLink (); link.ID = "EditProfileLink"; _createUserWizard.RegisterApplyStyle (link, _createUserWizard.HyperLinkStyle); cell30.Controls.Add (link); row3.Cells.Add (cell30); // table table.Rows.Add (row0); table.Rows.Add (row1); table.Rows.Add (row2); table.Rows.Add (row3); container.Controls.Add (table); } #endregion } } } #endif