コード例 #1
0
        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()));
        }
コード例 #2
0
        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));
                }
            }
        }
コード例 #3
0
        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");
            }
        }
コード例 #4
0
        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
                }
            }
        }