From a3b091758cf25120d706629fb0e73388108d93d7 Mon Sep 17 00:00:00 2001 From: agrath Date: Thu, 26 Jul 2012 15:36:34 -1200 Subject: [PATCH 01/15] Fixed a NRE in FileHandlerData when user has not updated umbracoSettings.config to add the new /settings/content/imaging/autoFillImageProperties node --- .../businesslogic/datatype/FileHandlerData.cs | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs b/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs index 65d2777a7d..a82042e353 100644 --- a/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs +++ b/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs @@ -60,28 +60,31 @@ namespace umbraco.cms.businesslogic.datatype // check for auto fill of other properties (width, height, extension and filesize) string propertyTypeAlias = new Property(PropertyId).PropertyType.Alias; - XmlNode uploadFieldConfigNode = - UmbracoSettings.ImageAutoFillImageProperties.SelectSingleNode( - string.Format("uploadField [@alias = \"{0}\"]", propertyTypeAlias)); - if (uploadFieldConfigNode != null) + if (UmbracoSettings.ImageAutoFillImageProperties != null) { - // get the current document - Content content = Content.GetContentFromVersion(Version); - // only add dimensions to web images - if (um.SupportsResizing) + XmlNode uploadFieldConfigNode = + UmbracoSettings.ImageAutoFillImageProperties.SelectSingleNode( + string.Format("uploadField [@alias = \"{0}\"]", propertyTypeAlias)); + if (uploadFieldConfigNode != null) { - updateContentProperty(uploadFieldConfigNode, content, "widthFieldAlias", - um.GetDimensions().Item1); - updateContentProperty(uploadFieldConfigNode, content, "heightFieldAlias", - um.GetDimensions().Item2); + // get the current document + Content content = Content.GetContentFromVersion(Version); + // only add dimensions to web images + if (um.SupportsResizing) + { + updateContentProperty(uploadFieldConfigNode, content, "widthFieldAlias", + um.GetDimensions().Item1); + updateContentProperty(uploadFieldConfigNode, content, "heightFieldAlias", + um.GetDimensions().Item2); + } + else + { + updateContentProperty(uploadFieldConfigNode, content, "widthFieldAlias", String.Empty); + updateContentProperty(uploadFieldConfigNode, content, "heightFieldAlias", String.Empty); + } + updateContentProperty(uploadFieldConfigNode, content, "lengthFieldAlias", um.Length); + updateContentProperty(uploadFieldConfigNode, content, "extensionFieldAlias", um.Extension); } - else - { - updateContentProperty(uploadFieldConfigNode, content, "widthFieldAlias", String.Empty); - updateContentProperty(uploadFieldConfigNode, content, "heightFieldAlias", String.Empty); - } - updateContentProperty(uploadFieldConfigNode, content, "lengthFieldAlias", um.Length); - updateContentProperty(uploadFieldConfigNode, content, "extensionFieldAlias", um.Extension); } base.Value = um.LocalName; From 170051614840aed5f39082b5e151b1ab8d0106cd Mon Sep 17 00:00:00 2001 From: agrath Date: Thu, 26 Jul 2012 16:05:44 -1200 Subject: [PATCH 02/15] Another NRE that I missed --- .../businesslogic/datatype/FileHandlerData.cs | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs b/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs index 0b856bf733..f34677c4dc 100644 --- a/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs +++ b/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs @@ -132,18 +132,21 @@ namespace umbraco.cms.businesslogic.datatype private void clearRelatedValues() { string propertyTypeAlias = new Property(PropertyId).PropertyType.Alias; - XmlNode uploadFieldConfigNode = - UmbracoSettings.ImageAutoFillImageProperties.SelectSingleNode( - string.Format("uploadField [@alias = \"{0}\"]", propertyTypeAlias)); - if (uploadFieldConfigNode != null) + if (UmbracoSettings.ImageAutoFillImageProperties != null) { - // get the current document - Content content = Content.GetContentFromVersion(Version); - // only add dimensions to web images - updateContentProperty(uploadFieldConfigNode, content, "widthFieldAlias", String.Empty); - updateContentProperty(uploadFieldConfigNode, content, "heightFieldAlias", String.Empty); - updateContentProperty(uploadFieldConfigNode, content, "lengthFieldAlias", String.Empty); - updateContentProperty(uploadFieldConfigNode, content, "extensionFieldAlias", String.Empty); + XmlNode uploadFieldConfigNode = + UmbracoSettings.ImageAutoFillImageProperties.SelectSingleNode( + string.Format("uploadField [@alias = \"{0}\"]", propertyTypeAlias)); + if (uploadFieldConfigNode != null) + { + // get the current document + Content content = Content.GetContentFromVersion(Version); + // only add dimensions to web images + updateContentProperty(uploadFieldConfigNode, content, "widthFieldAlias", String.Empty); + updateContentProperty(uploadFieldConfigNode, content, "heightFieldAlias", String.Empty); + updateContentProperty(uploadFieldConfigNode, content, "lengthFieldAlias", String.Empty); + updateContentProperty(uploadFieldConfigNode, content, "extensionFieldAlias", String.Empty); + } } } From 6870ea3ff5f175b0cdd9bbd76385926a45cf883c Mon Sep 17 00:00:00 2001 From: sitereactor Date: Fri, 27 Jul 2012 07:06:28 -0200 Subject: [PATCH 03/15] Closed branch 4.8.0 From 11cf53d3ba7e31b581b26ceddced61b84d1dd951 Mon Sep 17 00:00:00 2001 From: Michael Wulff Nielsen Date: Thu, 2 Aug 2012 07:24:18 -0200 Subject: [PATCH 04/15] Fixed GetNodeIdByPathLevel regression from uComponents --- src/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs b/src/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs index d1e14a3417..6b3c2d3d8a 100644 --- a/src/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs +++ b/src/umbraco.presentation/umbraco/uQuery/uQuery-Nodes.cs @@ -182,7 +182,7 @@ namespace umbraco // TODO: [LK] use uQuery.GetNodeIdByPathLevel var nodeIds = path.Split(',').ToList(); - if (nodeIds.Count <= level) + if (nodeIds.Count > level) { return nodeIds[level]; } From 26671a405c5868aa392f4c3de5757d7a1db5038b Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Mon, 13 Aug 2012 08:18:52 -0200 Subject: [PATCH 05/15] Refactor cookies SetValue to use just ONE method to set the value and expiration. Prevents us from forgetting to update the duplicate code. --- src/umbraco.businesslogic/StateHelper.cs | 516 +++++++++++------------ 1 file changed, 256 insertions(+), 260 deletions(-) diff --git a/src/umbraco.businesslogic/StateHelper.cs b/src/umbraco.businesslogic/StateHelper.cs index 4d5ab3ff17..d2f78e8ed9 100644 --- a/src/umbraco.businesslogic/StateHelper.cs +++ b/src/umbraco.businesslogic/StateHelper.cs @@ -8,9 +8,9 @@ namespace umbraco.BusinessLogic /// /// The StateHelper class provides general helper methods for handling sessions, context, viewstate and cookies. /// - public class StateHelper - { - #region Session Helpers + public class StateHelper + { + #region Session Helpers /// /// Gets the session value. @@ -18,10 +18,10 @@ namespace umbraco.BusinessLogic /// /// The key. /// - public static T GetSessionValue(string key) - { - return GetSessionValue(HttpContext.Current, key); - } + public static T GetSessionValue(string key) + { + return GetSessionValue(HttpContext.Current, key); + } /// /// Gets the session value. @@ -30,25 +30,25 @@ namespace umbraco.BusinessLogic /// The context. /// The key. /// - public static T GetSessionValue(HttpContext context, string key) - { - if (context == null) - return default(T); - object o = context.Session[key]; - if (o == null) - return default(T); - return (T)o; - } + public static T GetSessionValue(HttpContext context, string key) + { + if (context == null) + return default(T); + object o = context.Session[key]; + if (o == null) + return default(T); + return (T)o; + } /// /// Sets a session value. /// /// The key. /// The value. - public static void SetSessionValue(string key, object value) - { - SetSessionValue(HttpContext.Current, key, value); - } + public static void SetSessionValue(string key, object value) + { + SetSessionValue(HttpContext.Current, key, value); + } /// /// Sets the session value. @@ -56,16 +56,16 @@ namespace umbraco.BusinessLogic /// The context. /// The key. /// The value. - public static void SetSessionValue(HttpContext context, string key, object value) - { - if (context == null) - return; - context.Session[key] = value; - } + public static void SetSessionValue(HttpContext context, string key, object value) + { + if (context == null) + return; + context.Session[key] = value; + } - #endregion + #endregion - #region Context Helpers + #region Context Helpers /// /// Gets the context value. @@ -73,10 +73,10 @@ namespace umbraco.BusinessLogic /// /// The key. /// - public static T GetContextValue(string key) - { - return GetContextValue(HttpContext.Current, key); - } + public static T GetContextValue(string key) + { + return GetContextValue(HttpContext.Current, key); + } /// /// Gets the context value. @@ -85,25 +85,25 @@ namespace umbraco.BusinessLogic /// The context. /// The key. /// - public static T GetContextValue(HttpContext context, string key) - { - if (context == null) - return default(T); - object o = context.Items[key]; - if (o == null) - return default(T); - return (T)o; - } + public static T GetContextValue(HttpContext context, string key) + { + if (context == null) + return default(T); + object o = context.Items[key]; + if (o == null) + return default(T); + return (T)o; + } /// /// Sets the context value. /// /// The key. /// The value. - public static void SetContextValue(string key, object value) - { - SetContextValue(HttpContext.Current, key, value); - } + public static void SetContextValue(string key, object value) + { + SetContextValue(HttpContext.Current, key, value); + } /// /// Sets the context value. @@ -111,37 +111,37 @@ namespace umbraco.BusinessLogic /// The context. /// The key. /// The value. - public static void SetContextValue(HttpContext context, string key, object value) - { - if (context == null) - return; - context.Items[key] = value; - } + public static void SetContextValue(HttpContext context, string key, object value) + { + if (context == null) + return; + context.Items[key] = value; + } - #endregion + #endregion - #region ViewState Helpers + #region ViewState Helpers /// /// Gets the state bag. /// /// - private static StateBag GetStateBag() - { - if (HttpContext.Current == null) - return null; + private static StateBag GetStateBag() + { + if (HttpContext.Current == null) + return null; - Page page = HttpContext.Current.CurrentHandler as Page; - if (page == null) - return null; + Page page = HttpContext.Current.CurrentHandler as Page; + if (page == null) + return null; - Type pageType = typeof(Page); - PropertyInfo viewState = pageType.GetProperty("ViewState", BindingFlags.GetProperty | BindingFlags.Instance); - if (viewState == null) - return null; + Type pageType = typeof(Page); + PropertyInfo viewState = pageType.GetProperty("ViewState", BindingFlags.GetProperty | BindingFlags.Instance); + if (viewState == null) + return null; - return viewState.GetValue(page, null) as StateBag; - } + return viewState.GetValue(page, null) as StateBag; + } /// /// Gets the view state value. @@ -149,10 +149,10 @@ namespace umbraco.BusinessLogic /// /// The key. /// - public static T GetViewStateValue(string key) - { - return GetViewStateValue(GetStateBag(), key); - } + public static T GetViewStateValue(string key) + { + return GetViewStateValue(GetStateBag(), key); + } /// /// Gets a view-state value. @@ -161,25 +161,25 @@ namespace umbraco.BusinessLogic /// The bag. /// The key. /// - public static T GetViewStateValue(StateBag bag, string key) - { - if (bag == null) - return default(T); - object o = bag[key]; - if (o == null) - return default(T); - return (T)o; - } + public static T GetViewStateValue(StateBag bag, string key) + { + if (bag == null) + return default(T); + object o = bag[key]; + if (o == null) + return default(T); + return (T)o; + } /// /// Sets the view state value. /// /// The key. /// The value. - public static void SetViewStateValue(string key, object value) - { - SetViewStateValue(GetStateBag(), key, value); - } + public static void SetViewStateValue(string key, object value) + { + SetViewStateValue(GetStateBag(), key, value); + } /// /// Sets the view state value. @@ -187,15 +187,15 @@ namespace umbraco.BusinessLogic /// The bag. /// The key. /// The value. - public static void SetViewStateValue(StateBag bag, string key, object value) - { - if (bag != null) - bag[key] = value; - } + public static void SetViewStateValue(StateBag bag, string key, object value) + { + if (bag != null) + bag[key] = value; + } - #endregion + #endregion - #region Cookie Helpers + #region Cookie Helpers /// /// Determines whether a cookie has a value with a specified key. @@ -217,13 +217,13 @@ namespace umbraco.BusinessLogic /// /// The key. /// - public static string GetCookieValue(string key) - { - if (!Cookies.HasCookies) - return null; - var cookie = HttpContext.Current.Request.Cookies[key]; - return cookie == null ? null : cookie.Value; - } + public static string GetCookieValue(string key) + { + if (!Cookies.HasCookies) + return null; + var cookie = HttpContext.Current.Request.Cookies[key]; + return cookie == null ? null : cookie.Value; + } /// /// Sets the cookie value. @@ -232,7 +232,7 @@ namespace umbraco.BusinessLogic /// The value. public static void SetCookieValue(string key, string value) { - SetCookieValue(key, value, 30d); // default Umbraco expires is 30 days + SetCookieValue(key, value, 30d); // default Umbraco expires is 30 days } /// @@ -243,196 +243,192 @@ namespace umbraco.BusinessLogic /// How long the cookie should be present in the browser public static void SetCookieValue(string key, string value, double daysToPersist) { - if (!Cookies.HasCookies) - return; - var context = HttpContext.Current; + if (!Cookies.HasCookies) + return; + var context = HttpContext.Current; - HttpCookie cookie = new HttpCookie(key, value); - cookie.Expires = DateTime.Now.AddDays(daysToPersist); - context.Response.Cookies.Set(cookie); + HttpCookie cookie = new HttpCookie(key, value); + cookie.Expires = DateTime.Now.AddDays(daysToPersist); + context.Response.Cookies.Set(cookie); - cookie = context.Request.Cookies[key]; - if (cookie != null) - cookie.Value = value; - } + cookie = context.Request.Cookies[key]; + if (cookie != null) + cookie.Value = value; + } - // zb-00004 #29956 : refactor cookies names & handling - public static class Cookies - { - /* - * helper class to manage cookies - * - * beware! SetValue(string value) does _not_ set expires, unless the cookie has been - * configured to have one. This allows us to have cookies w/out an expires timespan. - * However, default behavior in Umbraco was to set expires to 30days by default. This - * must now be managed in the Cookie constructor or by using an overriden SetValue(...). - * - * we currently reproduce this by configuring each cookie with a 30d expires, but does - * that actually make sense? shouldn't some cookie have _no_ expires? - */ - static readonly Cookie _preview = new Cookie("UMB_PREVIEW", 30d); // was "PreviewSet" - static readonly Cookie _userContext = new Cookie("UMB_UCONTEXT", 30d); // was "UserContext" - static readonly Cookie _member = new Cookie("UMB_MEMBER", 30d); // was "umbracoMember" + // zb-00004 #29956 : refactor cookies names & handling + public static class Cookies + { + /* + * helper class to manage cookies + * + * beware! SetValue(string value) does _not_ set expires, unless the cookie has been + * configured to have one. This allows us to have cookies w/out an expires timespan. + * However, default behavior in Umbraco was to set expires to 30days by default. This + * must now be managed in the Cookie constructor or by using an overriden SetValue(...). + * + * we currently reproduce this by configuring each cookie with a 30d expires, but does + * that actually make sense? shouldn't some cookie have _no_ expires? + */ + static readonly Cookie _preview = new Cookie("UMB_PREVIEW", 30d); // was "PreviewSet" + static readonly Cookie _userContext = new Cookie("UMB_UCONTEXT", 30d); // was "UserContext" + static readonly Cookie _member = new Cookie("UMB_MEMBER", 30d); // was "umbracoMember" - public static Cookie Preview { get { return _preview; } } - public static Cookie UserContext { get { return _userContext; } } - public static Cookie Member { get { return _member; } } + public static Cookie Preview { get { return _preview; } } + public static Cookie UserContext { get { return _userContext; } } + public static Cookie Member { get { return _member; } } - public static bool HasCookies - { - get - { - System.Web.HttpContext context = HttpContext.Current; - // although just checking context should be enough?! - // but in some (replaced) umbraco code, everything is checked... - return context != null - && context.Request != null & context.Request.Cookies != null - && context.Response != null && context.Response.Cookies != null; - } - } + public static bool HasCookies + { + get + { + System.Web.HttpContext context = HttpContext.Current; + // although just checking context should be enough?! + // but in some (replaced) umbraco code, everything is checked... + return context != null + && context.Request != null & context.Request.Cookies != null + && context.Response != null && context.Response.Cookies != null; + } + } - public static void ClearAll() - { - HttpContext.Current.Response.Cookies.Clear(); - } + public static void ClearAll() + { + HttpContext.Current.Response.Cookies.Clear(); + } - public class Cookie - { - const string cookiesExtensionConfigKey = "umbracoCookiesExtension"; + public class Cookie + { + const string cookiesExtensionConfigKey = "umbracoCookiesExtension"; - static readonly string _ext; - TimeSpan _expires; - string _key; + static readonly string _ext; + TimeSpan _expires; + string _key; - static Cookie() - { - var appSettings = System.Configuration.ConfigurationManager.AppSettings; - _ext = appSettings[cookiesExtensionConfigKey] == null ? "" : "_" + (string)appSettings[cookiesExtensionConfigKey]; - } + static Cookie() + { + var appSettings = System.Configuration.ConfigurationManager.AppSettings; + _ext = appSettings[cookiesExtensionConfigKey] == null ? "" : "_" + (string)appSettings[cookiesExtensionConfigKey]; + } - public Cookie(string key) - : this(key, TimeSpan.Zero, true) - { } + public Cookie(string key) + : this(key, TimeSpan.Zero, true) + { } - public Cookie(string key, double days) - : this(key, TimeSpan.FromDays(days), true) - { } + public Cookie(string key, double days) + : this(key, TimeSpan.FromDays(days), true) + { } - public Cookie(string key, TimeSpan expires) - : this(key, expires, true) - { } + public Cookie(string key, TimeSpan expires) + : this(key, expires, true) + { } - public Cookie(string key, bool appendExtension) - : this(key, TimeSpan.Zero, appendExtension) - { } + public Cookie(string key, bool appendExtension) + : this(key, TimeSpan.Zero, appendExtension) + { } - public Cookie(string key, double days, bool appendExtension) - : this(key, TimeSpan.FromDays(days), appendExtension) - { } + public Cookie(string key, double days, bool appendExtension) + : this(key, TimeSpan.FromDays(days), appendExtension) + { } - public Cookie(string key, TimeSpan expires, bool appendExtension) - { - _key = appendExtension ? key + _ext : key; - _expires = expires; - } + public Cookie(string key, TimeSpan expires, bool appendExtension) + { + _key = appendExtension ? key + _ext : key; + _expires = expires; + } - public string Key - { - get { return _key; } - } + public string Key + { + get { return _key; } + } - public bool HasValue - { - get { return RequestCookie != null; } - } + public bool HasValue + { + get { return RequestCookie != null; } + } - public string GetValue() - { - return RequestCookie == null ? null : RequestCookie.Value; - } + public string GetValue() + { + return RequestCookie == null ? null : RequestCookie.Value; + } + + public void SetValue(string value) + { + SetValueWithDate(value, DateTime.Now + _expires); + } + + public void SetValue(string value, double days) + { + SetValue(value, DateTime.Now.AddDays(days)); + } + + public void SetValue(string value, TimeSpan expires) + { + SetValue(value, DateTime.Now + expires); + } + + public void SetValue(string value, DateTime expires) + { + SetValueWithDate(value, expires); + } + + private void SetValueWithDate(string value, DateTime expires) + { + HttpCookie cookie = new HttpCookie(_key, value); - public void SetValue(string value) - { - HttpCookie cookie = new HttpCookie(_key, value); if (GlobalSettings.UseSSL) cookie.Secure = true; - if (!TimeSpan.Zero.Equals(_expires)) - cookie.Expires = DateTime.Now + _expires; - ResponseCookie = cookie; - // original Umbraco code also does this - // so we can GetValue() back what we previously set - cookie = RequestCookie; - if (cookie != null) - cookie.Value = value; - } - - public void SetValue(string value, double days) - { - SetValue(value, DateTime.Now.AddDays(days)); - } - - public void SetValue(string value, TimeSpan expires) - { - SetValue(value, DateTime.Now + expires); - } - - public void SetValue(string value, DateTime expires) - { - HttpCookie cookie = new HttpCookie(_key, value); - if (GlobalSettings.UseSSL) - cookie.Secure = true; cookie.Expires = expires; - ResponseCookie = cookie; + ResponseCookie = cookie; - // original Umbraco code also does this - // so we can GetValue() back what we previously set - cookie = RequestCookie; - if (cookie != null) - cookie.Value = value; - } + // original Umbraco code also does this + // so we can GetValue() back what we previously set + cookie = RequestCookie; + if (cookie != null) + cookie.Value = value; + } - public void Clear() - { - if (RequestCookie != null || ResponseCookie != null) - { - HttpCookie cookie = new HttpCookie(_key); - cookie.Expires = DateTime.Now.AddDays(-1); - ResponseCookie = cookie; - } - } + public void Clear() + { + if (RequestCookie != null || ResponseCookie != null) + { + HttpCookie cookie = new HttpCookie(_key); + cookie.Expires = DateTime.Now.AddDays(-1); + ResponseCookie = cookie; + } + } - public void Remove() - { - // beware! will not clear browser's cookie - // you probably want to use .Clear() - HttpContext.Current.Response.Cookies.Remove(_key); - } + public void Remove() + { + // beware! will not clear browser's cookie + // you probably want to use .Clear() + HttpContext.Current.Response.Cookies.Remove(_key); + } - public HttpCookie RequestCookie - { - get - { - return HttpContext.Current.Request.Cookies[_key]; - } - } + public HttpCookie RequestCookie + { + get + { + return HttpContext.Current.Request.Cookies[_key]; + } + } - public HttpCookie ResponseCookie - { - get - { - return HttpContext.Current.Response.Cookies[_key]; - } - set - { - // .Set() ensures the uniqueness of cookies in the cookie collection - // ie it is the same as .Remove() + .Add() -- .Add() allows duplicates - HttpContext.Current.Response.Cookies.Set(value); - } - } - } - } + public HttpCookie ResponseCookie + { + get + { + return HttpContext.Current.Response.Cookies[_key]; + } + set + { + // .Set() ensures the uniqueness of cookies in the cookie collection + // ie it is the same as .Remove() + .Add() -- .Add() allows duplicates + HttpContext.Current.Response.Cookies.Set(value); + } + } + } + } #endregion - } + } } From d15cc4308a25fa1e2907fb5d2e62f1376aca8fda Mon Sep 17 00:00:00 2001 From: pgregorynz Date: Mon, 13 Aug 2012 20:33:34 -1000 Subject: [PATCH 06/15] Fix issue with being able to move content outside media root when media root set for user. --- .../umbraco.presentation.csproj | 6 +- .../umbraco/Trees/BaseMediaTree.cs | 103 ++++++++++-------- .../umbraco/Trees/loadMedia.cs | 63 +++++++++-- ...web.Template.PeterGregory-PC.Debug.config} | 10 +- src/umbraco.presentation/web.config | 10 +- 5 files changed, 127 insertions(+), 65 deletions(-) rename src/umbraco.presentation/{web.Template.PETER-PC.Debug.config => web.Template.PeterGregory-PC.Debug.config} (78%) diff --git a/src/umbraco.presentation/umbraco.presentation.csproj b/src/umbraco.presentation/umbraco.presentation.csproj index 7ce280ef2b..4d8fbbe71c 100644 --- a/src/umbraco.presentation/umbraco.presentation.csproj +++ b/src/umbraco.presentation/umbraco.presentation.csproj @@ -3313,9 +3313,6 @@ Web.Template.config - - Web.Template.config - Web.Template.config @@ -3346,6 +3343,9 @@ Web.Template.config + + Web.Template.config + diff --git a/src/umbraco.presentation/umbraco/Trees/BaseMediaTree.cs b/src/umbraco.presentation/umbraco/Trees/BaseMediaTree.cs index 928223af6e..97ffff30d4 100644 --- a/src/umbraco.presentation/umbraco/Trees/BaseMediaTree.cs +++ b/src/umbraco.presentation/umbraco/Trees/BaseMediaTree.cs @@ -61,54 +61,9 @@ function openMedia(id) { foreach (Media dd in docs) { - XmlTreeNode xNode = XmlTreeNode.Create(this); - xNode.NodeID = dd.Id.ToString(); - xNode.Text = dd.Text; - - // Check for dialog behaviour - if (!this.IsDialog) - { - if (!this.ShowContextMenu) - xNode.Menu = null; - xNode.Action = "javascript:openMedia(" + dd.Id + ");"; - } - else - { - if (this.ShowContextMenu) - xNode.Menu = new List(new IAction[] { ActionRefresh.Instance }); - else - xNode.Menu = null; - if (this.DialogMode == TreeDialogModes.fulllink) - { - string nodeLink = GetLinkValue(dd, dd.Id.ToString()); - if (!String.IsNullOrEmpty(nodeLink)) - { - xNode.Action = "javascript:openMedia('" + nodeLink + "');"; - } - else - { - xNode.Action = null; - xNode.DimNode(); - } - } - else - { - xNode.Action = "javascript:openMedia('" + dd.Id.ToString() + "');"; - } - } - - xNode.HasChildren = dd.HasChildren; - if (this.IsDialog) - xNode.Source = GetTreeDialogUrl(dd.Id); - else - xNode.Source = GetTreeServiceUrl(dd.Id); - - if (dd.ContentType != null) - { - xNode.Icon = dd.ContentType.IconUrl; - xNode.OpenIcon = dd.ContentType.IconUrl; - } + XmlTreeNode xNode = CreateNode(dd); + OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty); if (xNode != null) { @@ -142,6 +97,60 @@ function openMedia(id) { return ""; } + protected XmlTreeNode CreateNode(Media dd) + { + + XmlTreeNode xNode = XmlTreeNode.Create(this); + xNode.NodeID = dd.Id.ToString(); + xNode.Text = dd.Text; + + // Check for dialog behaviour + if (!this.IsDialog) + { + if (!this.ShowContextMenu) + xNode.Menu = null; + xNode.Action = "javascript:openMedia(" + dd.Id + ");"; + } + else + { + if (this.ShowContextMenu) + xNode.Menu = new List(new IAction[] { ActionRefresh.Instance }); + else + xNode.Menu = null; + if (this.DialogMode == TreeDialogModes.fulllink) + { + string nodeLink = GetLinkValue(dd, dd.Id.ToString()); + if (!String.IsNullOrEmpty(nodeLink)) + { + xNode.Action = "javascript:openMedia('" + nodeLink + "');"; + } + else + { + xNode.Action = null; + xNode.DimNode(); + } + } + else + { + xNode.Action = "javascript:openMedia('" + dd.Id.ToString() + "');"; + } + } + + xNode.HasChildren = dd.HasChildren; + if (this.IsDialog) + xNode.Source = GetTreeDialogUrl(dd.Id); + else + xNode.Source = GetTreeServiceUrl(dd.Id); + + if (dd.ContentType != null) + { + xNode.Icon = dd.ContentType.IconUrl; + xNode.OpenIcon = dd.ContentType.IconUrl; + } + + return xNode; + } + /// /// By default, any media type that is to be "linkable" in the WYSIWYG editor must contain /// a DataTypeUploadField data type which will ouput the value for the link, however, if diff --git a/src/umbraco.presentation/umbraco/Trees/loadMedia.cs b/src/umbraco.presentation/umbraco/Trees/loadMedia.cs index ee9762d2b4..2a92e8dcc8 100644 --- a/src/umbraco.presentation/umbraco/Trees/loadMedia.cs +++ b/src/umbraco.presentation/umbraco/Trees/loadMedia.cs @@ -31,7 +31,7 @@ namespace umbraco [Tree("media", "media", "Media")] public class loadMedia : BaseMediaTree { - + private Media m_media; private int _StartNodeID; /// /// Create the linkable data types list and add the DataTypeUploadField guid to it. @@ -52,15 +52,64 @@ namespace umbraco : base(application) { _StartNodeID = CurrentUser.StartMediaId; - } + } + + + /// + /// Returns the Document object of the starting node for the current User. This ensures + /// that the Document object is only instantiated once. + /// + protected Media StartNode + { + get + { + if (m_media == null) + { + m_media = new Media(StartNodeID); + } + + if (!m_media.Path.Contains(CurrentUser.StartMediaId.ToString())) + { + var media = new Media(CurrentUser.StartMediaId); + if (!string.IsNullOrEmpty(media.Path) && media.Path.Contains(this.StartNodeID.ToString())) + { + m_media = media; + } + else + { + return null; + } + } + + return m_media; + } + } protected override void CreateRootNode(ref XmlTreeNode rootNode) - { - - if (this.IsDialog) - rootNode.Action = "javascript:openMedia(-1);"; + { + if (StartNodeID != -1) + { + Media doc = StartNode; + if (doc == null) + { + rootNode = new NullTree(this.app).RootNode; + rootNode.Text = "You do not have permission for this content tree"; + rootNode.HasChildren = false; + rootNode.Source = string.Empty; + } + else + { + rootNode = CreateNode(doc); + } + } else - rootNode.Action = "javascript:" + ClientTools.Scripts.OpenDashboard("Media"); + { + if (this.IsDialog) + rootNode.Action = "javascript:openMedia(-1);"; + else + rootNode.Action = "javascript:" + ClientTools.Scripts.OpenDashboard("Media"); + } + } protected override void CreateRootNodeActions(ref List actions) diff --git a/src/umbraco.presentation/web.Template.PETER-PC.Debug.config b/src/umbraco.presentation/web.Template.PeterGregory-PC.Debug.config similarity index 78% rename from src/umbraco.presentation/web.Template.PETER-PC.Debug.config rename to src/umbraco.presentation/web.Template.PeterGregory-PC.Debug.config index cab18ec4b8..34466b5f80 100644 --- a/src/umbraco.presentation/web.Template.PETER-PC.Debug.config +++ b/src/umbraco.presentation/web.Template.PeterGregory-PC.Debug.config @@ -17,10 +17,14 @@ + value="server=localhost;database=4.8.dev;user id=sa;password=password!"/> - + value="4.8.1"/> + + + diff --git a/src/umbraco.presentation/web.config b/src/umbraco.presentation/web.config index 03adb3e518..91afe67f16 100644 --- a/src/umbraco.presentation/web.config +++ b/src/umbraco.presentation/web.config @@ -3,7 +3,7 @@
- +
@@ -26,12 +26,12 @@ - - + + - - + + From 13558b77dcc25d23b8f88222caf0c580de0d77aa Mon Sep 17 00:00:00 2001 From: pgregorynz Date: Mon, 13 Aug 2012 20:39:17 -1000 Subject: [PATCH 07/15] Type in code comment fixed. --- src/umbraco.presentation/umbraco/Trees/loadMedia.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/umbraco.presentation/umbraco/Trees/loadMedia.cs b/src/umbraco.presentation/umbraco/Trees/loadMedia.cs index 2a92e8dcc8..db734995ea 100644 --- a/src/umbraco.presentation/umbraco/Trees/loadMedia.cs +++ b/src/umbraco.presentation/umbraco/Trees/loadMedia.cs @@ -56,8 +56,8 @@ namespace umbraco /// - /// Returns the Document object of the starting node for the current User. This ensures - /// that the Document object is only instantiated once. + /// Returns the Media object of the starting node for the current User. This ensures + /// that the Media object is only instantiated once. /// protected Media StartNode { From b8f7ea50f718103c1692bb0fdde57697aa4c9458 Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Tue, 14 Aug 2012 07:06:26 -0200 Subject: [PATCH 08/15] Added tag Release-4.8.1 for changeset 8f8a20385788 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 6003cea89b..485e19b183 100644 --- a/.hgtags +++ b/.hgtags @@ -7,3 +7,4 @@ ffc34b23e1a03785e4098afa4290d8c03cf10115 Release-4.5.2 d03fcffb8834a9583a56813bb44b6abbd9f042cc Release-4.6.0 1809f7b2593270c192cd47bdcfdb392100686f79 4.7.2 488779dec0ceb1d2874bcef906241b919325c904 4.8.0-beta +8f8a203857886b373148af29edd57460a42940be Release-4.8.1 From cff0d9dfbfa611dbaadc6a5f3c7aa8cafc95c04c Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Tue, 14 Aug 2012 07:15:32 -0200 Subject: [PATCH 09/15] Closing branch. From fa33563a36e426cca2976ab0d6915889ad0e4657 Mon Sep 17 00:00:00 2001 From: "Morten Christensen@ThinkPadX220.ab-nat1.dk" Date: Thu, 6 Sep 2012 15:23:42 -0200 Subject: [PATCH 10/15] Embed classes internal -> public. Renaming Embed.config to EmbeddedMedia.config --- src/Umbraco.Core/Media/IEmbedProvider.cs | 2 +- src/Umbraco.Core/Media/IEmbedSettingProvider.cs | 2 +- src/Umbraco.Core/Media/ProviderSetting.cs | 2 +- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 6 +++--- .../{embed.Release.config => EmbeddedMedia.Release.config} | 0 .../config/{embed.config => EmbeddedMedia.config} | 0 src/umbraco.webservices/media/mediaService.cs | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename src/Umbraco.Web.UI/config/{embed.Release.config => EmbeddedMedia.Release.config} (100%) rename src/Umbraco.Web.UI/config/{embed.config => EmbeddedMedia.config} (100%) diff --git a/src/Umbraco.Core/Media/IEmbedProvider.cs b/src/Umbraco.Core/Media/IEmbedProvider.cs index f785d867b3..73232d4637 100644 --- a/src/Umbraco.Core/Media/IEmbedProvider.cs +++ b/src/Umbraco.Core/Media/IEmbedProvider.cs @@ -1,6 +1,6 @@ namespace Umbraco.Core.Media { - internal interface IEmbedProvider + public interface IEmbedProvider { bool SupportsDimensions { get; } diff --git a/src/Umbraco.Core/Media/IEmbedSettingProvider.cs b/src/Umbraco.Core/Media/IEmbedSettingProvider.cs index 903c5479b5..ab1979184b 100644 --- a/src/Umbraco.Core/Media/IEmbedSettingProvider.cs +++ b/src/Umbraco.Core/Media/IEmbedSettingProvider.cs @@ -2,7 +2,7 @@ namespace Umbraco.Core.Media { - internal interface IEmbedSettingProvider + public interface IEmbedSettingProvider { object GetSetting(XmlNode settingNode); } diff --git a/src/Umbraco.Core/Media/ProviderSetting.cs b/src/Umbraco.Core/Media/ProviderSetting.cs index c19fcadecb..bfd06203d4 100644 --- a/src/Umbraco.Core/Media/ProviderSetting.cs +++ b/src/Umbraco.Core/Media/ProviderSetting.cs @@ -2,7 +2,7 @@ namespace Umbraco.Core.Media { - internal class ProviderSetting : Attribute + public class ProviderSetting : Attribute { } } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index a056a784e2..2217987e19 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -270,9 +270,9 @@ FileSystemProviders.config - - - embed.config + + + EmbeddedMedia.config xsltExtensions.config diff --git a/src/Umbraco.Web.UI/config/embed.Release.config b/src/Umbraco.Web.UI/config/EmbeddedMedia.Release.config similarity index 100% rename from src/Umbraco.Web.UI/config/embed.Release.config rename to src/Umbraco.Web.UI/config/EmbeddedMedia.Release.config diff --git a/src/Umbraco.Web.UI/config/embed.config b/src/Umbraco.Web.UI/config/EmbeddedMedia.config similarity index 100% rename from src/Umbraco.Web.UI/config/embed.config rename to src/Umbraco.Web.UI/config/EmbeddedMedia.config diff --git a/src/umbraco.webservices/media/mediaService.cs b/src/umbraco.webservices/media/mediaService.cs index 9a90d3aa59..05f1d51287 100644 --- a/src/umbraco.webservices/media/mediaService.cs +++ b/src/umbraco.webservices/media/mediaService.cs @@ -199,7 +199,7 @@ namespace umbraco.webservices.media //todo cache embed doc var xmlConfig = new XmlDocument(); - xmlConfig.Load(GlobalSettings.FullpathToRoot + Path.DirectorySeparatorChar + "config" + Path.DirectorySeparatorChar + "Embed.config"); + xmlConfig.Load(GlobalSettings.FullpathToRoot + Path.DirectorySeparatorChar + "config" + Path.DirectorySeparatorChar + "EmbeddedMedia.config"); foreach (XmlNode node in xmlConfig.SelectNodes("//provider")) { From 0a37b90592dc59154e5091c2e6271be6c6fbc30a Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Thu, 6 Sep 2012 16:07:52 -0200 Subject: [PATCH 11/15] Added tag Release-4.9.0 for changeset de73e687ddf6 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 2151195c67..2757ed7cb3 100644 --- a/.hgtags +++ b/.hgtags @@ -8,3 +8,4 @@ d03fcffb8834a9583a56813bb44b6abbd9f042cc Release-4.6.0 1809f7b2593270c192cd47bdcfdb392100686f79 4.7.2 488779dec0ceb1d2874bcef906241b919325c904 4.8.0-beta 096f20bb0575d6199f20fcb3147b63554e765a74 Release-4.8.0 +de73e687ddf6086ed52b6554676c1632865d07f2 Release-4.9.0 From af6693bb5a2adf78bc60c2d84f465e37c9cb2700 Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Thu, 6 Sep 2012 16:08:09 -0200 Subject: [PATCH 12/15] Close 4.9.0 branch From 15819446610a2e29bccf19e2cfea2c425691e945 Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Fri, 7 Sep 2012 07:10:02 -0200 Subject: [PATCH 13/15] Update to CodeMirror for U4-762 --- .../umbraco_client/CodeArea/javascript.js | 6 +- src/umbraco.controls/CodeArea.cs | 74 +++++++++---------- 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/Umbraco.Web.UI/umbraco_client/CodeArea/javascript.js b/src/Umbraco.Web.UI/umbraco_client/CodeArea/javascript.js index 9b5c0e4402..6d37c171be 100644 --- a/src/Umbraco.Web.UI/umbraco_client/CodeArea/javascript.js +++ b/src/Umbraco.Web.UI/umbraco_client/CodeArea/javascript.js @@ -10,16 +10,18 @@ function resizeTextArea(textEditor, offsetX, offsetY) { var currentHandle = null, currentLine; function updateLineInfo(cm) { + var line = cm.getCursor().line, handle = cm.getLineHandle(line); if (handle == currentHandle && line == currentLine) return; if (currentHandle) { cm.setLineClass(currentHandle, null, null); - cm.clearMarker(currentHandle); + // cm.clearMarker(currentHandle); } + currentHandle = handle; currentLine = line; cm.setLineClass(currentHandle, null, "activeline"); - cm.setMarker(currentHandle, String(line + 1)); + //cm.setMarker(currentHandle, String(line + 1)); } diff --git a/src/umbraco.controls/CodeArea.cs b/src/umbraco.controls/CodeArea.cs index cd28223241..a6adc8e4d6 100644 --- a/src/umbraco.controls/CodeArea.cs +++ b/src/umbraco.controls/CodeArea.cs @@ -62,7 +62,7 @@ namespace umbraco.uicontrols public EditorType CodeBase { get; set; } public string ClientSaveMethod { get; set; } - public enum EditorType { JavaScript, Css, Python, XML, HTML, Razor, HtmlMixed} + public enum EditorType { JavaScript, Css, Python, XML, HTML, Razor, HtmlMixed } protected override void OnInit(EventArgs e) { @@ -72,8 +72,8 @@ namespace umbraco.uicontrols if (CodeMirrorEnabled) { ClientDependencyLoader.Instance.RegisterDependency(0, "CodeMirror/js/lib/codemirror.js", "UmbracoClient", ClientDependencyType.Javascript); - - + + ClientDependencyLoader.Instance.RegisterDependency(2, "CodeMirror/js/mode/" + CodeBase.ToString().ToLower() + "/" + CodeBase.ToString().ToLower() + ".js", "UmbracoClient", ClientDependencyType.Javascript); if (CodeBase == EditorType.HtmlMixed) { @@ -82,19 +82,21 @@ namespace umbraco.uicontrols ClientDependencyLoader.Instance.RegisterDependency(1, "CodeMirror/js/mode/css/css.js", "UmbracoClient", ClientDependencyType.Javascript); } - + ClientDependencyLoader.Instance.RegisterDependency(2, "CodeMirror/js/lib/codemirror.css", "UmbracoClient", ClientDependencyType.Css); ClientDependencyLoader.Instance.RegisterDependency(3, "CodeArea/styles.css", "UmbracoClient", ClientDependencyType.Css); - if (AutoSuggest && HttpContext.Current.Request.Browser.Browser != "IE") - { - ClientDependencyLoader.Instance.RegisterDependency(3, "CodeMirror/js/lib/util/simple-hint-customized.js", "UmbracoClient", ClientDependencyType.Javascript); - - ClientDependencyLoader.Instance.RegisterDependency(4, "CodeMirror/js/lib/util/" + CodeBase.ToString().ToLower() + "-hint.js", "UmbracoClient", ClientDependencyType.Javascript); - ClientDependencyLoader.Instance.RegisterDependency(5, "CodeMirror/js/lib/util/" + CodeBase.ToString().ToLower() + "-hints.js", "UmbracoClient", ClientDependencyType.Javascript); - - ClientDependencyLoader.Instance.RegisterDependency(4, "CodeMirror/js/lib/util/simple-hint.css", "UmbracoClient", ClientDependencyType.Css); - } + + + //if (AutoSuggest && HttpContext.Current.Request.Browser.Browser != "IE") + //{ + // ClientDependencyLoader.Instance.RegisterDependency(3, "CodeMirror/js/lib/util/simple-hint-customized.js", "UmbracoClient", ClientDependencyType.Javascript); + + // ClientDependencyLoader.Instance.RegisterDependency(4, "CodeMirror/js/lib/util/" + CodeBase.ToString().ToLower() + "-hint.js", "UmbracoClient", ClientDependencyType.Javascript); + // ClientDependencyLoader.Instance.RegisterDependency(5, "CodeMirror/js/lib/util/" + CodeBase.ToString().ToLower() + "-hints.js", "UmbracoClient", ClientDependencyType.Javascript); + + // ClientDependencyLoader.Instance.RegisterDependency(4, "CodeMirror/js/lib/util/simple-hint.css", "UmbracoClient", ClientDependencyType.Css); + //} } } @@ -137,7 +139,7 @@ namespace umbraco.uicontrols EnsureChildControls(); var jsEventCode = ""; - + if (!CodeMirrorEnabled) { @@ -167,8 +169,6 @@ namespace umbraco.uicontrols OffSetX += 20; } - - jsEventCode += @" //create the editor @@ -181,11 +181,11 @@ namespace umbraco.uicontrols jQuery(window).resize(function(){ resizeTextArea(m_textEditor, " + OffSetX.ToString() + "," + OffSetY.ToString() + @"); }); jQuery(document).ready(function(){ resizeTextArea(m_textEditor, " + OffSetX.ToString() + "," + OffSetY.ToString() + @"); });"; - /* - if (!UmbracoSettings.ScriptDisableEditor && HttpContext.Current.Request.Browser.Browser == "IE") - { - jsEventCode += "jQuery('

" + ui.Text("codemirroriewarning").Replace("'", "\\'") + "

').insertAfter('#" + this.ClientID + "');"; - }*/ + /* + if (!UmbracoSettings.ScriptDisableEditor && HttpContext.Current.Request.Browser.Browser == "IE") + { + jsEventCode += "jQuery('

" + ui.Text("codemirroriewarning").Replace("'", "\\'") + "

').insertAfter('#" + this.ClientID + "');"; + }*/ } @@ -209,15 +209,16 @@ namespace umbraco.uicontrols var extraKeys = ""; var editorMimetype = ""; - if (AutoSuggest) - { - extraKeys = @", - extraKeys: { - ""'@'"": function(cm) { CodeMirror.{lang}Hint(cm, '@'); }, - ""'.'"": function(cm) { CodeMirror.{lang}Hint(cm, '.'); }, - ""Ctrl-Space"": function(cm) { CodeMirror.{lang}Hint(cm, ''); } - }".Replace("{lang}", CodeBase.ToString().ToLower()); - } +// if (AutoSuggest && HttpContext.Current.Request.Browser.Browser != "IE") +// { +// extraKeys = @", +// extraKeys: { +// ""'@'"": function(cm) { CodeMirror.{lang}Hint(cm, '@'); }, +// ""'.'"": function(cm) { CodeMirror.{lang}Hint(cm, '.'); }, +// ""Ctrl-Space"": function(cm) { CodeMirror.{lang}Hint(cm, ''); } +// }".Replace("{lang}", CodeBase.ToString().ToLower()); +// } + if (!string.IsNullOrEmpty(EditorMimeType)) editorMimetype = @", @@ -235,18 +236,17 @@ namespace umbraco.uicontrols indentUnit: 4, indentWithTabs: true, enterMode: ""keep"", - textWrapping: false" + - editorMimetype + @", - gutter: true, onCursorActivity: updateLineInfo, - onChange: updateLineInfo" + + lineWrapping: false" + + editorMimetype + @", + lineNumbers: true" + extraKeys + @" }); - - updateLineInfo(codeEditor); + + updateLineInfo(codeEditor); "; - + /* string[] parserFiles = new string[] { "tokenizejavascript.js", "parsejavascript.js" }; string[] cssFile = new string[] { "jscolors.css", "umbracoCustom.css" }; From 4056b47d3273ba896e18108fa05040eee2a8fc3d Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Fri, 7 Sep 2012 07:10:32 -0200 Subject: [PATCH 14/15] Removed tag Release-4.9.0 --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index 4e24ce97fb..1bdce80da6 100644 --- a/.hgtags +++ b/.hgtags @@ -10,3 +10,5 @@ d03fcffb8834a9583a56813bb44b6abbd9f042cc Release-4.6.0 096f20bb0575d6199f20fcb3147b63554e765a74 Release-4.8.0 8f8a203857886b373148af29edd57460a42940be Release-4.8.1 de73e687ddf6086ed52b6554676c1632865d07f2 Release-4.9.0 +de73e687ddf6086ed52b6554676c1632865d07f2 Release-4.9.0 +0000000000000000000000000000000000000000 Release-4.9.0 From 534c28046a446b9c858dcbc611776be7ca493006 Mon Sep 17 00:00:00 2001 From: sebastiaan Date: Fri, 7 Sep 2012 07:10:51 -0200 Subject: [PATCH 15/15] Added tag Release-4.9.0 for changeset 09f5a69cf19e --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index 1bdce80da6..7b87f63320 100644 --- a/.hgtags +++ b/.hgtags @@ -12,3 +12,5 @@ d03fcffb8834a9583a56813bb44b6abbd9f042cc Release-4.6.0 de73e687ddf6086ed52b6554676c1632865d07f2 Release-4.9.0 de73e687ddf6086ed52b6554676c1632865d07f2 Release-4.9.0 0000000000000000000000000000000000000000 Release-4.9.0 +0000000000000000000000000000000000000000 Release-4.9.0 +09f5a69cf19ebf7ddd9501e5258bee1e6a125391 Release-4.9.0