Refactor template aliases to strict aliases

This commit is contained in:
Stephan
2014-04-30 15:45:48 +02:00
parent 3134668cec
commit 0501b181ce
4 changed files with 22 additions and 8 deletions

View File

@@ -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]

View File

@@ -92,7 +92,7 @@ namespace Umbraco.Core.Strings
/// <summary>
/// Flag mask for role.
/// </summary>
RoleMask = UrlSegment | Alias | FileName | ConvertCase,
RoleMask = UrlSegment | Alias | UnderscoreAlias | FileName | ConvertCase,
/// <summary>
/// Url role.
@@ -112,6 +112,12 @@ namespace Umbraco.Core.Strings
/// <summary>
/// ConvertCase role.
/// </summary>
ConvertCase = 0x080000
ConvertCase = 0x080000,
/// <summary>
/// UnderscoreAlias role.
/// </summary>
/// <remarks>This is Alias + leading underscore.</remarks>
UnderscoreAlias = 0x100000
}
}

View File

@@ -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,

View File

@@ -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)",