public override ItemDefinition GetItemDefinition(ID itemId, CallContext context) { Assert.ArgumentNotNull(itemId, "itemId"); Assert.ArgumentNotNull(context, "context"); if (itemId == FolderId) { return(new ItemDefinition(itemId, FolderName, FolderTemplateId, this.MasterId)); } var type = ControllerType.GetControllerType(ParentId, itemId); if (type != null) { return(new ItemDefinition(itemId, ItemUtil.ProposeValidItemName(type.Description), FolderTemplateId, this.MasterId)); } var action = ControllerAction.GetControllerAction(ParentId, itemId); if (action != null) { return(new ItemDefinition(itemId, action.Description, BaseTemplateId, this.MasterId)); } return(base.GetItemDefinition(itemId, context)); }
public override ID GetParentID(ItemDefinition itemDefinition, CallContext context) { if (itemDefinition.ID == FolderId) { return(ParentId); } if (ControllerType.GetControllerType(ParentId, itemDefinition.ID) != null) { return(FolderId); } ControllerAction action; if ((action = ControllerAction.GetControllerAction(ParentId, itemDefinition.ID)) != null) { return(ControllerType.GetControllerIds(ParentId.ToGuid()).Where(kv => kv.Value.Type == action.ControllerType.Type) .Select(kv => new ID(kv.Key)).FirstOrDefault()); } //if (itemDefinition.ID == TemplateFolderId) // return ItemIDs.TemplateRoot; //if (itemDefinition.ID == TemplateId) // return TemplateFolderId; return(base.GetParentID(itemDefinition, context)); }
public override FieldList GetItemFields(ItemDefinition item, VersionUri version, CallContext context) { Assert.ArgumentNotNull(item, "item"); Assert.ArgumentNotNull(version, "version"); Assert.ArgumentNotNull(context, "context"); var list = new FieldList(); if (item.ID == FolderId || (ControllerType.GetControllerType(ParentId, item.ID) != null)) { list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/elements.png")); } else { var action = ControllerAction.GetControllerAction(ParentId, item.ID); if (action != null && HttpContext.Current != null) { //VirtualPathData vpd; //MvcActionHelper.GetRouteData(new HttpContextWrapper(HttpContext.Current), action.ActionName, action.ControllerType.ControllerName, null, false, out vpd); //list.Add(LayoutFieldIDs.Path, vpd.VirtualPath); list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/element.png")); } } if (list.Count == 0) { return(base.GetItemFields(item, version, context)); } return(list); }
public void Process(LoadLayoutArgs args) { Assert.ArgumentNotNull((object)args, "args"); if (System.Web.HttpContext.Current != null && !String.IsNullOrEmpty(System.Web.HttpContext.Current.Request["id"])) { var id = new ID(System.Web.HttpContext.Current.Request["id"]); if (ControllerAction.GetControllerAction(MvcLayoutDataProvider.parentId, id) != null || ControllerAction.GetControllerAction(MvcSubLayoutDataProvider.parentId, id) != null) { args.Body = args.Html = "It is not possible to design MVC layouts"; args.AbortPipeline(); } } }
protected override void DoRender(HtmlTextWriter output) { var rendering = global::Sitecore.Context.Page.GetRenderingReference(this); if (rendering == null) { return; } var action = ControllerAction.GetControllerAction(MvcSubLayoutDataProvider.parentId, rendering.RenderingID); if (action == null) { return; } var httpContext = new HttpContextWrapper(Context); var existingRouteData = RouteTable.Routes.GetRouteData(httpContext); var additionalRouteValues = existingRouteData == null ? new RouteValueDictionary() : existingRouteData.Values; if (!string.IsNullOrEmpty(DataSource)) { var item = rendering.Database.GetItem(DataSource); if (item != null) { additionalRouteValues["_sitecoreitem"] = item; } } additionalRouteValues["_sitecorerendering"] = rendering; var parameters = WebUtil.ParseUrlParameters(Parameters); foreach (var key in parameters.AllKeys) { additionalRouteValues[key] = parameters[key]; } var routeData = MvcActionHelper.GetRouteData( httpContext, action.ActionName, action.ControllerType.ControllerName, additionalRouteValues, true ); var handler = new MvcHandler(new RequestContext(httpContext, routeData)); httpContext.Server.Execute(HttpHandlerUtil.WrapForServerExecute(handler), output, true /* preserveForm */); }
public override RouteData GetRouteData(System.Web.HttpContextBase httpContext) { var routeData = base.GetRouteData(httpContext) ?? new RouteData(this, this.RouteHandler); //if (routeData != null && routeData.Values.ContainsKey("id")) { //new ItemResolver(). var item = Context.Item;//(Context.Database ?? Context.ContentDatabase).GetItem(Context.Site.RootPath + routeData.Values["id"]); if (item != null) { var layoutItem = GetQueryStringLayout() ?? Context.Item.Visualization.Layout; if (layoutItem != null) { var action = ControllerAction.GetControllerAction(MvcLayoutDataProvider.parentId, layoutItem.ID) ?? ControllerAction.GetControllerAction(MvcSubLayoutDataProvider.parentId, layoutItem.ID); if (action != null) { routeData.Values["action"] = action.ActionName; routeData.Values["controller"] = action.ControllerType.ControllerName; routeData.Values["_sitecoreitem"] = item; routeData.Values["_sitecoremvcaction"] = action; var wildcardItem = item; var i = 0; using (new SecurityDisabler()) { while (wildcardItem != null) { if (wildcardItem.Name == "*" && wildcardItem.DisplayName.Length > 1) { string name = wildcardItem.DisplayName.TrimStart('*', '(', ' ').TrimEnd(')', ' '); if (!routeData.Values.ContainsKey(name)) { routeData.Values.Add(name, WebUtil.GetUrlName(i)); } } wildcardItem = wildcardItem.Parent; i++; } } return(routeData); } } } } return(null); }
public override FieldList GetItemFields(ItemDefinition item, VersionUri version, CallContext context) { Assert.ArgumentNotNull(item, "item"); Assert.ArgumentNotNull(version, "version"); Assert.ArgumentNotNull(context, "context"); var action = ControllerAction.GetControllerAction(ParentId, item.ID); if (action == null) { return(base.GetItemFields(item, version, context)); } FieldList list = new FieldList(); var template = context.DataManager.Database.GetTemplate(BaseTemplateId); list.Add(template.GetField("Namespace").ID, typeof(MvcActionLoader).Namespace); list.Add(template.GetField("Tag").ID, typeof(MvcActionLoader).Name); list.Add(template.GetField("TagPrefix").ID, "mvc"); list.Add(template.GetField("Assembly").ID, typeof(MvcActionLoader).Assembly.GetName().Name); list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/element_selection.png")); return(list); }