using System.Collections.Generic; using System.Globalization; using System.Linq; using Umbraco.Core.Models; namespace Umbraco.Core.Strings { /// /// Provides extension methods to IContentBase to get url segments. /// internal static class ContentBaseExtensions { /// /// Gets the url segment providers. /// /// This is so that unit tests that do not initialize the resolver do not /// fail and fall back to defaults. When running the whole Umbraco, CoreBootManager /// does initialise the resolver. private static IEnumerable UrlSegmentProviders { get { return UrlSegmentProviderResolver.HasCurrent ? UrlSegmentProviderResolver.Current.Providers : new IUrlSegmentProvider[] { new DefaultUrlSegmentProvider() }; } } /// /// Gets the default url segment for a specified content. /// /// The content. /// The url segment. public static string GetUrlSegment(this IContentBase content) { var url = UrlSegmentProviders.Select(p => p.GetUrlSegment(content)).First(u => u != null); url = url ?? new DefaultUrlSegmentProvider().GetUrlSegment(content); // be safe return url; } /// /// Gets the url segment for a specified content and culture. /// /// The content. /// The culture. /// The url segment. public static string GetUrlSegment(this IContentBase content, CultureInfo culture) { var url = UrlSegmentProviders.Select(p => p.GetUrlSegment(content, culture)).First(u => u != null); url = url ?? new DefaultUrlSegmentProvider().GetUrlSegment(content, culture); // be safe return url; } } }