From 0501b181ce4aa9d43a0b285842012ea9297bdf2d Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 30 Apr 2014 15:45:48 +0200 Subject: [PATCH] Refactor template aliases to strict aliases --- src/Umbraco.Core/Models/Template.cs | 5 +++-- src/Umbraco.Core/Strings/CleanStringType.cs | 10 ++++++++-- src/Umbraco.Core/Strings/DefaultShortStringHelper.cs | 6 ++++++ src/umbraco.cms/businesslogic/template/Template.cs | 9 +++++---- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Core/Models/Template.cs b/src/Umbraco.Core/Models/Template.cs index 2a2f59d132..25347fd861 100644 --- a/src/Umbraco.Core/Models/Template.cs +++ b/src/Umbraco.Core/Models/Template.cs @@ -5,6 +5,7 @@ using System.Runtime.Serialization; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Models.EntityBase; +using Umbraco.Core.Strings; namespace Umbraco.Core.Models { @@ -42,8 +43,8 @@ namespace Umbraco.Core.Models { base.Path = path; ParentId = -1; - _name = name.Replace("/", ".").Replace("\\", ""); - _alias = alias.ToSafeAlias(); + _name = name; //.Replace("/", ".").Replace("\\", ""); // why? that's just the name! + _alias = alias.ToCleanString(CleanStringType.UnderscoreAlias); } [DataMember] diff --git a/src/Umbraco.Core/Strings/CleanStringType.cs b/src/Umbraco.Core/Strings/CleanStringType.cs index ea9603ec6f..0e0a7c9908 100644 --- a/src/Umbraco.Core/Strings/CleanStringType.cs +++ b/src/Umbraco.Core/Strings/CleanStringType.cs @@ -92,7 +92,7 @@ namespace Umbraco.Core.Strings /// /// Flag mask for role. /// - RoleMask = UrlSegment | Alias | FileName | ConvertCase, + RoleMask = UrlSegment | Alias | UnderscoreAlias | FileName | ConvertCase, /// /// Url role. @@ -112,6 +112,12 @@ namespace Umbraco.Core.Strings /// /// ConvertCase role. /// - ConvertCase = 0x080000 + ConvertCase = 0x080000, + + /// + /// UnderscoreAlias role. + /// + /// This is Alias + leading underscore. + UnderscoreAlias = 0x100000 } } diff --git a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs index 508e356f71..879f4f0115 100644 --- a/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs +++ b/src/Umbraco.Core/Strings/DefaultShortStringHelper.cs @@ -193,6 +193,12 @@ namespace Umbraco.Core.Strings : (char.IsLetterOrDigit(c) || c == '_'), // letter, digit or underscore StringType = CleanStringType.Ascii | CleanStringType.UmbracoCase, BreakTermsOnUpper = false + }).WithConfig(CleanStringType.UnderscoreAlias, new Config + { + PreFilter = ApplyUrlReplaceCharacters, + IsTerm = (c, leading) => char.IsLetterOrDigit(c) || c == '_', // letter, digit or underscore + StringType = CleanStringType.Ascii | CleanStringType.UmbracoCase, + BreakTermsOnUpper = false }).WithConfig(CleanStringType.ConvertCase, new Config { PreFilter = null, diff --git a/src/umbraco.cms/businesslogic/template/Template.cs b/src/umbraco.cms/businesslogic/template/Template.cs index 38a05adbf2..08f6e5d5e3 100644 --- a/src/umbraco.cms/businesslogic/template/Template.cs +++ b/src/umbraco.cms/businesslogic/template/Template.cs @@ -6,6 +6,7 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.IO; using Umbraco.Core.Logging; +using Umbraco.Core.Strings; using umbraco.DataLayer; using System.Text.RegularExpressions; using System.IO; @@ -204,7 +205,7 @@ namespace umbraco.cms.businesslogic.template { FlushCache(); _oldAlias = _alias; - _alias = value; + _alias = value.ToCleanString(CleanStringType.UnderscoreAlias); SqlHelper.ExecuteNonQuery("Update cmsTemplate set alias = @alias where NodeId = " + this.Id, SqlHelper.CreateParameter("@alias", _alias)); _templateAliasesInitialized = false; @@ -402,13 +403,13 @@ namespace umbraco.cms.businesslogic.template var node = MakeNew(-1, ObjectType, u.Id, 1, name, Guid.NewGuid()); //ensure unique alias - name = helpers.Casing.SafeAlias(name); + name = name.ToCleanString(CleanStringType.UnderscoreAlias); if (GetByAlias(name) != null) name = EnsureUniqueAlias(name, 1); - name = name.Replace("/", ".").Replace("\\", ""); + //name = name.Replace("/", ".").Replace("\\", ""); //why? ToSafeAlias() already removes those chars if (name.Length > 100) - name = name.Substring(0, 95) + "..."; + name = name.Substring(0, 95); // + "..."; // no, these are invalid alias chars SqlHelper.ExecuteNonQuery("INSERT INTO cmsTemplate (NodeId, Alias, design, master) VALUES (@nodeId, @alias, @design, @master)",