Untangled UrlProvider from UmbracoContext

This commit is contained in:
Bjarke Berg
2020-02-14 13:04:49 +01:00
parent dceb6c80f5
commit c6e1e7b3e5
97 changed files with 934 additions and 507 deletions
@@ -62,11 +62,6 @@ namespace Umbraco.Web
/// </summary>
bool IsFrontEndUmbracoRequest { get; }
/// <summary>
/// Gets the url provider.
/// </summary>
IPublishedUrlProvider UrlProvider { get; }
/// <summary>
/// Gets/sets the PublishedRequest object
/// </summary>
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Umbraco.Core;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Templates
{
@@ -13,10 +14,11 @@ namespace Umbraco.Web.Templates
this._getMediaUrl = getMediaUrl;
}
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
public HtmlImageSourceParser(IUmbracoContextAccessor umbracoContextAccessor)
private readonly IPublishedUrlProvider _publishedUrlProvider;
public HtmlImageSourceParser(IPublishedUrlProvider publishedUrlProvider)
{
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
private static readonly Regex ResolveImgPattern = new Regex(@"(<img[^>]*src="")([^""\?]*)((?:\?[^""]*)?""[^>]*data-udi="")([^""]*)(""[^>]*>)",
@@ -54,7 +56,7 @@ namespace Umbraco.Web.Templates
public string EnsureImageSources(string text)
{
if(_getMediaUrl == null)
_getMediaUrl = (guid) => _umbracoContextAccessor.UmbracoContext.UrlProvider.GetMediaUrl(guid);
_getMediaUrl = (guid) => _publishedUrlProvider.GetMediaUrl(guid);
return ResolveImgPattern.Replace(text, match =>
{
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Umbraco.Core;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Templates
{
@@ -15,10 +16,12 @@ namespace Umbraco.Web.Templates
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
public HtmlLocalLinkParser(IUmbracoContextAccessor umbracoContextAccessor)
public HtmlLocalLinkParser(IUmbracoContextAccessor umbracoContextAccessor, IPublishedUrlProvider publishedUrlProvider)
{
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
internal IEnumerable<Udi> FindUdisFromLocalLinks(string text)
@@ -61,7 +64,6 @@ namespace Umbraco.Web.Templates
if (_umbracoContextAccessor.UmbracoContext == null)
throw new InvalidOperationException("Could not parse internal links, there is no current UmbracoContext");
var urlProvider = _umbracoContextAccessor.UmbracoContext.UrlProvider;
foreach((int? intId, GuidUdi udi, string tagValue) in FindLocalLinkIds(text))
{
@@ -69,9 +71,9 @@ namespace Umbraco.Web.Templates
{
var newLink = "#";
if (udi.EntityType == Constants.UdiEntityType.Document)
newLink = urlProvider.GetUrl(udi.Guid);
newLink = _publishedUrlProvider.GetUrl(udi.Guid);
else if (udi.EntityType == Constants.UdiEntityType.Media)
newLink = urlProvider.GetMediaUrl(udi.Guid);
newLink = _publishedUrlProvider.GetMediaUrl(udi.Guid);
if (newLink == null)
newLink = "#";
@@ -80,7 +82,7 @@ namespace Umbraco.Web.Templates
}
else if (intId.HasValue)
{
var newLink = urlProvider.GetUrl(intId.Value);
var newLink = _publishedUrlProvider.GetUrl(intId.Value);
text = text.Replace(tagValue, "href=\"" + newLink);
}
}
@@ -6,6 +6,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.PublishedCache;
using Umbraco.Web.Routing;
namespace Umbraco.Web.PropertyEditors
{
@@ -23,18 +24,20 @@ namespace Umbraco.Web.PropertyEditors
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IIOHelper _ioHelper;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
public MultiUrlPickerPropertyEditor(ILogger logger, Lazy<IEntityService> entityService, IPublishedSnapshotAccessor publishedSnapshotAccessor, IDataTypeService dataTypeService, ILocalizationService localizationService, ILocalizedTextService localizedTextService, IIOHelper ioHelper, IShortStringHelper shortStringHelper, IUmbracoContextAccessor umbracoContextAccessor)
public MultiUrlPickerPropertyEditor(ILogger logger, Lazy<IEntityService> entityService, IPublishedSnapshotAccessor publishedSnapshotAccessor, IDataTypeService dataTypeService, ILocalizationService localizationService, ILocalizedTextService localizedTextService, IIOHelper ioHelper, IShortStringHelper shortStringHelper, IUmbracoContextAccessor umbracoContextAccessor, IPublishedUrlProvider publishedUrlProvider)
: base(logger, dataTypeService, localizationService, localizedTextService, shortStringHelper, EditorType.PropertyValue)
{
_entityService = entityService ?? throw new ArgumentNullException(nameof(entityService));
_publishedSnapshotAccessor = publishedSnapshotAccessor ?? throw new ArgumentNullException(nameof(publishedSnapshotAccessor));
_ioHelper = ioHelper;
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
protected override IConfigurationEditor CreateConfigurationEditor() => new MultiUrlPickerConfigurationEditor(_ioHelper);
protected override IDataValueEditor CreateValueEditor() => new MultiUrlPickerValueEditor(_entityService.Value, _publishedSnapshotAccessor, Logger, DataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper, Attribute, _umbracoContextAccessor);
protected override IDataValueEditor CreateValueEditor() => new MultiUrlPickerValueEditor(_entityService.Value, _publishedSnapshotAccessor, Logger, DataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper, Attribute, _umbracoContextAccessor, _publishedUrlProvider);
}
}
@@ -14,6 +14,8 @@ using Umbraco.Core.Strings;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.PublishedCache;
using Umbraco.Core;
using Umbraco.Web.Routing;
namespace Umbraco.Web.PropertyEditors
{
public class MultiUrlPickerValueEditor : DataValueEditor, IDataValueReference
@@ -21,15 +23,17 @@ namespace Umbraco.Web.PropertyEditors
private readonly IEntityService _entityService;
private readonly ILogger _logger;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
public MultiUrlPickerValueEditor(IEntityService entityService, IPublishedSnapshotAccessor publishedSnapshotAccessor, ILogger logger, IDataTypeService dataTypeService, ILocalizationService localizationService, ILocalizedTextService localizedTextService, IShortStringHelper shortStringHelper, DataEditorAttribute attribute, IUmbracoContextAccessor umbracoContextAccessor)
public MultiUrlPickerValueEditor(IEntityService entityService, IPublishedSnapshotAccessor publishedSnapshotAccessor, ILogger logger, IDataTypeService dataTypeService, ILocalizationService localizationService, ILocalizedTextService localizedTextService, IShortStringHelper shortStringHelper, DataEditorAttribute attribute, IUmbracoContextAccessor umbracoContextAccessor, IPublishedUrlProvider publishedUrlProvider)
: base(dataTypeService, localizationService, localizedTextService, shortStringHelper, attribute)
{
_entityService = entityService ?? throw new ArgumentNullException(nameof(entityService));
_publishedSnapshotAccessor = publishedSnapshotAccessor ?? throw new ArgumentNullException(nameof(publishedSnapshotAccessor));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_umbracoContextAccessor = umbracoContextAccessor ?? throw new ArgumentNullException(nameof(umbracoContextAccessor));
_publishedUrlProvider = publishedUrlProvider;
}
public override object ToEditor(IProperty property, string culture = null, string segment = null)
@@ -85,7 +89,7 @@ namespace Umbraco.Web.PropertyEditors
icon = documentEntity.ContentTypeIcon;
published = culture == null ? documentEntity.Published : documentEntity.PublishedCultures.Contains(culture);
udi = new GuidUdi(Constants.UdiEntityType.Document, documentEntity.Key);
url = _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(entity.Key)?.Url(_umbracoContextAccessor.UmbracoContext.UrlProvider) ?? "#";
url = _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(entity.Key)?.Url(_publishedUrlProvider) ?? "#";
trashed = documentEntity.Trashed;
}
else if(entity is IContentEntitySlim contentEntity)
@@ -93,7 +97,7 @@ namespace Umbraco.Web.PropertyEditors
icon = contentEntity.ContentTypeIcon;
published = !contentEntity.Trashed;
udi = new GuidUdi(Constants.UdiEntityType.Media, contentEntity.Key);
url = _publishedSnapshotAccessor.PublishedSnapshot.Media.GetById(entity.Key)?.Url(_umbracoContextAccessor.UmbracoContext.UrlProvider) ?? "#";
url = _publishedSnapshotAccessor.PublishedSnapshot.Media.GetById(entity.Key)?.Url(_publishedUrlProvider) ?? "#";
trashed = contentEntity.Trashed;
}
else
@@ -8,6 +8,7 @@ using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Serialization;
using Umbraco.Web.Models;
using Umbraco.Web.PublishedCache;
using Umbraco.Web.Routing;
namespace Umbraco.Web.PropertyEditors.ValueConverters
{
@@ -17,13 +18,15 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
private readonly IProfilingLogger _proflog;
private readonly IJsonSerializer _jsonSerializer;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
public MultiUrlPickerValueConverter(IPublishedSnapshotAccessor publishedSnapshotAccessor, IProfilingLogger proflog, IJsonSerializer jsonSerializer, IUmbracoContextAccessor umbracoContextAccessor)
public MultiUrlPickerValueConverter(IPublishedSnapshotAccessor publishedSnapshotAccessor, IProfilingLogger proflog, IJsonSerializer jsonSerializer, IUmbracoContextAccessor umbracoContextAccessor, IPublishedUrlProvider publishedUrlProvider)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor ?? throw new ArgumentNullException(nameof(publishedSnapshotAccessor));
_proflog = proflog ?? throw new ArgumentNullException(nameof(proflog));
_jsonSerializer = jsonSerializer;
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
public override bool IsConverter(IPublishedPropertyType propertyType) => Constants.PropertyEditors.Aliases.MultiUrlPicker.Equals(propertyType.EditorAlias);
@@ -72,7 +75,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
{
continue;
}
url = content.Url(_umbracoContextAccessor.UmbracoContext.UrlProvider);
url = content.Url(_publishedUrlProvider);
}
links.Add(
@@ -161,13 +161,11 @@ namespace Umbraco.Tests.Cache
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
TestObjects.GetGlobalSettings(),
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
IOHelper,
httpContextAccessor);
httpContextAccessor,
PublishedUrlProvider);
// just assert it does not throw
var refreshers = new DistributedCacheBinder(null, umbracoContextFactory, null);
@@ -80,12 +80,10 @@ namespace Umbraco.Tests.Cache.PublishedCache
httpContextAccessor,
publishedSnapshotService.Object,
new WebSecurity(httpContextAccessor, Mock.Of<IUserService>(), globalSettings, IOHelper),
umbracoSettings,
Enumerable.Empty<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
globalSettings,
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
_cache = _umbracoContext.Content;
}
@@ -74,12 +74,10 @@ namespace Umbraco.Tests.PublishedContent
httpContextAccessor,
publishedSnapshotService.Object,
new WebSecurity(httpContextAccessor, Current.Services.UserService, globalSettings, IOHelper),
TestObjects.GetUmbracoSettings(),
Enumerable.Empty<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
globalSettings,
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
return umbracoContext;
}
@@ -15,6 +15,7 @@ using Umbraco.Core.Strings;
using Umbraco.Web;
using Umbraco.Web.Templates;
using Umbraco.Web.Models;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.PublishedContent
{
@@ -43,11 +44,12 @@ namespace Umbraco.Tests.PublishedContent
var converters = Factory.GetInstance<PropertyValueConverterCollection>();
var umbracoContextAccessor = Mock.Of<IUmbracoContextAccessor>();
var publishedUrlProvider = Mock.Of<IPublishedUrlProvider>();
var logger = Mock.Of<ILogger>();
var imageSourceParser = new HtmlImageSourceParser(umbracoContextAccessor);
var imageSourceParser = new HtmlImageSourceParser(publishedUrlProvider);
var pastedImages = new RichTextEditorPastedImages(umbracoContextAccessor, logger, IOHelper, Mock.Of<IMediaService>(), Mock.Of<IContentTypeBaseServiceProvider>(), Mock.Of<IMediaFileSystem>(), ShortStringHelper);
var localLinkParser = new HtmlLocalLinkParser(umbracoContextAccessor);
var localLinkParser = new HtmlLocalLinkParser(umbracoContextAccessor, publishedUrlProvider);
var dataTypeService = new TestObjects.TestDataTypeService(
new DataType(new RichTextPropertyEditor(
Mock.Of<ILogger>(),
@@ -23,6 +23,7 @@ using Umbraco.Web.Models.PublishedContent;
using Umbraco.Web.PropertyEditors;
using Umbraco.Web.Templates;
using Umbraco.Web.Models;
using Umbraco.Web.Routing;
using Current = Umbraco.Web.Composing.Current;
namespace Umbraco.Tests.PublishedContent
@@ -49,9 +50,10 @@ namespace Umbraco.Tests.PublishedContent
var mediaFileService = Mock.Of<IMediaFileSystem>();
var contentTypeBaseServiceProvider = Mock.Of<IContentTypeBaseServiceProvider>();
var umbracoContextAccessor = Mock.Of<IUmbracoContextAccessor>();
var imageSourceParser = new HtmlImageSourceParser(umbracoContextAccessor);
var publishedUrlProvider = Mock.Of<IPublishedUrlProvider>();
var imageSourceParser = new HtmlImageSourceParser(publishedUrlProvider);
var pastedImages = new RichTextEditorPastedImages(umbracoContextAccessor, logger, IOHelper, mediaService, contentTypeBaseServiceProvider, mediaFileService, ShortStringHelper);
var linkParser = new HtmlLocalLinkParser(umbracoContextAccessor);
var linkParser = new HtmlLocalLinkParser(umbracoContextAccessor, publishedUrlProvider);
var localizationService = Mock.Of<ILocalizationService>();
var dataTypeService = new TestObjects.TestDataTypeService(
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Moq;
@@ -6,8 +7,12 @@ using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Web.Composing;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Services;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Routing
@@ -54,7 +59,8 @@ namespace Umbraco.Tests.Routing
umbContext,
GetLangService("en-US", "fr-FR"), GetTextService(), ServiceContext.ContentService,
VariationContextAccessor,
Logger).ToList();
Logger,
PublishedUrlProvider).ToList();
Assert.AreEqual(1, urls.Count);
Assert.AreEqual("content/itemNotPublished", urls[0].Text);
@@ -72,14 +78,25 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbContext = GetUmbracoContext("http://localhost:8000",
urlProviders: new []{ new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper()) });
var umbContext = GetUmbracoContext("http://localhost:8000");
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => umbracoContextAccessor),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new []{urlProvider}),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IVariationContextAccessor>()
);
var publishedRouter = CreatePublishedRouter(Factory,
contentFinders:new ContentFinderCollection(new[]{new ContentFinderByUrl(Logger) }));
var urls = content.GetContentUrls(publishedRouter,
umbContext,
GetLangService("en-US", "fr-FR"), GetTextService(), ServiceContext.ContentService,
VariationContextAccessor, Logger).ToList();
VariationContextAccessor,
Logger,
publishedUrlProvider).ToList();
Assert.AreEqual(1, urls.Count);
Assert.AreEqual("/home/", urls[0].Text);
@@ -104,14 +121,26 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbContext = GetUmbracoContext("http://localhost:8000",
urlProviders: new[] { new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper()) });
var umbContext = GetUmbracoContext("http://localhost:8000");
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => umbracoContextAccessor),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new []{urlProvider}),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IVariationContextAccessor>()
);
var publishedRouter = CreatePublishedRouter(Factory,
contentFinders: new ContentFinderCollection(new[] { new ContentFinderByUrl(Logger) }));
var urls = child.GetContentUrls(publishedRouter,
umbContext,
GetLangService("en-US", "fr-FR"), GetTextService(), ServiceContext.ContentService,
VariationContextAccessor, Logger).ToList();
VariationContextAccessor,
Logger,
publishedUrlProvider).ToList();
Assert.AreEqual(1, urls.Count);
Assert.AreEqual("/home/sub1/", urls[0].Text);
@@ -15,6 +15,8 @@ using Umbraco.Core.Services;
using Umbraco.Tests.PublishedContent;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.PropertyEditors;
using Umbraco.Web.Routing;
@@ -41,7 +43,7 @@ namespace Umbraco.Tests.Routing
new FileUploadPropertyEditor(logger, mediaFileSystemMock, contentSection, dataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper, umbracoSettingsSection),
new ImageCropperPropertyEditor(logger, mediaFileSystemMock, contentSection, dataTypeService, LocalizationService, IOHelper, ShortStringHelper, LocalizedTextService, umbracoSettingsSection),
}));
_mediaUrlProvider = new DefaultMediaUrlProvider(propertyEditors);
_mediaUrlProvider = new DefaultMediaUrlProvider(new Lazy<PropertyEditorCollection>(() => propertyEditors));
}
public override void TearDown()
@@ -56,10 +58,10 @@ namespace Umbraco.Tests.Routing
{
const string expected = "/media/rfeiw584/test.jpg";
var umbracoContext = GetUmbracoContext("/", mediaUrlProviders: new[] { _mediaUrlProvider });
var umbracoContext = GetUmbracoContext("/");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.UploadField, expected, null);
var resolvedUrl = umbracoContext.UrlProvider.GetMediaUrl(publishedContent, UrlMode.Auto);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Auto);
Assert.AreEqual(expected, resolvedUrl);
}
@@ -75,10 +77,10 @@ namespace Umbraco.Tests.Routing
Src = expected
});
var umbracoContext = GetUmbracoContext("/", mediaUrlProviders: new[] { _mediaUrlProvider });
var umbracoContext = GetUmbracoContext("/");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.ImageCropper, imageCropperValue, configuration);
var resolvedUrl = umbracoContext.UrlProvider.GetMediaUrl(publishedContent, UrlMode.Auto);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Auto);
Assert.AreEqual(expected, resolvedUrl);
}
@@ -89,10 +91,10 @@ namespace Umbraco.Tests.Routing
const string mediaUrl = "/media/rfeiw584/test.jpg";
var expected = $"http://localhost{mediaUrl}";
var umbracoContext = GetUmbracoContext("http://localhost", mediaUrlProviders: new[] { _mediaUrlProvider });
var umbracoContext = GetUmbracoContext("http://localhost");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.UploadField, mediaUrl, null);
var resolvedUrl = umbracoContext.UrlProvider.GetMediaUrl(publishedContent, UrlMode.Absolute);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Absolute);
Assert.AreEqual(expected, resolvedUrl);
}
@@ -102,10 +104,10 @@ namespace Umbraco.Tests.Routing
{
const string expected = "http://localhost/media/rfeiw584/test.jpg";
var umbracoContext = GetUmbracoContext("http://localhost", mediaUrlProviders: new[] { _mediaUrlProvider });
var umbracoContext = GetUmbracoContext("http://localhost");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.UploadField, expected, null);
var resolvedUrl = umbracoContext.UrlProvider.GetMediaUrl(publishedContent, UrlMode.Relative);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Relative);
Assert.AreEqual(expected, resolvedUrl);
}
@@ -113,10 +115,10 @@ namespace Umbraco.Tests.Routing
[Test]
public void Get_Media_Url_Returns_Empty_String_When_PropertyType_Is_Not_Supported()
{
var umbracoContext = GetUmbracoContext("/", mediaUrlProviders: new[] { _mediaUrlProvider });
var umbracoContext = GetUmbracoContext("/");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.Boolean, "0", null);
var resolvedUrl = umbracoContext.UrlProvider.GetMediaUrl(publishedContent, UrlMode.Absolute, propertyAlias: "test");
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Absolute, propertyAlias: "test");
Assert.AreEqual(string.Empty, resolvedUrl);
}
@@ -124,7 +126,7 @@ namespace Umbraco.Tests.Routing
[Test]
public void Get_Media_Url_Can_Resolve_Variant_Property_Url()
{
var umbracoContext = GetUmbracoContext("http://localhost", mediaUrlProviders: new[] { _mediaUrlProvider });
var umbracoContext = GetUmbracoContext("http://localhost");
var umbracoFilePropertyType = CreatePropertyType(Constants.PropertyEditors.Aliases.UploadField, null, ContentVariation.Culture);
@@ -143,10 +145,21 @@ namespace Umbraco.Tests.Routing
var contentType = new PublishedContentType(666, "alias", PublishedItemType.Content, Enumerable.Empty<string>(), new [] { umbracoFilePropertyType }, ContentVariation.Culture);
var publishedContent = new SolidPublishedContent(contentType) {Properties = new[] {property}};
var resolvedUrl = umbracoContext.UrlProvider.GetMediaUrl(publishedContent, UrlMode.Auto, "da");
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Auto, "da");
Assert.AreEqual(daMediaUrl, resolvedUrl);
}
private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext)
{
return new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => new TestUmbracoContextAccessor(umbracoContext)),
TestHelper.WebRoutingSection,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(new []{_mediaUrlProvider}),
Mock.Of<IVariationContextAccessor>()
);
}
private static IPublishedContent CreatePublishedContent(string propertyEditorAlias, string propertyValue, object dataTypeConfiguration)
{
var umbracoFilePropertyType = CreatePropertyType(propertyEditorAlias, dataTypeConfiguration, ContentVariation.Nothing);
+71 -45
View File
@@ -13,6 +13,8 @@ using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.PublishedContent;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.PublishedCache;
using Umbraco.Web.Routing;
@@ -22,6 +24,8 @@ namespace Umbraco.Tests.Routing
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)]
public class UrlProviderTests : BaseWebTest
{
private IUmbracoContextAccessor UmbracoContextAccessor { get; } = new TestUmbracoContextAccessor();
protected override void Compose()
{
base.Compose();
@@ -46,11 +50,13 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbracoContext = GetUmbracoContext("/test", 1111, urlProviders: new[]
{
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings: globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
var requestHandlerMock = Mock.Get(umbracoSettings.RequestHandler);
requestHandlerMock.Setup(x => x.AddTrailingSlash).Returns(false);// (cached routes have none)
@@ -67,14 +73,14 @@ namespace Umbraco.Tests.Routing
foreach (var sample in samples)
{
var result = umbracoContext.UrlProvider.GetUrl(sample.Key);
var result = publishedUrlProvider.GetUrl(sample.Key);
Assert.AreEqual(sample.Value, result);
}
var randomSample = new KeyValuePair<int, string>(1177, "/home/sub1/custom-sub-1");
for (int i = 0; i < 5; i++)
{
var result = umbracoContext.UrlProvider.GetUrl(randomSample.Key);
var result = publishedUrlProvider.GetUrl(randomSample.Key);
Assert.AreEqual(randomSample.Value, result);
}
@@ -93,6 +99,17 @@ namespace Umbraco.Tests.Routing
Assert.AreEqual(0, cachedIds.Count);
}
private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider)
{
return new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => new TestUmbracoContextAccessor(umbracoContext)),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new []{urlProvider}),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IVariationContextAccessor>()
);
}
// test hideTopLevelNodeFromPath false
[TestCase(1046, "/home/")]
[TestCase(1173, "/home/sub1/")]
@@ -109,13 +126,14 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbracoContext = GetUmbracoContext("/test", 1111, urlProviders: new[]
{
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings: globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
var result = umbracoContext.UrlProvider.GetUrl(nodeId);
var result = publishedUrlProvider.GetUrl(nodeId);
Assert.AreEqual(niceUrlMatch, result);
}
@@ -137,13 +155,14 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbracoContext = GetUmbracoContext("/test", 1111, urlProviders: new[]
{
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings: globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
var result = umbracoContext.UrlProvider.GetUrl(nodeId);
var result = publishedUrlProvider.GetUrl(nodeId);
Assert.AreEqual(niceUrlMatch, result);
}
@@ -177,15 +196,17 @@ namespace Umbraco.Tests.Routing
snapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny<string>()))
.Returns(snapshot);
var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: umbracoSettings,
urlProviders: new[] {
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
},
var umbracoContext = GetUmbracoContext(currentUri,
globalSettings: globalSettings.Object,
snapshotService: snapshotService.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
//even though we are asking for a specific culture URL, there are no domains assigned so all that can be returned is a normal relative url.
var url = umbracoContext.UrlProvider.GetUrl(1234, culture: "fr-FR");
var url = publishedUrlProvider.GetUrl(1234, culture: "fr-FR");
Assert.AreEqual("/home/test-fr/", url);
}
@@ -231,15 +252,17 @@ namespace Umbraco.Tests.Routing
snapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny<string>()))
.Returns(snapshot);
var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: umbracoSettings,
urlProviders: new[] {
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
},
var umbracoContext = GetUmbracoContext(currentUri,
globalSettings: globalSettings.Object,
snapshotService: snapshotService.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
var url = umbracoContext.UrlProvider.GetUrl(1234, culture: "fr-FR");
var url = publishedUrlProvider.GetUrl(1234, culture: "fr-FR");
Assert.AreEqual("/home/test-fr/", url);
}
@@ -285,15 +308,16 @@ namespace Umbraco.Tests.Routing
snapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny<string>()))
.Returns(snapshot);
var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: umbracoSettings,
urlProviders: new[] {
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
},
var umbracoContext = GetUmbracoContext(currentUri,
globalSettings: globalSettings.Object,
snapshotService: snapshotService.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var url = umbracoContext.UrlProvider.GetUrl(1234, culture: "fr-FR");
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
var url = publishedUrlProvider.GetUrl(1234, culture: "fr-FR");
//the current uri is not the culture specific domain we want, so the result is an absolute path to the culture specific domain
Assert.AreEqual("http://example.fr/home/test-fr/", url);
@@ -307,15 +331,17 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, umbracoSettings: umbracoSettings, urlProviders: new[]
{
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings: globalSettings.Object);
Assert.AreEqual("/home/sub1/custom-sub-1/", umbracoContext.UrlProvider.GetUrl(1177));
var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, globalSettings: globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
umbracoContext.UrlProvider.Mode = UrlMode.Absolute;
Assert.AreEqual("http://example.com/home/sub1/custom-sub-1/", umbracoContext.UrlProvider.GetUrl(1177));
Assert.AreEqual("/home/sub1/custom-sub-1/", publishedUrlProvider.GetUrl(1177));
publishedUrlProvider.Mode = UrlMode.Absolute;
Assert.AreEqual("http://example.com/home/sub1/custom-sub-1/", publishedUrlProvider.GetUrl(1177));
}
[Test]
@@ -326,18 +352,18 @@ namespace Umbraco.Tests.Routing
var umbracoSettings = Current.Configs.Settings();
var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, urlProviders: new[]
{
new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings: globalSettings.Object);
var urlProvider = new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), UmbracoContextAccessor);
var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, globalSettings: globalSettings.Object);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
//mock the Umbraco settings that we need
Assert.AreEqual("#", umbracoContext.UrlProvider.GetUrl(999999));
Assert.AreEqual("#", publishedUrlProvider.GetUrl(999999));
umbracoContext.UrlProvider.Mode = UrlMode.Absolute;
publishedUrlProvider.Mode = UrlMode.Absolute;
Assert.AreEqual("#", umbracoContext.UrlProvider.GetUrl(999999));
Assert.AreEqual("#", publishedUrlProvider.GetUrl(999999));
}
}
}
@@ -4,13 +4,14 @@ using System.Linq;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Services;
using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Routing
@@ -18,6 +19,7 @@ namespace Umbraco.Tests.Routing
[TestFixture]
public class UrlsProviderWithDomainsTests : UrlRoutingTestBase
{
private IUmbracoContextAccessor UmbracoContextAccessor { get; } = new TestUmbracoContextAccessor();
protected override void Compose()
{
base.Compose();
@@ -181,16 +183,17 @@ namespace Umbraco.Tests.Routing
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains1();
var currentUri = new Uri(currentUrl);
var mode = absolute ? UrlMode.Absolute : UrlMode.Auto;
var result = umbracoContext.UrlProvider.GetUrl(nodeId, mode, current: currentUri);
var result = publishedUrlProvider.GetUrl(nodeId, mode, current: currentUri);
Assert.AreEqual(expected, result);
}
@@ -210,20 +213,21 @@ namespace Umbraco.Tests.Routing
public void Get_Url_SimpleWithSchemeAndPath(int nodeId, string currentUrl, bool absolute, string expected)
{
var settings = SettingsForTests.GenerateMockUmbracoSettings();
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains2();
var currentUri = new Uri(currentUrl);
var mode = absolute ? UrlMode.Absolute : UrlMode.Auto;
var result = umbracoContext.UrlProvider.GetUrl(nodeId, mode, current : currentUri);
var result = publishedUrlProvider.GetUrl(nodeId, mode, current : currentUri);
Assert.AreEqual(expected, result);
}
@@ -239,16 +243,17 @@ namespace Umbraco.Tests.Routing
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains3();
var currentUri = new Uri(currentUrl);
var mode = absolute ? UrlMode.Absolute : UrlMode.Auto;
var result = umbracoContext.UrlProvider.GetUrl(nodeId, mode, current : currentUri);
var result = publishedUrlProvider.GetUrl(nodeId, mode, current : currentUri);
Assert.AreEqual(expected, result);
}
@@ -266,20 +271,21 @@ namespace Umbraco.Tests.Routing
public void Get_Url_NestedDomains(int nodeId, string currentUrl, bool absolute, string expected)
{
var settings = SettingsForTests.GenerateMockUmbracoSettings();
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains4();
var currentUri = new Uri(currentUrl);
var mode = absolute ? UrlMode.Absolute : UrlMode.Auto;
var result = umbracoContext.UrlProvider.GetUrl(nodeId, mode, current : currentUri);
var result = publishedUrlProvider.GetUrl(nodeId, mode, current : currentUri);
Assert.AreEqual(expected, result);
}
@@ -287,29 +293,30 @@ namespace Umbraco.Tests.Routing
public void Get_Url_DomainsAndCache()
{
var settings = SettingsForTests.GenerateMockUmbracoSettings();
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains4();
string ignore;
ignore = umbracoContext.UrlProvider.GetUrl(1001, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(10011, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(100111, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(10012, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(100121, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(10013, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(1002, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = umbracoContext.UrlProvider.GetUrl(1001, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = umbracoContext.UrlProvider.GetUrl(10011, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = umbracoContext.UrlProvider.GetUrl(100111, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = umbracoContext.UrlProvider.GetUrl(1002, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = publishedUrlProvider.GetUrl(1001, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(10011, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(100111, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(10012, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(100121, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(10013, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(1002, UrlMode.Auto, current: new Uri("http://domain1.com"));
ignore = publishedUrlProvider.GetUrl(1001, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = publishedUrlProvider.GetUrl(10011, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = publishedUrlProvider.GetUrl(100111, UrlMode.Auto, current: new Uri("http://domain2.com"));
ignore = publishedUrlProvider.GetUrl(1002, UrlMode.Auto, current: new Uri("http://domain2.com"));
var cache = umbracoContext.Content as PublishedContentCache;
if (cache == null) throw new Exception("Unsupported IPublishedContentCache, only the Xml one is supported.");
@@ -328,15 +335,15 @@ namespace Umbraco.Tests.Routing
CheckRoute(cachedRoutes, cachedIds, 1002, "/1002");
// use the cache
Assert.AreEqual("/", umbracoContext.UrlProvider.GetUrl(1001, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/en/", umbracoContext.UrlProvider.GetUrl(10011, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/en/1001-1-1/", umbracoContext.UrlProvider.GetUrl(100111, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/fr/", umbracoContext.UrlProvider.GetUrl(10012, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/fr/1001-2-1/", umbracoContext.UrlProvider.GetUrl(100121, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/1001-3/", umbracoContext.UrlProvider.GetUrl(10013, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/1002/", umbracoContext.UrlProvider.GetUrl(1002, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/", publishedUrlProvider.GetUrl(1001, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/en/", publishedUrlProvider.GetUrl(10011, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/en/1001-1-1/", publishedUrlProvider.GetUrl(100111, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/fr/", publishedUrlProvider.GetUrl(10012, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/fr/1001-2-1/", publishedUrlProvider.GetUrl(100121, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/1001-3/", publishedUrlProvider.GetUrl(10013, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("/1002/", publishedUrlProvider.GetUrl(1002, UrlMode.Auto, current: new Uri("http://domain1.com")));
Assert.AreEqual("http://domain1.com/fr/1001-2-1/", umbracoContext.UrlProvider.GetUrl(100121, UrlMode.Auto, current: new Uri("http://domain2.com")));
Assert.AreEqual("http://domain1.com/fr/1001-2-1/", publishedUrlProvider.GetUrl(100121, UrlMode.Auto, current: new Uri("http://domain2.com")));
}
private static void CheckRoute(IDictionary<int, string> routes, IDictionary<string, int> ids, int id, string route)
@@ -350,24 +357,25 @@ namespace Umbraco.Tests.Routing
public void Get_Url_Relative_Or_Absolute()
{
var settings = SettingsForTests.GenerateMockUmbracoSettings();
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("http://domain1.com/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("http://domain1.com/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains4();
Assert.AreEqual("/en/1001-1-1/", umbracoContext.UrlProvider.GetUrl(100111));
Assert.AreEqual("http://domain3.com/en/1003-1-1/", umbracoContext.UrlProvider.GetUrl(100311));
Assert.AreEqual("/en/1001-1-1/", publishedUrlProvider.GetUrl(100111));
Assert.AreEqual("http://domain3.com/en/1003-1-1/", publishedUrlProvider.GetUrl(100311));
umbracoContext.UrlProvider.Mode = UrlMode.Absolute;
publishedUrlProvider.Mode = UrlMode.Absolute;
Assert.AreEqual("http://domain1.com/en/1001-1-1/", umbracoContext.UrlProvider.GetUrl(100111));
Assert.AreEqual("http://domain3.com/en/1003-1-1/", umbracoContext.UrlProvider.GetUrl(100311));
Assert.AreEqual("http://domain1.com/en/1001-1-1/", publishedUrlProvider.GetUrl(100111));
Assert.AreEqual("http://domain3.com/en/1003-1-1/", publishedUrlProvider.GetUrl(100311));
}
[Test]
@@ -378,17 +386,18 @@ namespace Umbraco.Tests.Routing
var globalSettings = Mock.Get(Factory.GetInstance<IGlobalSettings>()); //this will modify the IGlobalSettings instance stored in the container
globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains
var umbracoContext = GetUmbracoContext("http://domain1.com/en/test", 1111, umbracoSettings: settings, urlProviders: new[]
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
var umbracoContext = GetUmbracoContext("http://domain1.com/en/test", 1111, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
SetDomains5();
var url = umbracoContext.UrlProvider.GetUrl(100111, UrlMode.Absolute);
var url = publishedUrlProvider.GetUrl(100111, UrlMode.Absolute);
Assert.AreEqual("http://domain1.com/en/1001-1-1/", url);
var result = umbracoContext.UrlProvider.GetOtherUrls(100111).ToArray();
var result = publishedUrlProvider.GetOtherUrls(100111).ToArray();
foreach (var x in result) Console.WriteLine(x);
@@ -396,5 +405,16 @@ namespace Umbraco.Tests.Routing
Assert.AreEqual(result[0].Text, "http://domain1b.com/en/1001-1-1/");
Assert.AreEqual(result[1].Text, "http://domain1a.com/en/1001-1-1/");
}
private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider)
{
return new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => new TestUmbracoContextAccessor(umbracoContext)),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new []{urlProvider}),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IVariationContextAccessor>()
);
}
}
}
@@ -1,8 +1,8 @@
using System;
using System.Linq;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
@@ -10,6 +10,8 @@ using Umbraco.Tests.TestHelpers;
using Umbraco.Web.Routing;
using Umbraco.Core.Services;
using Umbraco.Tests.LegacyXmlPublishedCache;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
namespace Umbraco.Tests.Routing
{
@@ -41,11 +43,13 @@ namespace Umbraco.Tests.Routing
const string url = "http://domain1.com/1001-1/1001-1-1";
// get the nice url for 100111
var umbracoContext = GetUmbracoContext(url, 9999, umbracoSettings: settings, urlProviders: new []
{
new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper())
}, globalSettings:globalSettings.Object);
Assert.AreEqual("http://domain2.com/1001-1-1/", umbracoContext.UrlProvider.GetUrl(100111, UrlMode.Absolute));
var umbracoContext = GetUmbracoContext(url, 9999, globalSettings:globalSettings.Object);
var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
var urlProvider = new DefaultUrlProvider(settings.RequestHandler, Logger, globalSettings.Object,
new SiteDomainHelper(), umbracoContextAccessor);
var publishedUrlProvider = GetPublishedUrlProvider(umbracoContext, urlProvider);
Assert.AreEqual("http://domain2.com/1001-1-1/", publishedUrlProvider.GetUrl(100111, UrlMode.Absolute));
// check that the proper route has been cached
var cache = umbracoContext.Content as PublishedContentCache;
@@ -72,10 +76,15 @@ namespace Umbraco.Tests.Routing
//Assert.AreEqual("1001/1001-1/1001-1-1", cachedRoutes[100111]); // yes
// what's the nice url now?
Assert.AreEqual("http://domain2.com/1001-1-1/", umbracoContext.UrlProvider.GetUrl(100111)); // good
Assert.AreEqual("http://domain2.com/1001-1-1/", publishedUrlProvider.GetUrl(100111)); // good
//Assert.AreEqual("http://domain1.com/1001-1/1001-1-1", routingContext.NiceUrlProvider.GetNiceUrl(100111, true)); // bad
}
private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, object urlProvider)
{
throw new NotImplementedException();
}
void SetDomains1()
{
SetupDomainServiceMock(new[]
@@ -86,6 +95,17 @@ namespace Umbraco.Tests.Routing
}
private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider)
{
return new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => new TestUmbracoContextAccessor(umbracoContext)),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new []{urlProvider}),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IVariationContextAccessor>()
);
}
protected override string GetXmlContent(int templateId)
{
return @"<?xml version=""1.0"" encoding=""utf-8""?>
@@ -123,12 +123,10 @@ namespace Umbraco.Tests.Scoping
httpContextAccessor,
service,
new WebSecurity(httpContextAccessor, Current.Services.UserService, globalSettings, IOHelper),
umbracoSettings ?? SettingsForTests.GetDefaultUmbracoSettings(),
urlProviders ?? Enumerable.Empty<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
globalSettings,
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
if (setSingleton)
Umbraco.Web.Composing.Current.UmbracoContextAccessor.UmbracoContext = umbracoContext;
@@ -34,9 +34,10 @@ namespace Umbraco.Tests.Security
var umbracoContext = new UmbracoContext(
httpContextAccessor,
Mock.Of<IPublishedSnapshotService>(),
new WebSecurity(httpContextAccessor, Current.Services.UserService, globalSettings, IOHelper),
TestObjects.GetUmbracoSettings(), new List<IUrlProvider>(), Enumerable.Empty<IMediaUrlProvider>(), globalSettings,
new TestVariationContextAccessor(), IOHelper);
new WebSecurity(httpContextAccessor, Current.Services.UserService, globalSettings, IOHelper), globalSettings,
new TestVariationContextAccessor(),
IOHelper,
PublishedUrlProvider);
var runtime = Mock.Of<IRuntimeState>(x => x.Level == RuntimeLevel.Install);
var mgr = new BackOfficeCookieManager(
@@ -56,8 +57,10 @@ namespace Umbraco.Tests.Security
httpContextAccessor,
Mock.Of<IPublishedSnapshotService>(),
new WebSecurity(httpContextAccessor, Current.Services.UserService, globalSettings, IOHelper),
TestObjects.GetUmbracoSettings(), new List<IUrlProvider>(), Enumerable.Empty<IMediaUrlProvider>(), globalSettings,
new TestVariationContextAccessor(), IOHelper);
globalSettings,
new TestVariationContextAccessor(),
IOHelper,
PublishedUrlProvider);
var runtime = Mock.Of<IRuntimeState>(x => x.Level == RuntimeLevel.Run);
var mgr = new BackOfficeCookieManager(Mock.Of<IUmbracoContextAccessor>(accessor => accessor.UmbracoContext == umbCtx), runtime, TestObjects.GetGlobalSettings(), IOHelper, AppCaches.RequestCache);
@@ -13,6 +13,7 @@ using System.Linq;
using Umbraco.Core.Models;
using Umbraco.Core;
using System.Diagnostics;
using Umbraco.Tests.TestHelpers;
namespace Umbraco.Tests.Templates
{
@@ -28,8 +29,7 @@ namespace Umbraco.Tests.Templates
</div>
</p><p><img src='/media/234234.jpg' data-udi=""umb://media-type/B726D735E4C446D58F703F3FBCFC97A5"" /></p>";
var umbracoContextAccessor = new TestUmbracoContextAccessor();
var imageSourceParser = new HtmlImageSourceParser(umbracoContextAccessor);
var imageSourceParser = new HtmlImageSourceParser(Mock.Of<IPublishedUrlProvider>());
var result = imageSourceParser.FindUdisFromDataAttributes(input).ToList();
Assert.AreEqual(2, result.Count);
@@ -40,8 +40,7 @@ namespace Umbraco.Tests.Templates
[Test]
public void Remove_Image_Sources()
{
var umbracoContextAccessor = new TestUmbracoContextAccessor();
var imageSourceParser = new HtmlImageSourceParser(umbracoContextAccessor);
var imageSourceParser = new HtmlImageSourceParser(Mock.Of<IPublishedUrlProvider>());
var result = imageSourceParser.RemoveImageSources(@"<p>
<div>
@@ -69,21 +68,27 @@ namespace Umbraco.Tests.Templates
var media = new Mock<IPublishedContent>();
media.Setup(x => x.ContentType).Returns(mediaType);
var mediaUrlProvider = new Mock<IMediaUrlProvider>();
mediaUrlProvider.Setup(x => x.GetMediaUrl(It.IsAny<IUmbracoContext>(), It.IsAny<IPublishedContent>(), It.IsAny<string>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
mediaUrlProvider.Setup(x => x.GetMediaUrl(It.IsAny<IPublishedContent>(), It.IsAny<string>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
.Returns(UrlInfo.Url("/media/1001/my-image.jpg"));
var umbracoContextAccessor = new TestUmbracoContextAccessor();
var umbracoContextFactory = TestUmbracoContextFactory.Create(
mediaUrlProvider: mediaUrlProvider.Object,
umbracoContextAccessor: umbracoContextAccessor);
var publishedUrlProvider = new UrlProvider(new Lazy<IUmbracoContextAccessor>(() => umbracoContextAccessor),
TestHelper.WebRoutingSection,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(new []{mediaUrlProvider.Object}),
Mock.Of<IVariationContextAccessor>()
);
using (var reference = umbracoContextFactory.EnsureUmbracoContext())
{
var mediaCache = Mock.Get(reference.UmbracoContext.Media);
mediaCache.Setup(x => x.GetById(It.IsAny<Guid>())).Returns(media.Object);
var imageSourceParser = new HtmlImageSourceParser(umbracoContextAccessor);
var imageSourceParser = new HtmlImageSourceParser(publishedUrlProvider);
var result = imageSourceParser.EnsureImageSources(@"<p>
<div>
@@ -6,6 +6,7 @@ using System.Web;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing.Objects;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
@@ -30,7 +31,7 @@ namespace Umbraco.Tests.Templates
</p>";
var umbracoContextAccessor = new TestUmbracoContextAccessor();
var parser = new HtmlLocalLinkParser(umbracoContextAccessor);
var parser = new HtmlLocalLinkParser(umbracoContextAccessor, Mock.Of<IPublishedUrlProvider>());
var result = parser.FindUdisFromLocalLinks(input).ToList();
@@ -52,7 +53,7 @@ namespace Umbraco.Tests.Templates
//setup a mock url provider which we'll use for testing
var contentUrlProvider = new Mock<IUrlProvider>();
contentUrlProvider
.Setup(x => x.GetUrl(It.IsAny<IUmbracoContext>(), It.IsAny<IPublishedContent>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
.Setup(x => x.GetUrl( It.IsAny<IPublishedContent>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
.Returns(UrlInfo.Url("/my-test-url"));
var contentType = new PublishedContentType(666, "alias", PublishedItemType.Content, Enumerable.Empty<string>(), Enumerable.Empty<PublishedPropertyType>(), ContentVariation.Nothing);
var publishedContent = new Mock<IPublishedContent>();
@@ -63,16 +64,20 @@ namespace Umbraco.Tests.Templates
var media = new Mock<IPublishedContent>();
media.Setup(x => x.ContentType).Returns(mediaType);
var mediaUrlProvider = new Mock<IMediaUrlProvider>();
mediaUrlProvider.Setup(x => x.GetMediaUrl(It.IsAny<IUmbracoContext>(), It.IsAny<IPublishedContent>(), It.IsAny<string>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
mediaUrlProvider.Setup(x => x.GetMediaUrl(It.IsAny<IPublishedContent>(), It.IsAny<string>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
.Returns(UrlInfo.Url("/media/1001/my-image.jpg"));
var umbracoContextAccessor = new TestUmbracoContextAccessor();
var umbracoContextFactory = TestUmbracoContextFactory.Create(
urlProvider: contentUrlProvider.Object,
mediaUrlProvider: mediaUrlProvider.Object,
umbracoContextAccessor: umbracoContextAccessor);
var publishedUrlProvider = new UrlProvider(new Lazy<IUmbracoContextAccessor>(() => umbracoContextAccessor),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new []{contentUrlProvider.Object}),
new MediaUrlProviderCollection(new []{mediaUrlProvider.Object}),
Mock.Of<IVariationContextAccessor>()
);
using (var reference = umbracoContextFactory.EnsureUmbracoContext())
{
var contentCache = Mock.Get(reference.UmbracoContext.Content);
@@ -83,7 +88,7 @@ namespace Umbraco.Tests.Templates
mediaCache.Setup(x => x.GetById(It.IsAny<int>())).Returns(media.Object);
mediaCache.Setup(x => x.GetById(It.IsAny<Guid>())).Returns(media.Object);
var linkParser = new HtmlLocalLinkParser(umbracoContextAccessor);
var linkParser = new HtmlLocalLinkParser(umbracoContextAccessor, publishedUrlProvider);
var output = linkParser.EnsureInternalLinks(input);
+3 -2
View File
@@ -100,8 +100,9 @@ namespace Umbraco.Tests.TestHelpers
container?.TryGetInstance<ServiceContext>() ?? ServiceContext.CreatePartial(),
new ProfilingLogger(Mock.Of<ILogger>(), Mock.Of<IProfiler>()),
container?.TryGetInstance<IUmbracoSettingsSection>() ?? Current.Factory.GetInstance<IUmbracoSettingsSection>(),
Mock.Of<IUserService>(),
Mock.Of<IHttpContextAccessor>());
Mock.Of<IHttpContextAccessor>(),
Mock.Of<IPublishedUrlProvider>()
);
}
}
}
@@ -141,18 +141,16 @@ namespace Umbraco.Tests.TestHelpers.ControllerTesting
var umbCtx = new UmbracoContext(httpContextAccessor,
publishedSnapshotService.Object,
webSecurity.Object,
Mock.Of<IUmbracoSettingsSection>(section => section.WebRouting == Mock.Of<IWebRoutingSection>(routingSection => routingSection.UrlProviderMode == "Auto")),
Enumerable.Empty<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
globalSettings,
new TestVariationContextAccessor(),
TestHelper.IOHelper);
TestHelper.IOHelper,
Mock.Of<IPublishedUrlProvider>());
//replace it
umbracoContextAccessor.UmbracoContext = umbCtx;
var urlHelper = new Mock<IUrlProvider>();
urlHelper.Setup(provider => provider.GetUrl(It.IsAny<IUmbracoContext>(), It.IsAny<IPublishedContent>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
urlHelper.Setup(provider => provider.GetUrl(It.IsAny<IPublishedContent>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
.Returns(UrlInfo.Url("/hello/world/1234"));
var membershipHelper = new MembershipHelper(httpContext, Mock.Of<IPublishedMemberCache>(), Mock.Of<MembersMembershipProvider>(), Mock.Of<RoleProvider>(), Mock.Of<IMemberService>(), Mock.Of<IMemberTypeService>(), Mock.Of<IPublicAccessService>(), AppCaches.Disabled, Mock.Of<ILogger>(), new MockShortStringHelper(), Mock.Of<IEntityService>());
+11 -1
View File
@@ -32,6 +32,7 @@ using Umbraco.Net;
using Umbraco.Tests.Testing.Objects.Accessors;
using Umbraco.Web;
using Umbraco.Web.Hosting;
using Umbraco.Web.Routing;
using File = System.IO.File;
namespace Umbraco.Tests.TestHelpers
@@ -101,6 +102,8 @@ namespace Umbraco.Tests.TestHelpers
public static IIOHelper IOHelper { get; } = new IOHelper(GetHostingEnvironment());
public static IMainDom MainDom { get; } = new MainDom(Mock.Of<ILogger>(), GetHostingEnvironment(), new MainDomSemaphoreLock(Mock.Of<ILogger>(), GetHostingEnvironment()));
public static IWebRoutingSection WebRoutingSection => SettingsForTests.GetDefaultUmbracoSettings().WebRouting;
/// <summary>
/// Maps the given <paramref name="relativePath"/> making it rooted on <see cref="CurrentAssemblyDirectory"/>. <paramref name="relativePath"/> must start with <code>~/</code>
/// </summary>
@@ -353,7 +356,7 @@ namespace Umbraco.Tests.TestHelpers
httpContextMock.Setup(x => x.DisposeOnPipelineCompleted(It.IsAny<IDisposable>()))
.Returns(Mock.Of<ISubscriptionToken>());
httpContextBase = httpContextMock.Object;
}
@@ -363,5 +366,12 @@ namespace Umbraco.Tests.TestHelpers
return mock.Object;
}
public static IPublishedUrlProvider GetPublishedUrlProvider()
{
var mock = new Mock<IPublishedUrlProvider>();
return mock.Object;
}
}
}
@@ -119,10 +119,7 @@ namespace Umbraco.Tests.TestHelpers
publishedSnapshotServiceMock.Setup(x => x.CreatePublishedSnapshot(It.IsAny<string>())).Returns(publishedSnapshot);
var publishedSnapshotService = publishedSnapshotServiceMock.Object;
var umbracoSettings = GetUmbracoSettings();
var globalSettings = GetGlobalSettings();
var urlProviders = new UrlProviderCollection(Enumerable.Empty<IUrlProvider>());
var mediaUrlProviders = new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>());
if (accessor == null) accessor = new TestUmbracoContextAccessor();
@@ -133,13 +130,11 @@ namespace Umbraco.Tests.TestHelpers
publishedSnapshotService,
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
umbracoSettings,
globalSettings,
urlProviders,
mediaUrlProviders,
Mock.Of<IUserService>(),
TestHelper.IOHelper,
httpContextAccessor);
httpContextAccessor,
Mock.Of<IPublishedUrlProvider>());
return umbracoContextFactory.EnsureUmbracoContext().UmbracoContext;
}
@@ -354,7 +354,7 @@ namespace Umbraco.Tests.TestHelpers
}
}
protected IUmbracoContext GetUmbracoContext(string url, int templateId = 1234, RouteData routeData = null, bool setSingleton = false, IUmbracoSettingsSection umbracoSettings = null, IEnumerable<IUrlProvider> urlProviders = null, IEnumerable<IMediaUrlProvider> mediaUrlProviders = null, IGlobalSettings globalSettings = null, IPublishedSnapshotService snapshotService = null)
protected IUmbracoContext GetUmbracoContext(string url, int templateId = 1234, RouteData routeData = null, bool setSingleton = false, IGlobalSettings globalSettings = null, IPublishedSnapshotService snapshotService = null)
{
// ensure we have a PublishedCachesService
var service = snapshotService ?? PublishedSnapshotService as XmlPublishedSnapshotService;
@@ -379,12 +379,10 @@ namespace Umbraco.Tests.TestHelpers
service,
new WebSecurity(httpContextAccessor, Factory.GetInstance<IUserService>(),
Factory.GetInstance<IGlobalSettings>(), IOHelper),
umbracoSettings ?? Factory.GetInstance<IUmbracoSettingsSection>(),
urlProviders ?? Enumerable.Empty<IUrlProvider>(),
mediaUrlProviders ?? Enumerable.Empty<IMediaUrlProvider>(),
globalSettings ?? Factory.GetInstance<IGlobalSettings>(),
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
if (setSingleton)
Umbraco.Web.Composing.Current.UmbracoContextAccessor.UmbracoContext = umbracoContext;
@@ -16,16 +16,15 @@ namespace Umbraco.Tests.Testing.Objects
/// </summary>
public class TestUmbracoContextFactory
{
public static IUmbracoContextFactory Create(IGlobalSettings globalSettings = null, IUrlProvider urlProvider = null,
IMediaUrlProvider mediaUrlProvider = null,
public static IUmbracoContextFactory Create(IGlobalSettings globalSettings = null,
IUmbracoContextAccessor umbracoContextAccessor = null,
IHttpContextAccessor httpContextAccessor = null)
IHttpContextAccessor httpContextAccessor = null,
IPublishedUrlProvider publishedUrlProvider = null)
{
if (globalSettings == null) globalSettings = SettingsForTests.GenerateMockGlobalSettings();
if (urlProvider == null) urlProvider = Mock.Of<IUrlProvider>();
if (mediaUrlProvider == null) mediaUrlProvider = Mock.Of<IMediaUrlProvider>();
if (umbracoContextAccessor == null) umbracoContextAccessor = new TestUmbracoContextAccessor();
if (httpContextAccessor == null) httpContextAccessor = TestHelper.GetHttpContextAccessor();
if (publishedUrlProvider == null) publishedUrlProvider = TestHelper.GetPublishedUrlProvider();
var contentCache = new Mock<IPublishedContentCache>();
var mediaCache = new Mock<IPublishedMediaCache>();
@@ -42,13 +41,11 @@ namespace Umbraco.Tests.Testing.Objects
snapshotService.Object,
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
Mock.Of<IUmbracoSettingsSection>(section => section.WebRouting == Mock.Of<IWebRoutingSection>(routingSection => routingSection.UrlProviderMode == "Auto")),
globalSettings,
new UrlProviderCollection(new[] { urlProvider }),
new MediaUrlProviderCollection(new[] { mediaUrlProvider }),
Mock.Of<IUserService>(),
TestHelper.IOHelper,
httpContextAccessor);
httpContextAccessor,
publishedUrlProvider);
return umbracoContextFactory;
}
@@ -79,12 +79,18 @@ namespace Umbraco.Tests.Testing.TestingTests
{
var umbracoContext = TestObjects.GetUmbracoContextMock();
var urlProviderMock = new Mock<IUrlProvider>();
urlProviderMock.Setup(provider => provider.GetUrl(It.IsAny<IUmbracoContext>(), It.IsAny<IPublishedContent>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
urlProviderMock.Setup(provider => provider.GetUrl(It.IsAny<IPublishedContent>(), It.IsAny<UrlMode>(), It.IsAny<string>(), It.IsAny<Uri>()))
.Returns(UrlInfo.Url("/hello/world/1234"));
var urlProvider = urlProviderMock.Object;
var theUrlProvider = new UrlProvider(umbracoContext, new [] { urlProvider }, Enumerable.Empty<IMediaUrlProvider>(), umbracoContext.VariationContextAccessor);
var theUrlProvider = new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => new TestUmbracoContextAccessor(umbracoContext)),
TestHelper.WebRoutingSection,
new UrlProviderCollection(new [] { urlProvider }),
new MediaUrlProviderCollection( Enumerable.Empty<IMediaUrlProvider>())
, umbracoContext.VariationContextAccessor);
var contentType = new PublishedContentType(666, "alias", PublishedItemType.Content, Enumerable.Empty<string>(), Enumerable.Empty<PublishedPropertyType>(), ContentVariation.Nothing);
var publishedContent = Mock.Of<IPublishedContent>();
@@ -104,7 +110,7 @@ namespace Umbraco.Tests.Testing.TestingTests
var umbracoHelper = new UmbracoHelper(Mock.Of<IPublishedContent>(), Mock.Of<ITagQuery>(), Mock.Of<ICultureDictionaryFactory>(), Mock.Of<IUmbracoComponentRenderer>(), Mock.Of<IPublishedContentQuery>(), membershipHelper);
var umbracoMapper = new UmbracoMapper(new MapDefinitionCollection(new[] { Mock.Of<IMapDefinition>() }));
var umbracoApiController = new FakeUmbracoApiController(Mock.Of<IGlobalSettings>(), Mock.Of<IUmbracoContextAccessor>(), Mock.Of<ISqlContext>(), ServiceContext.CreatePartial(), AppCaches.NoCache, logger, Mock.Of<IRuntimeState>(), umbracoHelper, umbracoMapper);
var umbracoApiController = new FakeUmbracoApiController(Mock.Of<IGlobalSettings>(), Mock.Of<IUmbracoContextAccessor>(), Mock.Of<ISqlContext>(), ServiceContext.CreatePartial(), AppCaches.NoCache, logger, Mock.Of<IRuntimeState>(), umbracoHelper, umbracoMapper, Mock.Of<IPublishedUrlProvider>());
Assert.Pass();
}
@@ -112,6 +118,7 @@ namespace Umbraco.Tests.Testing.TestingTests
internal class FakeUmbracoApiController : UmbracoApiController
{
public FakeUmbracoApiController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper) { }
public FakeUmbracoApiController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper, IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider) { }
}
}
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web.Routing;
using System.Xml.Linq;
@@ -114,6 +115,7 @@ namespace Umbraco.Tests.Testing
protected IJsonSerializer JsonNetSerializer { get; } = new JsonNetSerializer();
protected IIOHelper IOHelper { get; private set; }
protected IPublishedUrlProvider PublishedUrlProvider => Factory.GetInstance<IPublishedUrlProvider>();
protected IDataTypeService DataTypeService => Factory.GetInstance<IDataTypeService>();
protected IPasswordHasher PasswordHasher => Factory.GetInstance<IPasswordHasher>();
protected Lazy<PropertyEditorCollection> PropertyEditorCollection => new Lazy<PropertyEditorCollection>(() => Factory.GetInstance<PropertyEditorCollection>());
@@ -298,6 +300,18 @@ namespace Umbraco.Tests.Testing
Composition.RegisterUnique<HtmlImageSourceParser>();
Composition.RegisterUnique<RichTextEditorPastedImages>();
Composition.RegisterUnique<IPublishedValueFallback, NoopPublishedValueFallback>();
Composition.RegisterUnique<IPublishedUrlProvider>(factory =>
new UrlProvider(
new Lazy<IUmbracoContextAccessor>(() => factory.GetInstance<IUmbracoContextAccessor>()),
TestObjects.GetUmbracoSettings().WebRouting,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
factory.GetInstance<IVariationContextAccessor>()
));
}
protected virtual void ComposeMisc()
@@ -34,6 +34,7 @@ using Umbraco.Web.Models.ContentEditing;
using IUser = Umbraco.Core.Models.Membership.IUser;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.IO;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Web.Controllers
{
@@ -89,7 +90,9 @@ namespace Umbraco.Tests.Web.Controllers
helper,
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IUmbracoSettingsSection>(),
Factory.GetInstance<IIOHelper>());
Factory.GetInstance<IIOHelper>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return usersController;
}
@@ -35,6 +35,7 @@ using Umbraco.Web.WebApi;
using Umbraco.Web.Composing;
using Task = System.Threading.Tasks.Task;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Web.Controllers
{
@@ -270,7 +271,8 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<IRuntimeState>(),
helper,
ShortStringHelper,
Factory.GetInstance<UmbracoMapper>());
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IPublishedUrlProvider>());
return controller;
}
@@ -306,7 +308,8 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<IRuntimeState>(),
helper,
ShortStringHelper,
Factory.GetInstance<UmbracoMapper>());
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IPublishedUrlProvider>());
return controller;
}
@@ -350,7 +353,8 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<IRuntimeState>(),
helper,
ShortStringHelper,
Factory.GetInstance<UmbracoMapper>());
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IPublishedUrlProvider>());
return controller;
}
@@ -399,7 +403,8 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<IRuntimeState>(),
helper,
ShortStringHelper,
Factory.GetInstance<UmbracoMapper>());
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IPublishedUrlProvider>());
return controller;
}
@@ -440,7 +445,9 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<IRuntimeState>(),
helper,
ShortStringHelper,
Factory.GetInstance<UmbracoMapper>());
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return controller;
}
@@ -487,7 +494,9 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<IRuntimeState>(),
helper,
ShortStringHelper,
Factory.GetInstance<UmbracoMapper>());
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return controller;
}
@@ -36,6 +36,7 @@ using Umbraco.Web.Models.ContentEditing;
using IUser = Umbraco.Core.Models.Membership.IUser;
using Umbraco.Core.Mapping;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Web.Routing;
namespace Umbraco.Tests.Web.Controllers
{
@@ -91,7 +92,9 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IUmbracoSettingsSection>(),
Factory.GetInstance<IIOHelper>(),
Factory.GetInstance<IImageUrlGenerator>()
Factory.GetInstance<IImageUrlGenerator>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return usersController;
}
@@ -162,8 +165,9 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IUmbracoSettingsSection>(),
Factory.GetInstance<IIOHelper>(),
Factory.GetInstance<IImageUrlGenerator>()
);
Factory.GetInstance<IImageUrlGenerator>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return usersController;
}
@@ -204,7 +208,8 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IUmbracoSettingsSection>(),
Factory.GetInstance<IIOHelper>(),
Factory.GetInstance<IImageUrlGenerator>()
Factory.GetInstance<IImageUrlGenerator>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return usersController;
}
@@ -281,7 +286,8 @@ namespace Umbraco.Tests.Web.Controllers
Factory.GetInstance<UmbracoMapper>(),
Factory.GetInstance<IUmbracoSettingsSection>(),
Factory.GetInstance<IIOHelper>(),
Factory.GetInstance<IImageUrlGenerator>()
Factory.GetInstance<IImageUrlGenerator>(),
Factory.GetInstance<IPublishedUrlProvider>()
);
return usersController;
}
@@ -70,13 +70,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
TestHelper.IOHelper,
httpContextAccessor);
httpContextAccessor,
Mock.Of<IPublishedUrlProvider>());
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbCtx = umbracoContextReference.UmbracoContext;
@@ -103,13 +101,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
TestHelper.IOHelper,
httpContextAccessor);
httpContextAccessor,
Mock.Of<IPublishedUrlProvider>());
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbCtx = umbracoContextReference.UmbracoContext;
@@ -136,13 +132,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
TestHelper.IOHelper,
httpContextAccessor);
httpContextAccessor,
Mock.Of<IPublishedUrlProvider>());
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbCtx = umbracoContextReference.UmbracoContext;
@@ -169,13 +163,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
TestHelper.IOHelper,
httpContextAccessor);
httpContextAccessor,
Mock.Of<IPublishedUrlProvider>());
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbCtx = umbracoContextReference.UmbracoContext;
@@ -46,13 +46,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
IOHelper,
httpContextAccessor);
httpContextAccessor,
PublishedUrlProvider);
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbracoContext = umbracoContextReference.UmbracoContext;
@@ -77,13 +75,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
TestObjects.GetUmbracoSettings(),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
IOHelper,
httpContextAccessor);
httpContextAccessor,
PublishedUrlProvider);
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbCtx = umbracoContextReference.UmbracoContext;
@@ -111,13 +107,11 @@ namespace Umbraco.Tests.Web.Mvc
publishedSnapshotService.Object,
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
Mock.Of<IUmbracoSettingsSection>(section => section.WebRouting == Mock.Of<IWebRoutingSection>(routingSection => routingSection.UrlProviderMode == "Auto")),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
IOHelper,
httpContextAccessor);
httpContextAccessor,
PublishedUrlProvider);
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbracoContext = umbracoContextReference.UmbracoContext;
@@ -152,13 +146,11 @@ namespace Umbraco.Tests.Web.Mvc
Mock.Of<IPublishedSnapshotService>(),
new TestVariationContextAccessor(),
new TestDefaultCultureAccessor(),
Mock.Of<IUmbracoSettingsSection>(section => section.WebRouting == webRoutingSettings),
globalSettings,
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IUserService>(),
IOHelper,
httpContextAccessor);
httpContextAccessor,
PublishedUrlProvider);
var umbracoContextReference = umbracoContextFactory.EnsureUmbracoContext();
var umbracoContext = umbracoContextReference.UmbracoContext;
@@ -442,12 +442,10 @@ namespace Umbraco.Tests.Web.Mvc
httpContextAccessor,
_service,
new WebSecurity(httpContextAccessor, Current.Services.UserService, globalSettings, IOHelper),
TestObjects.GetUmbracoSettings(),
Enumerable.Empty<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
globalSettings,
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
//if (setSingleton)
//{
@@ -33,12 +33,10 @@ namespace Umbraco.Tests.Web
httpContextAccessor,
Mock.Of<IPublishedSnapshotService>(),
new WebSecurity(httpContextAccessor, Current.Services.UserService, TestObjects.GetGlobalSettings(), IOHelper),
TestObjects.GetUmbracoSettings(),
new List<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
TestObjects.GetGlobalSettings(),
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
var r1 = new RouteData();
r1.DataTokens.Add(Core.Constants.Web.UmbracoContextDataToken, umbCtx);
@@ -55,12 +53,10 @@ namespace Umbraco.Tests.Web
httpContextAccessor,
Mock.Of<IPublishedSnapshotService>(),
new WebSecurity(httpContextAccessor, Current.Services.UserService, TestObjects.GetGlobalSettings(), IOHelper),
TestObjects.GetUmbracoSettings(),
new List<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
TestObjects.GetGlobalSettings(),
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
var r1 = new RouteData();
r1.DataTokens.Add(Core.Constants.Web.UmbracoContextDataToken, umbCtx);
@@ -87,12 +83,10 @@ namespace Umbraco.Tests.Web
httpContextAccessor,
Mock.Of<IPublishedSnapshotService>(),
new WebSecurity(httpContextAccessor, Current.Services.UserService, TestObjects.GetGlobalSettings(), IOHelper),
TestObjects.GetUmbracoSettings(),
new List<IUrlProvider>(),
Enumerable.Empty<IMediaUrlProvider>(),
TestObjects.GetGlobalSettings(),
new TestVariationContextAccessor(),
IOHelper);
IOHelper,
PublishedUrlProvider);
var httpContext = Mock.Of<HttpContextBase>();
+1
View File
@@ -259,6 +259,7 @@ namespace Umbraco.Web.Composing
public static IHostingEnvironment HostingEnvironment => Factory.GetInstance<IHostingEnvironment>();
public static IIpResolver IpResolver => Factory.GetInstance<IIpResolver>();
public static IUmbracoVersion UmbracoVersion => Factory.GetInstance<IUmbracoVersion>();
public static IPublishedUrlProvider PublishedUrlProvider => Factory.GetInstance<IPublishedUrlProvider>();
#endregion
}
@@ -28,6 +28,7 @@ using Umbraco.Core.Mapping;
using Umbraco.Web.Models.Identity;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.IO;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -47,8 +48,21 @@ namespace Umbraco.Web.Editors
private readonly IUmbracoSettingsSection _umbracoSettingsSection;
private readonly IIOHelper _ioHelper;
public AuthenticationController(IUserPasswordConfiguration passwordConfiguration, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper, IUmbracoSettingsSection umbracoSettingsSection, IIOHelper ioHelper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public AuthenticationController(
IUserPasswordConfiguration passwordConfiguration,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IUmbracoSettingsSection umbracoSettingsSection,
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_passwordConfiguration = passwordConfiguration ?? throw new ArgumentNullException(nameof(passwordConfiguration));
_runtimeState = runtimeState ?? throw new ArgumentNullException(nameof(runtimeState));
@@ -6,6 +6,7 @@ using Umbraco.Core.Mapping;
using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
@@ -20,8 +21,19 @@ namespace Umbraco.Web.Editors
[PrefixlessBodyModelValidator]
public abstract class BackOfficeNotificationsController : UmbracoAuthorizedJsonController
{
protected BackOfficeNotificationsController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
protected BackOfficeNotificationsController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
}
}
@@ -24,6 +24,7 @@ using Umbraco.Web.Trees;
using Stylesheet = Umbraco.Core.Models.Stylesheet;
using StylesheetRule = Umbraco.Web.Models.ContentEditing.StylesheetRule;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -49,8 +50,9 @@ namespace Umbraco.Web.Editors
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IIOHelper ioHelper,
IFileSystems fileSystems)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IFileSystems fileSystems,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_ioHelper = ioHelper;
_fileSystems = fileSystems;
+4 -2
View File
@@ -70,8 +70,10 @@ namespace Umbraco.Web.Editors
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_propertyEditors = propertyEditors ?? throw new ArgumentNullException(nameof(propertyEditors));
_allLangs = new Lazy<IDictionary<string, ILanguage>>(() => Services.LocalizationService.GetAllLanguages().ToDictionary(x => x.IsoCode, x => x, StringComparer.InvariantCultureIgnoreCase));
@@ -17,6 +17,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Composing;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
@@ -41,8 +42,9 @@ namespace Umbraco.Web.Editors
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper)
:base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
:base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
CultureDictionary = cultureDictionary;
}
@@ -30,6 +30,7 @@ using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -56,12 +57,19 @@ namespace Umbraco.Web.Editors
ICultureDictionary cultureDictionary,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext, PropertyEditorCollection propertyEditors,
ServiceContext services, AppCaches appCaches,
IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper,
ISqlContext sqlContext,
PropertyEditorCollection propertyEditors,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IScopeProvider scopeProvider,
IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper, IIOHelper ioHelper)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_serializer = serializer;
_globalSettings = globalSettings;
@@ -18,6 +18,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
namespace Umbraco.Web.Editors
@@ -30,8 +31,20 @@ namespace Umbraco.Web.Editors
public abstract class ContentTypeControllerBase<TContentType> : UmbracoAuthorizedJsonController
where TContentType : class, IContentTypeComposition
{
protected ContentTypeControllerBase(ICultureDictionary cultureDictionary, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
protected ContentTypeControllerBase(
ICultureDictionary cultureDictionary,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
CultureDictionary = cultureDictionary;
}
@@ -550,6 +563,6 @@ namespace Umbraco.Web.Editors
forDisplay.Errors = ModelState.ToErrorDictionary();
return new HttpResponseException(Request.CreateValidationErrorResponse(forDisplay));
}
}
}
}
@@ -23,6 +23,7 @@ using Umbraco.Web.WebApi.Filters;
using Umbraco.Core.Mapping;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Models;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -51,8 +52,9 @@ namespace Umbraco.Web.Editors
UmbracoMapper umbracoMapper,
IUmbracoSettingsSection umbracoSettingsSection,
IIOHelper ioHelper,
IImageUrlGenerator imageUrlGenerator)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IImageUrlGenerator imageUrlGenerator,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_mediaFileSystem = mediaFileSystem;
_umbracoSettingsSection = umbracoSettingsSection ?? throw new ArgumentNullException(nameof(umbracoSettingsSection));
@@ -21,6 +21,7 @@ using Umbraco.Core.Dashboards;
using Umbraco.Core.Strings;
using Umbraco.Web.Services;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -52,8 +53,9 @@ namespace Umbraco.Web.Editors
UmbracoHelper umbracoHelper,
IUmbracoVersion umbracoVersion,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper,publishedUrlProvider)
{
_dashboardService = dashboardService;
_umbracoVersion = umbracoVersion;
+16 -2
View File
@@ -24,6 +24,7 @@ using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using System.Web.Http.Controllers;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -44,8 +45,21 @@ namespace Umbraco.Web.Editors
private readonly PropertyEditorCollection _propertyEditors;
private readonly IUmbracoSettingsSection _umbracoSettingsSection;
public DataTypeController(PropertyEditorCollection propertyEditors, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper, IUmbracoSettingsSection umbracoSettingsSection)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public DataTypeController(
PropertyEditorCollection propertyEditors,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IUmbracoSettingsSection umbracoSettingsSection,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_propertyEditors = propertyEditors;
_umbracoSettingsSection = umbracoSettingsSection ?? throw new ArgumentNullException(nameof(umbracoSettingsSection));
@@ -15,6 +15,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
@@ -34,8 +35,19 @@ namespace Umbraco.Web.Editors
[EnableOverrideAuthorization]
public class DictionaryController : BackOfficeNotificationsController
{
public DictionaryController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public DictionaryController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
}
+5 -3
View File
@@ -31,6 +31,7 @@ using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -66,8 +67,9 @@ namespace Umbraco.Web.Editors
SearchableTreeCollection searchableTreeCollection,
UmbracoTreeSearcher treeSearcher,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_treeService = treeService;
_searchableTreeCollection = searchableTreeCollection;
@@ -347,7 +349,7 @@ namespace Umbraco.Web.Editors
{
culture = culture ?? ClientCulture();
var url = UmbracoContext.UrlProvider.GetUrl(id, culture: culture);
var url = PublishedUrlProvider.GetUrl(id, culture: culture);
var anchorValues = Services.ContentService.GetAnchorValuesFromRTEs(id, culture);
return new UrlAndAnchors(url, anchorValues);
}
+4 -2
View File
@@ -13,6 +13,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi.Filters;
namespace Umbraco.Web.Editors
@@ -38,8 +39,9 @@ namespace Umbraco.Web.Editors
IMediaFileSystem mediaFileSystem,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IImageUrlGenerator imageUrlGenerator)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IImageUrlGenerator imageUrlGenerator,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_mediaFileSystem = mediaFileSystem;
_imageUrlGenerator = imageUrlGenerator;
@@ -20,6 +20,7 @@ using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -52,7 +53,8 @@ namespace Umbraco.Web.Editors
UmbracoMapper umbracoMapper,
IUmbracoComponentRenderer componentRenderer,
IVariationContextAccessor variationContextAccessor,
IMacroService macroService)
IMacroService macroService,
IPublishedUrlProvider publishedUrlProvider)
: base(
globalSettings,
umbracoContextAccessor,
@@ -63,7 +65,8 @@ namespace Umbraco.Web.Editors
runtimeState,
umbracoHelper,
shortStringHelper,
umbracoMapper)
umbracoMapper,
publishedUrlProvider)
{
_componentRenderer = componentRenderer;
_variationContextAccessor = variationContextAccessor;
+4 -2
View File
@@ -22,6 +22,7 @@ using Umbraco.Core.Mapping;
using System.Web.Http.Controllers;
using Umbraco.Core.IO;
using Umbraco.Core.PropertyEditors;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -50,8 +51,9 @@ namespace Umbraco.Web.Editors
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
ParameterEditorCollection parameterEditorCollection,
IIOHelper ioHelper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_parameterEditorCollection = parameterEditorCollection;
_ioHelper = ioHelper;
+4 -2
View File
@@ -37,6 +37,7 @@ using Umbraco.Web.Editors.Filters;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -67,8 +68,9 @@ namespace Umbraco.Web.Editors
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IUmbracoSettingsSection umbracoSettingsSection,
IIOHelper ioHelper)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_propertyEditors = propertyEditors ?? throw new ArgumentNullException(nameof(propertyEditors));
_mediaFileSystem = mediaFileSystem;
+16 -2
View File
@@ -22,6 +22,7 @@ using Umbraco.Web.Composing;
using Constants = Umbraco.Core.Constants;
using IMediaType = Umbraco.Core.Models.IMediaType;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -41,8 +42,21 @@ namespace Umbraco.Web.Editors
private readonly IShortStringHelper _shortStringHelper;
private readonly IEntityService _entityService;
public MediaTypeController(ICultureDictionary cultureDictionary, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper, IEntityService entityService)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public MediaTypeController(
ICultureDictionary cultureDictionary,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IEntityService entityService,
IPublishedUrlProvider publishedUrlProvider)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_shortStringHelper = shortStringHelper;
_entityService = entityService ?? throw new ArgumentNullException(nameof(entityService));
+4 -2
View File
@@ -33,6 +33,7 @@ using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Strings;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -58,8 +59,9 @@ namespace Umbraco.Web.Editors
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_passwordConfig = passwordConfig ?? throw new ArgumentNullException(nameof(passwordConfig));
_propertyEditors = propertyEditors ?? throw new ArgumentNullException(nameof(propertyEditors));
@@ -19,6 +19,7 @@ using Umbraco.Web.Mvc;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -29,8 +30,20 @@ namespace Umbraco.Web.Editors
[UmbracoTreeAuthorize(new string[] { Constants.Trees.MemberTypes, Constants.Trees.Members})]
public class MemberTypeController : ContentTypeControllerBase<IMemberType>
{
public MemberTypeController(ICultureDictionary cultureDictionary, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public MemberTypeController(
ICultureDictionary cultureDictionary,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(cultureDictionary, globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
}
+4 -2
View File
@@ -19,6 +19,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
@@ -45,8 +46,9 @@ namespace Umbraco.Web.Editors
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IIOHelper ioHelper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_ioHelper = ioHelper;
}
@@ -22,6 +22,7 @@ using Umbraco.Web.JavaScript;
using Umbraco.Web.Models;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using File = System.IO.File;
@@ -51,8 +52,9 @@ namespace Umbraco.Web.Editors
IShortStringHelper shortStringHelper,
IUmbracoVersion umbracoVersion,
UmbracoMapper umbracoMapper,
IIOHelper ioHelper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_umbracoVersion = umbracoVersion;
_ioHelper = ioHelper;
@@ -18,6 +18,7 @@ using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -39,8 +40,9 @@ namespace Umbraco.Web.Editors
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
}
+4 -3
View File
@@ -14,6 +14,7 @@ using Section = Umbraco.Web.Models.ContentEditing.Section;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.Services;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -28,8 +29,8 @@ namespace Umbraco.Web.Editors
private readonly ITreeService _treeService;
public SectionController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState,
IDashboardService dashboardService, ISectionService sectionService, ITreeService treeService, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IDashboardService dashboardService, ISectionService sectionService, ITreeService treeService, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper, IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_dashboardService = dashboardService;
_sectionService = sectionService;
@@ -44,7 +45,7 @@ namespace Umbraco.Web.Editors
// this is a bit nasty since we'll be proxying via the app tree controller but we sort of have to do that
// since tree's by nature are controllers and require request contextual data
var appTreeController = new ApplicationTreeController(GlobalSettings, UmbracoContextAccessor, SqlContext, Services, AppCaches, Logger, RuntimeState, _treeService, _sectionService, Umbraco, Mapper)
var appTreeController = new ApplicationTreeController(GlobalSettings, UmbracoContextAccessor, SqlContext, Services, AppCaches, Logger, RuntimeState, _treeService, _sectionService, Umbraco, Mapper, PublishedUrlProvider)
{
ControllerContext = ControllerContext
};
+14 -2
View File
@@ -16,6 +16,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
@@ -25,8 +26,19 @@ namespace Umbraco.Web.Editors
[UmbracoTreeAuthorize(Constants.Trees.Templates)]
public class TemplateController : BackOfficeNotificationsController
{
public TemplateController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public TemplateController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
}
@@ -14,6 +14,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Models.TemplateQuery;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
namespace Umbraco.Web.Editors
@@ -38,8 +39,9 @@ namespace Umbraco.Web.Editors
UmbracoHelper umbracoHelper,
IVariationContextAccessor variationContextAccessor,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_variationContextAccessor = variationContextAccessor;
}
+4 -2
View File
@@ -16,6 +16,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
@@ -45,8 +46,9 @@ namespace Umbraco.Web.Editors
UmbracoMapper umbracoMapper,
IShortStringHelper shortStringHelper,
IUmbracoSettingsSection umbracoSettingsSection,
IIOHelper ioHelper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_shortStringHelper = shortStringHelper ?? throw new ArgumentNullException(nameof(shortStringHelper));
_umbracoSettingsSection = umbracoSettingsSection ?? throw new ArgumentNullException(nameof(umbracoSettingsSection));
+4 -2
View File
@@ -16,6 +16,7 @@ using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Models;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.Tour;
namespace Umbraco.Web.Editors
@@ -42,8 +43,9 @@ namespace Umbraco.Web.Editors
TourFilterCollection filters,
IUmbracoSettingsSection umbracoSettingsSection,
IIOHelper ioHelper,
ICurrentUserAccessor currentUserAccessor)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
ICurrentUserAccessor currentUserAccessor,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_filters = filters;
_umbracoSettingsSection = umbracoSettingsSection ?? throw new ArgumentNullException(nameof(umbracoSettingsSection));
@@ -8,6 +8,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Composing;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
@@ -29,8 +30,19 @@ namespace Umbraco.Web.Editors
ShortStringHelper = Current.ShortStringHelper;
}
protected UmbracoAuthorizedJsonController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
protected UmbracoAuthorizedJsonController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
ShortStringHelper = shortStringHelper ?? throw new ArgumentNullException(nameof(shortStringHelper));
}
+4 -2
View File
@@ -35,6 +35,7 @@ using IUser = Umbraco.Core.Models.Membership.IUser;
using Task = System.Threading.Tasks.Task;
using Umbraco.Core.Mapping;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Editors
{
@@ -64,8 +65,9 @@ namespace Umbraco.Web.Editors
UmbracoMapper umbracoMapper,
IUmbracoSettingsSection umbracoSettingsSection,
IIOHelper ioHelper,
IImageUrlGenerator imageUrlGenerator)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
IImageUrlGenerator imageUrlGenerator,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_mediaFileSystem = mediaFileSystem;
_umbracoSettingsSection = umbracoSettingsSection ?? throw new ArgumentNullException(nameof(umbracoSettingsSection));
@@ -31,6 +31,7 @@ namespace Umbraco.Web.Models.Mapping
private readonly ILogger _logger;
private readonly IUserService _userService;
private readonly IVariationContextAccessor _variationContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
private readonly TabsAndPropertiesMapper<IContent> _tabsAndPropertiesMapper;
private readonly ContentSavedStateMapper<ContentPropertyDisplay> _stateMapper;
private readonly ContentBasicSavedStateMapper<ContentPropertyBasic> _basicStateMapper;
@@ -38,7 +39,7 @@ namespace Umbraco.Web.Models.Mapping
public ContentMapDefinition(CommonMapper commonMapper, ICultureDictionary cultureDictionary, ILocalizedTextService localizedTextService, IContentService contentService, IContentTypeService contentTypeService,
IFileService fileService, IUmbracoContextAccessor umbracoContextAccessor, IPublishedRouter publishedRouter, ILocalizationService localizationService, ILogger logger,
IUserService userService, IVariationContextAccessor variationContextAccessor, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider)
IUserService userService, IVariationContextAccessor variationContextAccessor, IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IPublishedUrlProvider publishedUrlProvider)
{
_commonMapper = commonMapper;
_cultureDictionary = cultureDictionary;
@@ -52,6 +53,7 @@ namespace Umbraco.Web.Models.Mapping
_logger = logger;
_userService = userService;
_variationContextAccessor = variationContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
_tabsAndPropertiesMapper = new TabsAndPropertiesMapper<IContent>(cultureDictionary, localizedTextService, contentTypeBaseServiceProvider);
_stateMapper = new ContentSavedStateMapper<ContentPropertyDisplay>();
@@ -177,7 +179,7 @@ namespace Umbraco.Web.Models.Mapping
var urls = umbracoContext == null
? new[] { UrlInfo.Message("Cannot generate urls without a current Umbraco Context") }
: source.GetContentUrls(_publishedRouter, umbracoContext, _localizationService, _localizedTextService, _contentService, _variationContextAccessor, _logger).ToArray();
: source.GetContentUrls(_publishedRouter, umbracoContext, _localizationService, _localizedTextService, _contentService, _variationContextAccessor, _logger, _publishedUrlProvider).ToArray();
return urls;
}
@@ -1,20 +1,19 @@
using Umbraco.Core.Mapping;
using Umbraco.Core.Models;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Models.Mapping
{
internal class RedirectUrlMapDefinition : IMapDefinition
{
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
public RedirectUrlMapDefinition(IUmbracoContextAccessor umbracoContextAccessor)
public RedirectUrlMapDefinition(IPublishedUrlProvider publishedUrlProvider)
{
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
private IUmbracoContext UmbracoContext => _umbracoContextAccessor.UmbracoContext;
public void DefineMaps(UmbracoMapper mapper)
{
mapper.Define<IRedirectUrl, ContentRedirectUrl>((source, context) => new ContentRedirectUrl(), Map);
@@ -26,8 +25,8 @@ namespace Umbraco.Web.Models.Mapping
target.ContentId = source.ContentId;
target.CreateDateUtc = source.CreateDateUtc;
target.Culture = source.Culture;
target.DestinationUrl = source.ContentId > 0 ? UmbracoContext?.UrlProvider?.GetUrl(source.ContentId, culture: source.Culture) : "#";
target.OriginalUrl = UmbracoContext?.UrlProvider?.GetUrlFromRoute(source.ContentId, source.Url, source.Culture);
target.DestinationUrl = source.ContentId > 0 ? _publishedUrlProvider?.GetUrl(source.ContentId, culture: source.Culture) : "#";
target.OriginalUrl = _publishedUrlProvider?.GetUrlFromRoute(source.ContentId, source.Url, source.Culture);
target.RedirectId = source.Key;
}
}
@@ -7,6 +7,7 @@ using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Web.Composing;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Mvc
{
@@ -18,7 +19,7 @@ namespace Umbraco.Web.Mvc
private IPublishedContent _publishedContent;
private readonly int _pageId;
private NameValueCollection _queryStringValues;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private IPublishedUrlProvider _publishedUrlProvider;
private string _url;
public string Url
@@ -32,7 +33,7 @@ namespace Umbraco.Web.Mvc
throw new InvalidOperationException(string.Format("Cannot redirect, no entity was found for id {0}", _pageId));
}
var result = _umbracoContextAccessor.UmbracoContext.UrlProvider.GetUrl(PublishedContent.Id);
var result = _publishedUrlProvider.GetUrl(PublishedContent.Id);
if (result != "#")
{
_url = result;
@@ -67,7 +68,7 @@ namespace Umbraco.Web.Mvc
/// </summary>
/// <param name="pageId"></param>
public RedirectToUmbracoPageResult(int pageId)
: this(pageId, Current.UmbracoContextAccessor)
: this(pageId, Current.PublishedUrlProvider)
{
}
@@ -77,7 +78,7 @@ namespace Umbraco.Web.Mvc
/// <param name="pageId"></param>
/// <param name="queryStringValues"></param>
public RedirectToUmbracoPageResult(int pageId, NameValueCollection queryStringValues)
: this(pageId, queryStringValues, Current.UmbracoContextAccessor)
: this(pageId, queryStringValues, Current.PublishedUrlProvider)
{
}
@@ -87,7 +88,7 @@ namespace Umbraco.Web.Mvc
/// <param name="pageId"></param>
/// <param name="queryString"></param>
public RedirectToUmbracoPageResult(int pageId, string queryString)
: this(pageId, queryString, Current.UmbracoContextAccessor)
: this(pageId, queryString, Current.PublishedUrlProvider)
{
}
@@ -96,7 +97,7 @@ namespace Umbraco.Web.Mvc
/// </summary>
/// <param name="publishedContent"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent)
: this(publishedContent, Current.UmbracoContextAccessor)
: this(publishedContent, Current.PublishedUrlProvider)
{
}
@@ -106,7 +107,7 @@ namespace Umbraco.Web.Mvc
/// <param name="publishedContent"></param>
/// <param name="queryStringValues"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, NameValueCollection queryStringValues)
: this(publishedContent, queryStringValues, Current.UmbracoContextAccessor)
: this(publishedContent, queryStringValues, Current.PublishedUrlProvider)
{
}
@@ -116,7 +117,7 @@ namespace Umbraco.Web.Mvc
/// <param name="queryString"></param>
/// <param name="queryStringValues"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, string queryString)
: this(publishedContent, queryString, Current.UmbracoContextAccessor)
: this(publishedContent, queryString, Current.PublishedUrlProvider)
{
}
@@ -125,10 +126,10 @@ namespace Umbraco.Web.Mvc
/// </summary>
/// <param name="pageId"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(int pageId, IUmbracoContextAccessor umbracoContextAccessor)
public RedirectToUmbracoPageResult(int pageId, IPublishedUrlProvider publishedUrlProvider)
{
_pageId = pageId;
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
/// <summary>
@@ -137,11 +138,11 @@ namespace Umbraco.Web.Mvc
/// <param name="pageId"></param>
/// <param name="queryStringValues"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(int pageId, NameValueCollection queryStringValues, IUmbracoContextAccessor umbracoContextAccessor)
public RedirectToUmbracoPageResult(int pageId, NameValueCollection queryStringValues, IPublishedUrlProvider publishedUrlProvider)
{
_pageId = pageId;
_queryStringValues = queryStringValues;
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
/// <summary>
@@ -150,11 +151,11 @@ namespace Umbraco.Web.Mvc
/// <param name="pageId"></param>
/// <param name="queryString"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(int pageId, string queryString, IUmbracoContextAccessor umbracoContextAccessor)
public RedirectToUmbracoPageResult(int pageId, string queryString, IPublishedUrlProvider publishedUrlProvider)
{
_pageId = pageId;
_queryStringValues = ParseQueryString(queryString);
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
/// <summary>
@@ -162,11 +163,11 @@ namespace Umbraco.Web.Mvc
/// </summary>
/// <param name="publishedContent"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, IUmbracoContextAccessor umbracoContextAccessor)
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, IPublishedUrlProvider publishedUrlProvider)
{
_publishedContent = publishedContent;
_pageId = publishedContent.Id;
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
/// <summary>
@@ -175,12 +176,12 @@ namespace Umbraco.Web.Mvc
/// <param name="publishedContent"></param>
/// <param name="queryStringValues"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, NameValueCollection queryStringValues, IUmbracoContextAccessor umbracoContextAccessor)
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, NameValueCollection queryStringValues, IPublishedUrlProvider publishedUrlProvider)
{
_publishedContent = publishedContent;
_pageId = publishedContent.Id;
_queryStringValues = queryStringValues;
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
/// <summary>
@@ -189,12 +190,12 @@ namespace Umbraco.Web.Mvc
/// <param name="publishedContent"></param>
/// <param name="queryString"></param>
/// <param name="umbracoContextAccessor"></param>
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, string queryString, IUmbracoContextAccessor umbracoContextAccessor)
public RedirectToUmbracoPageResult(IPublishedContent publishedContent, string queryString, IPublishedUrlProvider publishedUrlProvider)
{
_publishedContent = publishedContent;
_pageId = publishedContent.Id;
_queryStringValues = ParseQueryString(queryString);
_umbracoContextAccessor = umbracoContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
public override void ExecuteResult(ControllerContext context)
+9 -9
View File
@@ -31,7 +31,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToUmbracoPage(int pageId)
{
return new RedirectToUmbracoPageResult(pageId, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(pageId, Current.PublishedUrlProvider);
}
/// <summary>
@@ -42,7 +42,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToUmbracoPage(int pageId, NameValueCollection queryStringValues)
{
return new RedirectToUmbracoPageResult(pageId, queryStringValues, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(pageId, queryStringValues, Current.PublishedUrlProvider);
}
/// <summary>
@@ -53,7 +53,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToUmbracoPage(int pageId, string queryString)
{
return new RedirectToUmbracoPageResult(pageId, queryString, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(pageId, queryString, Current.PublishedUrlProvider);
}
/// <summary>
@@ -63,7 +63,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToUmbracoPage(IPublishedContent publishedContent)
{
return new RedirectToUmbracoPageResult(publishedContent, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(publishedContent, Current.PublishedUrlProvider);
}
/// <summary>
@@ -74,7 +74,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToUmbracoPage(IPublishedContent publishedContent, NameValueCollection queryStringValues)
{
return new RedirectToUmbracoPageResult(publishedContent, queryStringValues, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(publishedContent, queryStringValues, Current.PublishedUrlProvider);
}
/// <summary>
@@ -85,7 +85,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToUmbracoPage(IPublishedContent publishedContent, string queryString)
{
return new RedirectToUmbracoPageResult(publishedContent, queryString, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(publishedContent, queryString, Current.PublishedUrlProvider);
}
/// <summary>
@@ -94,7 +94,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToCurrentUmbracoPage()
{
return new RedirectToUmbracoPageResult(CurrentPage, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(CurrentPage, Current.PublishedUrlProvider);
}
/// <summary>
@@ -104,7 +104,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToCurrentUmbracoPage(NameValueCollection queryStringValues)
{
return new RedirectToUmbracoPageResult(CurrentPage, queryStringValues, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(CurrentPage, queryStringValues, Current.PublishedUrlProvider);
}
/// <summary>
@@ -114,7 +114,7 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
protected RedirectToUmbracoPageResult RedirectToCurrentUmbracoPage(string queryString)
{
return new RedirectToUmbracoPageResult(CurrentPage, queryString, Current.UmbracoContextAccessor);
return new RedirectToUmbracoPageResult(CurrentPage, queryString, Current.PublishedUrlProvider);
}
/// <summary>
@@ -7,6 +7,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Web.Editors;
using Umbraco.Web.Routing;
using Umbraco.Web.WebApi.Filters;
namespace Umbraco.Web.Profiling
@@ -19,8 +20,19 @@ namespace Umbraco.Web.Profiling
{
private readonly IRuntimeState _runtimeState;
public WebProfilingController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public WebProfilingController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_runtimeState = runtimeState;
}
@@ -13,6 +13,7 @@ using Umbraco.Web.Editors;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Mvc;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.PropertyEditors
{
@@ -24,8 +25,21 @@ namespace Umbraco.Web.PropertyEditors
{
private readonly IIOHelper _ioHelper;
public RichTextPreValueController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, IShortStringHelper shortStringHelper, IIOHelper ioHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper)
public RichTextPreValueController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
IShortStringHelper shortStringHelper,
IIOHelper ioHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider
)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, shortStringHelper, umbracoMapper, publishedUrlProvider)
{
_ioHelper = ioHelper;
}
@@ -718,7 +718,7 @@ namespace Umbraco.Web
if (umbracoContext == null)
throw new InvalidOperationException("Cannot resolve a Url when Current.UmbracoContext is null.");
return content.Url(Current.UmbracoContext.UrlProvider, culture, mode);
return content.Url(Current.PublishedUrlProvider, culture, mode);
}
#endregion
@@ -114,14 +114,12 @@ namespace Umbraco.Web
/// </remarks>
public static string MediaUrl(this IPublishedContent content, string culture = null, UrlMode mode = UrlMode.Default, string propertyAlias = Constants.Conventions.Media.File)
{
var umbracoContext = Composing.Current.UmbracoContext;
var publishedUrlProvider = Current.PublishedUrlProvider;
if (umbracoContext == null)
throw new InvalidOperationException("Cannot resolve a Url when Current.UmbracoContext is null.");
if (umbracoContext.UrlProvider == null)
throw new InvalidOperationException("Cannot resolve a Url when Current.UmbracoContext.UrlProvider is null.");
if (publishedUrlProvider== null)
throw new InvalidOperationException("Cannot resolve a Url when Current.PublishedUrlProvider is null.");
return umbracoContext.UrlProvider.GetMediaUrl(content, mode, culture, propertyAlias);
return publishedUrlProvider.GetMediaUrl(content, mode, culture, propertyAlias);
}
#endregion
+6 -3
View File
@@ -16,12 +16,14 @@ namespace Umbraco.Web.Routing
private readonly IGlobalSettings _globalSettings;
private readonly IRequestHandlerSection _requestConfig;
private readonly ISiteDomainHelper _siteDomainHelper;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
public AliasUrlProvider(IGlobalSettings globalSettings, IRequestHandlerSection requestConfig, ISiteDomainHelper siteDomainHelper)
public AliasUrlProvider(IGlobalSettings globalSettings, IRequestHandlerSection requestConfig, ISiteDomainHelper siteDomainHelper, IUmbracoContextAccessor umbracoContextAccessor)
{
_globalSettings = globalSettings;
_requestConfig = requestConfig;
_siteDomainHelper = siteDomainHelper;
_umbracoContextAccessor = umbracoContextAccessor;
}
// note - at the moment we seem to accept pretty much anything as an alias
@@ -31,7 +33,7 @@ namespace Umbraco.Web.Routing
#region GetUrl
/// <inheritdoc />
public UrlInfo GetUrl(IUmbracoContext umbracoContext, IPublishedContent content, UrlMode mode, string culture, Uri current)
public UrlInfo GetUrl(IPublishedContent content, UrlMode mode, string culture, Uri current)
{
return null; // we have nothing to say
}
@@ -51,8 +53,9 @@ namespace Umbraco.Web.Routing
/// <para>Other urls are those that <c>GetUrl</c> would not return in the current context, but would be valid
/// urls for the node in other contexts (different domain for current request, umbracoUrlAlias...).</para>
/// </remarks>
public IEnumerable<UrlInfo> GetOtherUrls(IUmbracoContext umbracoContext, int id, Uri current)
public IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
{
var umbracoContext = _umbracoContextAccessor.UmbracoContext;
var node = umbracoContext.Content.GetById(id);
if (node == null)
yield break;
@@ -10,15 +10,15 @@ namespace Umbraco.Web.Routing
/// </summary>
public class DefaultMediaUrlProvider : IMediaUrlProvider
{
private readonly PropertyEditorCollection _propertyEditors;
private readonly Lazy<PropertyEditorCollection> _propertyEditors;
public DefaultMediaUrlProvider(PropertyEditorCollection propertyEditors)
public DefaultMediaUrlProvider(Lazy<PropertyEditorCollection> propertyEditors)
{
_propertyEditors = propertyEditors ?? throw new ArgumentNullException(nameof(propertyEditors));
}
/// <inheritdoc />
public virtual UrlInfo GetMediaUrl(IUmbracoContext umbracoContext, IPublishedContent content,
public virtual UrlInfo GetMediaUrl(IPublishedContent content,
string propertyAlias, UrlMode mode, string culture, Uri current)
{
var prop = content.GetProperty(propertyAlias);
@@ -33,7 +33,7 @@ namespace Umbraco.Web.Routing
var propType = prop.PropertyType;
string path = null;
if (_propertyEditors.TryGet(propType.EditorAlias, out var editor)
if (_propertyEditors.Value.TryGet(propType.EditorAlias, out var editor)
&& editor is IDataEditorWithMediaPath dataEditor)
{
path = dataEditor.GetMediaPath(value);
@@ -17,22 +17,25 @@ namespace Umbraco.Web.Routing
private readonly ILogger _logger;
private readonly IGlobalSettings _globalSettings;
private readonly ISiteDomainHelper _siteDomainHelper;
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
public DefaultUrlProvider(IRequestHandlerSection requestSettings, ILogger logger, IGlobalSettings globalSettings, ISiteDomainHelper siteDomainHelper)
public DefaultUrlProvider(IRequestHandlerSection requestSettings, ILogger logger, IGlobalSettings globalSettings, ISiteDomainHelper siteDomainHelper, IUmbracoContextAccessor umbracoContextAccessor)
{
_requestSettings = requestSettings;
_logger = logger;
_globalSettings = globalSettings;
_siteDomainHelper = siteDomainHelper;
_umbracoContextAccessor = umbracoContextAccessor;
}
#region GetUrl
/// <inheritdoc />
public virtual UrlInfo GetUrl(IUmbracoContext umbracoContext, IPublishedContent content, UrlMode mode, string culture, Uri current)
public virtual UrlInfo GetUrl(IPublishedContent content, UrlMode mode, string culture, Uri current)
{
if (!current.IsAbsoluteUri) throw new ArgumentException("Current url must be absolute.", nameof(current));
var umbracoContext = _umbracoContextAccessor.UmbracoContext;
// will not use cache if previewing
var route = umbracoContext.Content.GetRouteById(content.Id, culture);
@@ -68,7 +71,7 @@ namespace Umbraco.Web.Routing
/// <summary>
/// Gets the other urls of a published content.
/// </summary>
/// <param name="umbracoContext">The Umbraco context.</param>
/// <param name="umbracoContextAccessor">The Umbraco context.</param>
/// <param name="id">The published content id.</param>
/// <param name="current">The current absolute url.</param>
/// <returns>The other urls for the published content.</returns>
@@ -76,8 +79,9 @@ namespace Umbraco.Web.Routing
/// <para>Other urls are those that <c>GetUrl</c> would not return in the current context, but would be valid
/// urls for the node in other contexts (different domain for current request, umbracoUrlAlias...).</para>
/// </remarks>
public virtual IEnumerable<UrlInfo> GetOtherUrls(IUmbracoContext umbracoContext, int id, Uri current)
public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
{
var umbracoContext = _umbracoContextAccessor.UmbracoContext;
var node = umbracoContext.Content.GetById(id);
if (node == null)
yield break;
+1 -2
View File
@@ -11,7 +11,6 @@ namespace Umbraco.Web.Routing
/// <summary>
/// Gets the url of a media item.
/// </summary>
/// <param name="umbracoContext">The Umbraco context.</param>
/// <param name="content">The published content.</param>
/// <param name="propertyAlias">The property alias to resolve the url from.</param>
/// <param name="mode">The url mode.</param>
@@ -26,6 +25,6 @@ namespace Umbraco.Web.Routing
/// e.g. a cdn url provider will most likely always return an absolute url.</para>
/// <para>If the provider is unable to provide a url, it returns <c>null</c>.</para>
/// </remarks>
UrlInfo GetMediaUrl(IUmbracoContext umbracoContext, IPublishedContent content, string propertyAlias, UrlMode mode, string culture, Uri current);
UrlInfo GetMediaUrl(IPublishedContent content, string propertyAlias, UrlMode mode, string culture, Uri current);
}
}
+2 -4
View File
@@ -12,7 +12,6 @@ namespace Umbraco.Web.Routing
/// <summary>
/// Gets the url of a published content.
/// </summary>
/// <param name="umbracoContext">The Umbraco context.</param>
/// <param name="content">The published content.</param>
/// <param name="mode">The url mode.</param>
/// <param name="culture">A culture.</param>
@@ -24,12 +23,11 @@ namespace Umbraco.Web.Routing
/// when no culture is specified, the current culture.</para>
/// <para>If the provider is unable to provide a url, it should return <c>null</c>.</para>
/// </remarks>
UrlInfo GetUrl(IUmbracoContext umbracoContext, IPublishedContent content, UrlMode mode, string culture, Uri current);
UrlInfo GetUrl(IPublishedContent content, UrlMode mode, string culture, Uri current);
/// <summary>
/// Gets the other urls of a published content.
/// </summary>
/// <param name="umbracoContext">The Umbraco context.</param>
/// <param name="id">The published content id.</param>
/// <param name="current">The current absolute url.</param>
/// <returns>The other urls for the published content.</returns>
@@ -37,6 +35,6 @@ namespace Umbraco.Web.Routing
/// <para>Other urls are those that <c>GetUrl</c> would not return in the current context, but would be valid
/// urls for the node in other contexts (different domain for current request, umbracoUrlAlias...).</para>
/// </remarks>
IEnumerable<UrlInfo> GetOtherUrls(IUmbracoContext umbracoContext, int id, Uri current);
IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current);
}
}
+6 -6
View File
@@ -28,8 +28,8 @@ namespace Umbraco.Web.Routing
private readonly IVariationContextAccessor _variationContextAccessor;
private readonly ILogger _logger;
private readonly IUmbracoSettingsSection _umbracoSettingsSection;
private readonly IUserService _userService;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
/// <summary>
/// Initializes a new instance of the <see cref="PublishedRouter"/> class.
@@ -42,8 +42,8 @@ namespace Umbraco.Web.Routing
ServiceContext services,
IProfilingLogger proflog,
IUmbracoSettingsSection umbracoSettingsSection,
IUserService userService,
IHttpContextAccessor httpContextAccessor)
IHttpContextAccessor httpContextAccessor,
IPublishedUrlProvider publishedUrlProvider)
{
_webRoutingSection = webRoutingSection ?? throw new ArgumentNullException(nameof(webRoutingSection));
_contentFinders = contentFinders ?? throw new ArgumentNullException(nameof(contentFinders));
@@ -53,8 +53,8 @@ namespace Umbraco.Web.Routing
_variationContextAccessor = variationContextAccessor ?? throw new ArgumentNullException(nameof(variationContextAccessor));
_logger = proflog;
_umbracoSettingsSection = umbracoSettingsSection ?? throw new ArgumentNullException(nameof(umbracoSettingsSection));
_userService = userService ?? throw new ArgumentNullException(nameof(userService));
_httpContextAccessor = httpContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
/// <inheritdoc />
@@ -754,14 +754,14 @@ namespace Umbraco.Web.Routing
var redirectUrl = "#";
if (redirectId > 0)
{
redirectUrl = request.UmbracoContext.UrlProvider.GetUrl(redirectId);
redirectUrl = _publishedUrlProvider.GetUrl(redirectId);
}
else
{
// might be a UDI instead of an int Id
var redirectUdi = request.PublishedContent.Value<GuidUdi>(Constants.Conventions.Content.Redirect);
if (redirectUdi != null)
redirectUrl = request.UmbracoContext.UrlProvider.GetUrl(redirectUdi.Guid);
redirectUrl = _publishedUrlProvider.GetUrl(redirectUdi.Guid);
}
if (redirectUrl != "#")
request.SetRedirect(redirectUrl);
+15 -33
View File
@@ -4,7 +4,6 @@ using System.Linq;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Web.Composing;
namespace Umbraco.Web.Routing
{
@@ -17,18 +16,18 @@ namespace Umbraco.Web.Routing
#region Ctor and configuration
/// <summary>
/// InitialiIUrlProviderzes a new instance of the <see cref="UrlProvider"/> class with an Umbraco context and a list of url providers.
/// Initializes a new instance of the <see cref="UrlProvider"/> class with an Umbraco context and a list of url providers.
/// </summary>
/// <param name="umbracoContext">The Umbraco context.</param>
/// <param name="umbracoContextAccessor">The Umbraco context accessor.</param>
/// <param name="routingSettings">Routing settings.</param>
/// <param name="urlProviders">The list of url providers.</param>
/// <param name="mediaUrlProviders">The list of media url providers.</param>
/// <param name="variationContextAccessor">The current variation accessor.</param>
public UrlProvider(IUmbracoContext umbracoContext, IWebRoutingSection routingSettings, IEnumerable<IUrlProvider> urlProviders, IEnumerable<IMediaUrlProvider> mediaUrlProviders, IVariationContextAccessor variationContextAccessor)
public UrlProvider(Lazy<IUmbracoContextAccessor> umbracoContextAccessor, IWebRoutingSection routingSettings, UrlProviderCollection urlProviders, MediaUrlProviderCollection mediaUrlProviders, IVariationContextAccessor variationContextAccessor)
{
if (routingSettings == null) throw new ArgumentNullException(nameof(routingSettings));
_umbracoContext = umbracoContext ?? throw new ArgumentNullException(nameof(umbracoContext));
_umbracoContextAccessor = umbracoContextAccessor ?? throw new ArgumentNullException(nameof(umbracoContextAccessor));
_urlProviders = urlProviders;
_mediaUrlProviders = mediaUrlProviders;
_variationContextAccessor = variationContextAccessor ?? throw new ArgumentNullException(nameof(variationContextAccessor));
@@ -41,25 +40,8 @@ namespace Umbraco.Web.Routing
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UrlProvider"/> class with an Umbraco context and a list of url providers.
/// </summary>
/// <param name="umbracoContext">The Umbraco context.</param>
/// <param name="urlProviders">The list of url providers.</param>
/// <param name="mediaUrlProviders">The list of media url providers</param>
/// <param name="variationContextAccessor">The current variation accessor.</param>
/// <param name="mode">An optional provider mode.</param>
public UrlProvider(IUmbracoContext umbracoContext, IEnumerable<IUrlProvider> urlProviders, IEnumerable<IMediaUrlProvider> mediaUrlProviders, IVariationContextAccessor variationContextAccessor, UrlMode mode = UrlMode.Auto)
{
_umbracoContext = umbracoContext ?? throw new ArgumentNullException(nameof(umbracoContext));
_urlProviders = urlProviders;
_mediaUrlProviders = mediaUrlProviders;
_variationContextAccessor = variationContextAccessor;
Mode = mode;
}
private readonly IUmbracoContext _umbracoContext;
private readonly Lazy<IUmbracoContextAccessor> _umbracoContextAccessor;
private readonly IEnumerable<IUrlProvider> _urlProviders;
private readonly IEnumerable<IMediaUrlProvider> _mediaUrlProviders;
private readonly IVariationContextAccessor _variationContextAccessor;
@@ -73,9 +55,9 @@ namespace Umbraco.Web.Routing
#region GetUrl
private IPublishedContent GetDocument(int id) => _umbracoContext.Content.GetById(id);
private IPublishedContent GetDocument(Guid id) => _umbracoContext.Content.GetById(id);
private IPublishedContent GetMedia(Guid id) => _umbracoContext.Media.GetById(id);
private IPublishedContent GetDocument(int id) => _umbracoContextAccessor.Value.UmbracoContext.Content.GetById(id);
private IPublishedContent GetDocument(Guid id) => _umbracoContextAccessor.Value.UmbracoContext.Content.GetById(id);
private IPublishedContent GetMedia(Guid id) => _umbracoContextAccessor.Value.UmbracoContext.Media.GetById(id);
/// <summary>
/// Gets the url of a published content.
@@ -131,9 +113,9 @@ namespace Umbraco.Web.Routing
}
if (current == null)
current = _umbracoContext.CleanedUmbracoUrl;
current = _umbracoContextAccessor.Value.UmbracoContext.CleanedUmbracoUrl;
var url = _urlProviders.Select(provider => provider.GetUrl(_umbracoContext, content, mode, culture, current))
var url = _urlProviders.Select(provider => provider.GetUrl(content, mode, culture, current))
.FirstOrDefault(u => u != null);
return url?.Text ?? "#"; // legacy wants this
}
@@ -143,7 +125,7 @@ namespace Umbraco.Web.Routing
var provider = _urlProviders.OfType<DefaultUrlProvider>().FirstOrDefault();
var url = provider == null
? route // what else?
: provider.GetUrlFromRoute(route, Current.UmbracoContext, id, _umbracoContext.CleanedUmbracoUrl, Mode, culture)?.Text;
: provider.GetUrlFromRoute(route, _umbracoContextAccessor.Value.UmbracoContext, id, _umbracoContextAccessor.Value.UmbracoContext.CleanedUmbracoUrl, Mode, culture)?.Text;
return url ?? "#";
}
@@ -163,7 +145,7 @@ namespace Umbraco.Web.Routing
/// </remarks>
public IEnumerable<UrlInfo> GetOtherUrls(int id)
{
return GetOtherUrls(id, _umbracoContext.CleanedUmbracoUrl);
return GetOtherUrls(id, _umbracoContextAccessor.Value.UmbracoContext.CleanedUmbracoUrl);
}
/// <summary>
@@ -178,7 +160,7 @@ namespace Umbraco.Web.Routing
/// </remarks>
public IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
{
return _urlProviders.SelectMany(provider => provider.GetOtherUrls(_umbracoContext, id, current) ?? Enumerable.Empty<UrlInfo>());
return _urlProviders.SelectMany(provider => provider.GetOtherUrls(id, current) ?? Enumerable.Empty<UrlInfo>());
}
#endregion
@@ -232,10 +214,10 @@ namespace Umbraco.Web.Routing
}
if (current == null)
current = _umbracoContext.CleanedUmbracoUrl;
current = _umbracoContextAccessor.Value.UmbracoContext.CleanedUmbracoUrl;
var url = _mediaUrlProviders.Select(provider =>
provider.GetMediaUrl(_umbracoContext, content, propertyAlias, mode, culture, current))
provider.GetMediaUrl(content, propertyAlias, mode, culture, current))
.FirstOrDefault(u => u != null);
return url?.Text ?? "";
@@ -25,7 +25,8 @@ namespace Umbraco.Web.Routing
ILocalizedTextService textService,
IContentService contentService,
IVariationContextAccessor variationContextAccessor,
ILogger logger)
ILogger logger,
IPublishedUrlProvider publishedUrlProvider)
{
if (content == null) throw new ArgumentNullException(nameof(content));
if (publishedRouter == null) throw new ArgumentNullException(nameof(publishedRouter));
@@ -34,6 +35,7 @@ namespace Umbraco.Web.Routing
if (textService == null) throw new ArgumentNullException(nameof(textService));
if (contentService == null) throw new ArgumentNullException(nameof(contentService));
if (logger == null) throw new ArgumentNullException(nameof(logger));
if (publishedUrlProvider == null) throw new ArgumentNullException(nameof(publishedUrlProvider));
if (variationContextAccessor == null) throw new ArgumentNullException(nameof(variationContextAccessor));
if (content.Published == false)
@@ -59,7 +61,7 @@ namespace Umbraco.Web.Routing
//get all URLs for all cultures
//in a HashSet, so de-duplicates too
foreach (var cultureUrl in GetContentUrlsByCulture(content, cultures, publishedRouter, umbracoContext, contentService, textService, variationContextAccessor, logger))
foreach (var cultureUrl in GetContentUrlsByCulture(content, cultures, publishedRouter, umbracoContext, contentService, textService, variationContextAccessor, logger, publishedUrlProvider))
{
urls.Add(cultureUrl);
}
@@ -77,7 +79,7 @@ namespace Umbraco.Web.Routing
// get the 'other' urls - ie not what you'd get with GetUrl() but urls that would route to the document, nevertheless.
// for these 'other' urls, we don't check whether they are routable, collide, anything - we just report them.
foreach (var otherUrl in umbracoContext.UrlProvider.GetOtherUrls(content.Id).OrderBy(x => x.Text).ThenBy(x => x.Culture))
foreach (var otherUrl in publishedUrlProvider.GetOtherUrls(content.Id).OrderBy(x => x.Text).ThenBy(x => x.Culture))
if (urls.Add(otherUrl)) //avoid duplicates
yield return otherUrl;
}
@@ -100,7 +102,8 @@ namespace Umbraco.Web.Routing
IContentService contentService,
ILocalizedTextService textService,
IVariationContextAccessor variationContextAccessor,
ILogger logger)
ILogger logger,
IPublishedUrlProvider publishedUrlProvider)
{
foreach (var culture in cultures)
{
@@ -113,7 +116,7 @@ namespace Umbraco.Web.Routing
string url;
try
{
url = umbracoContext.UrlProvider.GetUrl(content.Id, culture: culture);
url = publishedUrlProvider.GetUrl(content.Id, culture: culture);
}
catch (Exception ex)
{
@@ -99,6 +99,7 @@ namespace Umbraco.Web.Runtime
// register the umbraco context factory
composition.RegisterUnique<IUmbracoContextFactory, UmbracoContextFactory>();
composition.RegisterUnique<IPublishedUrlProvider, UrlProvider>();
// register a per-request HttpContextBase object
// is per-request so only one wrapper is created per request
@@ -18,6 +18,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.Services;
using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
@@ -37,8 +38,8 @@ namespace Umbraco.Web.Trees
public ApplicationTreeController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger,
IRuntimeState runtimeState, ITreeService treeService, ISectionService sectionService, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
IRuntimeState runtimeState, ITreeService treeService, ISectionService sectionService, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper, IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeService = treeService;
_sectionService = sectionService;
+15 -1
View File
@@ -20,6 +20,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
@@ -51,7 +52,20 @@ namespace Umbraco.Web.Trees
protected override int[] UserStartNodes
=> _userStartNodes ?? (_userStartNodes = Security.CurrentUser.CalculateContentStartNodeIds(Services.EntityService));
public ContentTreeController(UmbracoTreeSearcher treeSearcher, ActionCollection actions, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public ContentTreeController(
UmbracoTreeSearcher treeSearcher,
ActionCollection actions,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeSearcher = treeSearcher;
_actions = actions;
@@ -22,13 +22,25 @@ using Umbraco.Core.Cache;
using Umbraco.Core.Configuration;
using Umbraco.Core.Persistence;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
public abstract class ContentTreeControllerBase : TreeController
{
protected ContentTreeControllerBase(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
protected ContentTreeControllerBase(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
}
@@ -14,6 +14,7 @@ using Umbraco.Core.Services;
using Umbraco.Web.Actions;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.Routing;
using Umbraco.Web.Search;
using Umbraco.Web.WebApi.Filters;
@@ -27,7 +28,19 @@ namespace Umbraco.Web.Trees
{
private readonly UmbracoTreeSearcher _treeSearcher;
public ContentTypeTreeController(UmbracoTreeSearcher treeSearcher, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public ContentTypeTreeController(
UmbracoTreeSearcher treeSearcher,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeSearcher = treeSearcher;
}
@@ -18,6 +18,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Web.Search;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
@@ -29,7 +30,19 @@ namespace Umbraco.Web.Trees
{
private readonly UmbracoTreeSearcher _treeSearcher;
public DataTypeTreeController(UmbracoTreeSearcher treeSearcher, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public DataTypeTreeController(
UmbracoTreeSearcher treeSearcher,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeSearcher = treeSearcher;
}
+14 -1
View File
@@ -21,6 +21,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Constants = Umbraco.Core.Constants;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
@@ -40,7 +41,19 @@ namespace Umbraco.Web.Trees
{
private readonly UmbracoTreeSearcher _treeSearcher;
public MediaTreeController(UmbracoTreeSearcher treeSearcher, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public MediaTreeController(
UmbracoTreeSearcher treeSearcher,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeSearcher = treeSearcher;
}
@@ -16,6 +16,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Web.Search;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
@@ -27,7 +28,19 @@ namespace Umbraco.Web.Trees
{
private readonly UmbracoTreeSearcher _treeSearcher;
public MediaTypeTreeController(UmbracoTreeSearcher treeSearcher, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public MediaTypeTreeController(
UmbracoTreeSearcher treeSearcher,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeSearcher = treeSearcher;
}
@@ -15,6 +15,7 @@ using Umbraco.Web.Actions;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Web.Models.Trees;
using Umbraco.Web.Mvc;
using Umbraco.Web.Routing;
using Umbraco.Web.Search;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
@@ -29,7 +30,19 @@ namespace Umbraco.Web.Trees
{
private readonly UmbracoTreeSearcher _treeSearcher;
public TemplatesTreeController(UmbracoTreeSearcher treeSearcher, IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper) : base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
public TemplatesTreeController(
UmbracoTreeSearcher treeSearcher,
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeSearcher = treeSearcher;
}
+13 -2
View File
@@ -7,6 +7,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Mapping;
using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
@@ -19,8 +20,18 @@ namespace Umbraco.Web.Trees
private readonly TreeAttribute _treeAttribute;
protected TreeController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
protected TreeController(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
_treeAttribute = GetTreeAttribute();
}
+13 -2
View File
@@ -17,6 +17,7 @@ using Umbraco.Web.WebApi;
using Umbraco.Web.WebApi.Filters;
using Umbraco.Core.Services;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.Trees
{
@@ -33,8 +34,18 @@ namespace Umbraco.Web.Trees
{
}
protected TreeControllerBase(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
protected TreeControllerBase(
IGlobalSettings globalSettings,
IUmbracoContextAccessor umbracoContextAccessor,
ISqlContext sqlContext,
ServiceContext services,
AppCaches appCaches,
IProfilingLogger logger,
IRuntimeState runtimeState,
UmbracoHelper umbracoHelper,
UmbracoMapper umbracoMapper,
IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
}
+8 -17
View File
@@ -21,6 +21,7 @@ namespace Umbraco.Web
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IGlobalSettings _globalSettings;
private readonly IIOHelper _ioHelper;
private readonly IPublishedUrlProvider _publishedUrlProvider;
private readonly Lazy<IPublishedSnapshot> _publishedSnapshot;
private string _previewToken;
private bool? _previewing;
@@ -32,23 +33,19 @@ namespace Umbraco.Web
internal UmbracoContext(IHttpContextAccessor httpContextAccessor,
IPublishedSnapshotService publishedSnapshotService,
IWebSecurity webSecurity,
IUmbracoSettingsSection umbracoSettings,
IEnumerable<IUrlProvider> urlProviders,
IEnumerable<IMediaUrlProvider> mediaUrlProviders,
IGlobalSettings globalSettings,
IVariationContextAccessor variationContextAccessor,
IIOHelper ioHelper)
IIOHelper ioHelper,
IPublishedUrlProvider publishedUrlProvider)
{
if (httpContextAccessor == null) throw new ArgumentNullException(nameof(httpContextAccessor));
if (publishedSnapshotService == null) throw new ArgumentNullException(nameof(publishedSnapshotService));
if (webSecurity == null) throw new ArgumentNullException(nameof(webSecurity));
if (umbracoSettings == null) throw new ArgumentNullException(nameof(umbracoSettings));
if (urlProviders == null) throw new ArgumentNullException(nameof(urlProviders));
if (mediaUrlProviders == null) throw new ArgumentNullException(nameof(mediaUrlProviders));
VariationContextAccessor = variationContextAccessor ?? throw new ArgumentNullException(nameof(variationContextAccessor));
_httpContextAccessor = httpContextAccessor;
_globalSettings = globalSettings ?? throw new ArgumentNullException(nameof(globalSettings));
_ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper));
_publishedUrlProvider = publishedUrlProvider;
// ensure that this instance is disposed when the request terminates, though we *also* ensure
// this happens in the Umbraco module since the UmbracoCOntext is added to the HttpContext items.
@@ -76,7 +73,6 @@ namespace Umbraco.Web
//
OriginalRequestUrl = GetRequestFromContext()?.Url ?? new Uri("http://localhost");
CleanedUmbracoUrl = UriUtility.UriToUmbraco(OriginalRequestUrl);
UrlProvider = new UrlProvider(this, umbracoSettings.WebRouting, urlProviders, mediaUrlProviders, variationContextAccessor);
}
/// <summary>
@@ -132,11 +128,6 @@ namespace Umbraco.Web
/// </summary>
public bool IsFrontEndUmbracoRequest => PublishedRequest != null;
/// <summary>
/// Gets the url provider.
/// </summary>
public IPublishedUrlProvider UrlProvider { get; }
/// <summary>
/// Gets/sets the PublishedRequest object
/// </summary>
@@ -188,7 +179,7 @@ namespace Umbraco.Web
/// <returns>The url for the content.</returns>
public string Url(int contentId, string culture = null)
{
return UrlProvider.GetUrl(contentId, culture: culture);
return _publishedUrlProvider.GetUrl(contentId, culture: culture);
}
/// <summary>
@@ -199,7 +190,7 @@ namespace Umbraco.Web
/// <returns>The url for the content.</returns>
public string Url(Guid contentId, string culture = null)
{
return UrlProvider.GetUrl(contentId, culture: culture);
return _publishedUrlProvider.GetUrl(contentId, culture: culture);
}
/// <summary>
@@ -211,7 +202,7 @@ namespace Umbraco.Web
/// <returns>The url for the content.</returns>
public string Url(int contentId, UrlMode mode, string culture = null)
{
return UrlProvider.GetUrl(contentId, mode, culture);
return _publishedUrlProvider.GetUrl(contentId, mode, culture);
}
/// <summary>
@@ -223,7 +214,7 @@ namespace Umbraco.Web
/// <returns>The url for the content.</returns>
public string Url(Guid contentId, UrlMode mode, string culture = null)
{
return UrlProvider.GetUrl(contentId, mode, culture);
return _publishedUrlProvider.GetUrl(contentId, mode, culture);
}
#endregion
+4 -9
View File
@@ -28,31 +28,26 @@ namespace Umbraco.Web
private readonly IVariationContextAccessor _variationContextAccessor;
private readonly IDefaultCultureAccessor _defaultCultureAccessor;
private readonly IUmbracoSettingsSection _umbracoSettings;
private readonly IGlobalSettings _globalSettings;
private readonly UrlProviderCollection _urlProviders;
private readonly MediaUrlProviderCollection _mediaUrlProviders;
private readonly IUserService _userService;
private readonly IIOHelper _ioHelper;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IPublishedUrlProvider _publishedUrlProvider;
/// <summary>
/// Initializes a new instance of the <see cref="UmbracoContextFactory"/> class.
/// </summary>
public UmbracoContextFactory(IUmbracoContextAccessor umbracoContextAccessor, IPublishedSnapshotService publishedSnapshotService, IVariationContextAccessor variationContextAccessor, IDefaultCultureAccessor defaultCultureAccessor, IUmbracoSettingsSection umbracoSettings, IGlobalSettings globalSettings, UrlProviderCollection urlProviders, MediaUrlProviderCollection mediaUrlProviders, IUserService userService, IIOHelper ioHelper, IHttpContextAccessor httpContextAccessor)
public UmbracoContextFactory(IUmbracoContextAccessor umbracoContextAccessor, IPublishedSnapshotService publishedSnapshotService, IVariationContextAccessor variationContextAccessor, IDefaultCultureAccessor defaultCultureAccessor, IGlobalSettings globalSettings, IUserService userService, IIOHelper ioHelper, IHttpContextAccessor httpContextAccessor, IPublishedUrlProvider publishedUrlProvider)
{
_umbracoContextAccessor = umbracoContextAccessor ?? throw new ArgumentNullException(nameof(umbracoContextAccessor));
_publishedSnapshotService = publishedSnapshotService ?? throw new ArgumentNullException(nameof(publishedSnapshotService));
_variationContextAccessor = variationContextAccessor ?? throw new ArgumentNullException(nameof(variationContextAccessor));
_defaultCultureAccessor = defaultCultureAccessor ?? throw new ArgumentNullException(nameof(defaultCultureAccessor));
_umbracoSettings = umbracoSettings ?? throw new ArgumentNullException(nameof(umbracoSettings));
_globalSettings = globalSettings ?? throw new ArgumentNullException(nameof(globalSettings));
_urlProviders = urlProviders ?? throw new ArgumentNullException(nameof(urlProviders));
_mediaUrlProviders = mediaUrlProviders ?? throw new ArgumentNullException(nameof(mediaUrlProviders));
_userService = userService ?? throw new ArgumentNullException(nameof(userService));
_ioHelper = ioHelper;
_httpContextAccessor = httpContextAccessor;
_publishedUrlProvider = publishedUrlProvider;
}
private IUmbracoContext CreateUmbracoContext()
@@ -71,7 +66,7 @@ namespace Umbraco.Web
var webSecurity = new WebSecurity(_httpContextAccessor, _userService, _globalSettings, _ioHelper);
return new UmbracoContext(_httpContextAccessor, _publishedSnapshotService, webSecurity, _umbracoSettings, _urlProviders, _mediaUrlProviders, _globalSettings, _variationContextAccessor, _ioHelper);
return new UmbracoContext(_httpContextAccessor, _publishedSnapshotService, webSecurity, _globalSettings, _variationContextAccessor, _ioHelper, _publishedUrlProvider);
}
/// <inheritdoc />
@@ -7,6 +7,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Mapping;
using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Web.Routing;
namespace Umbraco.Web.WebApi
{
@@ -19,8 +20,8 @@ namespace Umbraco.Web.WebApi
{
}
protected UmbracoApiController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
protected UmbracoApiController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper, IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
}
}
@@ -10,6 +10,7 @@ using Umbraco.Core.Logging;
using Umbraco.Core.Mapping;
using Umbraco.Core.Persistence;
using Umbraco.Core.Services;
using Umbraco.Web.Routing;
using Umbraco.Web.Security;
using Umbraco.Web.WebApi.Filters;
@@ -22,6 +23,7 @@ namespace Umbraco.Web.WebApi
[FeatureAuthorize]
public abstract class UmbracoApiControllerBase : ApiController
{
// note: all Umbraco controllers have two constructors: one with all dependencies, which should be used,
// and one with auto dependencies, ie no dependencies - and then dependencies are automatically obtained
// here from the Current service locator - this is obviously evil, but it allows us to add new dependencies
@@ -41,14 +43,15 @@ namespace Umbraco.Web.WebApi
Current.Factory.GetInstance<IProfilingLogger>(),
Current.Factory.GetInstance<IRuntimeState>(),
Current.Factory.GetInstance<UmbracoHelper>(),
Current.Factory.GetInstance<UmbracoMapper>()
Current.Factory.GetInstance<UmbracoMapper>(),
Current.Factory.GetInstance<IPublishedUrlProvider>()
)
{ }
/// <summary>
/// Initializes a new instance of the <see cref="UmbracoApiControllerBase"/> class with all its dependencies.
/// </summary>
protected UmbracoApiControllerBase(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper)
protected UmbracoApiControllerBase(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper, IPublishedUrlProvider publishedUrlProvider)
{
UmbracoContextAccessor = umbracoContextAccessor;
GlobalSettings = globalSettings;
@@ -59,6 +62,7 @@ namespace Umbraco.Web.WebApi
RuntimeState = runtimeState;
Umbraco = umbracoHelper;
Mapper = umbracoMapper;
PublishedUrlProvider = publishedUrlProvider;
}
/// <summary>
@@ -128,6 +132,8 @@ namespace Umbraco.Web.WebApi
/// </summary>
public UmbracoMapper Mapper { get; }
protected IPublishedUrlProvider PublishedUrlProvider { get; }
/// <summary>
/// Gets the web security helper.
/// </summary>
@@ -9,6 +9,7 @@ using Umbraco.Core.Services;
using Umbraco.Web.Models.Identity;
using Umbraco.Web.Security;
using Umbraco.Core.Mapping;
using Umbraco.Web.Routing;
namespace Umbraco.Web.WebApi
{
@@ -36,8 +37,8 @@ namespace Umbraco.Web.WebApi
{
}
protected UmbracoAuthorizedApiController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper)
protected UmbracoAuthorizedApiController(IGlobalSettings globalSettings, IUmbracoContextAccessor umbracoContextAccessor, ISqlContext sqlContext, ServiceContext services, AppCaches appCaches, IProfilingLogger logger, IRuntimeState runtimeState, UmbracoHelper umbracoHelper, UmbracoMapper umbracoMapper, IPublishedUrlProvider publishedUrlProvider)
: base(globalSettings, umbracoContextAccessor, sqlContext, services, appCaches, logger, runtimeState, umbracoHelper, umbracoMapper, publishedUrlProvider)
{
}