コード例 #1
0
        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            var virtualPath = base.GetVirtualPath(requestContext, values);

            if (requestContext.HttpContext is ModuleHttpContext && virtualPath != null)
            {
                var moduleUrl = virtualPath.VirtualPath;

                ModuleHttpContext httpContext = (ModuleHttpContext)(requestContext.HttpContext);
                var moduleContext             = httpContext.ModuleContext;

                var mergedValues = Kooboo.Web.Mvc.RouteValuesHelpers.MergeRouteValues(null, null, this.Defaults, values, true);
                if (Page_Context.Current.Initialized)
                {
                    Page page             = null;
                    var  modulePositionId = Page_Context.Current.PageRequestContext.ModuleUrlContext.GetModulePositionIdForUrl(moduleContext.ModulePosition, mergedValues, out page);

                    var encodedModuleUrl = ModuleUrlHelper.Encode(moduleUrl);

                    var routeValues = Page_Context.Current.PageRequestContext.ModuleUrlContext.GetRouteValuesWithModuleUrl(modulePositionId, encodedModuleUrl, moduleContext.ModulePosition.Exclusive);

                    var pageUrl          = Page_Context.Current.FrontUrl.PageUrl(page.FullName, routeValues).ToString();
                    var routeVirtualPath = pageUrl;
                    if (Uri.IsWellFormedUriString(pageUrl, UriKind.Absolute))
                    {
                        routeVirtualPath = new Uri(routeVirtualPath).PathAndQuery;
                    }
                    virtualPath.VirtualPath = routeVirtualPath.TrimStart('/');
                }
                else
                {
                    ModuleRequestContext moduleRequestContext = (ModuleRequestContext)requestContext;

                    UrlHelper pageUrl = new UrlHelper(moduleRequestContext.PageControllerContext.RequestContext);

                    virtualPath.VirtualPath = pageUrl.Action(moduleRequestContext.PageControllerContext.RequestContext.RouteData.Values["action"].ToString()
                                                             , moduleRequestContext.PageControllerContext.RequestContext.AllRouteValues().Merge("ModuleUrl", moduleUrl)).TrimStart('/');
                }
            }

            return(virtualPath);
        }
コード例 #2
0
ファイル: ModuleExecutor.cs プロジェクト: webrot/CMS
        private static void InitializeController(Controller moduleController, ModuleRequestContext moduleRequestContext)
        {
            moduleController.ControllerContext = new ControllerContext(moduleRequestContext, moduleController);

            var pageControllerContext = moduleRequestContext.PageControllerContext;

            var valueProvider = new ValueProviderCollection();

            valueProvider.Add(new ModuleFormValueProvider(moduleController.ControllerContext));
            valueProvider.Add(new ModuleQueryStringValueProvider(moduleController.ControllerContext));
            valueProvider.Add(new RouteDataValueProvider(moduleController.ControllerContext));
            if (Kooboo.CMS.Sites.View.Page_Context.Current.PageRequestContext != null)
            {
                valueProvider.Add(new NameValueCollectionValueProvider(Kooboo.CMS.Sites.View.Page_Context.Current.PageRequestContext.AllQueryString, System.Globalization.CultureInfo.InvariantCulture));
            }
            valueProvider.Add(pageControllerContext.Controller.ValueProvider);

            moduleController.ValueProvider = valueProvider;

            moduleController.TempDataProvider = new ModuleSessionStateTempDataProvider();

            moduleController.Url = new UrlHelper(moduleController.ControllerContext.RequestContext, moduleRequestContext.ModuleContext.RouteTable);
        }
コード例 #3
0
ファイル: ModuleExecutor.cs プロジェクト: jason1234/CMS
        public static ModuleActionInvokedContext InvokeAction(ControllerContext controllerContext, Site site, string moduleUrl, ModulePosition modulePosition)
        {
            HttpContext context = HttpContext.Current;
            var moduleSettings = ModuleInfo.GetSiteModuleSettings(modulePosition.ModuleName, site == null ? "" : site.FullName);
            if (modulePosition.Entry != null)
            {
                moduleSettings.Entry = modulePosition.Entry;
            }
            var settings = moduleSettings;
            var positionId = modulePosition.PagePositionId;
            var moduleName = modulePosition.ModuleName;

            ModuleContext moduleContext = ModuleContext.Create(site, moduleName, settings, modulePosition);

            if (string.IsNullOrEmpty(moduleUrl))
            {
                if (settings != null && settings.Entry != null)
                {
                    moduleUrl = GetEntryUrl(context, moduleContext, settings.Entry);
                    if (!string.IsNullOrEmpty(moduleUrl) && !moduleUrl.StartsWith("~"))
                    {
                        moduleUrl = "~" + moduleUrl;
                    }
                }
            }
            if (string.IsNullOrEmpty(moduleUrl))
            {
                moduleUrl = "~/";
            }
            else if (moduleUrl[0] != '~')
            {
                moduleUrl = "~/" + moduleUrl.TrimStart('/');
            }

            var httpContext = new ModuleHttpContext(context
              , new ModuleHttpRequest(context.Request, moduleUrl, moduleContext, controllerContext), new ModuleHttpResponse(context.Response, moduleContext), moduleContext);

            var routeData = moduleContext.RouteTable.GetRouteData(httpContext);

            var requestContext = new ModuleRequestContext(httpContext, routeData, moduleContext) { PageControllerContext = controllerContext };

            string controllerName = requestContext.RouteData.GetRequiredString("controller");
            string actionName = requestContext.RouteData.GetRequiredString("action");
            var controller = (Controller)ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, controllerName);
            if (controller == null)
            {
                throw new Exception(string.Format("The module '{0}' controller for path '{1}' does not found or does not implement IController.", moduleName, moduleUrl));
            }
            //if (!(controller is ModuleControllerBase))
            //{
            //    throw new Exception(string.Format("The controller type '{0}' must be inherited from ModuleControllerBase.", controller.GetType().FullName));
            //}
            //ModuleControllerBase moduleController = (ModuleControllerBase)controller;

            //ControllerContext moduleControllerContext = new ControllerContext(requestContext, moduleController);

            InitializeController(controller, requestContext);

            var result = actionInvoker.InvokeActionWithoutExecuteResult(controller.ControllerContext, actionName);
            if (result == null)
            {
                HandleUnknownAction(controller, actionName);
            }
            return result;
        }
コード例 #4
0
ファイル: ModuleExecutor.cs プロジェクト: jason1234/CMS
        private static void InitializeController(Controller moduleController, ModuleRequestContext moduleRequestContext)
        {
            moduleController.ControllerContext = new ControllerContext(moduleRequestContext, moduleController);

            var pageControllerContext = moduleRequestContext.PageControllerContext;

            var valueProvider = new ValueProviderCollection();
            valueProvider.Add(new ModuleFormValueProvider(moduleController.ControllerContext));
            valueProvider.Add(new ModuleQueryStringValueProvider(moduleController.ControllerContext));
            valueProvider.Add(new RouteDataValueProvider(moduleController.ControllerContext));
            if (Kooboo.CMS.Sites.View.Page_Context.Current.PageRequestContext != null)
            {
                valueProvider.Add(new NameValueCollectionValueProvider(Kooboo.CMS.Sites.View.Page_Context.Current.PageRequestContext.AllQueryString, System.Globalization.CultureInfo.InvariantCulture));
            }
            valueProvider.Add(pageControllerContext.Controller.ValueProvider);

            moduleController.ValueProvider = valueProvider;

            moduleController.TempDataProvider = new ModuleSessionStateTempDataProvider();

            moduleController.Url = new UrlHelper(moduleController.ControllerContext.RequestContext, moduleRequestContext.ModuleContext.RouteTable);
        }
コード例 #5
0
ファイル: ModuleExecutor.cs プロジェクト: jason1234/CMS
        private static string GetEntryUrl(HttpContext context, ModuleContext moduleContext, Entry entry)
        {
            var httpContext = new GetEntryUrlContextWrapper(context, "~/");

            var routeData = moduleContext.RouteTable.GetRouteData(httpContext);

            var requestContext = new ModuleRequestContext(httpContext, routeData, moduleContext);

            UrlHelper url = new UrlHelper(requestContext, moduleContext.RouteTable);

            return url.Action(entry.Action, entry.Controller, entry.Values);
        }
コード例 #6
0
ファイル: ModuleExecutor.cs プロジェクト: webrot/CMS
        public static ModuleActionInvokedContext InvokeAction(ControllerContext controllerContext, Site site, string moduleUrl, ModulePosition modulePosition)
        {
            HttpContext context        = HttpContext.Current;
            var         moduleSettings = ModuleInfo.GetSiteModuleSettings(modulePosition.ModuleName, site == null ? "" : site.FullName);

            if (modulePosition.Entry != null)
            {
                moduleSettings.Entry = modulePosition.Entry;
            }
            var settings   = moduleSettings;
            var positionId = modulePosition.PagePositionId;
            var moduleName = modulePosition.ModuleName;

            ModuleContext moduleContext = ModuleContext.Create(site, moduleName, settings, modulePosition);

            if (string.IsNullOrEmpty(moduleUrl))
            {
                if (settings != null && settings.Entry != null)
                {
                    moduleUrl = GetEntryUrl(context, moduleContext, settings.Entry);
                    if (!string.IsNullOrEmpty(moduleUrl) && !moduleUrl.StartsWith("~"))
                    {
                        moduleUrl = "~" + moduleUrl;
                    }
                }
            }
            if (string.IsNullOrEmpty(moduleUrl))
            {
                moduleUrl = "~/";
            }
            else if (moduleUrl[0] != '~')
            {
                moduleUrl = "~/" + moduleUrl.TrimStart('/');
            }

            var httpContext = new ModuleHttpContext(context
                                                    , new ModuleHttpRequest(context.Request, moduleUrl, moduleContext, controllerContext), new ModuleHttpResponse(context.Response, moduleContext), moduleContext);

            var routeData = moduleContext.RouteTable.GetRouteData(httpContext);

            var requestContext = new ModuleRequestContext(httpContext, routeData, moduleContext)
            {
                PageControllerContext = controllerContext
            };

            string controllerName = requestContext.RouteData.GetRequiredString("controller");
            string actionName     = requestContext.RouteData.GetRequiredString("action");
            var    controller     = (Controller)ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, controllerName);

            if (controller == null)
            {
                throw new Exception(string.Format("The module '{0}' controller for path '{1}' does not found or does not implement IController.", moduleName, moduleUrl));
            }
            //if (!(controller is ModuleControllerBase))
            //{
            //    throw new Exception(string.Format("The controller type '{0}' must be inherited from ModuleControllerBase.", controller.GetType().FullName));
            //}
            //ModuleControllerBase moduleController = (ModuleControllerBase)controller;

            //ControllerContext moduleControllerContext = new ControllerContext(requestContext, moduleController);

            InitializeController(controller, requestContext);

            var result = actionInvoker.InvokeActionWithoutExecuteResult(controller.ControllerContext, actionName);

            if (result == null)
            {
                HandleUnknownAction(controller, actionName);
            }
            return(result);
        }