using System;
using System.Collections.Generic;
using Umbraco.Core.Models;
using umbraco;
namespace Umbraco.Web.Routing
{
internal static class UrlProviderExtensions
{
///
/// Gets the URLs for the content item
///
///
///
///
///
/// Use this when displaying URLs, if there are errors genertaing the urls the urls themselves will
/// contain the errors.
///
public static IEnumerable GetContentUrls(this IContent content, UmbracoContext umbracoContext)
{
if (content == null) throw new ArgumentNullException("content");
if (umbracoContext == null) throw new ArgumentNullException("umbracoContext");
var urls = new List();
if (content.HasPublishedVersion() == false)
{
urls.Add(ui.Text("content", "itemNotPublished", umbracoContext.Security.CurrentUser));
return urls;
}
var urlProvider = umbracoContext.RoutingContext.UrlProvider;
var url = urlProvider.GetUrl(content.Id);
if (url == "#")
{
// document as a published version yet it's url is "#" => a parent must be
// unpublished, walk up the tree until we find it, and report.
var parent = content;
do
{
parent = parent.ParentId > 0 ? parent.Parent() : null;
}
while (parent != null && parent.Published);
if (parent == null) // oops - internal error
urls.Add(ui.Text("content", "parentNotPublishedAnomaly", umbracoContext.Security.CurrentUser));
else
urls.Add(ui.Text("content", "parentNotPublished", parent.Name, umbracoContext.Security.CurrentUser));
}
else
{
urls.Add(url);
urls.AddRange(urlProvider.GetOtherUrls(content.Id));
}
return urls;
}
}
}