コード例 #1
0
        public string GetModulePositionIdForUrl(ModulePosition modulePosition, RouteValueDictionary routeValues, out Page page)
        {
            page = this.PageRequestContext.Page;
            string modulePositionId = modulePosition.PagePositionId;

            if (!string.IsNullOrEmpty(modulePosition.Entry.LinkToEntryName))
            {
                foreach (var item in Kooboo.CMS.Sites.Services.ServiceFactory.PageManager.All(this.PageRequestContext.Site, null))
                {
                    foreach (var position in item.PagePositions.OfType<ModulePosition>())
                    {
                        if (position.Entry != null && !string.IsNullOrEmpty(position.Entry.Name)
                            && position.Entry.Name.EqualsOrNullEmpty(modulePosition.Entry.LinkToEntryName, StringComparison.OrdinalIgnoreCase))
                        {
                            page = item;
                            modulePositionId = position.PagePositionId;
                        }
                    }
                }
            }
            else
            {
                modulePositionId = GetModulePositionIdForUrl(modulePosition.ModuleName, modulePosition.PagePositionId, routeValues);
            }

            return modulePositionId;
        }
コード例 #2
0
ファイル: ModuleContext.cs プロジェクト: jason1234/CMS
 protected ModuleContext(Site site, string moduleName, ModuleSettings moduleSettings, ModulePosition position)
 {
     this.Site = site;
     ModuleName = moduleName;
     this.ModuleSettings = moduleSettings;
     this.ModulePosition = position;
 }
コード例 #3
0
ファイル: ModuleContext.cs プロジェクト: rrsc/CMS
        public static ModuleContext Create(Site site, string moduleName, ModuleSettings moduleSettings, ModulePosition position)
        {
            var context = new ModuleContext(site, moduleName, moduleSettings, position);

            if (!System.IO.Directory.Exists(context.ModulePath.PhysicalPath))
            {
                throw new Exception(string.Format("The module does not exist.Module name:{0}".Localize(), moduleName));
            }
            return context;
        }
コード例 #4
0
ファイル: PagePositionBinder.cs プロジェクト: Godoy/CMS
 protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
 {
     var positionType = controllerContext.HttpContext.Request["PositionType"];
     object model = null;
     switch (positionType)
     {
         case "View":
             model = new ViewPosition();
             break;
         case "Module":
             model = new ModulePosition();
             break;
         case "Content":
             model = new HtmlPosition();
             break;
         default:
             break;
     }
     bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
     return model;
 }
コード例 #5
0
ファイル: ModuleContext.cs プロジェクト: Godoy/CMS
 public ModuleContext(string moduleName, Site site, ModulePosition position)
     : this(moduleName, site)
 {
     this.FrontEndContext = new FrontEndContext(moduleName,this.GetModuleSettings(), position);
 }
コード例 #6
0
ファイル: FrontHtmlHelper.cs プロジェクト: jason1234/CMS
 protected virtual string RenderModule(ModulePosition modulePosition)
 {
     ModuleActionInvokedContext actionInvokedContext = GetModuleActionResult(modulePosition.PagePositionId);
     if (actionInvokedContext != null)
     {
         var actionResultExecuted = ModuleExecutor.ExecuteActionResult(actionInvokedContext);
         return actionResultExecuted.ResultHtml;
     }
     return string.Empty;
 }
コード例 #7
0
ファイル: FrontHtmlHelper.cs プロジェクト: jason1234/CMS
 public virtual IHtmlString RenderModule(string moduleName, string moduleUrl, ModulePosition modulePosition)
 {
     var result = ModuleExecutor.InvokeAction(PageContext.ControllerContext, PageContext.PageRequestContext.Site, moduleUrl, modulePosition);
     var actionResultExecuted = ModuleExecutor.ExecuteActionResult(result);
     return new HtmlString(actionResultExecuted.ResultHtml);
 }
コード例 #8
0
ファイル: FrontHtmlHelper.cs プロジェクト: jason1234/CMS
 public virtual IHtmlString RenderModule(string moduleName, string moduleUrl)
 {
     ModulePosition position = new ModulePosition()
     {
         Exclusive = false
         ,
         PagePositionId = moduleName
         ,
         ModuleName = moduleName
         ,
         Entry = new Entry()
     };
     return RenderModule(moduleName, moduleUrl, position);
 }
コード例 #9
0
ファイル: FrontHtmlHelper.cs プロジェクト: jason1234/CMS
 public virtual IHtmlString RenderModule(string moduleName, string moduleController, string moduleAction, object routeValues)
 {
     var routeDictionary = new RouteValueDictionary();
     if (routeValues != null)
     {
         routeDictionary = new RouteValueDictionary(routeValues);
     }
     ModulePosition position = new ModulePosition()
     {
         Exclusive = false
         ,
         PagePositionId = moduleName
         ,
         ModuleName = moduleName
         ,
         Entry = new Entry() { Controller = moduleController, Action = moduleAction, Values = routeDictionary }
     };
     return RenderModule(moduleName, null, position);
 }
コード例 #10
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;
        }
コード例 #11
0
 public PageDesignModuleContent(ModulePosition pos)
     : base(pos)
 {
     this.Parameter.Add("ModuleName", PageDesignContent.Code(pos.ModuleName));
     this.Parameter.Add("Exclusive", pos.Exclusive.ToString().ToLower());
     if (pos.Entry != null)
     {
         this.Parameter.Add("EntryAction", pos.Entry.Action);
         this.Parameter.Add("EntryController", pos.Entry.Controller);
         this.Parameter.Add("Values", pos.Entry.Values == null ? "[]" : pos.Entry.Values.ToList().ToJSON());
     }
 }
コード例 #12
0
ファイル: FrontEndContext.cs プロジェクト: Godoy/CMS
 public FrontEndContext(string moduleName, ModuleSettings moduleSettings, ModulePosition modulePosition)
 {
     this._moduleName = moduleName;
     this._moduleSettings = moduleSettings;
     this._modulePosition = modulePosition;
 }
コード例 #13
0
 public ModuleActionInvokedContext(ModulePosition modulePosition, ControllerContext controllerContext, ActionResult actionResult)
 {
     this.ControllerContext = controllerContext;
     this.ModulePosition = modulePosition;
     this.ActionResult = actionResult;
 }