protected new void Run(ClientPipelineArgs args)
        {
            var contentItem = Database.GetItem(ItemUri.Parse(args.Parameters["uri"]));

            if (contentItem == null)
            {
                SheerResponse.Alert("Item not found.");
            }
            else
            {
                var itemId = contentItem.ID.ToString();
                if (args.IsPostBack)
                {
                    if (args.Result != "yes")
                    {
                        return;
                    }
                    var startItem = Context.ContentDatabase.GetItem(Context.Site.StartPath);
                    if (startItem == null)
                    {
                        SheerResponse.Alert("Start item not found.");
                        return;
                    }
                    if (!HasPresentationPipeline.Run(startItem))
                    {
                        SheerResponse.Alert("The start item cannot be previewed because it has no layout for the current device.\n\nPreview cannot be started.");
                        return;
                    }
                    itemId = startItem.ID.ToString();
                }
                else if (!HasPresentationPipeline.Run(contentItem))
                {
                    SheerResponse.Confirm("The current item cannot be previewed because it has no layout for the current device.\n\nDo you want to preview the start Web page instead?");
                    args.WaitForPostBack();
                    return;
                }
                SheerResponse.CheckModified(false);

                //Dynamically Speaking, we want the site of the item as it relates to a home Item.
                //If not found, fallback to default functionalty.
                var site = DynamicSiteManager.GetSiteContextByContentItem(contentItem) ??
                           Factory.GetSite(Settings.Preview.DefaultSite);
                Assert.IsNotNull(site, "Site \"{0}\" not found", Settings.Preview.DefaultSite);
                WebUtil.SetCookieValue(site.GetCookieKey("sc_date"), string.Empty);
                PreviewManager.StoreShellUser(Settings.Preview.AsAnonymous);
                var webSiteUrl = SiteContext.GetWebSiteUrl();
                webSiteUrl["sc_itemid"] = itemId;
                webSiteUrl["sc_mode"]   = "preview";
                webSiteUrl["sc_lang"]   = contentItem.Language.ToString();
                DeviceSimulationUtil.DeacitvateSimulators();
                SheerResponse.Eval("window.open('" + webSiteUrl + "', '_blank')");
            }
        }
        private static string GetPageEditorLink(Item itemToEdit, Language language)
        {
            if (language == (Language)null)
            {
                language = itemToEdit.Language;
            }
            UrlString webSiteUrl = SiteContext.GetWebSiteUrl(itemToEdit.Database);

            webSiteUrl["sc_itemid"] = itemToEdit.ID.ToString();
            webSiteUrl["sc_lang"]   = language.Name;
            webSiteUrl["sc_mode"]   = "edit";
            return(webSiteUrl.ToString());
        }
Exemple #3
0
        protected void Run(ClientPipelineArgs args)
        {
            Assert.ArgumentNotNull(args, "args");

            if (!SheerResponse.CheckModified())
            {
                return;
            }

            if ((args.Parameters["needconfirmation"] == "false") || args.IsPostBack)
            {
                if (args.Result == "no")
                {
                    return;
                }

                UrlString webSiteUrl = SiteContext.GetWebSiteUrl();
                webSiteUrl.Add("sc_mode", "preview");
                webSiteUrl.Add("sc_compare", true.ToString());

                if (!string.IsNullOrEmpty(args.Parameters["sc_itemid"]))
                {
                    webSiteUrl.Add("sc_itemid", args.Parameters["sc_itemid"]);
                }

                if (!String.IsNullOrEmpty(args.Parameters["sc_lang"]))
                {
                    webSiteUrl.Add("sc_lang", args.Parameters["sc_lang"]);
                }

                PreviewManager.RestoreUser();
                Context.ClientPage.ClientResponse.Eval("window.open('" + webSiteUrl + "', '_blank')");
            }
            else
            {
                SheerResponse.Confirm("The current item does not have layout details; do you want to open the home item instead?");
                args.WaitForPostBack();
            }
        }
Exemple #4
0
        // GET: Snippet
        public ActionResult CompositeComponent()
        {
            var renderingContext = RenderingContext.CurrentOrNull;

            if (renderingContext == null)
            {
                throw new ApplicationException("Could not find current rendering context, aborting");
            }
            var hasDataSource  = !string.IsNullOrWhiteSpace(renderingContext.Rendering.DataSource);
            var dataSourceItem = hasDataSource ? renderingContext.Rendering.Item : null;
            var pageContext    = new PageContext()
            {
                RequestContext = this.ControllerContext.RequestContext,
                Item           = dataSourceItem
            };
            var oldDisplayMode = global::Sitecore.Context.Site != null ? global::Sitecore.Context.Site.DisplayMode : DisplayMode.Normal;

            try
            {
                if (oldDisplayMode == DisplayMode.Edit && global::Sitecore.Context.Site != null)
                {
                    //disable the editing of the nested component
                    global::Sitecore.Context.Site.SetDisplayMode(DisplayMode.Preview, DisplayModeDuration.Temporary);
                }
                using (PlaceholderContext.Enter(new PlaceholderContext("/")))
                    using (ContextService.Get().Push <PageContext>(pageContext))
                    {
                        var stringWriter = new StringWriter();
                        if (oldDisplayMode == DisplayMode.Edit)
                        {
                            if (hasDataSource)
                            {
                                UrlString webSiteUrl = SiteContext.GetWebSiteUrl(global::Sitecore.Context.ContentDatabase ?? global::Sitecore.Context.Database);
                                webSiteUrl.Add("sc_mode", "edit");
                                webSiteUrl.Add("sc_itemid", pageContext.Item.ID.ToString());
                                webSiteUrl.Add("sc_lang", pageContext.Item.Language.ToString());

                                //copied style from bootstrap alert
                                stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">");
                                stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\"");
                                stringWriter.Write(webSiteUrl);
                                stringWriter.Write("\" target=\"_blank\" onmousedown=\"window.open(this.href)\">&quot;");
                                stringWriter.Write(pageContext.Item.DisplayName);
                                stringWriter.Write("&quot; is a 'composite component'. Click here to open it's editor</a><br /></div>");
                            }
                            else
                            {
                                //copied style from bootstrap alert
                                stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">");
                                stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\"\" onmousedown=\"");
                                stringWriter.Write("Sitecore.PageModes.PageEditor.postRequest('webedit:setdatasource(referenceId=");
                                stringWriter.Write(renderingContext.Rendering.UniqueId.ToString("B").ToUpper());
                                stringWriter.Write(",renderingId=");
                                stringWriter.Write(renderingContext.Rendering.RenderingItem.ID);
                                stringWriter.Write(",id=");
                                stringWriter.Write(renderingContext.Rendering.Item.ID);
                                stringWriter.Write(")',null,false)");
                                stringWriter.Write("\" target=\"_blank\">This is a 'composite component' without a datasource. Click here to associate a composite component instance</a><br /></div>");
                            }
                        }

                        if (hasDataSource && dataSourceItem != null &&
                            dataSourceItem?.TemplateID == new global::Sitecore.Data.ID(CompositeComponentInstanceTemplateId) &&
                            !string.IsNullOrEmpty(pageContext.Item?["PlaceholderName"]))
                        {
                            PipelineService.Get().RunPipeline <RenderPlaceholderArgs>("mvc.renderPlaceholder",
                                                                                      new RenderPlaceholderArgs(pageContext.Item["PlaceholderName"],
                                                                                                                (TextWriter)stringWriter, new ContentRendering()));
                        }

                        return(Content(stringWriter.ToString()));
                    }
            }
            finally
            {
                global::Sitecore.Context.Site.SetDisplayMode(oldDisplayMode, DisplayModeDuration.Temporary);
            }
        }
Exemple #5
0
        // GET: Snippet
        public ActionResult CompositeComponent()
        {
            var renderingContext = RenderingContext.CurrentOrNull;

            if (renderingContext == null)
            {
                throw new ApplicationException("Could not find current rendering context, aborting");
            }
            var hasDataSource = !string.IsNullOrWhiteSpace(renderingContext.Rendering.DataSource);
            var pageContext   = new PageContext()
            {
                RequestContext = this.ControllerContext.RequestContext,
                Item           = !hasDataSource ? null : renderingContext.Rendering.Item
            };
            var oldDisplayMode = global::Sitecore.Context.Site != null ? global::Sitecore.Context.Site.DisplayMode : DisplayMode.Normal;

            try
            {
                if (oldDisplayMode == DisplayMode.Edit && global::Sitecore.Context.Site != null)
                {
                    //disable the editing of the nested component
                    global::Sitecore.Context.Site.SetDisplayMode(DisplayMode.Preview, DisplayModeDuration.Temporary);
                }

                using (PlaceholderContext.Enter(new PlaceholderContext("/")))
                    using (ContextService.Get().Push <PageContext>(pageContext))
                    {
                        var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage());

                        var stringWriter = new StringWriter();
                        if (oldDisplayMode == DisplayMode.Edit)
                        {
                            if (hasDataSource)
                            {
                                UrlString webSiteUrl = SiteContext.GetWebSiteUrl(Sitecore.Context.Database);
                                webSiteUrl.Add("sc_mode", "edit");
                                webSiteUrl.Add("sc_itemid", pageContext.Item.ID.ToString());
                                webSiteUrl.Add("sc_lang", pageContext.Item.Language.ToString());

                                //copied style from bootstrap alert
                                stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">");
                                stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\"");
                                stringWriter.Write(webSiteUrl);
                                stringWriter.Write("\" target=\"_blank\" onmousedown=\"window.open(this.href)\">&quot;");
                                stringWriter.Write(pageContext.Item.DisplayName);
                                stringWriter.Write("&quot; is a 'composite component'. Click here to open it's editor</a><br /></div>");
                            }
                            else
                            {
                                //copied style from bootstrap alert
                                stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">");
                                stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\"\" onmousedown=\"");
                                stringWriter.Write("Sitecore.PageModes.PageEditor.postRequest('webedit:setdatasource(referenceId=");
                                stringWriter.Write(renderingContext.Rendering.UniqueId.ToString("B").ToUpper());
                                stringWriter.Write(",renderingId=");
                                stringWriter.Write(renderingContext.Rendering.RenderingItem.ID);
                                stringWriter.Write(",id=");
                                stringWriter.Write(renderingContext.Rendering.Item.ID);
                                stringWriter.Write(")',null,false)");
                                stringWriter.Write("\" target=\"_blank\">This is a 'composite component' without a datasource. Click here to associate a composite component instance</a><br /></div>");
                            }
                        }
                        else
                        {
                            var enableAync = htmlHelper.GetCheckboxRenderingParameterValue("Enable Async");
                            var baseUrl    = htmlHelper.GetRenderingParameter("Async Fetch Base Url");

                            var componentClass = enableAync ? "composite async" : "composite";
                            var tagAttributes  = htmlHelper.GetContainerTagAttributes(componentClass);

                            var asyncUrl = renderingContext.Rendering.Item.GetItemUrl();
                            if (!string.IsNullOrEmpty(baseUrl))
                            {
                                asyncUrl = baseUrl + "/" + asyncUrl;
                            }

                            var asyncAttr = enableAync ? string.Format(@"data-src=""{0}""", asyncUrl) : string.Empty;

                            stringWriter.Write(string.Format(@"<div {0} {1}>", tagAttributes, asyncAttr));
                        }

                        if (hasDataSource)
                        {
                            var loadAsyncOnly = htmlHelper.GetCheckboxRenderingParameterValue("Load Content Async Only");
                            if (!loadAsyncOnly || oldDisplayMode == DisplayMode.Edit)
                            {
                                PipelineService.Get().RunPipeline <RenderPlaceholderArgs>("mvc.renderPlaceholder", new RenderPlaceholderArgs(pageContext.Item["PlaceholderName"] ?? "compositecontent", (TextWriter)stringWriter, new ContentRendering()));
                            }
                        }

                        if (oldDisplayMode != DisplayMode.Edit)
                        {
                            stringWriter.Write("</div>");
                        }

                        return(Content(stringWriter.ToString()));
                    }
            }
            finally
            {
                global::Sitecore.Context.Site.SetDisplayMode(oldDisplayMode, DisplayModeDuration.Temporary);
            }
        }