ActionResult RunAction(Action action, Framework.Core.Entities.User userToRunAs, string currentPageName, string submittedPageNames, bool back, AuthorisedAction auth = null) { MultiPageAction.Page givenPage = null; model = new ActionViewModel(HasAccessToNewActions); model.Action = action; if (action is MultiPageAction) { givenPage = PrepareMultipageAction(action, userToRunAs, currentPageName, submittedPageNames, back, model); } else if (Request.HttpMethod == "POST") { SetPostValues(action, action.Fields); } if (Request.HttpMethod == "POST") { action.BeforeRun(true); if (!action.AccessibleTo(userToRunAs, DbContext) && !(action is Login)) { Response.Redirect(Url.Action("MainPage", "LandingPage") + "?ReturnUrl=" + Request.Url); } return(HandlePostAction(action, userToRunAs, back, givenPage, model, auth)); } else { SetGetParams(action); action.BeforeRun(false); if (!action.AccessibleTo(userToRunAs, DbContext) && !(action is Login)) { Response.Redirect(Url.Action("MainPage", "LandingPage") + "?ReturnUrl=" + Request.Url); } if (action.Fields.Count() == 0) { if (action.RedirectLocation != null && action.RedirectLocation is RedirectToURL) { Response.Redirect((action.RedirectLocation as RedirectToURL).Url); } return(View(EmptyActionViewPathPrefix, model)); } else { return(View(ActionViewPathPrefix, model)); // method was not post } } }
private ActionResult HandlePostAction(Action action, Framework.Core.Entities.User userToRunAs, bool back, MultiPageAction.Page givenPage, ActionViewModel model, AuthorisedAction auth) { if (back) { model.SubmittedPages.Remove(model.SubmittedPages.FirstOrDefault(p => (p is MultiPageAction.CustomPage && model.Page is MultiPageAction.CustomPage) ? (p as MultiPageAction.CustomPage).Identifier == (model.Page as MultiPageAction.CustomPage).Identifier : p.GetType() == model.Page.GetType())); return(View(ActionViewPathPrefix, model)); } else { MultiPageAction.Page nextPage = null; if (model.IsMultiPage) { nextPage = model.MultiPageAction.Validate(givenPage); } else { action.Validate(); } if (action.IsValid) { if (action is MultiPageAction) { if (nextPage == null) { return(RunActionAndRedirect(action, auth)); } else { return(View(ActionViewPathPrefix, model.AdvanceToPage(nextPage))); } } else { return(RunActionAndRedirect(action, auth)); } } else { return(View(ActionViewPathPrefix, model)); } } }
private MultiPageAction.Page PrepareMultipageAction(Action action, Framework.Core.Entities.User userToRunAs, string currentPageName, string submittedPageNames, bool back, ActionViewModel model) { var multipageAction = (MultiPageAction)action; model.Page = currentPageName == null?multipageAction.GetFirstPage() : multipageAction.PageByName(currentPageName); var givenPage = model.Page; if (Request.HttpMethod == "POST") { SetPostValues(multipageAction, action.Fields); } if (submittedPageNames != null && submittedPageNames.Length >= 1) { model.SubmittedPages = submittedPageNames.Split(',').ToList().Select(p => multipageAction.PageByName(p)).ToList(); } model.Page = back ? model.SubmittedPages.Last() : givenPage; model.IsMultiPage = true; model.MultiPageAction = multipageAction; return(givenPage); }