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
376 get { return base.DisplaySideBar; }
377 set { base.DisplaySideBar = value; }
380 [LocalizableAttribute (true)]
381 public virtual string DuplicateEmailErrorMessage
385 object o = ViewState ["DuplicateEmailErrorMessage"];
386 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;
391 ViewState.Remove ("DuplicateEmailErrorMessage");
393 ViewState ["DuplicateEmailErrorMessage"] = value;
397 [LocalizableAttribute (true)]
398 public virtual string DuplicateUserNameErrorMessage
402 object o = ViewState ["DuplicateUserNameErrorMessage"];
403 return (o == null) ? Locale.GetText ("Please enter a different user name.") : (string) o;
408 ViewState.Remove ("DuplicateUserNameErrorMessage");
410 ViewState ["DuplicateUserNameErrorMessage"] = value;
414 public virtual string EditProfileIconUrl
418 object o = ViewState ["EditProfileIconUrl"];
419 return (o == null) ? "" : (string) o;
424 ViewState.Remove ("EditProfileIconUrl");
426 ViewState ["EditProfileIconUrl"] = value;
430 [LocalizableAttribute (true)]
431 public virtual string EditProfileText
435 object o = ViewState ["EditProfileText"];
436 return (o == null) ? "" : (string) o;
441 ViewState.Remove ("EditProfileText");
443 ViewState ["EditProfileText"] = value;
447 public virtual string EditProfileUrl
451 object o = ViewState ["EditProfileUrl"];
452 return (o == null) ? "" : (string) o;
457 ViewState.Remove ("EditProfileUrl");
459 ViewState ["EditProfileUrl"] = value;
463 public virtual string Email
467 object o = ViewState ["Email"];
468 return (o == null) ? String.Empty : (string) o;
473 ViewState.Remove ("Email");
475 ViewState ["Email"] = value;
479 [LocalizableAttribute (true)]
480 public virtual string EmailLabelText
484 object o = ViewState ["EmailLabelText"];
485 return (o == null) ? Locale.GetText ("E-mail:") : (string) o;
490 ViewState.Remove ("EmailLabelText");
492 ViewState ["EmailLabelText"] = value;
496 public virtual string EmailRegularExpression
500 object o = ViewState ["EmailRegularExpression"];
501 return (o == null) ? "" : (string) o;
506 ViewState.Remove ("EmailRegularExpression");
508 ViewState ["EmailRegularExpression"] = value;
512 public virtual string EmailRegularExpressionErrorMessage
516 object o = ViewState ["EmailRegularExpressionErrorMessage"];
517 return (o == null) ? Locale.GetText ("Please enter a different e-mail.") : (string) o;
522 ViewState.Remove ("EmailRegularExpressionErrorMessage");
524 ViewState ["EmailRegularExpressionErrorMessage"] = value;
528 [LocalizableAttribute (true)]
529 public virtual string EmailRequiredErrorMessage
533 object o = ViewState ["EmailRequiredErrorMessage"];
534 return (o == null) ? Locale.GetText ("E-mail is required.") : (string) o;
539 ViewState.Remove ("EmailRequiredErrorMessage");
541 ViewState ["EmailRequiredErrorMessage"] = value;
545 public TableItemStyle ErrorMessageStyle
549 if (_errorMessageStyle == null) {
550 _errorMessageStyle = new TableItemStyle ();
551 if (IsTrackingViewState)
552 ((IStateManager) _errorMessageStyle).TrackViewState ();
554 return _errorMessageStyle;
558 public virtual string HelpPageIconUrl
562 object o = ViewState ["HelpPageIconUrl"];
563 return (o == null) ? "" : (string) o;
568 ViewState.Remove ("HelpPageIconUrl");
570 ViewState ["HelpPageIconUrl"] = value;
574 [LocalizableAttribute (true)]
575 public virtual string HelpPageText
579 object o = ViewState ["HelpPageText"];
580 return (o == null) ? "" : (string) o;
585 ViewState.Remove ("HelpPageText");
587 ViewState ["HelpPageText"] = value;
591 public virtual string HelpPageUrl
595 object o = ViewState ["HelpPageUrl"];
596 return (o == null) ? "" : (string) o;
601 ViewState.Remove ("HelpPageUrl");
603 ViewState ["HelpPageUrl"] = value;
607 public TableItemStyle HyperLinkStyle
611 if (_hyperLinkStyle == null) {
612 _hyperLinkStyle = new TableItemStyle ();
613 if (IsTrackingViewState)
614 ((IStateManager) _hyperLinkStyle).TrackViewState ();
616 return _hyperLinkStyle;
620 [LocalizableAttribute (true)]
621 public virtual string InstructionText
625 object o = ViewState ["InstructionText"];
626 return (o == null) ? "" : (string) o;
631 ViewState.Remove ("InstructionText");
633 ViewState ["InstructionText"] = value;
637 public TableItemStyle InstructionTextStyle
641 if (_instructionTextStyle == null) {
642 _instructionTextStyle = new TableItemStyle ();
643 if (IsTrackingViewState)
644 ((IStateManager) _instructionTextStyle).TrackViewState ();
646 return _instructionTextStyle;
650 [LocalizableAttribute (true)]
651 public virtual string InvalidAnswerErrorMessage
655 object o = ViewState ["InvalidAnswerErrorMessage"];
656 return (o == null) ? Locale.GetText ("Please enter a different security answer.") : (string) o;
661 ViewState.Remove ("InvalidAnswerErrorMessage");
663 ViewState ["InvalidAnswerErrorMessage"] = value;
667 [LocalizableAttribute (true)]
668 public virtual string InvalidEmailErrorMessage
672 object o = ViewState ["InvalidEmailErrorMessage"];
673 return (o == null) ? Locale.GetText ("Please enter a valid e-mail address.") : (string) o;
678 ViewState.Remove ("InvalidEmailErrorMessage");
680 ViewState ["InvalidEmailErrorMessage"] = value;
684 [MonoTODO ("take the values from membership provider")]
685 [LocalizableAttribute (true)]
686 public virtual string InvalidPasswordErrorMessage
690 object o = ViewState ["InvalidPasswordErrorMessage"];
691 return (o == null) ? Locale.GetText ("Password length minimum: {0}. Non-alphanumeric characters required: {1}.") : (string) o;
696 ViewState.Remove ("InvalidPasswordErrorMessage");
698 ViewState ["InvalidPasswordErrorMessage"] = value;
702 [LocalizableAttribute (true)]
703 public virtual string InvalidQuestionErrorMessage
707 object o = ViewState ["InvalidQuestionErrorMessage"];
708 return (o == null) ? Locale.GetText ("Please enter a different security question.") : (string) o;
713 ViewState.Remove ("InvalidQuestionErrorMessage");
715 ViewState ["InvalidQuestionErrorMessage"] = value;
719 public TableItemStyle LabelStyle
723 if (_labelStyle == null) {
724 _labelStyle = new TableItemStyle ();
725 if (IsTrackingViewState)
726 ((IStateManager) _labelStyle).TrackViewState ();
732 [ThemeableAttribute (false)]
733 public virtual bool LoginCreatedUser
737 object o = ViewState ["LoginCreatedUser"];
738 return (o == null) ? true : (bool) o;
742 ViewState ["LoginCreatedUser"] = value;
746 //[MonoTODO ("Sending mail functionality is not implemented")]
747 //[ThemeableAttribute (false)]
748 //public MailDefinition MailDefinition
750 // get { throw new NotImplementedException (); }
753 [ThemeableAttribute (false)]
754 public virtual string MembershipProvider
758 object o = ViewState ["MembershipProvider"];
759 return (o == null) ? "" : (string) o;
764 ViewState.Remove ("MembershipProvider");
766 ViewState ["MembershipProvider"] = value;
772 internal virtual MembershipProvider MembershipProviderInternal
776 if (_provider == null)
777 InitMemberShipProvider ();
783 public virtual string Password
785 get { return _password; }
788 public TableItemStyle PasswordHintStyle
792 if (_passwordHintStyle == null) {
793 _passwordHintStyle = new TableItemStyle ();
794 if (IsTrackingViewState)
795 ((IStateManager) _passwordHintStyle).TrackViewState ();
797 return _passwordHintStyle;
801 [LocalizableAttribute (true)]
802 public virtual string PasswordHintText
806 object o = ViewState ["PasswordHintText"];
807 return (o == null) ? "" : (string) o;
812 ViewState.Remove ("PasswordHintText");
814 ViewState ["PasswordHintText"] = value;
818 [LocalizableAttribute (true)]
819 public virtual string PasswordLabelText
823 object o = ViewState ["PasswordLabelText"];
824 return (o == null) ? Locale.GetText ("Password:") : (string) o;
829 ViewState.Remove ("PasswordLabelText");
831 ViewState ["PasswordLabelText"] = value;
835 public virtual string PasswordRegularExpression
839 object o = ViewState ["PasswordRegularExpression"];
840 return (o == null) ? "" : (string) o;
845 ViewState.Remove ("PasswordRegularExpression");
847 ViewState ["PasswordRegularExpression"] = value;
851 public virtual string PasswordRegularExpressionErrorMessage
855 object o = ViewState ["PasswordRegularExpressionErrorMessage"];
856 return (o == null) ? Locale.GetText ("Please enter a different password.") : (string) o;
861 ViewState.Remove ("PasswordRegularExpressionErrorMessage");
863 ViewState ["PasswordRegularExpressionErrorMessage"] = value;
867 [LocalizableAttribute (true)]
868 public virtual string PasswordRequiredErrorMessage
872 object o = ViewState ["PasswordRequiredErrorMessage"];
873 return (o == null) ? Locale.GetText ("Password is required.") : (string) o;
878 ViewState.Remove ("PasswordRequiredErrorMessage");
880 ViewState ["PasswordRequiredErrorMessage"] = value;
884 [LocalizableAttribute (true)]
885 [ThemeableAttribute (false)]
886 public virtual string Question
890 object o = ViewState ["Question"];
891 return (o == null) ? String.Empty : (string) o;
896 ViewState.Remove ("Question");
898 ViewState ["Question"] = value;
902 [LocalizableAttribute (true)]
903 public virtual string QuestionLabelText
907 object o = ViewState ["QuestionLabelText"];
908 return (o == null) ? Locale.GetText ("Security Question:") : (string) o;
913 ViewState.Remove ("QuestionLabelText");
915 ViewState ["QuestionLabelText"] = value;
919 [LocalizableAttribute (true)]
920 public virtual string QuestionRequiredErrorMessage
924 object o = ViewState ["QuestionRequiredErrorMessage"];
925 return (o == null) ? Locale.GetText ("Security question is required.") : (string) o;
930 ViewState.Remove ("QuestionRequiredErrorMessage");
932 ViewState ["QuestionRequiredErrorMessage"] = value;
936 [ThemeableAttribute (false)]
937 public virtual bool RequireEmail
941 object o = ViewState ["RequireEmail"];
942 return (o == null) ? true : (bool) o;
946 ViewState ["RequireEmail"] = value;
950 [MonoTODO ("doesnt work")]
951 public override string SkipLinkText
955 object o = ViewState ["SkipLinkText"];
956 return (o == null) ? "" : (string) o;
961 ViewState.Remove ("SkipLinkText");
963 ViewState ["SkipLinkText"] = value;
967 public Style TextBoxStyle
971 if (_textBoxStyle == null) {
972 _textBoxStyle = new Style ();
973 if (IsTrackingViewState)
974 ((IStateManager) _textBoxStyle).TrackViewState ();
976 return _textBoxStyle;
980 public TableItemStyle TitleTextStyle
984 if (_titleTextStyle == null) {
985 _titleTextStyle = new TableItemStyle ();
986 if (IsTrackingViewState)
987 ((IStateManager) _titleTextStyle).TrackViewState ();
989 return _titleTextStyle;
993 [LocalizableAttribute (true)]
994 public virtual string UnknownErrorMessage
998 object o = ViewState ["UnknownErrorMessage"];
999 return (o == null) ? Locale.GetText ("Your account was not created. Please try again.") : (string) o;
1004 ViewState.Remove ("UnknownErrorMessage");
1006 ViewState ["UnknownErrorMessage"] = value;
1010 public virtual string UserName
1014 object o = ViewState ["UserName"];
1015 return (o == null) ? String.Empty : (string) o;
1020 ViewState.Remove ("UserName");
1022 ViewState ["UserName"] = value;
1026 [LocalizableAttribute (true)]
1027 public virtual string UserNameLabelText
1031 object o = ViewState ["UserNameLabelText"];
1032 return (o == null) ? Locale.GetText ("User Name:") : (string) o;
1037 ViewState.Remove ("UserNameLabelText");
1039 ViewState ["UserNameLabelText"] = value;
1043 [LocalizableAttribute (true)]
1044 public virtual string UserNameRequiredErrorMessage
1048 object o = ViewState ["UserNameRequiredErrorMessage"];
1049 return (o == null) ? Locale.GetText ("User Name is required.") : (string) o;
1054 ViewState.Remove ("UserNameRequiredErrorMessage");
1056 ViewState ["UserNameRequiredErrorMessage"] = value;
1060 public Style ValidatorTextStyle
1064 if (_validatorTextStyle == null) {
1065 _validatorTextStyle = new Style ();
1066 if (IsTrackingViewState)
1067 ((IStateManager) _validatorTextStyle).TrackViewState ();
1069 return _validatorTextStyle;
1073 [ThemeableAttribute (false)]
1074 public override WizardStepCollection WizardSteps
1076 get { return base.WizardSteps; }
1081 #region Protected Properties
1083 protected internal bool QuestionAndAnswerRequired
1085 get { return MembershipProviderInternal.RequiresQuestionAndAnswer; }
1088 public event EventHandler ContinueButtonClick
1090 add { Events.AddHandler (ContinueButtonClickEvent, value); }
1091 remove { Events.RemoveHandler (ContinueButtonClickEvent, value); }
1094 public event EventHandler CreatedUser
1096 add { Events.AddHandler (CreatedUserEvent, value); }
1097 remove { Events.RemoveHandler (CreatedUserEvent, value); }
1100 public event CreateUserErrorEventHandler CreateUserError
1102 add { Events.AddHandler (CreateUserErrorEvent, value); }
1103 remove { Events.RemoveHandler (CreateUserErrorEvent, value); }
1106 public event LoginCancelEventHandler CreatingUser
1108 add { Events.AddHandler (CreatingUserEvent, value); }
1109 remove { Events.RemoveHandler (CreatingUserEvent, value); }
1112 public event MailMessageEventHandler SendingMail
1114 add { Events.AddHandler (SendingMailEvent, value); }
1115 remove { Events.RemoveHandler (SendingMailEvent, value); }
1118 public event SendMailErrorEventHandler SendMailError
1120 add { Events.AddHandler (SendMailErrorEvent, value); }
1121 remove { Events.RemoveHandler (SendMailErrorEvent, value); }
1127 #region Internal Properties
1129 internal override void InstantiateTemplateStep (TemplatedWizardStep step)
1131 base.InstantiateTemplateStep (step);
1134 internal override ITemplate SideBarItemTemplate
1136 get { return new SideBarLabelTemplate (this); }
1141 #region Protected Methods
1143 protected internal override void CreateChildControls ()
1145 base.FinishCompleteButtonText = ContinueButtonText;
1146 base.StartNextButtonText = CreateUserButtonText;
1148 CreateUserWizardStep c = CreateUserStep;
1150 base.CreateChildControls ();
1153 protected override void CreateControlHierarchy ()
1155 base.CreateControlHierarchy ();
1157 CreateUserStepContainer container = CreateUserStep.ContentTemplateContainer as CreateUserStepContainer;
1159 if (container != null) {
1160 IEditableTextControl editable;
1161 editable = container.UserNameTextBox as IEditableTextControl;
1163 if (editable != null)
1164 editable.TextChanged += new EventHandler (UserName_TextChanged);
1166 if (!AutoGeneratePassword) {
1167 editable = container.PasswordTextBox as IEditableTextControl;
1169 if (editable != null)
1170 editable.TextChanged += new EventHandler (Password_TextChanged);
1172 editable = container.ConfirmPasswordTextBox as IEditableTextControl;
1174 if (editable != null)
1175 editable.TextChanged += new EventHandler (ConfirmPassword_TextChanged);
1179 editable = container.EmailTextBox as IEditableTextControl;
1181 if (editable != null)
1182 editable.TextChanged += new EventHandler (Email_TextChanged);
1185 if (QuestionAndAnswerRequired) {
1186 editable = container.QuestionTextBox as IEditableTextControl;
1188 if (editable != null)
1189 editable.TextChanged += new EventHandler (Question_TextChanged);
1191 editable = container.AnswerTextBox as IEditableTextControl;
1193 if (editable != null)
1194 editable.TextChanged += new EventHandler (Answer_TextChanged);
1197 _errorMessageLabel = container.ErrorMessageLabel;
1201 [MonoTODO ("Not Implemented")]
1202 protected override IDictionary GetDesignModeState ()
1204 throw new NotImplementedException ();
1207 protected internal override void OnInit (EventArgs e)
1211 DisplaySideBar = false;
1213 if (CreateUserStep == null)
1214 WizardSteps.AddAt (0, new CreateUserWizardStep ());
1216 if (CompleteStep == null)
1217 WizardSteps.AddAt (WizardSteps.Count, new CompleteWizardStep ());
1219 if (ActiveStepIndex < 0)
1220 ActiveStepIndex = 0;
1223 protected override bool OnBubbleEvent (object source, EventArgs e)
1225 CommandEventArgs args = e as CommandEventArgs;
1226 if (e != null && args.CommandName == ContinueButtonCommandName) {
1227 ProcessContinueEvent ();
1230 return base.OnBubbleEvent (source, e);
1233 private void ProcessContinueEvent () {
1234 OnContinueButtonClick (EventArgs.Empty);
1236 if (ContinueDestinationPageUrl.Length > 0) {
1237 Context.Response.Redirect (ContinueDestinationPageUrl);
1241 protected virtual void OnContinueButtonClick (EventArgs e)
1243 if (Events != null) {
1244 EventHandler eh = (EventHandler) Events [ContinueButtonClickEvent];
1245 if (eh != null) eh (this, e);
1249 protected virtual void OnCreatedUser (EventArgs e)
1251 if (Events != null) {
1252 EventHandler eh = (EventHandler) Events [CreatedUserEvent];
1253 if (eh != null) eh (this, e);
1257 protected virtual void OnCreateUserError (CreateUserErrorEventArgs e)
1259 if (Events != null) {
1260 CreateUserErrorEventHandler eh = (CreateUserErrorEventHandler) Events [CreateUserErrorEvent];
1261 if (eh != null) eh (this, e);
1265 protected virtual void OnCreatingUser (LoginCancelEventArgs e)
1267 if (Events != null) {
1268 LoginCancelEventHandler eh = (LoginCancelEventHandler) Events [CreatingUserEvent];
1269 if (eh != null) eh (this, e);
1273 protected override void OnNextButtonClick (WizardNavigationEventArgs e)
1275 bool userCreated = CreateUser ();
1279 if (LoginCreatedUser)
1282 base.OnNextButtonClick (e);
1285 protected internal override void OnPreRender (EventArgs e)
1287 base.OnPreRender (e);
1290 protected virtual void OnSendingMail (MailMessageEventArgs e)
1292 if (Events != null) {
1293 MailMessageEventHandler eh = (MailMessageEventHandler) Events [SendingMailEvent];
1294 if (eh != null) eh (this, e);
1298 protected virtual void OnSendMailError (SendMailErrorEventArgs e)
1300 if (Events != null) {
1301 SendMailErrorEventHandler eh = (SendMailErrorEventHandler) Events [SendMailErrorEvent];
1302 if (eh != null) eh (this, e);
1306 protected override void LoadViewState (object savedState)
1308 if (savedState == null) {
1309 base.LoadViewState (null);
1313 object [] states = (object []) savedState;
1314 base.LoadViewState (states [0]);
1316 if (states [1] != null) ((IStateManager) TextBoxStyle).LoadViewState (states [1]);
1317 if (states [2] != null) ((IStateManager) ValidatorTextStyle).LoadViewState (states [2]);
1318 if (states [3] != null) ((IStateManager) CompleteSuccessTextStyle).LoadViewState (states [3]);
1319 if (states [4] != null) ((IStateManager) ErrorMessageStyle).LoadViewState (states [4]);
1320 if (states [5] != null) ((IStateManager) HyperLinkStyle).LoadViewState (states [5]);
1321 if (states [6] != null) ((IStateManager) InstructionTextStyle).LoadViewState (states [6]);
1322 if (states [7] != null) ((IStateManager) LabelStyle).LoadViewState (states [7]);
1323 if (states [8] != null) ((IStateManager) PasswordHintStyle).LoadViewState (states [8]);
1324 if (states [9] != null) ((IStateManager) TitleTextStyle).LoadViewState (states [9]);
1327 protected override object SaveViewState ()
1329 object [] state = new object [10];
1330 state [0] = base.SaveViewState ();
1332 if (TextBoxStyle != null) state [1] = ((IStateManager) TextBoxStyle).SaveViewState ();
1333 if (ValidatorTextStyle != null) state [2] = ((IStateManager) ValidatorTextStyle).SaveViewState ();
1334 if (CompleteSuccessTextStyle != null) state [3] = ((IStateManager) CompleteSuccessTextStyle).SaveViewState ();
1335 if (ErrorMessageStyle != null) state [4] = ((IStateManager) ErrorMessageStyle).SaveViewState ();
1336 if (HyperLinkStyle != null) state [5] = ((IStateManager) HyperLinkStyle).SaveViewState ();
1337 if (InstructionTextStyle != null) state [6] = ((IStateManager) InstructionTextStyle).SaveViewState ();
1338 if (LabelStyle != null) state [7] = ((IStateManager) LabelStyle).SaveViewState ();
1339 if (PasswordHintStyle != null) state [8] = ((IStateManager) PasswordHintStyle).SaveViewState ();
1340 if (TitleTextStyle != null) state [9] = ((IStateManager) TitleTextStyle).SaveViewState ();
1342 for (int n = 0; n < state.Length; n++)
1343 if (state [n] != null) return state;
1348 [MonoTODO ("for design-time usage - no more details available")]
1349 protected override void SetDesignModeState (IDictionary data)
1351 base.SetDesignModeState (data);
1354 protected override void TrackViewState ()
1356 base.TrackViewState ();
1357 if (_textBoxStyle != null) ((IStateManager) _textBoxStyle).TrackViewState ();
1358 if (_validatorTextStyle != null) ((IStateManager) _validatorTextStyle).TrackViewState ();
1359 if (_completeSuccessTextStyle != null) ((IStateManager) _completeSuccessTextStyle).TrackViewState ();
1360 if (_errorMessageStyle != null) ((IStateManager) _errorMessageStyle).TrackViewState ();
1361 if (_hyperLinkStyle != null) ((IStateManager) _hyperLinkStyle).TrackViewState ();
1362 if (_instructionTextStyle != null) ((IStateManager) _instructionTextStyle).TrackViewState ();
1363 if (_labelStyle != null) ((IStateManager) _labelStyle).TrackViewState ();
1364 if (_passwordHintStyle != null) ((IStateManager) _passwordHintStyle).TrackViewState ();
1365 if (_titleTextStyle != null) ((IStateManager) _titleTextStyle).TrackViewState ();
1370 #region Private event handlers
1372 private void UserName_TextChanged (object sender, EventArgs e)
1374 UserName = ((ITextControl) sender).Text;
1377 private void Password_TextChanged (object sender, EventArgs e)
1379 _password = ((ITextControl) sender).Text;
1382 private void ConfirmPassword_TextChanged (object sender, EventArgs e)
1384 _confirmPassword = ((ITextControl) sender).Text;
1387 private void Email_TextChanged (object sender, EventArgs e)
1389 Email = ((ITextControl) sender).Text;
1392 private void Question_TextChanged (object sender, EventArgs e)
1394 Question = ((ITextControl) sender).Text;
1397 private void Answer_TextChanged (object sender, EventArgs e)
1399 Answer = ((ITextControl) sender).Text;
1404 #region Private Methods
1406 private void InitMemberShipProvider ()
1408 string mp = MembershipProvider;
1409 _provider = (mp.Length == 0) ? _provider = Membership.Provider : Membership.Providers [mp];
1410 if (_provider == null)
1411 throw new HttpException (Locale.GetText ("No provider named '{0}' could be found.", mp));
1414 private bool CreateUser ()
1419 if (AutoGeneratePassword)
1420 _password = GeneratePassword ();
1422 OnCreatingUser (new LoginCancelEventArgs (false));
1424 MembershipCreateStatus status;
1425 MembershipUser newUser = MembershipProviderInternal.CreateUser (
1426 UserName, Password, Email, Question, Answer, !DisableCreatedUser, null, out status);
1428 if ((newUser != null) && (status == MembershipCreateStatus.Success)) {
1429 OnCreatedUser (new EventArgs ());
1434 case MembershipCreateStatus.DuplicateUserName:
1435 ShowErrorMessage (DuplicateUserNameErrorMessage);
1438 case MembershipCreateStatus.InvalidPassword:
1439 ShowErrorMessage (String.Format (InvalidPasswordErrorMessage, MembershipProviderInternal.MinRequiredPasswordLength, MembershipProviderInternal.MinRequiredNonAlphanumericCharacters));
1442 case MembershipCreateStatus.DuplicateEmail:
1443 ShowErrorMessage (DuplicateEmailErrorMessage);
1446 case MembershipCreateStatus.InvalidEmail:
1447 ShowErrorMessage (InvalidEmailErrorMessage);
1450 case MembershipCreateStatus.InvalidQuestion:
1451 ShowErrorMessage (InvalidQuestionErrorMessage);
1454 case MembershipCreateStatus.InvalidAnswer:
1455 ShowErrorMessage (InvalidAnswerErrorMessage);
1458 case MembershipCreateStatus.UserRejected:
1459 case MembershipCreateStatus.InvalidUserName:
1460 case MembershipCreateStatus.ProviderError:
1461 case MembershipCreateStatus.InvalidProviderUserKey:
1462 ShowErrorMessage (UnknownErrorMessage);
1468 OnCreateUserError (new CreateUserErrorEventArgs (status));
1473 private void Login ()
1475 bool userValidated = MembershipProviderInternal.ValidateUser (UserName, Password);
1477 FormsAuthentication.SetAuthCookie (UserName, false);
1480 private void ShowErrorMessage (string errorMessage)
1482 if (_errorMessageLabel != null)
1483 _errorMessageLabel.Text = errorMessage;
1486 private string GeneratePassword ()
1489 // Generate an actual password!
1496 #region SideBarLabelTemplate
1498 class SideBarLabelTemplate : ITemplate
1502 public SideBarLabelTemplate (Wizard wizard)
1504 this.wizard = wizard;
1507 public void InstantiateIn (Control control)
1509 Label b = new Label ();
1510 wizard.RegisterApplyStyle (b, wizard.SideBarButtonStyle);
1511 control.Controls.Add (b);
1512 control.DataBinding += Bound;
1515 void Bound (object s, EventArgs args)
1517 WizardStepBase step = DataBinder.GetDataItem (s) as WizardStepBase;
1519 Control c = (Control) s;
1520 Label b = (Label) c.Controls [0];
1521 b.ID = SideBarButtonID;
1522 b.Text = step.Title;
1523 if (step == wizard.ActiveStep)