Merge branch 'v9/dev' into v9/feature/debug-dashboard
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>9.0.0</Version>
|
||||
<AssemblyVersion>9.0.0</AssemblyVersion>
|
||||
<InformationalVersion>9.0.0</InformationalVersion>
|
||||
<FileVersion>9.0.0</FileVersion>
|
||||
<Version>9.1.0</Version>
|
||||
<AssemblyVersion>9.1.0</AssemblyVersion>
|
||||
<InformationalVersion>9.1.0</InformationalVersion>
|
||||
<FileVersion>9.1.0</FileVersion>
|
||||
<LangVersion Condition="'$(LangVersion)' == ''">9.0</LangVersion>
|
||||
<NeutralLanguage>en-US</NeutralLanguage>
|
||||
<Company>Umbraco CMS</Company>
|
||||
|
||||
@@ -47,6 +47,7 @@ namespace JsonSchema
|
||||
public RichTextEditorSettings RichTextEditor { get; set; }
|
||||
public RuntimeMinificationSettings RuntimeMinification { get; set; }
|
||||
public BasicAuthSettings BasicAuth { get; set; }
|
||||
public PackageMigrationSettings PackageMigration { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
// Copyright (c) Umbraco.
|
||||
// See LICENSE for more details.
|
||||
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Umbraco.Cms.Core.Configuration.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// Typed configuration options for package migration settings.
|
||||
/// </summary>
|
||||
[UmbracoOptions(Constants.Configuration.ConfigPackageMigration)]
|
||||
public class PackageMigrationSettings
|
||||
{
|
||||
private const bool StaticRunSchemaAndContentMigrations = true;
|
||||
private const bool StaticAllowComponentOverrideOfRunSchemaAndContentMigrations = true;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether package migration steps that install schema and content should run.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// By default this is true and schema and content defined in a package migration are installed.
|
||||
/// Using configuration, administrators can optionally switch this off in certain environments.
|
||||
/// Deployment tools such as Umbraco Deploy can also configure this option to run or not run these migration
|
||||
/// steps as is appropriate for normal use of the tool.
|
||||
/// </remarks>
|
||||
[DefaultValue(StaticRunSchemaAndContentMigrations)]
|
||||
public bool RunSchemaAndContentMigrations { get; set; } = StaticRunSchemaAndContentMigrations;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether components can override the configured value for <see cref="RunSchemaAndContentMigrations"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// By default this is true and components can override the configured setting for <see cref="RunSchemaAndContentMigrations"/>.
|
||||
/// If an administrator wants explicit control over which environments migration steps installing schema and content can run,
|
||||
/// they can set this to false. Components should respect this and not override the configuration.
|
||||
/// </remarks>
|
||||
[DefaultValue(StaticAllowComponentOverrideOfRunSchemaAndContentMigrations)]
|
||||
public bool AllowComponentOverrideOfRunSchemaAndContentMigrations { get; set; } = StaticAllowComponentOverrideOfRunSchemaAndContentMigrations;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ namespace Umbraco.Cms.Core.Configuration.Models
|
||||
{
|
||||
internal const bool StaticUseInMemoryCache = false;
|
||||
internal const string StaticCacheBuster = "Version";
|
||||
internal const string StaticVersion = null;
|
||||
|
||||
/// <summary>
|
||||
/// Use in memory cache
|
||||
@@ -19,5 +20,11 @@ namespace Umbraco.Cms.Core.Configuration.Models
|
||||
/// </summary>
|
||||
[DefaultValue(StaticCacheBuster)]
|
||||
public RuntimeMinificationCacheBuster CacheBuster { get; set; } = Enum<RuntimeMinificationCacheBuster>.Parse(StaticCacheBuster);
|
||||
|
||||
/// <summary>
|
||||
/// The unique version string used if CacheBuster is 'Version'.
|
||||
/// </summary>
|
||||
[DefaultValue(StaticVersion)]
|
||||
public string Version { get; set; } = StaticVersion;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
using System.ComponentModel;
|
||||
// Copyright (c) Umbraco.
|
||||
// See LICENSE for more details.
|
||||
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Umbraco.Cms.Core.Configuration.Models
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Typed configuration options for unattended settings.
|
||||
/// </summary>
|
||||
[UmbracoOptions(Constants.Configuration.ConfigUnattended)]
|
||||
public class UnattendedSettings
|
||||
{
|
||||
internal const bool StaticInstallUnattended = false;
|
||||
internal const bool StaticUpgradeUnattended = false;
|
||||
private const bool StaticInstallUnattended = false;
|
||||
private const bool StaticUpgradeUnattended = false;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether unattended installs are enabled.
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
public const string ConfigWebRouting = ConfigPrefix + "WebRouting";
|
||||
public const string ConfigUserPassword = ConfigPrefix + "Security:UserPassword";
|
||||
public const string ConfigRichTextEditor = ConfigPrefix + "RichTextEditor";
|
||||
public const string ConfigPackageMigration = ConfigPrefix + "PackageMigration";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,22 +4,22 @@ using System.ComponentModel;
|
||||
namespace Umbraco.Cms.Web.Common.DependencyInjection
|
||||
{
|
||||
/// <summary>
|
||||
/// INTERNAL Service locator. Should only be used if no other ways exist.
|
||||
/// Service locator for internal (umbraco cms) only purposes. Should only be used if no other ways exist.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// It is created with only two goals in mind
|
||||
/// 1) Continue to have the same extension methods on IPublishedContent and IPublishedElement as in V8. To make migration easier.
|
||||
/// 2) To have a tool to avoid breaking changes in minor versions. All methods using this should in theory be obsolete.
|
||||
/// 2) To have a tool to avoid breaking changes in minor and patch versions. All methods using this should in theory be obsolete.
|
||||
///
|
||||
/// Keep in mind, every time this is used, the code becomes basically untestable.
|
||||
/// </remarks>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
internal static class StaticServiceProvider
|
||||
public static class StaticServiceProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// The service locator.
|
||||
/// </summary>
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
internal static IServiceProvider Instance { get; set; }
|
||||
public static IServiceProvider Instance { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -72,7 +72,8 @@ namespace Umbraco.Cms.Core.DependencyInjection
|
||||
.AddUmbracoOptions<UnattendedSettings>()
|
||||
.AddUmbracoOptions<RichTextEditorSettings>()
|
||||
.AddUmbracoOptions<BasicAuthSettings>()
|
||||
.AddUmbracoOptions<RuntimeMinificationSettings>();
|
||||
.AddUmbracoOptions<RuntimeMinificationSettings>()
|
||||
.AddUmbracoOptions<PackageMigrationSettings>();
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Sync;
|
||||
using Umbraco.Cms.Core.Templates;
|
||||
using Umbraco.Cms.Core.Web;
|
||||
using Umbraco.Cms.Web.Common.DependencyInjection;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Core.DependencyInjection
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Umbraco.Cms.Core.Packaging
|
||||
public IEnumerable<IPartialView> PartialViewsInstalled { get; set; } = Enumerable.Empty<IPartialView>();
|
||||
public IEnumerable<IContent> ContentInstalled { get; set; } = Enumerable.Empty<IContent>();
|
||||
public IEnumerable<IMedia> MediaInstalled { get; set; } = Enumerable.Empty<IMedia>();
|
||||
public IEnumerable<EntityContainer> EntityContainersInstalled { get; set; } = Enumerable.Empty<EntityContainer>();
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
@@ -77,6 +78,7 @@ namespace Umbraco.Cms.Core.Packaging
|
||||
WriteCount("Stylesheets installed: ", StylesheetsInstalled);
|
||||
WriteCount("Scripts installed: ", ScriptsInstalled);
|
||||
WriteCount("Partial views installed: ", PartialViewsInstalled);
|
||||
WriteCount("Entity containers installed: ", EntityContainersInstalled);
|
||||
WriteCount("Content items installed: ", ContentInstalled);
|
||||
WriteCount("Media items installed: ", MediaInstalled, false);
|
||||
|
||||
|
||||
@@ -237,7 +237,7 @@ namespace Umbraco.Cms.Core.Routing
|
||||
|
||||
// re-route
|
||||
await RouteRequestInternalAsync(builder);
|
||||
|
||||
|
||||
// return if we are redirect
|
||||
if (builder.IsRedirect())
|
||||
{
|
||||
@@ -252,6 +252,11 @@ namespace Umbraco.Cms.Core.Routing
|
||||
builder.SetPublishedContent(content);
|
||||
}
|
||||
|
||||
if (!builder.HasDomain())
|
||||
{
|
||||
FindDomain(builder);
|
||||
}
|
||||
|
||||
return BuildRequest(builder);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Umbraco.Cms.Core
|
||||
|
||||
public int CompareTo(Udi other)
|
||||
{
|
||||
return string.Compare(UriValue.ToString(), other.UriValue.ToString(), StringComparison.InvariantCultureIgnoreCase);
|
||||
return string.Compare(UriValue.ToString(), other.UriValue.ToString(), StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.Xml.Linq;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.Serialization;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Strings;
|
||||
using Umbraco.Cms.Infrastructure.Migrations;
|
||||
@@ -20,7 +21,8 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
MediaUrlGeneratorCollection mediaUrlGenerators,
|
||||
IShortStringHelper shortStringHelper,
|
||||
IContentTypeBaseServiceProvider contentTypeBaseServiceProvider,
|
||||
IMigrationContext context)
|
||||
IMigrationContext context,
|
||||
IOptions<PackageMigrationSettings> options)
|
||||
: base(new ImportPackageBuilderExpression(
|
||||
packagingService,
|
||||
mediaService,
|
||||
@@ -28,7 +30,8 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
mediaUrlGenerators,
|
||||
shortStringHelper,
|
||||
contentTypeBaseServiceProvider,
|
||||
context))
|
||||
context,
|
||||
options))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,9 @@ using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Packaging;
|
||||
@@ -25,7 +27,9 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
private readonly MediaUrlGeneratorCollection _mediaUrlGenerators;
|
||||
private readonly IPackagingService _packagingService;
|
||||
private readonly IShortStringHelper _shortStringHelper;
|
||||
private bool _executed;
|
||||
private readonly PackageMigrationSettings _packageMigrationSettings;
|
||||
|
||||
private bool _executed;
|
||||
|
||||
public ImportPackageBuilderExpression(
|
||||
IPackagingService packagingService,
|
||||
@@ -34,7 +38,8 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
MediaUrlGeneratorCollection mediaUrlGenerators,
|
||||
IShortStringHelper shortStringHelper,
|
||||
IContentTypeBaseServiceProvider contentTypeBaseServiceProvider,
|
||||
IMigrationContext context) : base(context)
|
||||
IMigrationContext context,
|
||||
IOptions<PackageMigrationSettings> packageMigrationSettings) : base(context)
|
||||
{
|
||||
_packagingService = packagingService;
|
||||
_mediaService = mediaService;
|
||||
@@ -42,6 +47,7 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
_mediaUrlGenerators = mediaUrlGenerators;
|
||||
_shortStringHelper = shortStringHelper;
|
||||
_contentTypeBaseServiceProvider = contentTypeBaseServiceProvider;
|
||||
_packageMigrationSettings = packageMigrationSettings.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -59,6 +65,7 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
}
|
||||
|
||||
_executed = true;
|
||||
|
||||
Context.BuildingExpression = false;
|
||||
|
||||
if (EmbeddedResourceMigrationType == null && PackageDataManifest == null)
|
||||
@@ -67,6 +74,12 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
$"Nothing to execute, neither {nameof(EmbeddedResourceMigrationType)} or {nameof(PackageDataManifest)} has been set.");
|
||||
}
|
||||
|
||||
if (!_packageMigrationSettings.RunSchemaAndContentMigrations)
|
||||
{
|
||||
Logger.LogInformation("Skipping import of embedded schema file, due to configuration");
|
||||
return;
|
||||
}
|
||||
|
||||
InstallationSummary installationSummary;
|
||||
if (EmbeddedResourceMigrationType != null)
|
||||
{
|
||||
|
||||
@@ -91,19 +91,25 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
var installationSummary = new InstallationSummary(compiledPackage.Name)
|
||||
{
|
||||
Warnings = compiledPackage.Warnings,
|
||||
DataTypesInstalled = ImportDataTypes(compiledPackage.DataTypes.ToList(), userId),
|
||||
DataTypesInstalled = ImportDataTypes(compiledPackage.DataTypes.ToList(), userId, out IEnumerable<EntityContainer> dataTypeEntityContainersInstalled),
|
||||
LanguagesInstalled = ImportLanguages(compiledPackage.Languages, userId),
|
||||
DictionaryItemsInstalled = ImportDictionaryItems(compiledPackage.DictionaryItems, userId),
|
||||
MacrosInstalled = ImportMacros(compiledPackage.Macros, userId),
|
||||
MacroPartialViewsInstalled = ImportMacroPartialViews(compiledPackage.MacroPartialViews, userId),
|
||||
TemplatesInstalled = ImportTemplates(compiledPackage.Templates.ToList(), userId),
|
||||
DocumentTypesInstalled = ImportDocumentTypes(compiledPackage.DocumentTypes, userId),
|
||||
MediaTypesInstalled = ImportMediaTypes(compiledPackage.MediaTypes, userId),
|
||||
DocumentTypesInstalled = ImportDocumentTypes(compiledPackage.DocumentTypes, userId, out IEnumerable<EntityContainer> documentTypeEntityContainersInstalled),
|
||||
MediaTypesInstalled = ImportMediaTypes(compiledPackage.MediaTypes, userId, out IEnumerable<EntityContainer> mediaTypeEntityContainersInstalled),
|
||||
StylesheetsInstalled = ImportStylesheets(compiledPackage.Stylesheets, userId),
|
||||
ScriptsInstalled = ImportScripts(compiledPackage.Scripts, userId),
|
||||
PartialViewsInstalled = ImportPartialViews(compiledPackage.PartialViews, userId)
|
||||
};
|
||||
|
||||
var entityContainersInstalled = new List<EntityContainer>();
|
||||
entityContainersInstalled.AddRange(dataTypeEntityContainersInstalled);
|
||||
entityContainersInstalled.AddRange(documentTypeEntityContainersInstalled);
|
||||
entityContainersInstalled.AddRange(mediaTypeEntityContainersInstalled);
|
||||
installationSummary.EntityContainersInstalled = entityContainersInstalled;
|
||||
|
||||
// We need a reference to the imported doc types to continue
|
||||
var importedDocTypes = installationSummary.DocumentTypesInstalled.ToDictionary(x => x.Alias, x => x);
|
||||
var importedMediaTypes = installationSummary.MediaTypesInstalled.ToDictionary(x => x.Alias, x => x);
|
||||
@@ -116,6 +122,7 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
return installationSummary;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IContentType"/>
|
||||
/// </summary>
|
||||
@@ -123,7 +130,17 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
/// <param name="userId">Optional id of the User performing the operation. Default is zero (admin).</param>
|
||||
/// <returns>An enumerable list of generated ContentTypes</returns>
|
||||
public IReadOnlyList<IMediaType> ImportMediaTypes(IEnumerable<XElement> docTypeElements, int userId)
|
||||
=> ImportDocumentTypes(docTypeElements.ToList(), true, userId, _mediaTypeService);
|
||||
=> ImportMediaTypes(docTypeElements, userId, out _);
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IContentType"/>
|
||||
/// </summary>
|
||||
/// <param name="docTypeElements">Xml to import</param>
|
||||
/// <param name="userId">Optional id of the User performing the operation. Default is zero (admin).</param>
|
||||
/// <param name="entityContainersInstalled">Collection of entity containers installed by the package to be populated with those created in installing data types.</param>
|
||||
/// <returns>An enumerable list of generated ContentTypes</returns>
|
||||
public IReadOnlyList<IMediaType> ImportMediaTypes(IEnumerable<XElement> docTypeElements, int userId, out IEnumerable<EntityContainer> entityContainersInstalled)
|
||||
=> ImportDocumentTypes(docTypeElements.ToList(), true, userId, _mediaTypeService, out entityContainersInstalled);
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -408,7 +425,7 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
#region DocumentTypes
|
||||
|
||||
public IReadOnlyList<IContentType> ImportDocumentType(XElement docTypeElement, int userId)
|
||||
=> ImportDocumentTypes(new[] { docTypeElement }, userId);
|
||||
=> ImportDocumentTypes(new[] { docTypeElement }, userId, out _);
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IContentType"/>
|
||||
@@ -417,7 +434,17 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
/// <param name="userId">Optional id of the User performing the operation. Default is zero (admin).</param>
|
||||
/// <returns>An enumerable list of generated ContentTypes</returns>
|
||||
public IReadOnlyList<IContentType> ImportDocumentTypes(IEnumerable<XElement> docTypeElements, int userId)
|
||||
=> ImportDocumentTypes(docTypeElements.ToList(), true, userId, _contentTypeService);
|
||||
=> ImportDocumentTypes(docTypeElements.ToList(), true, userId, _contentTypeService, out _);
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IContentType"/>
|
||||
/// </summary>
|
||||
/// <param name="docTypeElements">Xml to import</param>
|
||||
/// <param name="userId">Optional id of the User performing the operation. Default is zero (admin).</param>
|
||||
/// <param name="entityContainersInstalled">Collection of entity containers installed by the package to be populated with those created in installing data types.</param>
|
||||
/// <returns>An enumerable list of generated ContentTypes</returns>
|
||||
public IReadOnlyList<IContentType> ImportDocumentTypes(IEnumerable<XElement> docTypeElements, int userId, out IEnumerable<EntityContainer> entityContainersInstalled)
|
||||
=> ImportDocumentTypes(docTypeElements.ToList(), true, userId, _contentTypeService, out entityContainersInstalled);
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IContentType"/>
|
||||
@@ -428,6 +455,18 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
/// <returns>An enumerable list of generated ContentTypes</returns>
|
||||
public IReadOnlyList<T> ImportDocumentTypes<T>(IReadOnlyCollection<XElement> unsortedDocumentTypes, bool importStructure, int userId, IContentTypeBaseService<T> service)
|
||||
where T : class, IContentTypeComposition
|
||||
=> ImportDocumentTypes(unsortedDocumentTypes, importStructure, userId, service);
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IContentType"/>
|
||||
/// </summary>
|
||||
/// <param name="unsortedDocumentTypes">Xml to import</param>
|
||||
/// <param name="importStructure">Boolean indicating whether or not to import the </param>
|
||||
/// <param name="userId">Optional id of the User performing the operation. Default is zero (admin).</param>
|
||||
/// <param name="entityContainersInstalled">Collection of entity containers installed by the package to be populated with those created in installing data types.</param>
|
||||
/// <returns>An enumerable list of generated ContentTypes</returns>
|
||||
public IReadOnlyList<T> ImportDocumentTypes<T>(IReadOnlyCollection<XElement> unsortedDocumentTypes, bool importStructure, int userId, IContentTypeBaseService<T> service, out IEnumerable<EntityContainer> entityContainersInstalled)
|
||||
where T : class, IContentTypeComposition
|
||||
{
|
||||
var importedContentTypes = new Dictionary<string, T>();
|
||||
|
||||
@@ -436,7 +475,7 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
var graph = new TopoGraph<string, TopoGraph.Node<string, XElement>>(x => x.Key, x => x.Dependencies);
|
||||
var isSingleDocTypeImport = unsortedDocumentTypes.Count == 1;
|
||||
|
||||
var importedFolders = CreateContentTypeFolderStructure(unsortedDocumentTypes);
|
||||
var importedFolders = CreateContentTypeFolderStructure(unsortedDocumentTypes, out entityContainersInstalled);
|
||||
|
||||
if (isSingleDocTypeImport == false)
|
||||
{
|
||||
@@ -532,9 +571,10 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
return list;
|
||||
}
|
||||
|
||||
private Dictionary<string, int> CreateContentTypeFolderStructure(IEnumerable<XElement> unsortedDocumentTypes)
|
||||
private Dictionary<string, int> CreateContentTypeFolderStructure(IEnumerable<XElement> unsortedDocumentTypes, out IEnumerable<EntityContainer> entityContainersInstalled)
|
||||
{
|
||||
var importedFolders = new Dictionary<string, int>();
|
||||
var trackEntityContainersInstalled = new List<EntityContainer>();
|
||||
foreach (var documentType in unsortedDocumentTypes)
|
||||
{
|
||||
var foldersAttribute = documentType.Attribute("Folders");
|
||||
@@ -578,8 +618,10 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
_logger.LogError(tryCreateFolder.Exception, "Could not create folder: {FolderName}", rootFolder);
|
||||
throw tryCreateFolder.Exception;
|
||||
}
|
||||
|
||||
var rootFolderId = tryCreateFolder.Result.Entity.Id;
|
||||
current = _contentTypeService.GetContainer(rootFolderId);
|
||||
trackEntityContainersInstalled.Add(current);
|
||||
}
|
||||
|
||||
importedFolders.Add(alias, current.Id);
|
||||
@@ -589,11 +631,13 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
var folderName = WebUtility.UrlDecode(folders[i]);
|
||||
Guid? folderKey = (folderKeys.Length == folders.Length) ? folderKeys[i] : null;
|
||||
current = CreateContentTypeChildFolder(folderName, folderKey ?? Guid.NewGuid(), current);
|
||||
trackEntityContainersInstalled.Add(current);
|
||||
importedFolders[alias] = current.Id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entityContainersInstalled = trackEntityContainersInstalled;
|
||||
return importedFolders;
|
||||
}
|
||||
|
||||
@@ -1012,10 +1056,20 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
/// <param name="userId">Optional id of the user</param>
|
||||
/// <returns>An enumerable list of generated DataTypeDefinitions</returns>
|
||||
public IReadOnlyList<IDataType> ImportDataTypes(IReadOnlyCollection<XElement> dataTypeElements, int userId)
|
||||
=> ImportDataTypes(dataTypeElements, userId, out _);
|
||||
|
||||
/// <summary>
|
||||
/// Imports and saves package xml as <see cref="IDataType"/>
|
||||
/// </summary>
|
||||
/// <param name="dataTypeElements">Xml to import</param>
|
||||
/// <param name="userId">Optional id of the user</param>
|
||||
/// <param name="entityContainersInstalled">Collection of entity containers installed by the package to be populated with those created in installing data types.</param>
|
||||
/// <returns>An enumerable list of generated DataTypeDefinitions</returns>
|
||||
public IReadOnlyList<IDataType> ImportDataTypes(IReadOnlyCollection<XElement> dataTypeElements, int userId, out IEnumerable<EntityContainer> entityContainersInstalled)
|
||||
{
|
||||
var dataTypes = new List<IDataType>();
|
||||
|
||||
var importedFolders = CreateDataTypeFolderStructure(dataTypeElements);
|
||||
var importedFolders = CreateDataTypeFolderStructure(dataTypeElements, out entityContainersInstalled);
|
||||
|
||||
foreach (var dataTypeElement in dataTypeElements)
|
||||
{
|
||||
@@ -1072,9 +1126,10 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
return dataTypes;
|
||||
}
|
||||
|
||||
private Dictionary<string, int> CreateDataTypeFolderStructure(IEnumerable<XElement> datatypeElements)
|
||||
private Dictionary<string, int> CreateDataTypeFolderStructure(IEnumerable<XElement> datatypeElements, out IEnumerable<EntityContainer> entityContainersInstalled)
|
||||
{
|
||||
var importedFolders = new Dictionary<string, int>();
|
||||
var trackEntityContainersInstalled = new List<EntityContainer>();
|
||||
foreach (var datatypeElement in datatypeElements)
|
||||
{
|
||||
var foldersAttribute = datatypeElement.Attribute("Folders");
|
||||
@@ -1103,7 +1158,9 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
_logger.LogError(tryCreateFolder.Exception, "Could not create folder: {FolderName}", rootFolder);
|
||||
throw tryCreateFolder.Exception;
|
||||
}
|
||||
|
||||
current = _dataTypeService.GetContainer(tryCreateFolder.Result.Entity.Id);
|
||||
trackEntityContainersInstalled.Add(current);
|
||||
}
|
||||
|
||||
importedFolders.Add(name, current.Id);
|
||||
@@ -1113,11 +1170,12 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
var folderName = WebUtility.UrlDecode(folders[i]);
|
||||
Guid? folderKey = (folderKeys.Length == folders.Length) ? folderKeys[i] : null;
|
||||
current = CreateDataTypeChildFolder(folderName, folderKey ?? Guid.NewGuid(), current);
|
||||
trackEntityContainersInstalled.Add(current);
|
||||
importedFolders[name] = current.Id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entityContainersInstalled = trackEntityContainersInstalled;
|
||||
return importedFolders;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Strings;
|
||||
using Umbraco.Cms.Infrastructure.Migrations;
|
||||
using Umbraco.Cms.Web.Common.DependencyInjection;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
{
|
||||
|
||||
public abstract class PackageMigrationBase : MigrationBase
|
||||
{
|
||||
private readonly IPackagingService _packagingService;
|
||||
@@ -15,6 +20,7 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
private readonly MediaUrlGeneratorCollection _mediaUrlGenerators;
|
||||
private readonly IShortStringHelper _shortStringHelper;
|
||||
private readonly IContentTypeBaseServiceProvider _contentTypeBaseServiceProvider;
|
||||
private readonly IOptions<PackageMigrationSettings> _packageMigrationsSettings;
|
||||
|
||||
public PackageMigrationBase(
|
||||
IPackagingService packagingService,
|
||||
@@ -23,7 +29,8 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
MediaUrlGeneratorCollection mediaUrlGenerators,
|
||||
IShortStringHelper shortStringHelper,
|
||||
IContentTypeBaseServiceProvider contentTypeBaseServiceProvider,
|
||||
IMigrationContext context)
|
||||
IMigrationContext context,
|
||||
IOptions<PackageMigrationSettings> packageMigrationsSettings)
|
||||
: base(context)
|
||||
{
|
||||
_packagingService = packagingService;
|
||||
@@ -32,6 +39,29 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
_mediaUrlGenerators = mediaUrlGenerators;
|
||||
_shortStringHelper = shortStringHelper;
|
||||
_contentTypeBaseServiceProvider = contentTypeBaseServiceProvider;
|
||||
_packageMigrationsSettings = packageMigrationsSettings;
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
[Obsolete("Use ctor with all params")]
|
||||
public PackageMigrationBase(
|
||||
IPackagingService packagingService,
|
||||
IMediaService mediaService,
|
||||
MediaFileManager mediaFileManager,
|
||||
MediaUrlGeneratorCollection mediaUrlGenerators,
|
||||
IShortStringHelper shortStringHelper,
|
||||
IContentTypeBaseServiceProvider contentTypeBaseServiceProvider,
|
||||
IMigrationContext context)
|
||||
: this(
|
||||
packagingService,
|
||||
mediaService,
|
||||
mediaFileManager,
|
||||
mediaUrlGenerators,
|
||||
shortStringHelper,
|
||||
contentTypeBaseServiceProvider,
|
||||
context,
|
||||
StaticServiceProvider.Instance.GetRequiredService<IOptions<PackageMigrationSettings>>())
|
||||
{
|
||||
}
|
||||
|
||||
public IImportPackageBuilder ImportPackage => BeginBuild(
|
||||
@@ -42,7 +72,8 @@ namespace Umbraco.Cms.Infrastructure.Packaging
|
||||
_mediaUrlGenerators,
|
||||
_shortStringHelper,
|
||||
_contentTypeBaseServiceProvider,
|
||||
Context));
|
||||
Context,
|
||||
_packageMigrationsSettings));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using Microsoft.Extensions.Options;
|
||||
using NPoco;
|
||||
using NPoco.FluentMappings;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Configuration;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Infrastructure.Migrations.Install;
|
||||
using Umbraco.Cms.Infrastructure.Persistence.FaultHandling;
|
||||
@@ -72,6 +73,47 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
|
||||
#region Constructors
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UmbracoDatabaseFactory"/>.
|
||||
/// </summary>
|
||||
/// <remarks>Used by the other ctor and in tests.</remarks>
|
||||
internal UmbracoDatabaseFactory(
|
||||
ILogger<UmbracoDatabaseFactory> logger,
|
||||
ILoggerFactory loggerFactory,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IMapperCollection mappers,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
NPocoMapperCollection npocoMappers,
|
||||
string connectionString)
|
||||
{
|
||||
_globalSettings = globalSettings;
|
||||
_mappers = mappers ?? throw new ArgumentNullException(nameof(mappers));
|
||||
_dbProviderFactoryCreator = dbProviderFactoryCreator ?? throw new ArgumentNullException(nameof(dbProviderFactoryCreator));
|
||||
_databaseSchemaCreatorFactory = databaseSchemaCreatorFactory ?? throw new ArgumentNullException(nameof(databaseSchemaCreatorFactory));
|
||||
_npocoMappers = npocoMappers;
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
_loggerFactory = loggerFactory;
|
||||
|
||||
if (connectionString is null)
|
||||
{
|
||||
logger.LogDebug("Missing connection string, defer configuration.");
|
||||
return; // not configured
|
||||
}
|
||||
|
||||
var configConnectionString = new ConfigConnectionString("Custom", connectionString);
|
||||
// could as well be <add name="umbracoDbDSN" connectionString="" providerName="" />
|
||||
// so need to test the values too
|
||||
if (configConnectionString.IsConnectionStringConfigured() == false)
|
||||
{
|
||||
logger.LogDebug("Empty connection string or provider name, defer configuration.");
|
||||
return; // not configured
|
||||
}
|
||||
|
||||
Configure(configConnectionString.ConnectionString, configConnectionString.ProviderName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UmbracoDatabaseFactory"/>.
|
||||
/// </summary>
|
||||
@@ -84,33 +126,10 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
IMapperCollection mappers,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
NPocoMapperCollection npocoMappers)
|
||||
NPocoMapperCollection npocoMappers):
|
||||
this(logger, loggerFactory, globalSettings, mappers, dbProviderFactoryCreator, databaseSchemaCreatorFactory, npocoMappers, connectionStrings?.CurrentValue?.UmbracoConnectionString?.ConnectionString)
|
||||
{
|
||||
|
||||
_globalSettings = globalSettings;
|
||||
_mappers = mappers ?? throw new ArgumentNullException(nameof(mappers));
|
||||
_dbProviderFactoryCreator = dbProviderFactoryCreator ?? throw new ArgumentNullException(nameof(dbProviderFactoryCreator));
|
||||
_databaseSchemaCreatorFactory = databaseSchemaCreatorFactory ?? throw new ArgumentNullException(nameof(databaseSchemaCreatorFactory));
|
||||
_npocoMappers = npocoMappers;
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
_loggerFactory = loggerFactory;
|
||||
|
||||
var settings = connectionStrings.CurrentValue.UmbracoConnectionString;
|
||||
if (settings == null)
|
||||
{
|
||||
logger.LogDebug("Missing connection string, defer configuration.");
|
||||
return; // not configured
|
||||
}
|
||||
|
||||
// could as well be <add name="umbracoDbDSN" connectionString="" providerName="" />
|
||||
// so need to test the values too
|
||||
if (settings.IsConnectionStringConfigured() == false)
|
||||
{
|
||||
logger.LogDebug("Empty connection string or provider name, defer configuration.");
|
||||
return; // not configured
|
||||
}
|
||||
|
||||
Configure(settings.ConnectionString, settings.ProviderName);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using NPoco;
|
||||
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
{
|
||||
@@ -18,6 +16,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
/// <para>So far, this is very manual. We don't try to be clever and figure out whether the
|
||||
/// columns exist already. We just ignore it.</para>
|
||||
/// <para>Beware, the application MUST restart when this class behavior changes.</para>
|
||||
/// <para>You can override the GetColmunnInfo method to control which columns this includes</para>
|
||||
/// </remarks>
|
||||
internal class UmbracoPocoDataBuilder : PocoDataBuilder
|
||||
{
|
||||
@@ -28,19 +27,5 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
{
|
||||
_upgrading = upgrading;
|
||||
}
|
||||
|
||||
protected override ColumnInfo GetColumnInfo(MemberInfo mi, Type type)
|
||||
{
|
||||
var columnInfo = base.GetColumnInfo(mi, type);
|
||||
|
||||
// TODO: Is this upgrade flag still relevant? It's a lot of hacking to just set this value
|
||||
// including the interface method ConfigureForUpgrade for this one circumstance.
|
||||
if (_upgrading)
|
||||
{
|
||||
if (type == typeof(UserDto) && mi.Name == "TourData") columnInfo.IgnoreColumn = true;
|
||||
}
|
||||
|
||||
return columnInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Composing;
|
||||
using Umbraco.Cms.Core.Configuration;
|
||||
using Umbraco.Cms.Core.Events;
|
||||
using Umbraco.Cms.Core.Exceptions;
|
||||
@@ -13,7 +13,9 @@ using Umbraco.Cms.Core.Notifications;
|
||||
using Umbraco.Cms.Core.Runtime;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
using Umbraco.Cms.Web.Common.DependencyInjection;
|
||||
using Umbraco.Extensions;
|
||||
using ComponentCollection = Umbraco.Cms.Core.Composing.ComponentCollection;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
{
|
||||
@@ -29,6 +31,7 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly IHostingEnvironment _hostingEnvironment;
|
||||
private readonly IUmbracoVersion _umbracoVersion;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private CancellationToken _cancellationToken;
|
||||
|
||||
/// <summary>
|
||||
@@ -44,7 +47,8 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
IUmbracoDatabaseFactory databaseFactory,
|
||||
IEventAggregator eventAggregator,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
IUmbracoVersion umbracoVersion)
|
||||
IUmbracoVersion umbracoVersion,
|
||||
IServiceProvider serviceProvider)
|
||||
{
|
||||
State = state;
|
||||
_loggerFactory = loggerFactory;
|
||||
@@ -56,9 +60,40 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
_eventAggregator = eventAggregator;
|
||||
_hostingEnvironment = hostingEnvironment;
|
||||
_umbracoVersion = umbracoVersion;
|
||||
_serviceProvider = serviceProvider;
|
||||
_logger = _loggerFactory.CreateLogger<CoreRuntime>();
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
[Obsolete]
|
||||
public CoreRuntime(
|
||||
ILoggerFactory loggerFactory,
|
||||
IRuntimeState state,
|
||||
ComponentCollection components,
|
||||
IApplicationShutdownRegistry applicationShutdownRegistry,
|
||||
IProfilingLogger profilingLogger,
|
||||
IMainDom mainDom,
|
||||
IUmbracoDatabaseFactory databaseFactory,
|
||||
IEventAggregator eventAggregator,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
IUmbracoVersion umbracoVersion
|
||||
):this(
|
||||
loggerFactory,
|
||||
state,
|
||||
components,
|
||||
applicationShutdownRegistry,
|
||||
profilingLogger,
|
||||
mainDom,
|
||||
databaseFactory,
|
||||
eventAggregator,
|
||||
hostingEnvironment,
|
||||
umbracoVersion,
|
||||
null
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the state of the Umbraco runtime.
|
||||
/// </summary>
|
||||
@@ -76,6 +111,7 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
{
|
||||
_cancellationToken = cancellationToken;
|
||||
StaticApplicationLogging.Initialize(_loggerFactory);
|
||||
StaticServiceProvider.Instance = _serviceProvider;
|
||||
|
||||
AppDomain.CurrentDomain.UnhandledException += (_, args) =>
|
||||
{
|
||||
|
||||
@@ -10,7 +10,6 @@ using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using NPoco;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Composing;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.Hosting;
|
||||
using Umbraco.Cms.Core.Runtime;
|
||||
@@ -41,7 +40,7 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
private readonly object _locker = new object();
|
||||
private bool _hasTable = false;
|
||||
private bool _acquireWhenTablesNotAvailable = false;
|
||||
|
||||
|
||||
public SqlMainDomLock(
|
||||
ILogger<SqlMainDomLock> logger,
|
||||
ILoggerFactory loggerFactory,
|
||||
@@ -50,7 +49,8 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
NPocoMapperCollection npocoMappers)
|
||||
NPocoMapperCollection npocoMappers,
|
||||
string connectionStringName)
|
||||
{
|
||||
// unique id for our appdomain, this is more unique than the appdomain id which is just an INT counter to its safer
|
||||
_lockId = Guid.NewGuid().ToString();
|
||||
@@ -62,15 +62,38 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
loggerFactory.CreateLogger<UmbracoDatabaseFactory>(),
|
||||
loggerFactory,
|
||||
_globalSettings,
|
||||
connectionStrings,
|
||||
new MapperCollection(() => Enumerable.Empty<BaseMapper>()),
|
||||
dbProviderFactoryCreator,
|
||||
databaseSchemaCreatorFactory,
|
||||
npocoMappers);
|
||||
|
||||
new MapperCollection(() => Enumerable.Empty<BaseMapper>()),
|
||||
dbProviderFactoryCreator,
|
||||
databaseSchemaCreatorFactory,
|
||||
npocoMappers,
|
||||
connectionStringName);
|
||||
MainDomKey = MainDomKeyPrefix + "-" + (Environment.MachineName + MainDom.GetMainDomId(_hostingEnvironment)).GenerateHash<SHA1>();
|
||||
}
|
||||
|
||||
public SqlMainDomLock(
|
||||
ILogger<SqlMainDomLock> logger,
|
||||
ILoggerFactory loggerFactory,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
NPocoMapperCollection npocoMappers)
|
||||
: this(
|
||||
logger,
|
||||
loggerFactory,
|
||||
globalSettings,
|
||||
connectionStrings,
|
||||
dbProviderFactoryCreator,
|
||||
hostingEnvironment,
|
||||
databaseSchemaCreatorFactory,
|
||||
npocoMappers,
|
||||
connectionStrings.CurrentValue.UmbracoConnectionString.ConnectionString
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async Task<bool> AcquireLockAsync(int millisecondsTimeout)
|
||||
{
|
||||
if (!_dbFactory.Configured)
|
||||
|
||||
@@ -52,16 +52,10 @@ namespace Umbraco.Cms.Tests.Common
|
||||
public TypeLoader GetMockedTypeLoader() =>
|
||||
new TypeLoader(Mock.Of<ITypeFinder>(), new VaryingRuntimeHash(), Mock.Of<IAppPolicyCache>(), new DirectoryInfo(GetHostingEnvironment().MapPathContentRoot(Constants.SystemDirectories.TempData)), Mock.Of<ILogger<TypeLoader>>(), Mock.Of<IProfiler>());
|
||||
|
||||
//// public Configs GetConfigs() => GetConfigsFactory().Create();
|
||||
|
||||
public abstract IBackOfficeInfo GetBackOfficeInfo();
|
||||
|
||||
//// public IConfigsFactory GetConfigsFactory() => new ConfigsFactory();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the working directory of the test project.
|
||||
/// </summary>
|
||||
public virtual string WorkingDirectory
|
||||
public string WorkingDirectory
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -70,11 +64,15 @@ namespace Umbraco.Cms.Tests.Common
|
||||
return _workingDir;
|
||||
}
|
||||
|
||||
var dir = Path.Combine(Assembly.GetExecutingAssembly().GetRootDirectorySafe(), "TEMP");
|
||||
// Azure DevOps can only store a database in certain locations so we will need to detect if we are running
|
||||
// on a build server and if so we'll use the temp path.
|
||||
var dir = string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("System_DefaultWorkingDirectory"))
|
||||
? Path.Combine(Assembly.GetExecutingAssembly().GetRootDirectorySafe(), "TEMP")
|
||||
: Path.Combine(Path.GetTempPath(), "UmbracoTests", "TEMP");
|
||||
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
_ = Directory.CreateDirectory(dir);
|
||||
}
|
||||
|
||||
_workingDir = dir;
|
||||
|
||||
@@ -79,32 +79,6 @@ namespace Umbraco.Cms.Tests.Integration.Implementations
|
||||
ProfilingLogger = new ProfilingLogger(ConsoleLoggerFactory.CreateLogger<ProfilingLogger>(), Profiler);
|
||||
}
|
||||
|
||||
public override string WorkingDirectory
|
||||
{
|
||||
get
|
||||
{
|
||||
// For Azure Devops we can only store a database in certain locations so we will need to detect if we are running
|
||||
// on a build server and if so we'll use the %temp% path.
|
||||
if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("System_DefaultWorkingDirectory")))
|
||||
{
|
||||
// We are using Azure Devops!
|
||||
if (_tempWorkingDir != null)
|
||||
{
|
||||
return _tempWorkingDir;
|
||||
}
|
||||
|
||||
string temp = Path.Combine(Environment.ExpandEnvironmentVariables("%temp%"), "UmbracoTemp");
|
||||
Directory.CreateDirectory(temp);
|
||||
_tempWorkingDir = temp;
|
||||
return _tempWorkingDir;
|
||||
}
|
||||
else
|
||||
{
|
||||
return base.WorkingDirectory;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IUmbracoBootPermissionChecker UmbracoBootPermissionChecker { get; } =
|
||||
new TestUmbracoBootPermissionChecker();
|
||||
|
||||
@@ -130,18 +104,6 @@ namespace Umbraco.Cms.Tests.Integration.Implementations
|
||||
|
||||
public override IMarchal Marchal { get; } = new AspNetCoreMarchal();
|
||||
|
||||
public override IBackOfficeInfo GetBackOfficeInfo()
|
||||
{
|
||||
if (_backOfficeInfo == null)
|
||||
{
|
||||
var globalSettings = new GlobalSettings();
|
||||
IOptionsMonitor<GlobalSettings> mockedOptionsMonitorOfGlobalSettings = Mock.Of<IOptionsMonitor<GlobalSettings>>(x => x.CurrentValue == globalSettings);
|
||||
_backOfficeInfo = new AspNetCoreBackOfficeInfo(mockedOptionsMonitorOfGlobalSettings, GetHostingEnvironment());
|
||||
}
|
||||
|
||||
return _backOfficeInfo;
|
||||
}
|
||||
|
||||
public override IHostingEnvironment GetHostingEnvironment()
|
||||
=> _hostingEnvironment ??= new TestHostingEnvironment(
|
||||
GetIOptionsMonitorOfHostingSettings(),
|
||||
|
||||
@@ -24,6 +24,7 @@ using Umbraco.Cms.Tests.Integration.DependencyInjection;
|
||||
using Umbraco.Cms.Tests.Integration.Testing;
|
||||
using Umbraco.Cms.Web.BackOffice.Controllers;
|
||||
using Umbraco.Cms.Web.Common.Controllers;
|
||||
using Umbraco.Cms.Web.UI;
|
||||
using Umbraco.Cms.Web.Website.Controllers;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
@@ -39,8 +40,19 @@ namespace Umbraco.Cms.Tests.Integration.TestServerTest
|
||||
InMemoryConfiguration["ConnectionStrings:" + Constants.System.UmbracoConnectionName] = null;
|
||||
InMemoryConfiguration["Umbraco:CMS:Hosting:Debug"] = "true";
|
||||
|
||||
// create new WebApplicationFactory specifying 'this' as the IStartup instance
|
||||
var factory = new UmbracoWebApplicationFactory<UmbracoTestServerTestBase>(CreateHostBuilder, BeforeHostStart);
|
||||
/*
|
||||
* It's worth noting that our usage of WebApplicationFactory is non-standard,
|
||||
* the intent is that your Startup.ConfigureServices is called just like
|
||||
* when the app starts up, then replacements are registered in this class with
|
||||
* builder.ConfigureServices (builder.ConfigureTestServices has hung around from before the
|
||||
* generic host switchover).
|
||||
*
|
||||
* This is currently a pain to refactor towards due to UmbracoBuilder+TypeFinder+TypeLoader setup but
|
||||
* we should get there one day.
|
||||
*
|
||||
* See https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests
|
||||
*/
|
||||
var factory = new UmbracoWebApplicationFactory<Startup>(CreateHostBuilder, BeforeHostStart);
|
||||
|
||||
// additional host configuration for web server integration tests
|
||||
Factory = factory.WithWebHostBuilder(builder =>
|
||||
@@ -129,7 +141,7 @@ namespace Umbraco.Cms.Tests.Integration.TestServerTest
|
||||
|
||||
protected LinkGenerator LinkGenerator { get; private set; }
|
||||
|
||||
protected WebApplicationFactory<UmbracoTestServerTestBase> Factory { get; private set; }
|
||||
protected WebApplicationFactory<Startup> Factory { get; private set; }
|
||||
|
||||
public override void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
@@ -99,6 +99,7 @@
|
||||
<ProjectReference Include="..\Umbraco.PublishedCache.NuCache\Umbraco.PublishedCache.NuCache.csproj" />
|
||||
<ProjectReference Include="..\Umbraco.Tests.Common\Umbraco.Tests.Common.csproj" />
|
||||
<ProjectReference Include="..\Umbraco.Web.BackOffice\Umbraco.Web.BackOffice.csproj" />
|
||||
<ProjectReference Include="..\Umbraco.Web.UI\Umbraco.Web.UI.csproj" />
|
||||
<ProjectReference Include="..\Umbraco.Web.Website\Umbraco.Web.Website.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -67,9 +67,6 @@ namespace Umbraco.Cms.Tests.UnitTests.TestHelpers
|
||||
|
||||
public override IMarchal Marchal { get; } = Mock.Of<IMarchal>();
|
||||
|
||||
public override IBackOfficeInfo GetBackOfficeInfo()
|
||||
=> Mock.Of<IBackOfficeInfo>();
|
||||
|
||||
public override IHostingEnvironment GetHostingEnvironment()
|
||||
{
|
||||
var testPath = TestContext.CurrentContext.TestDirectory.Split("bin")[0];
|
||||
@@ -104,12 +101,6 @@ namespace Umbraco.Cms.Tests.UnitTests.TestHelpers
|
||||
public static MapperConfigurationStore CreateMaps()
|
||||
=> new MapperConfigurationStore();
|
||||
|
||||
//// public static Configs GetConfigs() => _testHelperInternal.GetConfigs();
|
||||
|
||||
public static IBackOfficeInfo GetBackOfficeInfo() => s_testHelperInternal.GetBackOfficeInfo();
|
||||
|
||||
//// public static IConfigsFactory GetConfigsFactory() => _testHelperInternal.GetConfigsFactory();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the working directory of the test project.
|
||||
/// </summary>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core;
|
||||
@@ -29,6 +30,33 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Deploy
|
||||
Assert.AreEqual(expected, serialized);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Dependencies_Are_Correctly_Ordered()
|
||||
{
|
||||
// This test was introduced following: https://github.com/umbraco/Umbraco.Deploy.Issues/issues/72 to verify
|
||||
// that consistent ordering rules are used across platforms.
|
||||
var udi = new GuidUdi("test", Guid.Parse("3382d5433b5749d08919bc9961422a1f"));
|
||||
var artifact = new TestArtifact(udi, new List<ArtifactDependency>())
|
||||
{
|
||||
Name = "Test Name",
|
||||
Alias = "testAlias",
|
||||
};
|
||||
|
||||
var dependencies = new ArtifactDependencyCollection();
|
||||
|
||||
var dependencyUdi1 = new GuidUdi("template", Guid.Parse("d4651496fad24c1290a53ea4d55d945b"));
|
||||
dependencies.Add(new ArtifactDependency(dependencyUdi1, true, ArtifactDependencyMode.Exist));
|
||||
|
||||
var dependencyUdi2 = new StringUdi(Constants.UdiEntityType.TemplateFile, "TestPage.cshtml");
|
||||
dependencies.Add(new ArtifactDependency(dependencyUdi2, true, ArtifactDependencyMode.Exist));
|
||||
|
||||
artifact.Dependencies = dependencies;
|
||||
|
||||
Assert.AreEqual(
|
||||
"umb://template-file/TestPage.cshtml,umb://template/d4651496fad24c1290a53ea4d55d945b",
|
||||
string.Join(",", artifact.Dependencies.Select(x => x.Udi.ToString())));
|
||||
}
|
||||
|
||||
private class TestArtifact : ArtifactBase<GuidUdi>
|
||||
{
|
||||
public TestArtifact(GuidUdi udi, IEnumerable<ArtifactDependency> dependencies = null) : base(udi, dependencies)
|
||||
|
||||
@@ -69,11 +69,6 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public override IMarchal Marchal { get; } = new FrameworkMarchal();
|
||||
|
||||
public override IBackOfficeInfo GetBackOfficeInfo()
|
||||
=> new AspNetBackOfficeInfo(
|
||||
new GlobalSettings(),
|
||||
TestHelper.IOHelper, Mock.Of<ILogger<AspNetBackOfficeInfo>>(), Options.Create(new WebRoutingSettings()));
|
||||
|
||||
public override IHostingEnvironment GetHostingEnvironment()
|
||||
=> new AspNetHostingEnvironment(Options.Create(new HostingSettings()));
|
||||
|
||||
@@ -88,12 +83,6 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public static TypeLoader GetMockedTypeLoader() => _testHelperInternal.GetMockedTypeLoader();
|
||||
|
||||
//public static Configs GetConfigs() => _testHelperInternal.GetConfigs();
|
||||
|
||||
public static IBackOfficeInfo GetBackOfficeInfo() => _testHelperInternal.GetBackOfficeInfo();
|
||||
|
||||
// public static IConfigsFactory GetConfigsFactory() => _testHelperInternal.GetConfigsFactory();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the working directory of the test project.
|
||||
/// </summary>
|
||||
|
||||
@@ -279,6 +279,10 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
"memberTypeApiBaseUrl", _linkGenerator.GetUmbracoApiServiceBaseUrl<MemberTypeController>(
|
||||
controller => controller.GetAllTypes())
|
||||
},
|
||||
{
|
||||
"memberTypeQueryApiBaseUrl", _linkGenerator.GetUmbracoApiServiceBaseUrl<MemberTypeQueryController>(
|
||||
controller => controller.GetAllTypes())
|
||||
},
|
||||
{
|
||||
"memberGroupApiBaseUrl", _linkGenerator.GetUmbracoApiServiceBaseUrl<MemberGroupController>(
|
||||
controller => controller.GetAllGroups())
|
||||
|
||||
@@ -182,6 +182,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
/// <summary>
|
||||
/// Returns all member types
|
||||
/// </summary>
|
||||
[Obsolete("Use MemberTypeQueryController.GetAllTypes instead as it only requires AuthorizationPolicies.TreeAccessMembersOrMemberTypes and not both this and AuthorizationPolicies.TreeAccessMemberTypes")]
|
||||
[Authorize(Policy = AuthorizationPolicies.TreeAccessMembersOrMemberTypes)]
|
||||
public IEnumerable<ContentTypeBasic> GetAllTypes()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Umbraco.Cms.Core.Mapping;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.ContentEditing;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Web.Common.Attributes;
|
||||
using Umbraco.Cms.Web.Common.Authorization;
|
||||
using Constants = Umbraco.Cms.Core.Constants;
|
||||
|
||||
namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// An API controller used for dealing with member types
|
||||
/// </summary>
|
||||
[PluginController(Constants.Web.Mvc.BackOfficeApiArea)]
|
||||
[Authorize(Policy = AuthorizationPolicies.TreeAccessMembersOrMemberTypes)]
|
||||
public class MemberTypeQueryController : BackOfficeNotificationsController
|
||||
{
|
||||
private readonly IMemberTypeService _memberTypeService;
|
||||
private readonly IUmbracoMapper _umbracoMapper;
|
||||
|
||||
|
||||
public MemberTypeQueryController(
|
||||
IMemberTypeService memberTypeService,
|
||||
IUmbracoMapper umbracoMapper)
|
||||
{
|
||||
_memberTypeService = memberTypeService ?? throw new ArgumentNullException(nameof(memberTypeService));
|
||||
_umbracoMapper = umbracoMapper ?? throw new ArgumentNullException(nameof(umbracoMapper));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all member types
|
||||
/// </summary>
|
||||
public IEnumerable<ContentTypeBasic> GetAllTypes() =>
|
||||
_memberTypeService.GetAll()
|
||||
.Select(_umbracoMapper.Map<IMemberType, ContentTypeBasic>);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -557,7 +557,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
// i.e. "Some Person" <hello@example.com>
|
||||
var toMailBoxAddress = new MailboxAddress(to.Name, to.Email);
|
||||
|
||||
var mailMessage = new EmailMessage(fromEmail, toMailBoxAddress.ToString(), emailSubject, emailBody, true);
|
||||
var mailMessage = new EmailMessage(null /*use info from smtp settings*/, toMailBoxAddress.ToString(), emailSubject, emailBody, true);
|
||||
|
||||
await _emailSender.SendAsync(mailMessage, Constants.Web.EmailTypes.UserInvite, true);
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
|
||||
namespace Umbraco.Cms.Web.Common.DependencyInjection
|
||||
{
|
||||
/// <summary>
|
||||
/// A <see cref="IStartupFilter"/> registered to automatically capture application services
|
||||
/// </summary>
|
||||
internal class UmbracoApplicationServicesCapture : IStartupFilter
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next) =>
|
||||
app =>
|
||||
{
|
||||
StaticServiceProvider.Instance = app.ApplicationServices;
|
||||
next(app);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -54,8 +54,14 @@ namespace Umbraco.Extensions
|
||||
.Configure<PhysicalFileSystemCacheOptions>(options => options.CacheFolder = builder.BuilderHostingEnvironment.MapPathContentRoot(imagingSettings.Cache.CacheFolder))
|
||||
// We need to add CropWebProcessor before ResizeWebProcessor (until https://github.com/SixLabors/ImageSharp.Web/issues/182 is fixed)
|
||||
.RemoveProcessor<ResizeWebProcessor>()
|
||||
.RemoveProcessor<FormatWebProcessor>()
|
||||
.RemoveProcessor<BackgroundColorWebProcessor>()
|
||||
.RemoveProcessor<JpegQualityWebProcessor>()
|
||||
.AddProcessor<CropWebProcessor>()
|
||||
.AddProcessor<ResizeWebProcessor>();
|
||||
.AddProcessor<ResizeWebProcessor>()
|
||||
.AddProcessor<FormatWebProcessor>()
|
||||
.AddProcessor<BackgroundColorWebProcessor>()
|
||||
.AddProcessor<JpegQualityWebProcessor>();
|
||||
|
||||
builder.Services.AddTransient<IConfigureOptions<ImageSharpMiddlewareOptions>, ImageSharpConfigurationOptions>();
|
||||
|
||||
|
||||
@@ -123,10 +123,6 @@ namespace Umbraco.Extensions
|
||||
config,
|
||||
profiler);
|
||||
|
||||
// adds the umbraco startup filter which will call UseUmbraco early on before
|
||||
// other start filters are applied (depending on the ordering of IStartupFilters in DI).
|
||||
services.AddTransient<IStartupFilter, UmbracoApplicationServicesCapture>();
|
||||
|
||||
return new UmbracoBuilder(services, config, typeLoader, loggerFactory, profiler, appCaches, tempHostingEnvironment);
|
||||
}
|
||||
|
||||
|
||||
@@ -362,7 +362,7 @@ namespace Umbraco.Cms.Web.Common.Security
|
||||
{
|
||||
// Store the userId for use after two factor check
|
||||
var userId = await UserManager.GetUserIdAsync(user);
|
||||
await Context.SignInAsync(IdentityConstants.TwoFactorUserIdScheme, StoreTwoFactorInfo(userId, loginProvider));
|
||||
await Context.SignInAsync(TwoFactorAuthenticationType, StoreTwoFactorInfo(userId, loginProvider));
|
||||
return SignInResult.TwoFactorRequired;
|
||||
}
|
||||
}
|
||||
@@ -372,7 +372,7 @@ namespace Umbraco.Cms.Web.Common.Security
|
||||
await Context.SignOutAsync(ExternalAuthenticationType);
|
||||
}
|
||||
if (loginProvider == null)
|
||||
{
|
||||
{
|
||||
await SignInWithClaimsAsync(user, isPersistent, new Claim[] { new Claim("amr", "pwd") });
|
||||
}
|
||||
else
|
||||
|
||||
@@ -48,5 +48,4 @@
|
||||
<_Parameter1>Umbraco.Tests.UnitTests</_Parameter1>
|
||||
</AssemblyAttribute>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -46,10 +46,10 @@ function memberTypeResource($q, $http, umbRequestHelper, umbDataFormatter, local
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.get(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"memberTypeApiBaseUrl",
|
||||
"memberTypeQueryApiBaseUrl",
|
||||
"GetAllTypes")),
|
||||
'Failed to retrieve data for member types id');
|
||||
},
|
||||
},
|
||||
|
||||
getById: function (id) {
|
||||
|
||||
|
||||
@@ -439,6 +439,45 @@ function contentTypeHelper(contentTypeResource, dataTypeResource, $filter, $inje
|
||||
|
||||
array.push(placeholder);
|
||||
|
||||
},
|
||||
|
||||
rebindSavedContentType: function (contentType, savedContentType) {
|
||||
// The saved content type might have updated values (eg. new IDs/keys), so make sure the view model is updated
|
||||
contentType.ModelState = savedContentType.ModelState;
|
||||
contentType.id = savedContentType.id;
|
||||
contentType.groups.forEach(function (group) {
|
||||
if (!group.alias) return;
|
||||
|
||||
var k = 0;
|
||||
while (k < savedContentType.groups.length && savedContentType.groups[k].alias != group.alias)
|
||||
k++;
|
||||
|
||||
if (k == savedContentType.groups.length) {
|
||||
group.id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var savedGroup = savedContentType.groups[k];
|
||||
group.id = savedGroup.id;
|
||||
group.key = savedGroup.key;
|
||||
group.contentTypeId = savedGroup.contentTypeId;
|
||||
|
||||
group.properties.forEach(function (property) {
|
||||
if (property.id || !property.alias) return;
|
||||
|
||||
k = 0;
|
||||
while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias)
|
||||
k++;
|
||||
|
||||
if (k == savedGroup.properties.length) {
|
||||
property.id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var savedProperty = savedGroup.properties[k];
|
||||
property.id = savedProperty.id;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
partialViewName = parentId + "/" + partialViewName;
|
||||
}
|
||||
|
||||
return "@Html.Partial(\"" + partialViewName + "\")";
|
||||
return "@await Html.PartialAsync(\"" + partialViewName + "\")";
|
||||
}
|
||||
|
||||
function getQuerySnippet(queryExpression) {
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
return {
|
||||
|
||||
formatChangePasswordModel: function(model) {
|
||||
formatChangePasswordModel: function (model) {
|
||||
if (!model) {
|
||||
return null;
|
||||
}
|
||||
@@ -59,26 +59,23 @@
|
||||
},
|
||||
|
||||
formatContentTypePostData: function (displayModel, action) {
|
||||
|
||||
//create the save model from the display model
|
||||
// Create the save model from the display model
|
||||
var saveModel = _.pick(displayModel,
|
||||
'compositeContentTypes', 'isContainer', 'allowAsRoot', 'allowedTemplates', 'allowedContentTypes',
|
||||
'alias', 'description', 'thumbnail', 'name', 'id', 'icon', 'trashed',
|
||||
'key', 'parentId', 'alias', 'path', 'allowCultureVariant', 'allowSegmentVariant', 'isElement');
|
||||
|
||||
// TODO: Map these
|
||||
saveModel.allowedTemplates = _.map(displayModel.allowedTemplates, function (t) { return t.alias; });
|
||||
saveModel.defaultTemplate = displayModel.defaultTemplate ? displayModel.defaultTemplate.alias : null;
|
||||
var realGroups = _.reject(displayModel.groups, function (g) {
|
||||
//do not include these tabs
|
||||
// Do not include groups with init state
|
||||
return g.tabState === "init";
|
||||
});
|
||||
saveModel.groups = _.map(realGroups, function (g) {
|
||||
|
||||
var saveGroup = _.pick(g, 'inherited', 'id', 'sortOrder', 'name', 'key', 'alias', 'type');
|
||||
var saveGroup = _.pick(g, 'id', 'sortOrder', 'name', 'key', 'alias', 'type');
|
||||
|
||||
var realProperties = _.reject(g.properties, function (p) {
|
||||
//do not include these properties
|
||||
// Do not include properties with init state or inherited from a composition
|
||||
return p.propertyState === "init" || p.inherited === true;
|
||||
});
|
||||
|
||||
@@ -89,16 +86,21 @@
|
||||
|
||||
saveGroup.properties = saveProperties;
|
||||
|
||||
//if this is an inherited group and there are not non-inherited properties on it, then don't send up the data
|
||||
if (saveGroup.inherited === true && saveProperties.length === 0) {
|
||||
return null;
|
||||
if (g.inherited === true) {
|
||||
if (saveProperties.length === 0) {
|
||||
// All properties are inherited from the compositions, no need to save this group
|
||||
return null;
|
||||
} else if (g.contentTypeId != saveModel.id) {
|
||||
// We have local properties, but the group id is not local, ensure a new id/key is generated on save
|
||||
saveGroup = _.omit(saveGroup, 'id', 'key');
|
||||
}
|
||||
}
|
||||
|
||||
return saveGroup;
|
||||
});
|
||||
|
||||
//we don't want any null groups
|
||||
saveModel.groups = _.reject(saveModel.groups, function (g) {
|
||||
// Do not include empty/null groups
|
||||
return !g;
|
||||
});
|
||||
|
||||
@@ -127,17 +129,17 @@
|
||||
},
|
||||
|
||||
/** formats the display model used to display the dictionary to the model used to save the dictionary */
|
||||
formatDictionaryPostData : function(dictionary, nameIsDirty) {
|
||||
formatDictionaryPostData: function (dictionary, nameIsDirty) {
|
||||
var saveModel = {
|
||||
parentId: dictionary.parentId,
|
||||
id: dictionary.id,
|
||||
name: dictionary.name,
|
||||
nameIsDirty: nameIsDirty,
|
||||
translations: [],
|
||||
key : dictionary.key
|
||||
key: dictionary.key
|
||||
};
|
||||
|
||||
for(var i = 0; i < dictionary.translations.length; i++) {
|
||||
for (var i = 0; i < dictionary.translations.length; i++) {
|
||||
saveModel.translations.push({
|
||||
isoCode: dictionary.translations[i].isoCode,
|
||||
languageId: dictionary.translations[i].languageId,
|
||||
@@ -335,7 +337,7 @@
|
||||
parentId: displayModel.parentId,
|
||||
//set the action on the save model
|
||||
action: action,
|
||||
variants: _.map(displayModel.variants, function(v) {
|
||||
variants: _.map(displayModel.variants, function (v) {
|
||||
return {
|
||||
name: v.name || "", //if its null/empty,we must pass up an empty string else we get json converter errors
|
||||
properties: getContentProperties(v.tabs),
|
||||
@@ -365,7 +367,7 @@
|
||||
* @param {} displayModel
|
||||
* @returns {}
|
||||
*/
|
||||
formatContentGetData: function(displayModel) {
|
||||
formatContentGetData: function (displayModel) {
|
||||
|
||||
// We need to check for invariant properties among the variant variants,
|
||||
// as the value of an invariant property is shared between different variants.
|
||||
@@ -431,12 +433,12 @@
|
||||
* Formats the display model used to display the relation type to a model used to save the relation type.
|
||||
* @param {Object} relationType
|
||||
*/
|
||||
formatRelationTypePostData : function(relationType) {
|
||||
formatRelationTypePostData: function (relationType) {
|
||||
var saveModel = {
|
||||
id: relationType.id,
|
||||
name: relationType.name,
|
||||
alias: relationType.alias,
|
||||
key : relationType.key,
|
||||
key: relationType.key,
|
||||
isBidirectional: relationType.isBidirectional,
|
||||
parentObjectType: relationType.parentObjectType,
|
||||
childObjectType: relationType.childObjectType
|
||||
|
||||
@@ -324,35 +324,9 @@
|
||||
scope: $scope,
|
||||
content: vm.contentType,
|
||||
infiniteMode: infiniteMode,
|
||||
// we need to rebind... the IDs that have been created!
|
||||
rebindCallback: function (origContentType, savedContentType) {
|
||||
vm.contentType.ModelState = savedContentType.ModelState;
|
||||
vm.contentType.id = savedContentType.id;
|
||||
vm.contentType.groups.forEach(function (group) {
|
||||
if (!group.name) return;
|
||||
var k = 0;
|
||||
while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name)
|
||||
k++;
|
||||
if (k == savedContentType.groups.length) {
|
||||
group.id = 0;
|
||||
return;
|
||||
}
|
||||
var savedGroup = savedContentType.groups[k];
|
||||
if (!group.id) group.id = savedGroup.id;
|
||||
|
||||
group.properties.forEach(function (property) {
|
||||
if (property.id || !property.alias) return;
|
||||
k = 0;
|
||||
while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias)
|
||||
k++;
|
||||
if (k == savedGroup.properties.length) {
|
||||
property.id = 0;
|
||||
return;
|
||||
}
|
||||
var savedProperty = savedGroup.properties[k];
|
||||
property.id = savedProperty.id;
|
||||
});
|
||||
});
|
||||
rebindCallback: function (_, savedContentType) {
|
||||
// we need to rebind... the IDs that have been created!
|
||||
contentTypeHelper.rebindSavedContentType(vm.contentType, savedContentType);
|
||||
}
|
||||
}).then(function (data) {
|
||||
// allow UI to access server validation state
|
||||
|
||||
@@ -295,38 +295,9 @@
|
||||
saveMethod: mediaTypeResource.save,
|
||||
scope: $scope,
|
||||
content: vm.contentType,
|
||||
// we need to rebind... the IDs that have been created!
|
||||
rebindCallback: function (origContentType, savedContentType) {
|
||||
vm.contentType.id = savedContentType.id;
|
||||
vm.contentType.groups.forEach(function (group) {
|
||||
if (!group.name) return;
|
||||
|
||||
var k = 0;
|
||||
while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name)
|
||||
k++;
|
||||
if (k == savedContentType.groups.length) {
|
||||
group.id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var savedGroup = savedContentType.groups[k];
|
||||
if (!group.id) group.id = savedGroup.id;
|
||||
|
||||
group.properties.forEach(function (property) {
|
||||
if (property.id || !property.alias) return;
|
||||
|
||||
k = 0;
|
||||
while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias)
|
||||
k++;
|
||||
if (k == savedGroup.properties.length) {
|
||||
property.id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var savedProperty = savedGroup.properties[k];
|
||||
property.id = savedProperty.id;
|
||||
});
|
||||
});
|
||||
rebindCallback: function (_, savedContentType) {
|
||||
// we need to rebind... the IDs that have been created!
|
||||
contentTypeHelper.rebindSavedContentType(vm.contentType, savedContentType);
|
||||
}
|
||||
}).then(function (data) {
|
||||
//success
|
||||
|
||||
@@ -175,11 +175,11 @@
|
||||
|
||||
//we are creating so get an empty data type item
|
||||
memberTypeResource.getScaffold(memberTypeId)
|
||||
.then(function (dt) {
|
||||
init(dt);
|
||||
.then(function (dt) {
|
||||
init(dt);
|
||||
|
||||
vm.page.loading = false;
|
||||
});
|
||||
vm.page.loading = false;
|
||||
});
|
||||
}
|
||||
else {
|
||||
loadMemberType();
|
||||
@@ -215,38 +215,9 @@
|
||||
saveMethod: memberTypeResource.save,
|
||||
scope: $scope,
|
||||
content: vm.contentType,
|
||||
// we need to rebind... the IDs that have been created!
|
||||
rebindCallback: function (origContentType, savedContentType) {
|
||||
vm.contentType.id = savedContentType.id;
|
||||
vm.contentType.groups.forEach(function (group) {
|
||||
if (!group.name) return;
|
||||
|
||||
var k = 0;
|
||||
while (k < savedContentType.groups.length && savedContentType.groups[k].name != group.name)
|
||||
k++;
|
||||
if (k == savedContentType.groups.length) {
|
||||
group.id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var savedGroup = savedContentType.groups[k];
|
||||
if (!group.id) group.id = savedGroup.id;
|
||||
|
||||
group.properties.forEach(function (property) {
|
||||
if (property.id || !property.alias) return;
|
||||
|
||||
k = 0;
|
||||
while (k < savedGroup.properties.length && savedGroup.properties[k].alias != property.alias)
|
||||
k++;
|
||||
if (k == savedGroup.properties.length) {
|
||||
property.id = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var savedProperty = savedGroup.properties[k];
|
||||
property.id = savedProperty.id;
|
||||
});
|
||||
});
|
||||
rebindCallback: function (_, savedContentType) {
|
||||
// we need to rebind... the IDs that have been created!
|
||||
contentTypeHelper.rebindSavedContentType(vm.contentType, savedContentType);
|
||||
}
|
||||
}).then(function (data) {
|
||||
//success
|
||||
|
||||
@@ -26,28 +26,28 @@ describe('service: templateHelper', function () {
|
||||
it('should return the snippet for inserting a partial from the root', function () {
|
||||
var parentId = "";
|
||||
var nodeName = "Footer.cshtml";
|
||||
var snippet = '@Html.Partial("Footer")';
|
||||
var snippet = '@await Html.PartialAsync("Footer")';
|
||||
expect(templateHelper.getInsertPartialSnippet(parentId, nodeName)).toBe(snippet);
|
||||
});
|
||||
|
||||
it('should return the snippet for inserting a partial from a folder', function () {
|
||||
var parentId = "Folder";
|
||||
var nodeName = "Footer.cshtml";
|
||||
var snippet = '@Html.Partial("Folder/Footer")';
|
||||
var snippet = '@await Html.PartialAsync("Folder/Footer")';
|
||||
expect(templateHelper.getInsertPartialSnippet(parentId, nodeName)).toBe(snippet);
|
||||
});
|
||||
|
||||
it('should return the snippet for inserting a partial from a nested folder', function () {
|
||||
var parentId = "Folder/NestedFolder";
|
||||
var nodeName = "Footer.cshtml";
|
||||
var snippet = '@Html.Partial("Folder/NestedFolder/Footer")';
|
||||
var snippet = '@await Html.PartialAsync("Folder/NestedFolder/Footer")';
|
||||
expect(templateHelper.getInsertPartialSnippet(parentId, nodeName)).toBe(snippet);
|
||||
});
|
||||
|
||||
it('should return the snippet for inserting a partial from a folder with spaces in its name', function () {
|
||||
var parentId = "Folder with spaces";
|
||||
var nodeName = "Footer.cshtml";
|
||||
var snippet = '@Html.Partial("Folder with spaces/Footer")';
|
||||
var snippet = '@await Html.PartialAsync("Folder with spaces/Footer")';
|
||||
expect(templateHelper.getInsertPartialSnippet(parentId, nodeName)).toBe(snippet);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,238 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29209.152
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.UI", "Umbraco.Web.UI\Umbraco.Web.UI.csproj", "{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\linting\.editorconfig = ..\linting\.editorconfig
|
||||
..\build\azure-pipelines.yml = ..\build\azure-pipelines.yml
|
||||
..\build\build-bootstrap.ps1 = ..\build\build-bootstrap.ps1
|
||||
..\build\build.ps1 = ..\build\build.ps1
|
||||
..\linting\codeanalysis.ruleset = ..\linting\codeanalysis.ruleset
|
||||
..\linting\codeanalysis.tests.ruleset = ..\linting\codeanalysis.tests.ruleset
|
||||
..\Directory.Build.props = ..\Directory.Build.props
|
||||
..\Directory.Build.targets = ..\Directory.Build.targets
|
||||
..\NuGet.Config = ..\NuGet.Config
|
||||
..\linting\stylecop.json = ..\linting\stylecop.json
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FD962632-184C-4005-A5F3-E705D92FC645}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\.github\BUILD.md = ..\.github\BUILD.md
|
||||
..\.github\CLEAR.md = ..\.github\CLEAR.md
|
||||
..\.github\CODE_OF_CONDUCT.md = ..\.github\CODE_OF_CONDUCT.md
|
||||
..\.github\CONTRIBUTING.md = ..\.github\CONTRIBUTING.md
|
||||
..\.github\CONTRIBUTING_DETAILED.md = ..\.github\CONTRIBUTING_DETAILED.md
|
||||
..\.github\CONTRIBUTION_GUIDELINES.md = ..\.github\CONTRIBUTION_GUIDELINES.md
|
||||
..\.github\PULL_REQUEST_TEMPLATE.md = ..\.github\PULL_REQUEST_TEMPLATE.md
|
||||
..\.github\README.md = ..\.github\README.md
|
||||
..\.github\REVIEW_PROCESS.md = ..\.github\REVIEW_PROCESS.md
|
||||
..\.github\V8_GETTING_STARTED.md = ..\.github\V8_GETTING_STARTED.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5BD12C1-A454-435E-8A46-FF4A364C0382}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuSpecs", "NuSpecs", "{227C3B55-80E5-4E7E-A802-BE16C5128B9D}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\NuSpecs\UmbracoCms.nuspec = ..\build\NuSpecs\UmbracoCms.nuspec
|
||||
..\build\NuSpecs\UmbracoCms.SqlCe.nuspec = ..\build\NuSpecs\UmbracoCms.SqlCe.nuspec
|
||||
..\build\NuSpecs\UmbracoCms.StaticAssets.nuspec = ..\build\NuSpecs\UmbracoCms.StaticAssets.nuspec
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Umbraco.Web.UI.Client", "http://localhost:3961", "{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}"
|
||||
ProjectSection(WebsiteProperties) = preProject
|
||||
UseIISExpress = "true"
|
||||
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.5"
|
||||
Debug.AspNetCompiler.VirtualPath = "/localhost_3961"
|
||||
Debug.AspNetCompiler.PhysicalPath = "Umbraco.Web.UI.Client\"
|
||||
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_3961\"
|
||||
Debug.AspNetCompiler.Updateable = "true"
|
||||
Debug.AspNetCompiler.ForceOverwrite = "true"
|
||||
Debug.AspNetCompiler.FixedNames = "false"
|
||||
Debug.AspNetCompiler.Debug = "True"
|
||||
Release.AspNetCompiler.VirtualPath = "/localhost_3961"
|
||||
Release.AspNetCompiler.PhysicalPath = "Umbraco.Web.UI.Client\"
|
||||
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_3961\"
|
||||
Release.AspNetCompiler.Updateable = "true"
|
||||
Release.AspNetCompiler.ForceOverwrite = "true"
|
||||
Release.AspNetCompiler.FixedNames = "false"
|
||||
Release.AspNetCompiler.Debug = "False"
|
||||
SlnRelativePath = "Umbraco.Web.UI.Client\"
|
||||
DefaultWebSiteLanguage = "Visual C#"
|
||||
StartServerOnDebug = "false"
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Umbraco.Tests.AcceptanceTest", "http://localhost:58896", "{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817}"
|
||||
ProjectSection(WebsiteProperties) = preProject
|
||||
UseIISExpress = "true"
|
||||
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.5"
|
||||
Debug.AspNetCompiler.VirtualPath = "/localhost_62926"
|
||||
Debug.AspNetCompiler.PhysicalPath = "Umbraco.Tests.AcceptanceTest\"
|
||||
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_62926\"
|
||||
Debug.AspNetCompiler.Updateable = "true"
|
||||
Debug.AspNetCompiler.ForceOverwrite = "true"
|
||||
Debug.AspNetCompiler.FixedNames = "false"
|
||||
Debug.AspNetCompiler.Debug = "True"
|
||||
Release.AspNetCompiler.VirtualPath = "/localhost_62926"
|
||||
Release.AspNetCompiler.PhysicalPath = "Umbraco.Tests.AcceptanceTest\"
|
||||
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_62926\"
|
||||
Release.AspNetCompiler.Updateable = "true"
|
||||
Release.AspNetCompiler.ForceOverwrite = "true"
|
||||
Release.AspNetCompiler.FixedNames = "false"
|
||||
Release.AspNetCompiler.Debug = "False"
|
||||
SlnRelativePath = "Umbraco.Tests.AcceptanceTest\"
|
||||
DefaultWebSiteLanguage = "Visual C#"
|
||||
StartServerOnDebug = "false"
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{E3F9F378-AFE1-40A5-90BD-82833375DBFE}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\NuSpecs\tools\applications.config.install.xdt = ..\build\NuSpecs\tools\applications.config.install.xdt
|
||||
..\build\NuSpecs\tools\ClientDependency.config.install.xdt = ..\build\NuSpecs\tools\ClientDependency.config.install.xdt
|
||||
..\build\NuSpecs\tools\install.ps1 = ..\build\NuSpecs\tools\install.ps1
|
||||
..\build\NuSpecs\tools\Readme.txt = ..\build\NuSpecs\tools\Readme.txt
|
||||
..\build\NuSpecs\tools\ReadmeUpgrade.txt = ..\build\NuSpecs\tools\ReadmeUpgrade.txt
|
||||
..\build\NuSpecs\tools\serilog.config.install.xdt = ..\build\NuSpecs\tools\serilog.config.install.xdt
|
||||
..\build\NuSpecs\tools\Web.config.install.xdt = ..\build\NuSpecs\tools\Web.config.install.xdt
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{5B03EF4E-E0AC-4905-861B-8C3EC1A0D458}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\NuSpecs\build\Umbraco.Cms.props = ..\build\NuSpecs\build\Umbraco.Cms.props
|
||||
..\build\NuSpecs\build\Umbraco.Cms.targets = ..\build\NuSpecs\build\Umbraco.Cms.targets
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DocTools", "DocTools", "{53594E5B-64A2-4545-8367-E3627D266AE8}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
ApiDocs\docfx.filter.yml = ApiDocs\docfx.filter.yml
|
||||
ApiDocs\docfx.json = ApiDocs\docfx.json
|
||||
ApiDocs\index.md = ApiDocs\index.md
|
||||
ApiDocs\toc.yml = ApiDocs\toc.yml
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IssueTemplates", "IssueTemplates", "{C7311C00-2184-409B-B506-52A5FAEA8736}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\.github\ISSUE_TEMPLATE\1_Bug.md = ..\.github\ISSUE_TEMPLATE\1_Bug.md
|
||||
..\.github\ISSUE_TEMPLATE\2_Feature_request.md = ..\.github\ISSUE_TEMPLATE\2_Feature_request.md
|
||||
..\.github\ISSUE_TEMPLATE\3_Support_question.md = ..\.github\ISSUE_TEMPLATE\3_Support_question.md
|
||||
..\.github\ISSUE_TEMPLATE\4_Documentation_issue.md = ..\.github\ISSUE_TEMPLATE\4_Documentation_issue.md
|
||||
..\.github\ISSUE_TEMPLATE\5_Security_issue.md = ..\.github\ISSUE_TEMPLATE\5_Security_issue.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Core", "Umbraco.Core\Umbraco.Core.csproj", "{29AA69D9-B597-4395-8D42-43B1263C240A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Infrastructure", "Umbraco.Infrastructure\Umbraco.Infrastructure.csproj", "{3AE7BF57-966B-45A5-910A-954D7C554441}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.PublishedCache.NuCache", "Umbraco.PublishedCache.NuCache\Umbraco.PublishedCache.NuCache.csproj", "{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.BackOffice", "Umbraco.Web.BackOffice\Umbraco.Web.BackOffice.csproj", "{9B95EEF7-63FE-4432-8C63-166BE9C1A929}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.Website", "Umbraco.Web.Website\Umbraco.Web.Website.csproj", "{5A246D54-3109-4D2B-BE7D-FC0787D126AE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.Common", "Umbraco.Tests.Common\Umbraco.Tests.Common.csproj", "{A499779C-1B3B-48A8-B551-458E582E6E96}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.UnitTests", "Umbraco.Tests.UnitTests\Umbraco.Tests.UnitTests.csproj", "{9102ABDF-E537-4E46-B525-C9ED4833EED0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.Common", "Umbraco.Web.Common\Umbraco.Web.Common.csproj", "{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.Integration", "Umbraco.Tests.Integration\Umbraco.Tests.Integration.csproj", "{1B885D2F-1599-4557-A4EC-474CC74DEB10}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.Integration.SqlCe", "Umbraco.Tests.Integration.SqlCe\Umbraco.Tests.Integration.SqlCe.csproj", "{7A58F7CB-786F-43D6-A946-7BFA1B70D0AA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Examine.Lucene", "Umbraco.Examine.Lucene\Umbraco.Examine.Lucene.csproj", "{96EF355C-A7C8-460E-96D7-ABCE0D489762}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.TestData", "Umbraco.TestData\Umbraco.TestData.csproj", "{C44B4389-6E2A-441E-9A10-7CE818CA63A9}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.Benchmarks", "Umbraco.Tests.Benchmarks\Umbraco.Tests.Benchmarks.csproj", "{37B6264F-A279-42A6-AB83-CC3A3950C3E2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}.Release|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817}.Release|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1B885D2F-1599-4557-A4EC-474CC74DEB10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1B885D2F-1599-4557-A4EC-474CC74DEB10}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1B885D2F-1599-4557-A4EC-474CC74DEB10}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1B885D2F-1599-4557-A4EC-474CC74DEB10}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7A58F7CB-786F-43D6-A946-7BFA1B70D0AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7A58F7CB-786F-43D6-A946-7BFA1B70D0AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7A58F7CB-786F-43D6-A946-7BFA1B70D0AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7A58F7CB-786F-43D6-A946-7BFA1B70D0AA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{96EF355C-A7C8-460E-96D7-ABCE0D489762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{96EF355C-A7C8-460E-96D7-ABCE0D489762}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{96EF355C-A7C8-460E-96D7-ABCE0D489762}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{96EF355C-A7C8-460E-96D7-ABCE0D489762}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C44B4389-6E2A-441E-9A10-7CE818CA63A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C44B4389-6E2A-441E-9A10-7CE818CA63A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C44B4389-6E2A-441E-9A10-7CE818CA63A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C44B4389-6E2A-441E-9A10-7CE818CA63A9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{37B6264F-A279-42A6-AB83-CC3A3950C3E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{37B6264F-A279-42A6-AB83-CC3A3950C3E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{37B6264F-A279-42A6-AB83-CC3A3950C3E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{37B6264F-A279-42A6-AB83-CC3A3950C3E2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{227C3B55-80E5-4E7E-A802-BE16C5128B9D} = {2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}
|
||||
{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{E3F9F378-AFE1-40A5-90BD-82833375DBFE} = {227C3B55-80E5-4E7E-A802-BE16C5128B9D}
|
||||
{5B03EF4E-E0AC-4905-861B-8C3EC1A0D458} = {227C3B55-80E5-4E7E-A802-BE16C5128B9D}
|
||||
{53594E5B-64A2-4545-8367-E3627D266AE8} = {FD962632-184C-4005-A5F3-E705D92FC645}
|
||||
{C7311C00-2184-409B-B506-52A5FAEA8736} = {FD962632-184C-4005-A5F3-E705D92FC645}
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{1B885D2F-1599-4557-A4EC-474CC74DEB10} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{7A58F7CB-786F-43D6-A946-7BFA1B70D0AA} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{C44B4389-6E2A-441E-9A10-7CE818CA63A9} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{37B6264F-A279-42A6-AB83-CC3A3950C3E2} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {7A0F2E34-D2AF-4DAB-86A0-7D7764B3D0EC}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
250
src/umbraco.sln
250
src/umbraco.sln
@@ -1,250 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29209.152
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.UI", "Umbraco.Web.UI\Umbraco.Web.UI.csproj", "{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\linting\.editorconfig = ..\linting\.editorconfig
|
||||
..\build\azure-pipelines.yml = ..\build\azure-pipelines.yml
|
||||
..\build\build-bootstrap.ps1 = ..\build\build-bootstrap.ps1
|
||||
..\build\build.ps1 = ..\build\build.ps1
|
||||
..\linting\codeanalysis.ruleset = ..\linting\codeanalysis.ruleset
|
||||
..\linting\codeanalysis.tests.ruleset = ..\linting\codeanalysis.tests.ruleset
|
||||
..\Directory.Build.props = ..\Directory.Build.props
|
||||
..\Directory.Build.targets = ..\Directory.Build.targets
|
||||
..\NuGet.Config = ..\NuGet.Config
|
||||
..\linting\stylecop.json = ..\linting\stylecop.json
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FD962632-184C-4005-A5F3-E705D92FC645}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\.github\BUILD.md = ..\.github\BUILD.md
|
||||
..\.github\CLEAR.md = ..\.github\CLEAR.md
|
||||
..\.github\CODE_OF_CONDUCT.md = ..\.github\CODE_OF_CONDUCT.md
|
||||
..\.github\CONTRIBUTING.md = ..\.github\CONTRIBUTING.md
|
||||
..\.github\CONTRIBUTING_DETAILED.md = ..\.github\CONTRIBUTING_DETAILED.md
|
||||
..\.github\CONTRIBUTION_GUIDELINES.md = ..\.github\CONTRIBUTION_GUIDELINES.md
|
||||
..\.github\PULL_REQUEST_TEMPLATE.md = ..\.github\PULL_REQUEST_TEMPLATE.md
|
||||
..\.github\README.md = ..\.github\README.md
|
||||
..\.github\REVIEW_PROCESS.md = ..\.github\REVIEW_PROCESS.md
|
||||
..\.github\V8_GETTING_STARTED.md = ..\.github\V8_GETTING_STARTED.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5BD12C1-A454-435E-8A46-FF4A364C0382}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuSpecs", "NuSpecs", "{227C3B55-80E5-4E7E-A802-BE16C5128B9D}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\NuSpecs\UmbracoCms.nuspec = ..\build\NuSpecs\UmbracoCms.nuspec
|
||||
..\build\NuSpecs\UmbracoCms.SqlCe.nuspec = ..\build\NuSpecs\UmbracoCms.SqlCe.nuspec
|
||||
..\build\NuSpecs\UmbracoCms.StaticAssets.nuspec = ..\build\NuSpecs\UmbracoCms.StaticAssets.nuspec
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Umbraco.Web.UI.Client", "http://localhost:3961", "{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}"
|
||||
ProjectSection(WebsiteProperties) = preProject
|
||||
UseIISExpress = "true"
|
||||
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.5"
|
||||
Debug.AspNetCompiler.VirtualPath = "/localhost_3961"
|
||||
Debug.AspNetCompiler.PhysicalPath = "Umbraco.Web.UI.Client\"
|
||||
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_3961\"
|
||||
Debug.AspNetCompiler.Updateable = "true"
|
||||
Debug.AspNetCompiler.ForceOverwrite = "true"
|
||||
Debug.AspNetCompiler.FixedNames = "false"
|
||||
Debug.AspNetCompiler.Debug = "True"
|
||||
Release.AspNetCompiler.VirtualPath = "/localhost_3961"
|
||||
Release.AspNetCompiler.PhysicalPath = "Umbraco.Web.UI.Client\"
|
||||
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_3961\"
|
||||
Release.AspNetCompiler.Updateable = "true"
|
||||
Release.AspNetCompiler.ForceOverwrite = "true"
|
||||
Release.AspNetCompiler.FixedNames = "false"
|
||||
Release.AspNetCompiler.Debug = "False"
|
||||
SlnRelativePath = "Umbraco.Web.UI.Client\"
|
||||
DefaultWebSiteLanguage = "Visual C#"
|
||||
StartServerOnDebug = "false"
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Umbraco.Tests.AcceptanceTest", "http://localhost:58896", "{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817}"
|
||||
ProjectSection(WebsiteProperties) = preProject
|
||||
UseIISExpress = "true"
|
||||
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.5"
|
||||
Debug.AspNetCompiler.VirtualPath = "/localhost_62926"
|
||||
Debug.AspNetCompiler.PhysicalPath = "Umbraco.Tests.AcceptanceTest\"
|
||||
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_62926\"
|
||||
Debug.AspNetCompiler.Updateable = "true"
|
||||
Debug.AspNetCompiler.ForceOverwrite = "true"
|
||||
Debug.AspNetCompiler.FixedNames = "false"
|
||||
Debug.AspNetCompiler.Debug = "True"
|
||||
Release.AspNetCompiler.VirtualPath = "/localhost_62926"
|
||||
Release.AspNetCompiler.PhysicalPath = "Umbraco.Tests.AcceptanceTest\"
|
||||
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_62926\"
|
||||
Release.AspNetCompiler.Updateable = "true"
|
||||
Release.AspNetCompiler.ForceOverwrite = "true"
|
||||
Release.AspNetCompiler.FixedNames = "false"
|
||||
Release.AspNetCompiler.Debug = "False"
|
||||
SlnRelativePath = "Umbraco.Tests.AcceptanceTest\"
|
||||
DefaultWebSiteLanguage = "Visual C#"
|
||||
StartServerOnDebug = "false"
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{E3F9F378-AFE1-40A5-90BD-82833375DBFE}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\NuSpecs\tools\applications.config.install.xdt = ..\build\NuSpecs\tools\applications.config.install.xdt
|
||||
..\build\NuSpecs\tools\ClientDependency.config.install.xdt = ..\build\NuSpecs\tools\ClientDependency.config.install.xdt
|
||||
..\build\NuSpecs\tools\install.ps1 = ..\build\NuSpecs\tools\install.ps1
|
||||
..\build\NuSpecs\tools\Readme.txt = ..\build\NuSpecs\tools\Readme.txt
|
||||
..\build\NuSpecs\tools\ReadmeUpgrade.txt = ..\build\NuSpecs\tools\ReadmeUpgrade.txt
|
||||
..\build\NuSpecs\tools\serilog.config.install.xdt = ..\build\NuSpecs\tools\serilog.config.install.xdt
|
||||
..\build\NuSpecs\tools\Web.config.install.xdt = ..\build\NuSpecs\tools\Web.config.install.xdt
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{5B03EF4E-E0AC-4905-861B-8C3EC1A0D458}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\build\NuSpecs\build\Umbraco.Cms.StaticAssets.props = ..\build\NuSpecs\build\Umbraco.Cms.StaticAssets.props
|
||||
..\build\NuSpecs\build\Umbraco.Cms.StaticAssets.targets = ..\build\NuSpecs\build\Umbraco.Cms.StaticAssets.targets
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DocTools", "DocTools", "{53594E5B-64A2-4545-8367-E3627D266AE8}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
ApiDocs\docfx.filter.yml = ApiDocs\docfx.filter.yml
|
||||
ApiDocs\docfx.json = ApiDocs\docfx.json
|
||||
ApiDocs\index.md = ApiDocs\index.md
|
||||
ApiDocs\toc.yml = ApiDocs\toc.yml
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.Benchmarks", "Umbraco.Tests.Benchmarks\Umbraco.Tests.Benchmarks.csproj", "{3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IssueTemplates", "IssueTemplates", "{C7311C00-2184-409B-B506-52A5FAEA8736}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
..\.github\ISSUE_TEMPLATE\1_Bug.md = ..\.github\ISSUE_TEMPLATE\1_Bug.md
|
||||
..\.github\ISSUE_TEMPLATE\2_Feature_request.md = ..\.github\ISSUE_TEMPLATE\2_Feature_request.md
|
||||
..\.github\ISSUE_TEMPLATE\3_Support_question.md = ..\.github\ISSUE_TEMPLATE\3_Support_question.md
|
||||
..\.github\ISSUE_TEMPLATE\4_Documentation_issue.md = ..\.github\ISSUE_TEMPLATE\4_Documentation_issue.md
|
||||
..\.github\ISSUE_TEMPLATE\5_Security_issue.md = ..\.github\ISSUE_TEMPLATE\5_Security_issue.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Core", "Umbraco.Core\Umbraco.Core.csproj", "{29AA69D9-B597-4395-8D42-43B1263C240A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Infrastructure", "Umbraco.Infrastructure\Umbraco.Infrastructure.csproj", "{3AE7BF57-966B-45A5-910A-954D7C554441}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Persistence.SqlCe", "Umbraco.Persistence.SqlCe\Umbraco.Persistence.SqlCe.csproj", "{33085570-9BF2-4065-A9B0-A29D920D13BA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.TestData", "Umbraco.TestData\Umbraco.TestData.csproj", "{FB5676ED-7A69-492C-B802-E7B24144C0FC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.PublishedCache.NuCache", "Umbraco.PublishedCache.NuCache\Umbraco.PublishedCache.NuCache.csproj", "{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Examine.Lucene", "Umbraco.Examine.Lucene\Umbraco.Examine.Lucene.csproj", "{0FAD7D2A-D7DD-45B1-91FD-488BB6CDACEA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.BackOffice", "Umbraco.Web.BackOffice\Umbraco.Web.BackOffice.csproj", "{9B95EEF7-63FE-4432-8C63-166BE9C1A929}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.Website", "Umbraco.Web.Website\Umbraco.Web.Website.csproj", "{5A246D54-3109-4D2B-BE7D-FC0787D126AE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.Integration", "Umbraco.Tests.Integration\Umbraco.Tests.Integration.csproj", "{D6319409-777A-4BD0-93ED-B2DFD805B32C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.Common", "Umbraco.Tests.Common\Umbraco.Tests.Common.csproj", "{A499779C-1B3B-48A8-B551-458E582E6E96}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Tests.UnitTests", "Umbraco.Tests.UnitTests\Umbraco.Tests.UnitTests.csproj", "{9102ABDF-E537-4E46-B525-C9ED4833EED0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.Web.Common", "Umbraco.Web.Common\Umbraco.Web.Common.csproj", "{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonSchema", "JsonSchema\JsonSchema.csproj", "{2A5027D9-F71D-4957-929E-F7A56AA1B95A}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.Integration.SqlCe", "Umbraco.Tests.Integration.SqlCe\Umbraco.Tests.Integration.SqlCe.csproj", "{1B28FC3E-3D5B-4A46-8961-5483835548D7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}.Release|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817}.Release|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{29AA69D9-B597-4395-8D42-43B1263C240A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE7BF57-966B-45A5-910A-954D7C554441}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{33085570-9BF2-4065-A9B0-A29D920D13BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{33085570-9BF2-4065-A9B0-A29D920D13BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{33085570-9BF2-4065-A9B0-A29D920D13BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{33085570-9BF2-4065-A9B0-A29D920D13BA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FB5676ED-7A69-492C-B802-E7B24144C0FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FB5676ED-7A69-492C-B802-E7B24144C0FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FB5676ED-7A69-492C-B802-E7B24144C0FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FB5676ED-7A69-492C-B802-E7B24144C0FC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F6DE8DA0-07CC-4EF2-8A59-2BC81DBB3830}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0FAD7D2A-D7DD-45B1-91FD-488BB6CDACEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0FAD7D2A-D7DD-45B1-91FD-488BB6CDACEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0FAD7D2A-D7DD-45B1-91FD-488BB6CDACEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0FAD7D2A-D7DD-45B1-91FD-488BB6CDACEA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9B95EEF7-63FE-4432-8C63-166BE9C1A929}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DCDFE97C-5630-4F6F-855D-8AEEB96556A5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5A246D54-3109-4D2B-BE7D-FC0787D126AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D6319409-777A-4BD0-93ED-B2DFD805B32C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D6319409-777A-4BD0-93ED-B2DFD805B32C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D6319409-777A-4BD0-93ED-B2DFD805B32C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D6319409-777A-4BD0-93ED-B2DFD805B32C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{79E4293D-C92C-4649-AEC8-F1EFD95BDEB1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2A5027D9-F71D-4957-929E-F7A56AA1B95A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1B28FC3E-3D5B-4A46-8961-5483835548D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1B28FC3E-3D5B-4A46-8961-5483835548D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1B28FC3E-3D5B-4A46-8961-5483835548D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1B28FC3E-3D5B-4A46-8961-5483835548D7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{227C3B55-80E5-4E7E-A802-BE16C5128B9D} = {2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}
|
||||
{9E4C8A12-FBE0-4673-8CE2-DF99D5D57817} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{E3F9F378-AFE1-40A5-90BD-82833375DBFE} = {227C3B55-80E5-4E7E-A802-BE16C5128B9D}
|
||||
{5B03EF4E-E0AC-4905-861B-8C3EC1A0D458} = {227C3B55-80E5-4E7E-A802-BE16C5128B9D}
|
||||
{53594E5B-64A2-4545-8367-E3627D266AE8} = {FD962632-184C-4005-A5F3-E705D92FC645}
|
||||
{3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{C7311C00-2184-409B-B506-52A5FAEA8736} = {FD962632-184C-4005-A5F3-E705D92FC645}
|
||||
{FB5676ED-7A69-492C-B802-E7B24144C0FC} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{D6319409-777A-4BD0-93ED-B2DFD805B32C} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{A499779C-1B3B-48A8-B551-458E582E6E96} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{9102ABDF-E537-4E46-B525-C9ED4833EED0} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
{1B28FC3E-3D5B-4A46-8961-5483835548D7} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {7A0F2E34-D2AF-4DAB-86A0-7D7764B3D0EC}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,11 +0,0 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EdotCover_002EIde_002ECore_002EFilterManagement_002EModel_002ESolutionFilterSettingsManagerMigrateSettings/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:String x:Key="/Default/FilterSettingsManager/CoverageFilterXml/@EntryValue"><data><IncludeFilters /><ExcludeFilters /></data></s:String>
|
||||
<s:String x:Key="/Default/FilterSettingsManager/AttributeFilterXml/@EntryValue"><data /></s:String>
|
||||
<s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=2DA32DA040A7D74599ABE288C7224CF0/Comment/@EntryValue">Disposable construction</s:String>
|
||||
<s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=2DA32DA040A7D74599ABE288C7224CF0/Severity/@EntryValue">HINT</s:String>
|
||||
<s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=37A0B37A0ABAA34AA5CB32A93653C4FE/@KeyIndexDefined">False</s:Boolean>
|
||||
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">Default</s:String>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Umbraco/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=unpublish/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=unpublishing/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||
Reference in New Issue
Block a user