From: <sv...@ca...> - 2005-10-26 20:39:38
|
User: hammett Date: 2005/10/26 04:35 PM Added: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Model/ Account.cs Modified: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/ WizardSampleSite.csproj /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Controllers/ SimpleWizardController.cs /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/layouts/ SimpleWizard.vm /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/ ConfirmationStep.vm, IntroductionStep.vm, MainInfoStep.vm, ResultStep.vm, SubscribeStep.vm Log: Improvements on the wizard sample site File Changes: Directory: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Controllers/ ============================================================================= File [modified]: SimpleWizardController.cs Delta lines: +102 -0 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Controllers/SimpleWizardController.cs 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Controllers/SimpleWizardController.cs 2005-10-26 20:35:02 UTC (rev 1230) @@ -15,9 +15,13 @@ namespace WizardSampleSite.Controllers { using System; + using System.Collections; using Castle.MonoRail.Framework; + using Castle.MonoRail.Framework.Internal; + using WizardSampleSite.Model; + [DynamicActionProvider( typeof(WizardActionProvider) )] public class SimpleWizardController : Controller, IWizardController { @@ -32,6 +36,10 @@ } } + // Please note that we put the steps on the same file + // for brevity's sake + + /// <summary> /// Presents a small introduction /// </summary> @@ -41,11 +49,63 @@ class MainInfoStep : WizardStepPage { + // protected override void Reset() + // { + // Session.Remove("account"); + // } + protected override bool Process() { + Account account = GetAccountFromSession(Session); + + account.Name = Params["name"]; + account.Username = Params["username"]; + account.Email = Params["email"]; + account.Pwd = Params["pwd"]; + account.PwdConfirmation = Params["pwdconfirmation"]; + + // Some naive validation + + IList errors = ValidateAccount(account); + + if (errors.Count != 0) + { + // Not good + + Flash["errors"] = errors; + + // User can go to the next step yet + + return false; + } + return true; } + private IList ValidateAccount(Account account) + { + IList errors = new ArrayList(); + + if (account.Name == null || account.Name.Length == 0) + { + errors.Add("Full name field must be filled"); + } + if (account.Username == null || account.Username.Length == 0) + { + errors.Add("User name field must be filled"); + } + if (account.Email == null || account.Email.Length == 0) + { + errors.Add("E-mail field must be filled"); + } + if (account.Pwd != account.PwdConfirmation) + { + errors.Add("Password don't match with confirmation"); + } + + return errors; + } + /// <summary> /// Note that you can override /// the Show method and render a different @@ -54,19 +114,61 @@ /// </summary> protected override void Show() { + PropertyBag.Add("account", GetAccountFromSession(Session)); + base.Show(); } + + internal static Account GetAccountFromSession(IDictionary session) + { + Account account = session["stored.account"] as Account; + + if (account == null) + { + account = new Account(); + + session["stored.account"] = account; + } + + return account; + } } class SubscribeStep : WizardStepPage { + protected override bool Process() + { + Account account = MainInfoStep.GetAccountFromSession(Session); + + String[] interests = (String[]) ConvertUtils.Convert( + typeof(String[]), Params["interests"], "interests", null, Params ); + + account.Interests = interests; + + return base.Process(); + } } class ConfirmationStep : WizardStepPage { + protected override void Show() + { + PropertyBag.Add("account", MainInfoStep.GetAccountFromSession(Session)); + + base.Show(); + } } class ResultStep : WizardStepPage { + protected override void Show() + { + Account account = MainInfoStep.GetAccountFromSession(Session); + + // AccountService.Create(account); + // Session.Remove("account"); + + base.Show(); + } } } Directory: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Model/ ======================================================================= File [added]: Account.cs Delta lines: +66 -0 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Model/Account.cs 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/Model/Account.cs 2005-10-26 20:35:02 UTC (rev 1230) @@ -0,0 +1,66 @@ +// Copyright 2004-2005 Castle Project - http://www.castleproject.org/ +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace WizardSampleSite.Model +{ + using System; + + [Serializable] + public class Account + { + private String name; + private String email; + private String username; + private String pwd; + private String pwdconfirmation; + + private String[] interests; + + public string Name + { + get { return name; } + set { name = value; } + } + + public string Email + { + get { return email; } + set { email = value; } + } + + public string Username + { + get { return username; } + set { username = value; } + } + + public string Pwd + { + get { return pwd; } + set { pwd = value; } + } + + public string PwdConfirmation + { + get { return pwdconfirmation; } + set { pwdconfirmation = value; } + } + + public string[] Interests + { + get { return interests; } + set { interests = value; } + } + } +} Directory: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/ ================================================================= File [modified]: WizardSampleSite.csproj Delta lines: +5 -0 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/WizardSampleSite.csproj 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/WizardSampleSite.csproj 2005-10-26 20:35:02 UTC (rev 1230) @@ -113,6 +113,11 @@ BuildAction = "Compile" /> <File + RelPath = "Model\Account.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "views\home\index.vm" BuildAction = "None" /> Directory: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/layouts/ =============================================================================== File [modified]: SimpleWizard.vm Delta lines: +4 -1 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/layouts/SimpleWizard.vm 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/layouts/SimpleWizard.vm 2005-10-26 20:35:02 UTC (rev 1230) @@ -5,20 +5,23 @@ <head> <title>Simple Wizard</title> </head> + <body> - <div> $childContent </div> <hr> +<!-- Just for debugging purposes <pre> Current index $session.get_Item("wizard.simplewizardcurrentstepindex") <br> current step $session.get_Item("wizard.simplewizardcurrentstep") <br> just started $session.get_Item("wizard.simplewizardjuststarted") <br> </pre> +--> </body> + </html> Directory: /trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/ ==================================================================================== File [modified]: ConfirmationStep.vm Delta lines: +29 -1 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/ConfirmationStep.vm 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/ConfirmationStep.vm 2005-10-26 20:35:02 UTC (rev 1230) @@ -1 +1,29 @@ -ConfirmationStep \ No newline at end of file +So here's a summary of the account that we're about to create: + +<h4>Account</h4> + +<p>$account.name</p> +<p>$account.username</p> +<p>$account.email</p> + +<h4>Interests</h4> + +<ul> +#foreach($interest in $account.interests) + <li>$interest</li> +#end +</ul> + +<p>If everything is OK click Next, otherwise click Back to change the information</p> + +<p> +#if ($WizardHelper.HasPreviousStep()) + $WizardHelper.LinkToPrevious("Back") +#end +</p> + +<p> +#if ($WizardHelper.HasNextStep()) + $WizardHelper.LinkToNext("Next") +#end +</p> \ No newline at end of file File [modified]: IntroductionStep.vm Delta lines: +0 -4 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/IntroductionStep.vm 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/IntroductionStep.vm 2005-10-26 20:35:02 UTC (rev 1230) @@ -3,10 +3,6 @@ steps to create a new account </p> -#if ($WizardHelper.HasPreviousStep()) -$WizardHelper.LinkToPrevious("Back") -#end - #if ($WizardHelper.HasNextStep()) $WizardHelper.LinkToNext("Next") #end \ No newline at end of file File [modified]: MainInfoStep.vm Delta lines: +44 -3 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/MainInfoStep.vm 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/MainInfoStep.vm 2005-10-26 20:35:02 UTC (rev 1230) @@ -1,18 +1,59 @@ +#if($errors) +<p>Something is not good. Please correct the following problems first: +<ul> +#foreach($error in $errors) + <li>$error</li> +#end +</ul> +</p> +#end + <p> <form action="maininfostep.rails"> -<table width="80%" border="1"> +<table width="80%" border="0" cellpadding="2" cellspacing="3"> <tr> - <td>Name: </td> - <td>$HtmlHelper.InputText("name", $name)</td> + <td>Full name: </td> + <td>$HtmlHelper.InputText("name", $account.name)</td> </tr> + + <tr> + <td>User name: </td> + <td>$HtmlHelper.InputText("username", $account.username)</td> + </tr> + + <tr> + <td>E-mail: </td> + <td>$HtmlHelper.InputText("email", $account.email)</td> + </tr> + <tr> + <td>Password: </td> + <td>$HtmlHelper.InputPassword("pwd")</td> + </tr> + + <tr> + <td>Confirm: </td> + <td>$HtmlHelper.InputPassword("pwdconfirmation")</td> + </tr> + </table> + + $WizardHelper.EnableDoProcess() + +<p> +#if ($WizardHelper.HasPreviousStep()) + $WizardHelper.LinkToPrevious("Back") +#end + + + $HtmlHelper.SubmitButton("Next") +</p> </form> File [modified]: ResultStep.vm Delta lines: +3 -1 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/ResultStep.vm 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/ResultStep.vm 2005-10-26 20:35:02 UTC (rev 1230) @@ -1 +1,3 @@ -ResultStep.vm \ No newline at end of file +The account was created successfully! + +Thank you! \ No newline at end of file File [modified]: SubscribeStep.vm Delta lines: +46 -1 =================================================================== --- trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/SubscribeStep.vm 2005-10-26 20:33:07 UTC (rev 1229) +++ trunk/Samples/MonoRail/WizardSample/WizardSampleSite/views/simplewizard/SubscribeStep.vm 2005-10-26 20:35:02 UTC (rev 1230) @@ -1 +1,46 @@ -SubscribeStep \ No newline at end of file +<p> +Please inform your interests so we can select very special offers and +send you spam: +</p> + +<form action="subscribestep.rails"> + +<h4>Sports</h4> + +<ul> + <li><input type="checkbox" id="sports1" name="interests" value="Soccer" /> + $HtmlHelper.LabelFor("sports1", "Soccer") + </li> + + <li><input type="checkbox" id="sports2" name="interests" value="Soft ball" /> + $HtmlHelper.LabelFor("sports2", "Soft ball") + </li> + + <li><input type="checkbox" id="sports3" name="interests" value="Tennis" /> + $HtmlHelper.LabelFor("sports3", "Tennis") + </li> +</ul> + +<h4>Science</h4> + +<ul> + <li><input type="checkbox" id="science1" name="interests" value="Math" /> + $HtmlHelper.LabelFor("science1", "Math") + </li> + + <li><input type="checkbox" id="science2" name="interests" value="Computing" /> + $HtmlHelper.LabelFor("science2", "Computing") + </li> + + <li><input type="checkbox" id="science3" name="interests" value="Physics" /> + $HtmlHelper.LabelFor("science3", "Physics") + </li> +</ul> + + $WizardHelper.EnableDoProcess() + +#if ($WizardHelper.HasPreviousStep()) + $WizardHelper.LinkToPrevious("Back") +#end + + $HtmlHelper.SubmitButton("Next") |