Fixed issue with double reversed url segments (#17477)

* Fixed issue with double reversed url segments

* Reverse urls in backoffice

* Remove last segment if rtl and hideTopLevel

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
This commit is contained in:
Bjarke Berg
2024-11-11 13:46:05 +01:00
committed by GitHub
parent e50c49c6f8
commit bcc71dec0e

View File

@@ -488,8 +488,9 @@ public class DocumentUrlService : IDocumentUrlService
} }
} }
if (_globalSettings.ForceCombineUrlPathLeftToRight var leftToRight = _globalSettings.ForceCombineUrlPathLeftToRight
|| CultureInfo.GetCultureInfo(cultureOrDefault).TextInfo.IsRightToLeft is false) || CultureInfo.GetCultureInfo(cultureOrDefault).TextInfo.IsRightToLeft is false;
if (leftToRight)
{ {
urlSegments.Reverse(); urlSegments.Reverse();
} }
@@ -501,7 +502,7 @@ public class DocumentUrlService : IDocumentUrlService
} }
var isRootFirstItem = GetTopMostRootKey(isDraft, cultureOrDefault) == ancestorsOrSelfKeysArray.Last(); var isRootFirstItem = GetTopMostRootKey(isDraft, cultureOrDefault) == ancestorsOrSelfKeysArray.Last();
return GetFullUrl(isRootFirstItem, urlSegments, null); return GetFullUrl(isRootFirstItem, urlSegments, null, leftToRight);
} }
public bool HasAny() public bool HasAny()
@@ -583,8 +584,16 @@ public class DocumentUrlService : IDocumentUrlService
} }
var isRootFirstItem = GetTopMostRootKey(false, culture) == ancestorsOrSelfKeysArray.Last(); var isRootFirstItem = GetTopMostRootKey(false, culture) == ancestorsOrSelfKeysArray.Last();
var leftToRight = _globalSettings.ForceCombineUrlPathLeftToRight
|| CultureInfo.GetCultureInfo(culture).TextInfo.IsRightToLeft is false;
if (leftToRight)
{
urlSegments.Reverse();
}
result.Add(new UrlInfo( result.Add(new UrlInfo(
text: GetFullUrl(isRootFirstItem, urlSegments, foundDomain), text: GetFullUrl(isRootFirstItem, urlSegments, foundDomain, leftToRight),
isUrl: hasUrlInCulture, isUrl: hasUrlInCulture,
culture: culture culture: culture
)); ));
@@ -594,17 +603,27 @@ public class DocumentUrlService : IDocumentUrlService
return result; return result;
} }
private string GetFullUrl(bool isRootFirstItem, List<string> reversedUrlSegments, Domain? foundDomain) private string GetFullUrl(bool isRootFirstItem, List<string> segments, Domain? foundDomain, bool leftToRight)
{ {
var urlSegments = new List<string>(reversedUrlSegments); var urlSegments = new List<string>(segments);
urlSegments.Reverse();
if (foundDomain is not null) if (foundDomain is not null)
{ {
return foundDomain.Name.EnsureEndsWith("/") + string.Join('/', urlSegments); return foundDomain.Name.EnsureEndsWith("/") + string.Join('/', urlSegments);
} }
return '/' + string.Join('/', urlSegments.Skip(_globalSettings.HideTopLevelNodeFromPath && isRootFirstItem ? 1 : 0)); var hideTopLevel = _globalSettings.HideTopLevelNodeFromPath && isRootFirstItem;
if (leftToRight)
{
return '/' + string.Join('/', urlSegments.Skip(hideTopLevel ? 1 : 0));
}
if (hideTopLevel)
{
urlSegments.RemoveAt(urlSegments.Count - 1);
}
return '/' + string.Join('/', urlSegments);
} }
public async Task CreateOrUpdateUrlSegmentsWithDescendantsAsync(Guid key) public async Task CreateOrUpdateUrlSegmentsWithDescendantsAsync(Guid key)