private ActionResult RunActionAndRedirect(Action action, AuthorisedAction auth = null) { // Log/save the action to the database before running... action.StoreRecord(); DbContext.SaveChanges(); // Run the action if (auth != null) { action.Run(auth.User); auth.IsUsed = true; } else { action.Run((Framework.Core.Entities.User)User); } // Redirect... return(HandleRedirect(action, auth, GetReturnUrl())); }
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 ActionResult HandleRedirect(Action action, AuthorisedAction auth = null, string returnUrl = null) { IRedirectLocation RedirectLocation = null; if (auth != null) { if (Auth.IsLoggedIn) { return(Redirect("/")); } else { return(View(SecuredActionViewPathPrefix, action)); } } if (action.RedirectLocation == null) { if (!string.IsNullOrEmpty(returnUrl)) { return(Redirect(returnUrl)); } else { RedirectLocation = new RedirectToDashboard(); } } else { RedirectLocation = action.RedirectLocation; } if (RedirectLocation is RedirectToDashboard) { var newDashboardUser = (User.Role as INewDashboardUserRole); var dashboardUrl = newDashboardUser != null && !string.IsNullOrWhiteSpace(newDashboardUser.NewDashboardUrl) ? newDashboardUser.NewDashboardUrl : "/dashboard"; return(Redirect(dashboardUrl)); } else if (RedirectLocation is RedirectToEntity && (RedirectLocation as RedirectToEntity).Entity.Id != 0) { //return base.Redirect((RedirectLocation as RedirectToEntity).Entity.GetUrl((Framework.Core.Entities.User)User, Url)); var redirectLocation = (RedirectLocation as RedirectToEntity); var entity = redirectLocation.Entity; var url = entity.GetUrl((Framework.Core.Entities.User)User, Url); return(base.Redirect(url)); } else if (RedirectLocation is RedirectToAction) { var newAction = (RedirectLocation as RedirectToAction); var url = newAction.Action.GetUrl(Url); for (int i = 0; i < newAction.UrlParameters.Count(); i++) { url += (i == 0 ? "?" : "&") + newAction.UrlParameters[i].Key + "=" + newAction.UrlParameters[i].Value; } return(Redirect(url)); } else if (RedirectLocation is RedirectToReport) { var newReport = (RedirectLocation as RedirectToReport).Report; var url = newReport.GetUrl(User, Url); for (int i = 0; i < newReport.Fields.Count(); i++) { url += (i == 0 ? "?" : "&") + newReport.Fields.ElementAt(i).UniqueName + "="; var v = newReport.Fields.ElementAt(i).Value; if (v is Entity) { url += (v as Entity).Id; } else if (v is DateTime) { //url += ((DateTime)v).ToString("dd-MM-yyyy"); url += ((DateTime)v).ToString("yyyy-MM-dd"); } else if (v == null) { url += ""; } else { url += v.ToString(); } } // If the report includes a model, send it with the redirection if (newReport.Model != null) { // Sample: report-name TempData[newReport.GetUrlSafeName()] = newReport.Model; } return(Redirect(url)); } else if (RedirectLocation is RedirectToURL) { return(Redirect((RedirectLocation as RedirectToURL).Url)); } else if (RedirectLocation is RedirectToActionAsUser) { var redirect = (RedirectToActionAsUser)RedirectLocation; return(base.Redirect(redirect.Action.GetUrl(Url, null, (Framework.Core.Entities.User)redirect.User))); } else if (RedirectLocation is RedirectToHomepage) { return(Redirect("/")); } else { throw new ArgumentOutOfRangeException("RedirectLocation", action.RedirectLocation, "Don't know how to handle this type of RedirectLocation"); } }
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 } } }