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);
        }
示例#4
0
        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();
                }
            }
        }
示例#5
0
        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 */);
        }
示例#6
0
        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);
        }