2 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
5 // Vladimir Krasnov <vladimirk@mainsoft.com>
7 // Permission is hereby granted, free of charge, to any person obtaining
8 // a copy of this software and associated documentation files (the
9 // "Software"), to deal in the Software without restriction, including
10 // without limitation the rights to use, copy, modify, merge, publish,
11 // distribute, sublicense, and/or sell copies of the Software, and to
12 // permit persons to whom the Software is furnished to do so, subject to
13 // the following conditions:
15 // The above copyright notice and this permission notice shall be
16 // included in all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Web.Security;
33 using System.Collections;
34 using System.ComponentModel;
37 namespace System.Web.UI.WebControls
39 [BindableAttribute (false)]
40 public class CreateUserWizard : Wizard
42 public static readonly string ContinueButtonCommandName = "Continue";
43 private string _password = "";
44 private string _confirmPassword = "";
45 private MembershipProvider _provider = null;
46 private Label _errorMessageLabel = null;
48 private Style _textBoxStyle = null;
49 private Style _validatorTextStyle = null;
51 private TableItemStyle _completeSuccessTextStyle = null;
52 private TableItemStyle _errorMessageStyle = null;
53 private TableItemStyle _hyperLinkStyle = null;
54 private TableItemStyle _instructionTextStyle = null;
55 private TableItemStyle _labelStyle = null;
56 private TableItemStyle _passwordHintStyle = null;
57 private TableItemStyle _titleTextStyle = null;
59 private static readonly object CreatedUserEvent = new object ();
60 private static readonly object CreateUserErrorEvent = new object ();
61 private static readonly object CreatingUserEvent = new object ();
62 private static readonly object ContinueButtonClickEvent = new object ();
63 private static readonly object SendingMailEvent = new object ();
64 private static readonly object SendMailErrorEvent = new object ();
66 private CompleteWizardStep _completeWizardStep = null;
67 private CreateUserWizardStep _createUserWizardStep = null;
69 public CreateUserWizard ()
73 #region Public Properties
75 public override int ActiveStepIndex
77 get { return base.ActiveStepIndex; }
78 set { base.ActiveStepIndex = value; }
81 [LocalizableAttribute (true)]
82 [ThemeableAttribute (false)]
83 public virtual string Answer
87 object o = ViewState ["Answer"];
88 return (o == null) ? String.Empty : (string) o;
93 ViewState.Remove ("Answer");
95 ViewState ["Answer"] = value;
99 [LocalizableAttribute (true)]
100 public virtual string AnswerLabelText
104 object o = ViewState ["AnswerLabelText"];
105 return (o == null) ? Locale.GetText ("Security Answer:") : (string) o;
110 ViewState.Remove ("AnswerLabelText");
112 ViewState ["AnswerLabelText"] = value;
116 [LocalizableAttribute (true)]
117 public virtual string AnswerRequiredErrorMessage
121 object o = ViewState ["AnswerRequiredErrorMessage"];
122 return (o == null) ? Locale.GetText ("Security answer is required.") : (string) o;
127 ViewState.Remove ("AnswerRequiredErrorMessage");
129 ViewState ["AnswerRequiredErrorMessage"] = value;
133 [ThemeableAttribute (false)]
134 public virtual bool AutoGeneratePassword
138 object o = ViewState ["AutoGeneratePassword"];
139 return (o == null) ? false : (bool) o;
143 ViewState ["AutoGeneratePassword"] = value;
147 public CompleteWizardStep CompleteStep
151 if (_completeWizardStep == null) {
152 for (int i = 0; i < WizardSteps.Count; i++)
153 if (WizardSteps [i] is CompleteWizardStep) {
154 _completeWizardStep = (CompleteWizardStep) WizardSteps [i];
156 if (_completeWizardStep.Wizard == null)
157 _completeWizardStep.SetWizard (this);
160 return _completeWizardStep;
164 [LocalizableAttribute (true)]
165 public virtual string CompleteSuccessText
169 object o = ViewState ["CompleteSuccessText"];
170 return (o == null) ? Locale.GetText ("Your account has been successfully created.") : (string) o;
175 ViewState.Remove ("CompleteSuccessText");
177 ViewState ["CompleteSuccessText"] = value;
181 public TableItemStyle CompleteSuccessTextStyle
185 if (_completeSuccessTextStyle == null) {
186 _completeSuccessTextStyle = new TableItemStyle ();
187 if (IsTrackingViewState)
188 ((IStateManager) _completeSuccessTextStyle).TrackViewState ();
190 return _completeSuccessTextStyle;
194 public virtual string ConfirmPassword
196 get { return _confirmPassword; }
199 [LocalizableAttribute (true)]
200 public virtual string ConfirmPasswordCompareErrorMessage
204 object o = ViewState ["ConfirmPasswordCompareErrorMessage"];
205 return (o == null) ? Locale.GetText ("The Password and Confirmation Password must match.") : (string) o;
210 ViewState.Remove ("ConfirmPasswordCompareErrorMessage");
212 ViewState ["ConfirmPasswordCompareErrorMessage"] = value;
216 [LocalizableAttribute (true)]
217 public virtual string ConfirmPasswordLabelText
221 object o = ViewState ["ConfirmPasswordLabelText"];
222 return (o == null) ? Locale.GetText ("Confirm Password:") : (string) o;
227 ViewState.Remove ("ConfirmPasswordLabelText");
229 ViewState ["ConfirmPasswordLabelText"] = value;
233 [LocalizableAttribute (true)]
234 public virtual string ConfirmPasswordRequiredErrorMessage
238 object o = ViewState ["ConfirmPasswordRequiredErrorMessage"];
239 return (o == null) ? Locale.GetText ("Confirm Password is required.") : (string) o;
244 ViewState.Remove ("ConfirmPasswordRequiredErrorMessage");
246 ViewState ["ConfirmPasswordRequiredErrorMessage"] = value;
250 public virtual string ContinueButtonImageUrl
252 get { return base.FinishCompleteButtonImageUrl; }
253 set { base.FinishCompleteButtonImageUrl = value; }
256 public Style ContinueButtonStyle
260 return base.FinishCompleteButtonStyle;
264 [LocalizableAttribute (true)]
265 public virtual string ContinueButtonText
269 object o = ViewState ["ContinueButtonText"];
270 return (o == null) ? Locale.GetText ("Continue") : (string) o;
275 ViewState.Remove ("ContinueButtonText");
277 ViewState ["ContinueButtonText"] = value;
281 [MonoTODO ("This should be saved to viewstate")]
282 public virtual ButtonType ContinueButtonType
284 get { return base.FinishCompleteButtonType; }
285 set { base.FinishCompleteButtonType = value; }
288 [ThemeableAttribute (false)]
289 public virtual string ContinueDestinationPageUrl
293 object o = ViewState ["ContinueDestinationPageUrl"];
294 return (o == null) ? "" : (string) o;
299 ViewState.Remove ("ContinueDestinationPageUrl");
301 ViewState ["ContinueDestinationPageUrl"] = value;
305 public virtual string CreateUserButtonImageUrl
307 get { return base.StartNextButtonImageUrl; }
308 set { StartNextButtonImageUrl = value; }
311 public Style CreateUserButtonStyle
315 return base.StartNextButtonStyle;
319 [LocalizableAttribute (true)]
320 public virtual string CreateUserButtonText
324 object o = ViewState ["CreateUserButtonText"];
325 return (o == null) ? Locale.GetText ("Create User") : (string) o;
330 ViewState.Remove ("CreateUserButtonText");
332 ViewState ["CreateUserButtonText"] = value;
336 [MonoTODO ("This should be saved to viewstate")]
337 public virtual ButtonType CreateUserButtonType
339 get { return base.StartNextButtonType; }
340 set { base.StartNextButtonType = value; }
343 public CreateUserWizardStep CreateUserStep
347 if (_createUserWizardStep == null) {
348 for (int i = 0; i < WizardSteps.Count; i++)
349 if (WizardSteps [i] is CreateUserWizardStep) {
350 _createUserWizardStep = (CreateUserWizardStep) WizardSteps [i];
352 if (_createUserWizardStep.Wizard == null)
353 _createUserWizardStep.SetWizard (this);
356 return _createUserWizardStep;
360 [ThemeableAttribute (false)]
361 public virtual bool DisableCreatedUser
365 object o = ViewState ["DisableCreatedUser"];
366 return (o == null) ? false : (bool) o;
370 ViewState ["DisableCreatedUser"] = value;
374 public override bool DisplaySideBar
377 return ViewState.GetBool ("DisplaySideBar", false);
380 ViewState ["DisplaySideBar"] = value;
381 ChildControlsCreated = false;
385 [LocalizableAttribute (true)]
386 public virtual string DuplicateEmailErrorMessage
390 object o = ViewState ["DuplicateEmailErrorMessage"];
391 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;
396 ViewState.Remove ("DuplicateEmailErrorMessage");
398 ViewState ["DuplicateEmailErrorMessage"] = value;
402 [LocalizableAttribute (true)]
403 public virtual string DuplicateUserNameErrorMessage
407 object o = ViewState ["DuplicateUserNameErrorMessage"];
408 return (o == null) ? Locale.GetText ("Please enter a different user name.") : (string) o;
413 ViewState.Remove ("DuplicateUserNameErrorMessage");
415 ViewState ["DuplicateUserNameErrorMessage"] = value;
419 public virtual string EditProfileIconUrl
423 object o = ViewState ["EditProfileIconUrl"];
424 return (o == null) ? "" : (string) o;
429 ViewState.Remove ("EditProfileIconUrl");
431 ViewState ["EditProfileIconUrl"] = value;
435 [LocalizableAttribute (true)]
436 public virtual string EditProfileText
440 object o = ViewState ["EditProfileText"];
441 return (o == null) ? "" : (string) o;
446 ViewState.Remove ("EditProfileText");
448 ViewState ["EditProfileText"] = value;
452 public virtual string EditProfileUrl
456 object o = ViewState ["EditProfileUrl"];
457 return (o == null) ? "" : (string) o;
462 ViewState.Remove ("EditProfileUrl");
464 ViewState ["EditProfileUrl"] = value;
468 public virtual string Email
472 object o = ViewState ["Email"];
473 return (o == null) ? String.Empty : (string) o;
478 ViewState.Remove ("Email");
480 ViewState ["Email"] = value;
484 [LocalizableAttribute (true)]
485 public virtual string EmailLabelText
489 object o = ViewState ["EmailLabelText"];
490 return (o == null) ? Locale.GetText ("E-mail:") : (string) o;
495 ViewState.Remove ("EmailLabelText");
497 ViewState ["EmailLabelText"] = value;
501 public virtual string EmailRegularExpression
505 object o = ViewState ["EmailRegularExpression"];
506 return (o == null) ? "" : (string) o;
511 ViewState.Remove ("EmailRegularExpression");
513 ViewState ["EmailRegularExpression"] = value;
517 public virtual string EmailRegularExpressionErrorMessage
521 object o = ViewState ["EmailRegularExpressionErrorMessage"];
522 return (o == null) ? Locale.GetText ("Please enter a different e-mail.") : (string) o;
527 ViewState.Remove ("EmailRegularExpressionErrorMessage");
529 ViewState ["EmailRegularExpressionErrorMessage"] = value;
533 [LocalizableAttribute (true)]
534 public virtual string EmailRequiredErrorMessage
538 object o = ViewState ["EmailRequiredErrorMessage"];
539 return (o == null) ? Locale.GetText ("E-mail is required.") : (string) o;
544 ViewState.Remove ("EmailRequiredErrorMessage");
546 ViewState ["EmailRequiredErrorMessage"] = value;
550 public TableItemStyle ErrorMessageStyle
554 if (_errorMessageStyle == null) {
555 _errorMessageStyle = new TableItemStyle ();
556 if (IsTrackingViewState)
557 ((IStateManager) _errorMessageStyle).TrackViewState ();
559 return _errorMessageStyle;
563 public virtual string HelpPageIconUrl
567 object o = ViewState ["HelpPageIconUrl"];
568 return (o == null) ? "" : (string) o;
573 ViewState.Remove ("HelpPageIconUrl");
575 ViewState ["HelpPageIconUrl"] = value;
579 [LocalizableAttribute (true)]
580 public virtual string HelpPageText
584 object o = ViewState ["HelpPageText"];
585 return (o == null) ? "" : (string) o;
590 ViewState.Remove ("HelpPageText");
592 ViewState ["HelpPageText"] = value;
596 public virtual string HelpPageUrl
600 object o = ViewState ["HelpPageUrl"];
601 return (o == null) ? "" : (string) o;
606 ViewState.Remove ("HelpPageUrl");
608 ViewState ["HelpPageUrl"] = value;
612 public TableItemStyle HyperLinkStyle
616 if (_hyperLinkStyle == null) {
617 _hyperLinkStyle = new TableItemStyle ();
618 if (IsTrackingViewState)
619 ((IStateManager) _hyperLinkStyle).TrackViewState ();
621 return _hyperLinkStyle;
625 [LocalizableAttribute (true)]
626 public virtual string InstructionText
630 object o = ViewState ["InstructionText"];
631 return (o == null) ? "" : (string) o;
636 ViewState.Remove ("InstructionText");
638 ViewState ["InstructionText"] = value;
642 public TableItemStyle InstructionTextStyle
646 if (_instructionTextStyle == null) {
647 _instructionTextStyle = new TableItemStyle ();
648 if (IsTrackingViewState)
649 ((IStateManager) _instructionTextStyle).TrackViewState ();
651 return _instructionTextStyle;
655 [LocalizableAttribute (true)]
656 public virtual string InvalidAnswerErrorMessage
660 object o = ViewState ["InvalidAnswerErrorMessage"];
661 return (o == null) ? Locale.GetText ("Please enter a different security answer.") : (string) o;
666 ViewState.Remove ("InvalidAnswerErrorMessage");
668 ViewState ["InvalidAnswerErrorMessage"] = value;
672 [LocalizableAttribute (true)]
673 public virtual string InvalidEmailErrorMessage
677 object o = ViewState ["InvalidEmailErrorMessage"];
678 return (o == null) ? Locale.GetText ("Please enter a valid e-mail address.") : (string) o;
683 ViewState.Remove ("InvalidEmailErrorMessage");
685 ViewState ["InvalidEmailErrorMessage"] = value;
689 [MonoTODO ("take the values from membership provider")]
690 [LocalizableAttribute (true)]
691 public virtual string InvalidPasswordErrorMessage
695 object o = ViewState ["InvalidPasswordErrorMessage"];
696 return (o == null) ? Locale.GetText ("Password length minimum: {0}. Non-alphanumeric characters required: {1}.") : (string) o;
701 ViewState.Remove ("InvalidPasswordErrorMessage");
703 ViewState ["InvalidPasswordErrorMessage"] = value;
707 [LocalizableAttribute (true)]
708 public virtual string InvalidQuestionErrorMessage
712 object o = ViewState ["InvalidQuestionErrorMessage"];
713 return (o == null) ? Locale.GetText ("Please enter a different security question.") : (string) o;
718 ViewState.Remove ("InvalidQuestionErrorMessage");
720 ViewState ["InvalidQuestionErrorMessage"] = value;
724 public TableItemStyle LabelStyle
728 if (_labelStyle == null) {
729 _labelStyle = new TableItemStyle ();
730 if (IsTrackingViewState)
731 ((IStateManager) _labelStyle).TrackViewState ();
737 [ThemeableAttribute (false)]
738 public virtual bool LoginCreatedUser
742 object o = ViewState ["LoginCreatedUser"];
743 return (o == null) ? true : (bool) o;
747 ViewState ["LoginCreatedUser"] = value;
751 //[MonoTODO ("Sending mail functionality is not implemented")]
752 //[ThemeableAttribute (false)]
753 //public MailDefinition MailDefinition
755 // get { throw new NotImplementedException (); }
758 [ThemeableAttribute (false)]
759 public virtual string MembershipProvider
763 object o = ViewState ["MembershipProvider"];
764 return (o == null) ? "" : (string) o;
769 ViewState.Remove ("MembershipProvider");
771 ViewState ["MembershipProvider"] = value;
777 internal virtual MembershipProvider MembershipProviderInternal
781 if (_provider == null)
782 InitMemberShipProvider ();
788 public virtual string Password
790 get { return _password; }
793 public TableItemStyle PasswordHintStyle
797 if (_passwordHintStyle == null) {
798 _passwordHintStyle = new TableItemStyle ();
799 if (IsTrackingViewState)
800 ((IStateManager) _passwordHintStyle).TrackViewState ();
802 return _passwordHintStyle;
806 [LocalizableAttribute (true)]
807 public virtual string PasswordHintText
811 object o = ViewState ["PasswordHintText"];
812 return (o == null) ? "" : (string) o;
817 ViewState.Remove ("PasswordHintText");
819 ViewState ["PasswordHintText"] = value;
823 [LocalizableAttribute (true)]
824 public virtual string PasswordLabelText
828 object o = ViewState ["PasswordLabelText"];
829 return (o == null) ? Locale.GetText ("Password:") : (string) o;
834 ViewState.Remove ("PasswordLabelText");
836 ViewState ["PasswordLabelText"] = value;
840 public virtual string PasswordRegularExpression
844 object o = ViewState ["PasswordRegularExpression"];
845 return (o == null) ? "" : (string) o;
850 ViewState.Remove ("PasswordRegularExpression");
852 ViewState ["PasswordRegularExpression"] = value;
856 public virtual string PasswordRegularExpressionErrorMessage
860 object o = ViewState ["PasswordRegularExpressionErrorMessage"];
861 return (o == null) ? Locale.GetText ("Please enter a different password.") : (string) o;
866 ViewState.Remove ("PasswordRegularExpressionErrorMessage");
868 ViewState ["PasswordRegularExpressionErrorMessage"] = value;
872 [LocalizableAttribute (true)]
873 public virtual string PasswordRequiredErrorMessage
877 object o = ViewState ["PasswordRequiredErrorMessage"];
878 return (o == null) ? Locale.GetText ("Password is required.") : (string) o;
883 ViewState.Remove ("PasswordRequiredErrorMessage");
885 ViewState ["PasswordRequiredErrorMessage"] = value;
889 [LocalizableAttribute (true)]
890 [ThemeableAttribute (false)]
891 public virtual string Question
895 object o = ViewState ["Question"];
896 return (o == null) ? String.Empty : (string) o;
901 ViewState.Remove ("Question");
903 ViewState ["Question"] = value;
907 [LocalizableAttribute (true)]
908 public virtual string QuestionLabelText
912 object o = ViewState ["QuestionLabelText"];
913 return (o == null) ? Locale.GetText ("Security Question:") : (string) o;
918 ViewState.Remove ("QuestionLabelText");
920 ViewState ["QuestionLabelText"] = value;
924 [LocalizableAttribute (true)]
925 public virtual string QuestionRequiredErrorMessage
929 object o = ViewState ["QuestionRequiredErrorMessage"];
930 return (o == null) ? Locale.GetText ("Security question is required.") : (string) o;
935 ViewState.Remove ("QuestionRequiredErrorMessage");
937 ViewState ["QuestionRequiredErrorMessage"] = value;
941 [ThemeableAttribute (false)]
942 public virtual bool RequireEmail
946 object o = ViewState ["RequireEmail"];
947 return (o == null) ? true : (bool) o;
951 ViewState ["RequireEmail"] = value;
955 [MonoTODO ("doesnt work")]
956 public override string SkipLinkText
960 object o = ViewState ["SkipLinkText"];
961 return (o == null) ? "" : (string) o;
966 ViewState.Remove ("SkipLinkText");
968 ViewState ["SkipLinkText"] = value;
972 public Style TextBoxStyle
976 if (_textBoxStyle == null) {
977 _textBoxStyle = new Style ();
978 if (IsTrackingViewState)
979 ((IStateManager) _textBoxStyle).TrackViewState ();
981 return _textBoxStyle;
985 public TableItemStyle TitleTextStyle
989 if (_titleTextStyle == null) {
990 _titleTextStyle = new TableItemStyle ();
991 if (IsTrackingViewState)
992 ((IStateManager) _titleTextStyle).TrackViewState ();
994 return _titleTextStyle;
998 [LocalizableAttribute (true)]
999 public virtual string UnknownErrorMessage
1003 object o = ViewState ["UnknownErrorMessage"];
1004 return (o == null) ? Locale.GetText ("Your account was not created. Please try again.") : (string) o;
1009 ViewState.Remove ("UnknownErrorMessage");
1011 ViewState ["UnknownErrorMessage"] = value;
1015 public virtual string UserName
1019 object o = ViewState ["UserName"];
1020 return (o == null) ? String.Empty : (string) o;
1025 ViewState.Remove ("UserName");
1027 ViewState ["UserName"] = value;
1031 [LocalizableAttribute (true)]
1032 public virtual string UserNameLabelText
1036 object o = ViewState ["UserNameLabelText"];
1037 return (o == null) ? Locale.GetText ("User Name:") : (string) o;
1042 ViewState.Remove ("UserNameLabelText");
1044 ViewState ["UserNameLabelText"] = value;
1048 [LocalizableAttribute (true)]
1049 public virtual string UserNameRequiredErrorMessage
1053 object o = ViewState ["UserNameRequiredErrorMessage"];
1054 return (o == null) ? Locale.GetText ("User Name is required.") : (string) o;
1059 ViewState.Remove ("UserNameRequiredErrorMessage");
1061 ViewState ["UserNameRequiredErrorMessage"] = value;
1065 public Style ValidatorTextStyle
1069 if (_validatorTextStyle == null) {
1070 _validatorTextStyle = new Style ();
1071 if (IsTrackingViewState)
1072 ((IStateManager) _validatorTextStyle).TrackViewState ();
1074 return _validatorTextStyle;
1078 [ThemeableAttribute (false)]
1079 public override WizardStepCollection WizardSteps
1081 get { return base.WizardSteps; }
1086 #region Protected Properties
1088 protected internal bool QuestionAndAnswerRequired
1090 get { return MembershipProviderInternal.RequiresQuestionAndAnswer; }
1093 public event EventHandler ContinueButtonClick
1095 add { Events.AddHandler (ContinueButtonClickEvent, value); }
1096 remove { Events.RemoveHandler (ContinueButtonClickEvent, value); }
1099 public event EventHandler CreatedUser
1101 add { Events.AddHandler (CreatedUserEvent, value); }
1102 remove { Events.RemoveHandler (CreatedUserEvent, value); }
1105 public event CreateUserErrorEventHandler CreateUserError
1107 add { Events.AddHandler (CreateUserErrorEvent, value); }
1108 remove { Events.RemoveHandler (CreateUserErrorEvent, value); }
1111 public event LoginCancelEventHandler CreatingUser
1113 add { Events.AddHandler (CreatingUserEvent, value); }
1114 remove { Events.RemoveHandler (CreatingUserEvent, value); }
1117 public event MailMessageEventHandler SendingMail
1119 add { Events.AddHandler (SendingMailEvent, value); }
1120 remove { Events.RemoveHandler (SendingMailEvent, value); }
1123 public event SendMailErrorEventHandler SendMailError
1125 add { Events.AddHandler (SendMailErrorEvent, value); }
1126 remove { Events.RemoveHandler (SendMailErrorEvent, value); }
1132 #region Internal Properties
1134 internal override void InstantiateTemplateStep (TemplatedWizardStep step)
1136 if (step is CreateUserWizardStep) {
1137 InstantiateCreateUserWizardStep ((CreateUserWizardStep) step);
1139 else if (step is CompleteWizardStep) {
1140 InstantiateCompleteWizardStep ((CompleteWizardStep) step);
1143 base.InstantiateTemplateStep (step);
1147 private void InstantiateCompleteWizardStep (CompleteWizardStep step)
1149 BaseWizardContainer contentTemplateContainer = new BaseWizardContainer ();
1150 contentTemplateContainer.InstatiateTemplate (step.ContentTemplate != null ? step.ContentTemplate : new CompleteStepTemplate (this));
1152 step.ContentTemplateContainer = contentTemplateContainer;
1153 step.Controls.Clear ();
1154 step.Controls.Add (contentTemplateContainer);
1156 BaseWizardNavigationContainer customNavigationTemplateContainer = new BaseWizardNavigationContainer ();
1157 if (step.CustomNavigationTemplate != null) {
1158 step.CustomNavigationTemplate.InstantiateIn (customNavigationTemplateContainer);
1159 RegisterCustomNavigation (step, customNavigationTemplateContainer);
1161 step.CustomNavigationTemplateContainer = customNavigationTemplateContainer;
1164 void InstantiateCreateUserWizardStep (CreateUserWizardStep step)
1166 BaseWizardContainer contentTemplateContainer = new CreateUserStepContainer ();
1167 contentTemplateContainer.InstatiateTemplate (step.ContentTemplate != null ? step.ContentTemplate : new CreateUserStepTemplate (this));
1169 step.ContentTemplateContainer = contentTemplateContainer;
1170 step.Controls.Clear ();
1171 step.Controls.Add (contentTemplateContainer);
1173 BaseWizardNavigationContainer customNavigationTemplateContainer = new BaseWizardNavigationContainer ();
1174 (step.CustomNavigationTemplate != null ? step.CustomNavigationTemplate : new CreateUserStepNavigationTemplate (this)).InstantiateIn (customNavigationTemplateContainer);
1175 RegisterCustomNavigation (step, customNavigationTemplateContainer);
1177 step.CustomNavigationTemplateContainer = customNavigationTemplateContainer;
1180 internal override ITemplate SideBarItemTemplate
1182 get { return new SideBarLabelTemplate (this); }
1187 #region Protected Methods
1189 protected internal override void CreateChildControls ()
1191 CreateUserWizardStep c = CreateUserStep;
1193 base.CreateChildControls ();
1196 protected override void CreateControlHierarchy ()
1198 base.CreateControlHierarchy ();
1200 CreateUserStepContainer container = CreateUserStep.ContentTemplateContainer as CreateUserStepContainer;
1202 if (container != null) {
1203 IEditableTextControl editable;
1204 editable = container.UserNameTextBox as IEditableTextControl;
1206 if (editable != null)
1207 editable.TextChanged += new EventHandler (UserName_TextChanged);
1209 if (!AutoGeneratePassword) {
1210 editable = container.PasswordTextBox as IEditableTextControl;
1212 if (editable != null)
1213 editable.TextChanged += new EventHandler (Password_TextChanged);
1215 editable = container.ConfirmPasswordTextBox as IEditableTextControl;
1217 if (editable != null)
1218 editable.TextChanged += new EventHandler (ConfirmPassword_TextChanged);
1222 editable = container.EmailTextBox as IEditableTextControl;
1224 if (editable != null)
1225 editable.TextChanged += new EventHandler (Email_TextChanged);
1228 if (QuestionAndAnswerRequired) {
1229 editable = container.QuestionTextBox as IEditableTextControl;
1231 if (editable != null)
1232 editable.TextChanged += new EventHandler (Question_TextChanged);
1234 editable = container.AnswerTextBox as IEditableTextControl;
1236 if (editable != null)
1237 editable.TextChanged += new EventHandler (Answer_TextChanged);
1240 _errorMessageLabel = container.ErrorMessageLabel;
1244 [MonoTODO ("Not Implemented")]
1245 protected override IDictionary GetDesignModeState ()
1247 throw new NotImplementedException ();
1250 protected internal override void OnInit (EventArgs e)
1254 if (CreateUserStep == null)
1255 WizardSteps.AddAt (0, new CreateUserWizardStep ());
1257 if (CompleteStep == null)
1258 WizardSteps.AddAt (WizardSteps.Count, new CompleteWizardStep ());
1260 if (ActiveStepIndex < 0)
1261 ActiveStepIndex = 0;
1264 protected override bool OnBubbleEvent (object source, EventArgs e)
1266 CommandEventArgs args = e as CommandEventArgs;
1267 if (e != null && args.CommandName == ContinueButtonCommandName) {
1268 ProcessContinueEvent ();
1271 return base.OnBubbleEvent (source, e);
1274 private void ProcessContinueEvent () {
1275 OnContinueButtonClick (EventArgs.Empty);
1277 if (ContinueDestinationPageUrl.Length > 0) {
1278 Context.Response.Redirect (ContinueDestinationPageUrl);
1282 protected virtual void OnContinueButtonClick (EventArgs e)
1284 if (Events != null) {
1285 EventHandler eh = (EventHandler) Events [ContinueButtonClickEvent];
1286 if (eh != null) eh (this, e);
1290 protected virtual void OnCreatedUser (EventArgs e)
1292 if (Events != null) {
1293 EventHandler eh = (EventHandler) Events [CreatedUserEvent];
1294 if (eh != null) eh (this, e);
1298 protected virtual void OnCreateUserError (CreateUserErrorEventArgs e)
1300 if (Events != null) {
1301 CreateUserErrorEventHandler eh = (CreateUserErrorEventHandler) Events [CreateUserErrorEvent];
1302 if (eh != null) eh (this, e);
1306 protected virtual void OnCreatingUser (LoginCancelEventArgs e)
1308 if (Events != null) {
1309 LoginCancelEventHandler eh = (LoginCancelEventHandler) Events [CreatingUserEvent];
1310 if (eh != null) eh (this, e);
1314 protected override void OnNextButtonClick (WizardNavigationEventArgs e)
1316 if (ActiveStep == CreateUserStep) {
1317 bool userCreated = CreateUser ();
1321 if (LoginCreatedUser)
1324 base.OnNextButtonClick (e);
1327 protected internal override void OnPreRender (EventArgs e)
1329 base.OnPreRender (e);
1332 protected virtual void OnSendingMail (MailMessageEventArgs e)
1334 if (Events != null) {
1335 MailMessageEventHandler eh = (MailMessageEventHandler) Events [SendingMailEvent];
1336 if (eh != null) eh (this, e);
1340 protected virtual void OnSendMailError (SendMailErrorEventArgs e)
1342 if (Events != null) {
1343 SendMailErrorEventHandler eh = (SendMailErrorEventHandler) Events [SendMailErrorEvent];
1344 if (eh != null) eh (this, e);
1348 protected override void LoadViewState (object savedState)
1350 if (savedState == null) {
1351 base.LoadViewState (null);
1355 object [] states = (object []) savedState;
1356 base.LoadViewState (states [0]);
1358 if (states [1] != null) ((IStateManager) TextBoxStyle).LoadViewState (states [1]);
1359 if (states [2] != null) ((IStateManager) ValidatorTextStyle).LoadViewState (states [2]);
1360 if (states [3] != null) ((IStateManager) CompleteSuccessTextStyle).LoadViewState (states [3]);
1361 if (states [4] != null) ((IStateManager) ErrorMessageStyle).LoadViewState (states [4]);
1362 if (states [5] != null) ((IStateManager) HyperLinkStyle).LoadViewState (states [5]);
1363 if (states [6] != null) ((IStateManager) InstructionTextStyle).LoadViewState (states [6]);
1364 if (states [7] != null) ((IStateManager) LabelStyle).LoadViewState (states [7]);
1365 if (states [8] != null) ((IStateManager) PasswordHintStyle).LoadViewState (states [8]);
1366 if (states [9] != null) ((IStateManager) TitleTextStyle).LoadViewState (states [9]);
1369 protected override object SaveViewState ()
1371 object [] state = new object [10];
1372 state [0] = base.SaveViewState ();
1374 if (TextBoxStyle != null) state [1] = ((IStateManager) TextBoxStyle).SaveViewState ();
1375 if (ValidatorTextStyle != null) state [2] = ((IStateManager) ValidatorTextStyle).SaveViewState ();
1376 if (CompleteSuccessTextStyle != null) state [3] = ((IStateManager) CompleteSuccessTextStyle).SaveViewState ();
1377 if (ErrorMessageStyle != null) state [4] = ((IStateManager) ErrorMessageStyle).SaveViewState ();
1378 if (HyperLinkStyle != null) state [5] = ((IStateManager) HyperLinkStyle).SaveViewState ();
1379 if (InstructionTextStyle != null) state [6] = ((IStateManager) InstructionTextStyle).SaveViewState ();
1380 if (LabelStyle != null) state [7] = ((IStateManager) LabelStyle).SaveViewState ();
1381 if (PasswordHintStyle != null) state [8] = ((IStateManager) PasswordHintStyle).SaveViewState ();
1382 if (TitleTextStyle != null) state [9] = ((IStateManager) TitleTextStyle).SaveViewState ();
1384 for (int n = 0; n < state.Length; n++)
1385 if (state [n] != null) return state;
1390 [MonoTODO ("for design-time usage - no more details available")]
1391 protected override void SetDesignModeState (IDictionary data)
1393 base.SetDesignModeState (data);
1396 protected override void TrackViewState ()
1398 base.TrackViewState ();
1399 if (_textBoxStyle != null) ((IStateManager) _textBoxStyle).TrackViewState ();
1400 if (_validatorTextStyle != null) ((IStateManager) _validatorTextStyle).TrackViewState ();
1401 if (_completeSuccessTextStyle != null) ((IStateManager) _completeSuccessTextStyle).TrackViewState ();
1402 if (_errorMessageStyle != null) ((IStateManager) _errorMessageStyle).TrackViewState ();
1403 if (_hyperLinkStyle != null) ((IStateManager) _hyperLinkStyle).TrackViewState ();
1404 if (_instructionTextStyle != null) ((IStateManager) _instructionTextStyle).TrackViewState ();
1405 if (_labelStyle != null) ((IStateManager) _labelStyle).TrackViewState ();
1406 if (_passwordHintStyle != null) ((IStateManager) _passwordHintStyle).TrackViewState ();
1407 if (_titleTextStyle != null) ((IStateManager) _titleTextStyle).TrackViewState ();
1412 #region Private event handlers
1414 private void UserName_TextChanged (object sender, EventArgs e)
1416 UserName = ((ITextControl) sender).Text;
1419 private void Password_TextChanged (object sender, EventArgs e)
1421 _password = ((ITextControl) sender).Text;
1424 private void ConfirmPassword_TextChanged (object sender, EventArgs e)
1426 _confirmPassword = ((ITextControl) sender).Text;
1429 private void Email_TextChanged (object sender, EventArgs e)
1431 Email = ((ITextControl) sender).Text;
1434 private void Question_TextChanged (object sender, EventArgs e)
1436 Question = ((ITextControl) sender).Text;
1439 private void Answer_TextChanged (object sender, EventArgs e)
1441 Answer = ((ITextControl) sender).Text;
1446 #region Private Methods
1448 private void InitMemberShipProvider ()
1450 string mp = MembershipProvider;
1451 _provider = (mp.Length == 0) ? _provider = Membership.Provider : Membership.Providers [mp];
1452 if (_provider == null)
1453 throw new HttpException (Locale.GetText ("No provider named '{0}' could be found.", mp));
1456 private bool CreateUser ()
1461 if (AutoGeneratePassword)
1462 _password = GeneratePassword ();
1464 OnCreatingUser (new LoginCancelEventArgs (false));
1466 MembershipCreateStatus status;
1467 MembershipUser newUser = MembershipProviderInternal.CreateUser (
1468 UserName, Password, Email, Question, Answer, !DisableCreatedUser, null, out status);
1470 if ((newUser != null) && (status == MembershipCreateStatus.Success)) {
1471 OnCreatedUser (new EventArgs ());
1476 case MembershipCreateStatus.DuplicateUserName:
1477 ShowErrorMessage (DuplicateUserNameErrorMessage);
1480 case MembershipCreateStatus.InvalidPassword:
1481 ShowErrorMessage (String.Format (InvalidPasswordErrorMessage, MembershipProviderInternal.MinRequiredPasswordLength, MembershipProviderInternal.MinRequiredNonAlphanumericCharacters));
1484 case MembershipCreateStatus.DuplicateEmail:
1485 ShowErrorMessage (DuplicateEmailErrorMessage);
1488 case MembershipCreateStatus.InvalidEmail:
1489 ShowErrorMessage (InvalidEmailErrorMessage);
1492 case MembershipCreateStatus.InvalidQuestion:
1493 ShowErrorMessage (InvalidQuestionErrorMessage);
1496 case MembershipCreateStatus.InvalidAnswer:
1497 ShowErrorMessage (InvalidAnswerErrorMessage);
1500 case MembershipCreateStatus.UserRejected:
1501 case MembershipCreateStatus.InvalidUserName:
1502 case MembershipCreateStatus.ProviderError:
1503 case MembershipCreateStatus.InvalidProviderUserKey:
1504 ShowErrorMessage (UnknownErrorMessage);
1510 OnCreateUserError (new CreateUserErrorEventArgs (status));
1515 private void Login ()
1517 bool userValidated = MembershipProviderInternal.ValidateUser (UserName, Password);
1519 FormsAuthentication.SetAuthCookie (UserName, false);
1522 private void ShowErrorMessage (string errorMessage)
1524 if (_errorMessageLabel != null)
1525 _errorMessageLabel.Text = errorMessage;
1528 private string GeneratePassword ()
1530 return Membership.GeneratePassword (8, 3);
1535 #region SideBarLabelTemplate
1537 class SideBarLabelTemplate : ITemplate
1541 public SideBarLabelTemplate (Wizard wizard)
1543 this.wizard = wizard;
1546 public void InstantiateIn (Control control)
1548 Label b = new Label ();
1549 wizard.RegisterApplyStyle (b, wizard.SideBarButtonStyle, false);
1550 control.Controls.Add (b);
1551 control.DataBinding += Bound;
1554 void Bound (object s, EventArgs args)
1556 WizardStepBase step = DataBinder.GetDataItem (s) as WizardStepBase;
1558 Control c = (Control) s;
1559 Label b = (Label) c.Controls [0];
1560 b.ID = SideBarButtonID;
1561 b.Text = step.Title;
1562 if (step == wizard.ActiveStep)