From b0e083e8fc25f75f2e9d261a1285a13407eb3016 Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 19 Oct 2012 08:50:49 -0200 Subject: [PATCH] refactor nice urls in editContent (U4-1017 and other issues) --- .../umbraco/editContent.aspx.cs | 71 ++++++++++++------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs index 201a02ee02..313123899c 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/editContent.aspx.cs @@ -45,8 +45,6 @@ namespace umbraco.cms.presentation Button UnPublish = new Button(); private Literal littPublishStatus = new Literal(); - private Literal l = new Literal(); - private Literal domainText = new Literal(); private controls.ContentControl.publishModes _canPublish = controls.ContentControl.publishModes.Publish; private int? m_ContentId = null; @@ -180,13 +178,6 @@ namespace umbraco.cms.presentation dpExpire.ShowTime = true; publishProps.addProperty(ui.Text("content", "expireDate", base.getUser()), dpExpire); - // url's - UpdateNiceUrls(); - linkProps.addProperty(ui.Text("content", "urls", base.getUser()), l); - - if (domainText.Text != "") - linkProps.addProperty(ui.Text("content", "alternativeUrls", base.getUser()), domainText); - cControl.Save += new System.EventHandler(Save); cControl.SaveAndPublish += new System.EventHandler(Publish); cControl.SaveToPublish += new System.EventHandler(SendToPublish); @@ -225,6 +216,12 @@ namespace umbraco.cms.presentation } + protected override void OnPreRender(EventArgs e) + { + base.OnPreRender(e); + UpdateNiceUrls(); + } + protected void Save(object sender, System.EventArgs e) { // error handling test @@ -324,7 +321,6 @@ namespace umbraco.cms.presentation UnPublish.Visible = true; _documentHasPublishedVersion = _document.HasPublishedVersion(); - UpdateNiceUrls(); } else { @@ -347,42 +343,69 @@ namespace umbraco.cms.presentation _document.UnPublish(); littPublishStatus.Text = ui.Text("content", "itemNotPublished", base.getUser()); UnPublish.Visible = false; + _documentHasPublishedVersion = false; library.UnPublishSingleNode(_document.Id); //newPublishStatus.Text = "0"; - } + void UpdateNiceUrlProperties(string niceUrlText, string altUrlsText) + { + Literal lit; + + linkProps.Controls.Clear(); + + lit = new Literal(); + lit.Text = niceUrlText; + linkProps.addProperty(ui.Text("content", "urls", base.getUser()), lit); + + if (!string.IsNullOrWhiteSpace(altUrlsText)) + { + lit = new Literal(); + lit.Text = altUrlsText; + linkProps.addProperty(ui.Text("content", "alternativeUrls", base.getUser()), lit); + } + } + void UpdateNiceUrls() { if (!_documentHasPublishedVersion) { - l.Text = "" + ui.Text("content", "itemNotPublished", base.getUser()) + ""; + UpdateNiceUrlProperties("" + ui.Text("content", "itemNotPublished", base.getUser()) + "", null); return; } var niceUrlProvider = Umbraco.Web.UmbracoContext.Current.RoutingContext.NiceUrlProvider; var url = niceUrlProvider.GetNiceUrl(_document.Id); + string niceUrlText = null; + var altUrlsText = new System.Text.StringBuilder(); if (url == "#") { + // document as a published version yet it's url is "#" => a parent must be + // unpublished, walk up the tree until we find it, and report. var parent = _document; - while (parent.Published && parent.ParentId > 0) - parent = new Document(_document.ParentId); - if (parent.Published) - l.Text = "" + ui.Text("content", "parentNotPublished", "???", base.getUser()) + ""; + do + { + parent = parent.ParentId > 0 ? new Document(parent.ParentId) : null; + } + while (parent != null && parent.Published); + + if (parent == null) // oops - internal error + niceUrlText = "" + ui.Text("content", "parentNotPublished", "???", base.getUser()) + ""; else - l.Text = "" + ui.Text("content", "parentNotPublished", parent.Text, base.getUser()) + ""; - return; + niceUrlText = "" + ui.Text("content", "parentNotPublished", parent.Text, base.getUser()) + ""; + } + else + { + niceUrlText = string.Format("{0}", url); + + foreach (var altUrl in niceUrlProvider.GetAllAbsoluteNiceUrls(_document.Id).Where(u => u != url)) + altUrlsText.AppendFormat("{0}
", altUrl); } - l.Text = string.Format("{0}", url); - - var lb = new System.Text.StringBuilder(); - foreach (var altUrl in niceUrlProvider.GetAllAbsoluteNiceUrls(_document.Id).Where(u => u != url)) - lb.AppendFormat("{0}
", altUrl); - domainText.Text = lb.ToString(); + UpdateNiceUrlProperties(niceUrlText, altUrlsText.ToString()); } ///