From 32f86f750eec6014251773b9a87e3dedbcb79beb Mon Sep 17 00:00:00 2001 From: Dennis Ravn Pedersen Date: Thu, 23 May 2013 14:40:54 +0200 Subject: [PATCH 1/9] Query would reverse logic sorting of children. Would make move operations ignore sorting. Signed-off-by: Sebastiaan Janssen --- src/Umbraco.Core/Services/ContentService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 8eb3f54023..0f29765dc7 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -301,7 +301,7 @@ namespace Umbraco.Core.Services using (var repository = _repositoryFactory.CreateContentRepository(_uowProvider.GetUnitOfWork())) { var query = Query.Builder.Where(x => x.ParentId == id); - var contents = repository.GetByQuery(query); + var contents = repository.GetByQuery(query).OrderBy(x => x.SortOrder); return contents; } From 26e4091f28617a85018694a0f54f6b9f83fccf3e Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 19 Jun 2013 16:01:50 +0200 Subject: [PATCH 2/9] Due to previous fix we don't need to sort individually any more (see changeset 32f86f750eec6014251773b9a87e3dedbcb79beb) --- src/Umbraco.Core/Services/ContentService.cs | 2 +- .../umbraco.presentation/umbraco/dialogs/sort.aspx.cs | 2 +- src/umbraco.cms/businesslogic/web/Document.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 0f29765dc7..dcabb98d5a 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -1030,7 +1030,7 @@ namespace Umbraco.Core.Services } //Look for children and copy those as well - var children = GetChildren(content.Id).OrderBy(x => x.SortOrder); + var children = GetChildren(content.Id); foreach (var child in children) { Copy(child, copy.Id, relateToOriginal, userId); diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sort.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sort.aspx.cs index 077e9a1e20..9d387c4a86 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sort.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/sort.aspx.cs @@ -78,7 +78,7 @@ namespace umbraco.cms.presentation else { var children = contentService.GetChildren(parentId); - foreach (var child in children.OrderBy(x => x.SortOrder)) + foreach (var child in children) _nodes.Add(CreateNode(child.Id, child.SortOrder, child.Name, child.CreateDate, icon)); } } diff --git a/src/umbraco.cms/businesslogic/web/Document.cs b/src/umbraco.cms/businesslogic/web/Document.cs index 54160c5d5d..9ac1faad8b 100644 --- a/src/umbraco.cms/businesslogic/web/Document.cs +++ b/src/umbraco.cms/businesslogic/web/Document.cs @@ -391,7 +391,7 @@ namespace umbraco.cms.businesslogic.web [Obsolete("Obsolete, Use Umbraco.Core.Services.ContentService.GetChildren()", false)] public static Document[] GetChildrenForTree(int NodeId) { - var children = ApplicationContext.Current.Services.ContentService.GetChildren(NodeId).OrderBy(c => c.SortOrder); + var children = ApplicationContext.Current.Services.ContentService.GetChildren(NodeId); var list = children.Select(x => new Document(x)); return list.ToArray(); } From 530fcf0ea3aa5e61f1655df129cf91ec8c3fcc88 Mon Sep 17 00:00:00 2001 From: Edwin de Koning Date: Wed, 19 Jun 2013 16:04:56 +0200 Subject: [PATCH 3/9] Fixes U4-2261 --- src/umbraco.providers/UsersMembershipProvider.cs | 2 +- src/umbraco.providers/members/MembersMembershipProvider.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/umbraco.providers/UsersMembershipProvider.cs b/src/umbraco.providers/UsersMembershipProvider.cs index e0216d0ccb..196459e3a0 100644 --- a/src/umbraco.providers/UsersMembershipProvider.cs +++ b/src/umbraco.providers/UsersMembershipProvider.cs @@ -236,7 +236,7 @@ namespace umbraco.providers if (!User.validateCredentials(username, oldPassword)) return false; - ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, true); + ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, false); OnValidatingPassword(args); if (args.Cancel) diff --git a/src/umbraco.providers/members/MembersMembershipProvider.cs b/src/umbraco.providers/members/MembersMembershipProvider.cs index 5fc3f455f0..3b3c7d8034 100644 --- a/src/umbraco.providers/members/MembersMembershipProvider.cs +++ b/src/umbraco.providers/members/MembersMembershipProvider.cs @@ -296,7 +296,7 @@ namespace umbraco.providers.members Member m = Member.GetMemberFromLoginNameAndPassword(username, oldPassword); if (m == null) return false; - ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, true); + ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, false); OnValidatingPassword(args); if (args.Cancel) From f386c9d024cbffa919250375e2e01a042114dcf7 Mon Sep 17 00:00:00 2001 From: Morten Bock Date: Wed, 19 Jun 2013 16:18:15 +0200 Subject: [PATCH 4/9] U4-1226 Umbraco:image control --- src/Umbraco.Web/Media/ImageUrl.cs | 171 +++++++++-------- .../ImageUrlProviders/ImageUrlProvider.cs | 180 +++++++++--------- .../umbraco/templateControls/Image.cs | 51 ++--- 3 files changed, 210 insertions(+), 192 deletions(-) diff --git a/src/Umbraco.Web/Media/ImageUrl.cs b/src/Umbraco.Web/Media/ImageUrl.cs index 6fcbb4fda8..722a3e0ebd 100644 --- a/src/Umbraco.Web/Media/ImageUrl.cs +++ b/src/Umbraco.Web/Media/ImageUrl.cs @@ -1,84 +1,97 @@ -using System; -using System.Collections; -using System.Collections.Specialized; -using System.Globalization; -using System.Linq; -using System.Web; -using Umbraco.Core.Media; -using umbraco; +using System; +using System.Collections; +using System.Collections.Specialized; +using System.Globalization; +using System.Linq; +using System.Web; +using Umbraco.Core.Media; +using umbraco; + +namespace Umbraco.Web.Media +{ + public class ImageUrl + { + [Obsolete("Use TryGetImageUrl() instead")] + public static string GetImageUrl(string specifiedSrc, string field, string provider, string parameters, int? nodeId = null) + { + string url; + var found = TryGetImageUrl(specifiedSrc, field, provider, parameters, nodeId, out url); + + return found ? url : string.Empty; + } -namespace Umbraco.Web.Media -{ - public class ImageUrl - { - public static string GetImageUrl(string specifiedSrc, string field, string provider, string parameters, int? nodeId = null) + public static bool TryGetImageUrl(string specifiedSrc, string field, string provider, string parameters, int? nodeId, out string url) { - string url; - - var imageUrlProvider = GetProvider(provider); - - var parsedParameters = string.IsNullOrEmpty(parameters) ? new NameValueCollection() : HttpUtility.ParseQueryString(parameters); - - var queryValues = parsedParameters.Keys.Cast().ToDictionary(key => key, key => parsedParameters[key]); - - if (string.IsNullOrEmpty(field)) - { - url = imageUrlProvider.GetImageUrlFromFileName(specifiedSrc, queryValues); - } - else - { - var fieldValue = string.Empty; - if (nodeId.HasValue) + var imageUrlProvider = GetProvider(provider); + + var parsedParameters = string.IsNullOrEmpty(parameters) ? new NameValueCollection() : HttpUtility.ParseQueryString(parameters); + + var queryValues = parsedParameters.Keys.Cast().ToDictionary(key => key, key => parsedParameters[key]); + + if (string.IsNullOrEmpty(field)) + { + url = imageUrlProvider.GetImageUrlFromFileName(specifiedSrc, queryValues); + return true; + } + else + { + var fieldValue = string.Empty; + if (nodeId.HasValue) + { + var contentFromCache = GetContentFromCache(nodeId.GetValueOrDefault(), field); + if (contentFromCache != null) + { + fieldValue = contentFromCache.ToString(); + } + else + { + var itemPage = new page(content.Instance.XmlContent.GetElementById(nodeId.GetValueOrDefault().ToString(CultureInfo.InvariantCulture))); + var value = itemPage.Elements[field]; + fieldValue = value != null ? value.ToString() : string.Empty; + } + } + else + { + var context = HttpContext.Current; + if (context != null) + { + var elements = context.Items["pageElements"] as Hashtable; + if (elements != null) + { + var value = elements[field]; + fieldValue = value != null ? value.ToString() : string.Empty; + } + } + } + + if (!string.IsNullOrWhiteSpace(fieldValue)) { - var contentFromCache = GetContentFromCache(nodeId.GetValueOrDefault(), field); - if (contentFromCache != null) - { - fieldValue = contentFromCache.ToString(); - } - else - { - var itemPage = new page(content.Instance.XmlContent.GetElementById(nodeId.GetValueOrDefault().ToString(CultureInfo.InvariantCulture))); - var value = itemPage.Elements[field]; - fieldValue = value != null ? value.ToString() : string.Empty; - } + int mediaId; + url = int.TryParse(fieldValue, out mediaId) + ? imageUrlProvider.GetImageUrlFromMedia(mediaId, queryValues) + : imageUrlProvider.GetImageUrlFromFileName(fieldValue, queryValues); + return true; } - else - { - var context = HttpContext.Current; - if (context != null) - { - var elements = context.Items["pageElements"] as Hashtable; - if (elements != null) - { - var value = elements[field]; - fieldValue = value != null ? value.ToString() : string.Empty; - } - } - } - - int mediaId; - url = int.TryParse(fieldValue, out mediaId) - ? imageUrlProvider.GetImageUrlFromMedia(mediaId, queryValues) - : imageUrlProvider.GetImageUrlFromFileName(fieldValue, queryValues); - } - - return url; - } - - private static IImageUrlProvider GetProvider(string provider) - { - return ImageUrlProviderResolver.Current.GetProvider(provider); - } - - private static object GetContentFromCache(int nodeIdInt, string field) - { - var context = HttpContext.Current; - - if (context == null) - return string.Empty; - - var content = context.Cache[String.Format("contentItem{0}_{1}", nodeIdInt.ToString(CultureInfo.InvariantCulture), field)]; - return content; - } - } + } + + url = string.Empty; + return false; + } + + private static IImageUrlProvider GetProvider(string provider) + { + return ImageUrlProviderResolver.Current.GetProvider(provider); + } + + private static object GetContentFromCache(int nodeIdInt, string field) + { + var context = HttpContext.Current; + + if (context == null) + return string.Empty; + + var content = context.Cache[String.Format("contentItem{0}_{1}", nodeIdInt.ToString(CultureInfo.InvariantCulture), field)]; + return content; + } + } } \ No newline at end of file diff --git a/src/Umbraco.Web/Media/ImageUrlProviders/ImageUrlProvider.cs b/src/Umbraco.Web/Media/ImageUrlProviders/ImageUrlProvider.cs index 306b979e20..5e8d2a9262 100644 --- a/src/Umbraco.Web/Media/ImageUrlProviders/ImageUrlProvider.cs +++ b/src/Umbraco.Web/Media/ImageUrlProviders/ImageUrlProvider.cs @@ -1,91 +1,91 @@ -using System.Collections.Generic; -using System.Xml.XPath; -using Umbraco.Core.Media; -using umbraco; - -namespace Umbraco.Web.Media.ImageUrlProviders -{ - public class ImageUrlProvider : IImageUrlProvider - { - public const string DefaultName = "umbracoUpload"; - - public string Name - { - get { return DefaultName; } - } - - public string GetImageUrlFromMedia(int mediaId, IDictionary parameters) - { - var url = string.Empty; - - var nodeIterator = library.GetMedia(mediaId, false); - - if (nodeIterator.Current != null) - { - var filename = GetProperty(nodeIterator, "umbracoFile"); - var withThumb = AddThumbInfo(filename, parameters); - url = AddCropInfo(withThumb, parameters); - } - - return url; - } - - public string GetImageUrlFromFileName(string specifiedSrc, IDictionary parameters) - { - var withThumb = AddThumbInfo(specifiedSrc, parameters); - return AddCropInfo(withThumb, parameters); - } - - private static string AddThumbInfo(string filename, IDictionary parameters) - { - var thumb = string.Empty; - if (parameters.ContainsKey("thumb")) - thumb = parameters["thumb"]; - - if (!string.IsNullOrEmpty(thumb)) - { - var lastIndexOf = filename.LastIndexOf('.'); - var name = filename.Substring(0, lastIndexOf); - var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf); - return string.Format("{0}_thumb_{1}{2}", name, thumb, extension); - } - return filename; - } - - private static string AddCropInfo(string filename, IDictionary parameters) - { - var crop = string.Empty; - if (parameters.ContainsKey("crop")) - crop = parameters["crop"]; - - if (!string.IsNullOrEmpty(crop)) - { - var lastIndexOf = filename.LastIndexOf('.'); - var name = filename.Substring(0, lastIndexOf); - - //var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf); - //Built in cropper currently always uses jpg as an extension - - const string extension = ".jpg"; - return string.Format("{0}_{1}{2}", name, crop, extension); - } - - return filename; - } - - - private static string GetProperty(XPathNodeIterator nodeIterator, string fileProp) - { - var xpath = UmbracoSettings.UseLegacyXmlSchema - ? string.Format(".//data[@alias = '{0}']", fileProp) - : string.Format(".//{0}", fileProp); - - var file = string.Empty; - var selectSingleNode = nodeIterator.Current.SelectSingleNode(xpath); - if (selectSingleNode != null) - file = selectSingleNode.InnerXml; - - return file; - } - } +using System.Collections.Generic; +using System.Xml.XPath; +using Umbraco.Core.Media; +using umbraco; + +namespace Umbraco.Web.Media.ImageUrlProviders +{ + public class ImageUrlProvider : IImageUrlProvider + { + public const string DefaultName = "umbracoUpload"; + + public string Name + { + get { return DefaultName; } + } + + public string GetImageUrlFromMedia(int mediaId, IDictionary parameters) + { + var url = string.Empty; + + var nodeIterator = library.GetMedia(mediaId, false); + + if (nodeIterator.Current != null) + { + var filename = GetProperty(nodeIterator, "umbracoFile"); + var withThumb = AddThumbInfo(filename, parameters); + url = AddCropInfo(withThumb, parameters); + } + + return url; + } + + public string GetImageUrlFromFileName(string specifiedSrc, IDictionary parameters) + { + var withThumb = AddThumbInfo(specifiedSrc, parameters); + return AddCropInfo(withThumb, parameters); + } + + private static string AddThumbInfo(string filename, IDictionary parameters) + { + var thumb = string.Empty; + if (parameters.ContainsKey("thumb")) + thumb = parameters["thumb"]; + + if (!string.IsNullOrEmpty(thumb) && filename.Contains(".")) + { + var lastIndexOf = filename.LastIndexOf('.'); + var name = filename.Substring(0, lastIndexOf); + var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf); + return string.Format("{0}_thumb_{1}{2}", name, thumb, extension); + } + return filename; + } + + private static string AddCropInfo(string filename, IDictionary parameters) + { + var crop = string.Empty; + if (parameters.ContainsKey("crop")) + crop = parameters["crop"]; + + if (!string.IsNullOrEmpty(crop) && filename.Contains(".")) + { + var lastIndexOf = filename.LastIndexOf('.'); + var name = filename.Substring(0, lastIndexOf); + + //var extension = filename.Substring(lastIndexOf, filename.Length - lastIndexOf); + //Built in cropper currently always uses jpg as an extension + + const string extension = ".jpg"; + return string.Format("{0}_{1}{2}", name, crop, extension); + } + + return filename; + } + + + private static string GetProperty(XPathNodeIterator nodeIterator, string fileProp) + { + var xpath = UmbracoSettings.UseLegacyXmlSchema + ? string.Format(".//data[@alias = '{0}']", fileProp) + : string.Format(".//{0}", fileProp); + + var file = string.Empty; + var selectSingleNode = nodeIterator.Current.SelectSingleNode(xpath); + if (selectSingleNode != null) + file = selectSingleNode.InnerXml; + + return file; + } + } } \ No newline at end of file diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/Image.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/Image.cs index 4610ed03fb..c920d43c7a 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/Image.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/Image.cs @@ -1,25 +1,30 @@ -using System.Web.UI; -using System.Web.UI.HtmlControls; -using Umbraco.Core.Media; -using Umbraco.Web.Media; +using System.Web.UI; +using System.Web.UI.HtmlControls; +using Umbraco.Core.Media; +using Umbraco.Web.Media; + +namespace umbraco.presentation.templateControls +{ + public class Image : HtmlImage + { + public string NodeId { get; set; } + public string Field { get; set; } + public string Provider { get; set; } + public string Parameters { get; set; } + + protected override void Render(HtmlTextWriter writer) + { + int id; + bool hasid = int.TryParse(NodeId, out id); + int? nodeId = hasid ? id : (int?)null; -namespace umbraco.presentation.templateControls -{ - public class Image : HtmlImage - { - public string NodeId { get; set; } - public string Field { get; set; } - public string Provider { get; set; } - public string Parameters { get; set; } - - protected override void Render(HtmlTextWriter writer) - { - int id; - bool hasid = int.TryParse(NodeId, out id); - int? nodeId = hasid ? id : (int?) null; - - Src = ImageUrl.GetImageUrl(Src, Field, Provider, Parameters, nodeId); - base.Render(writer); - } - } + string url; + bool imageFound = ImageUrl.TryGetImageUrl(Src, Field, Provider, Parameters, nodeId, out url); + Src = url; + if (imageFound) + { + base.Render(writer); + } + } + } } \ No newline at end of file From cf5624f377bbdd69fa10ac5a1062f6ac1a452dc6 Mon Sep 17 00:00:00 2001 From: "Murray@tbpc10.terabyte.co.nz" Date: Thu, 6 Jun 2013 00:48:19 +1200 Subject: [PATCH 5/9] #U4-2326 Added Try Catch for PlatformNotSupportedException Signed-off-by: Sebastiaan Janssen --- src/Umbraco.Web/UmbracoModule.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web/UmbracoModule.cs b/src/Umbraco.Web/UmbracoModule.cs index da3ed2f1da..a8edfe16a3 100644 --- a/src/Umbraco.Web/UmbracoModule.cs +++ b/src/Umbraco.Web/UmbracoModule.cs @@ -431,9 +431,16 @@ namespace Umbraco.Web app.PreSendRequestHeaders += (sender, args) => { var httpContext = ((HttpApplication)sender).Context; - httpContext.Response.Headers.Remove("Server"); - //this doesn't normally work since IIS sets it but we'll keep it here anyways. - httpContext.Response.Headers.Remove("X-Powered-By"); + try + { + httpContext.Response.Headers.Remove("Server"); + //this doesn't normally work since IIS sets it but we'll keep it here anyways. + httpContext.Response.Headers.Remove("X-Powered-By"); + } + catch (PlatformNotSupportedException ex) + { + // can't remove headers this way on IIS6 or cassini. + } }; } From 302ebde4224dfbf8b33cbf5227e956328cf36909 Mon Sep 17 00:00:00 2001 From: Edwin de Koning Date: Wed, 19 Jun 2013 16:28:58 +0200 Subject: [PATCH 6/9] Translating the word "or" --- src/Umbraco.Web.UI/umbraco/create/content.ascx | 2 +- .../umbraco.presentation/umbraco/create/content.ascx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI/umbraco/create/content.ascx b/src/Umbraco.Web.UI/umbraco/create/content.ascx index da1a385f02..47ea26143d 100644 --- a/src/Umbraco.Web.UI/umbraco/create/content.ascx +++ b/src/Umbraco.Web.UI/umbraco/create/content.ascx @@ -18,7 +18,7 @@
- or + <%= umbraco.ui.Text("or") %> <%=umbraco.ui.Text("cancel")%>