Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts: # Directory.Build.props # build/azure-pipelines.yml # src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderAuthExtensions.cs # src/Umbraco.Cms.Api.Common/OpenApi/SwaggerRouteTemplatePipelineFilter.cs # src/Umbraco.Cms.Api.Common/Security/Paths.cs # src/Umbraco.Cms.Api.Delivery/Controllers/Security/MemberController.cs # src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs # src/Umbraco.Cms.Api.Delivery/Handlers/InitializeMemberApplicationNotificationHandler.cs # src/Umbraco.Cms.Api.Delivery/Handlers/RevokeMemberAuthenticationTokensNotificationHandler.cs # src/Umbraco.Cms.Api.Delivery/Security/MemberApplicationManager.cs # src/Umbraco.Cms.Api.Delivery/Services/RequestMemberAccessService.cs # src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml # src/Umbraco.Cms.StaticAssets/umbraco/UmbracoLogin/Index.cshtml # src/Umbraco.Core/Constants-OAuthClaims.cs # src/Umbraco.Core/Constants-OAuthClientIds.cs # src/Umbraco.Core/DeliveryApi/IApiContentQueryProvider.cs # src/Umbraco.Core/DeliveryApi/IApiContentQueryService.cs # src/Umbraco.Core/DeliveryApi/IRequestMemberAccessService.cs # src/Umbraco.Core/DeliveryApi/NoopRequestMemberAccessService.cs # src/Umbraco.Core/Models/DeliveryApi/ProtectedAccess.cs # src/Umbraco.Core/Services/ITagService.cs # src/Umbraco.Core/Services/UserService.cs # src/Umbraco.Infrastructure/Security/IMemberApplicationManager.cs # src/Umbraco.Infrastructure/Security/OpenIdDictApplicationManagerBase.cs # src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs # src/Umbraco.Web.BackOffice/Controllers/MediaController.cs # tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/HelpPanel/systemInformation.spec.ts # tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts # version.json
This commit is contained in:
20
.github/CONTRIBUTING.md
vendored
20
.github/CONTRIBUTING.md
vendored
@@ -19,6 +19,7 @@ We also encourage community members to feel free to comment on others' pull requ
|
||||
* [What can I contribute?](#what-can-i-contribute)
|
||||
+ [Making larger changes](#making-larger-changes)
|
||||
+ [Pull request or package?](#pull-request-or-package)
|
||||
+ [Unwanted changes](#unwanted-changes)
|
||||
+ [Ownership and copyright](#ownership-and-copyright)
|
||||
- [Finding your first issue: Up for grabs](#finding-your-first-issue-up-for-grabs)
|
||||
- [Making your changes](#making-your-changes)
|
||||
@@ -69,6 +70,25 @@ If you're unsure about whether your changes belong in the core Umbraco CMS or if
|
||||
|
||||
If it doesn’t fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and fix bugs. Eventually, a package could "graduate" to be included in the CMS.
|
||||
|
||||
#### Unwanted changes
|
||||
While most changes are welcome, there are certain types of changes that are discouraged and might get your pull request refused.
|
||||
Of course this will depend heavily on the specific change, but please take the following examples in mind.
|
||||
|
||||
- **Breaking changes (code and/or behavioral) 💥** - sometimes it can be a bit hard to know if a change is breaking or not. Fortunately, if it relates to code, the build will fail and warn you.
|
||||
- **Large refactors 🤯** - the larger the refactor, the larger the probability of introducing new bugs/issues.
|
||||
- **Changes to obsolete code and/or property editors ✍️**
|
||||
- **Adding new config options 🦾** - while having more flexibility is (most of the times) better, having too many options can also become overwhelming/confusing, especially if there are other (good/simple) ways to achieve it.
|
||||
- **Whitespace changes 🫥** - while some of our files might not follow the formatting/whitespace rules (mostly old ones), changing several of them in one go would cause major merge conflicts with open pull requests or other work in progress. Do feel free to fix these when you are working on another issue/feature and end up "touching" those files!
|
||||
- **Adding new extension/helper methods ✋** - keep in mind that more code also means more to maintain, so if a helper is only meaningful for a few, it might not be worth adding it to the core.
|
||||
|
||||
While these are only a few examples, it is important to ask yourself these questions before making a pull request:
|
||||
|
||||
- How many will benefit from this change?
|
||||
- Are there other ways to achieve this? And if so, how do they compare?
|
||||
- How maintainable is the change?
|
||||
- What would be the effort to test it properly?
|
||||
- Do the benefits outweigh the risks?
|
||||
|
||||
#### Ownership and copyright
|
||||
|
||||
It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.
|
||||
|
||||
1
.github/README.md
vendored
1
.github/README.md
vendored
@@ -4,6 +4,7 @@
|
||||
[](CONTRIBUTING.md)
|
||||
[](https://twitter.com/intent/follow?screen_name=umbraco)
|
||||
[](https://discord.gg/umbraco)
|
||||
[](https://discord-chats.umbraco.com)
|
||||
[](https://umbraco.visualstudio.com/Umbraco%20Cms/_build?definitionId=301)
|
||||
[](https://github.com/codespaces/new?hide_repo_select=true&ref=contrib&repo=10601208&machine=basicLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=WestEurope)
|
||||
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.5.119" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.406" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.6.133" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.507" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
<PackageReference Include="Umbraco.Code" Version="2.0.0" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
<PackageReference Include="Umbraco.GitVersioning.Extensions" Version="0.2.0" PrivateAssets="all" IsImplicitlyDefined="true" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -43,7 +43,7 @@ parameters:
|
||||
default: ' '
|
||||
|
||||
variables:
|
||||
nodeVersion: 18.16.0
|
||||
nodeVersion: 20
|
||||
dotnetVersion: 8.x
|
||||
dotnetIncludePreviewVersions: true
|
||||
solution: umbraco.sln
|
||||
@@ -72,6 +72,7 @@ stages:
|
||||
submodules: true
|
||||
- task: NodeTool@0
|
||||
displayName: Use Node.js $(nodeVersion)
|
||||
retryCountOnTaskFailure: 3
|
||||
inputs:
|
||||
versionSpec: $(nodeVersion)
|
||||
- task: Cache@2
|
||||
@@ -84,9 +85,9 @@ stages:
|
||||
path: $(npm_config_cache)
|
||||
- script: npm ci --no-fund --no-audit --prefer-offline
|
||||
workingDirectory: src/Umbraco.Web.UI.Client
|
||||
displayName: Run npm ci
|
||||
displayName: Run npm ci (Backoffice)
|
||||
- task: gulp@0
|
||||
displayName: Run gulp build
|
||||
displayName: Run gulp build (Backoffice)
|
||||
inputs:
|
||||
gulpFile: src/Umbraco.Web.UI.Client/gulpfile.js
|
||||
targets: coreBuild
|
||||
@@ -111,29 +112,12 @@ stages:
|
||||
command: restore
|
||||
projects: $(solution)
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: Run dotnet build
|
||||
name: build
|
||||
displayName: Run dotnet build and generate NuGet packages
|
||||
inputs:
|
||||
command: build
|
||||
projects: $(solution)
|
||||
arguments: '--configuration $(buildConfiguration) --no-restore -p:ContinuousIntegrationBuild=true'
|
||||
- script: |
|
||||
version="$(Build.BuildNumber)"
|
||||
echo "Version: $version"
|
||||
|
||||
major="$(echo $version | cut -d '.' -f 1)"
|
||||
echo "Major version: $major"
|
||||
|
||||
echo "##vso[task.setvariable variable=majorVersion;isOutput=true]$major"
|
||||
displayName: Set major version
|
||||
name: determineMajorVersion
|
||||
- script: dotnet pack $(solution) --configuration $(buildConfiguration) --no-build --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg
|
||||
displayName: Run dotnet pack
|
||||
- script: |
|
||||
sha="$(Build.SourceVersion)"
|
||||
sha=${sha:0:7}
|
||||
buildnumber="$(Build.BuildNumber)_$(Build.BuildId)_$sha"
|
||||
echo "##vso[build.updatebuildnumber]$buildnumber"
|
||||
displayName: Update build number
|
||||
arguments: '--configuration $(buildConfiguration) --no-restore --property:ContinuousIntegrationBuild=true --property:GeneratePackageOnBuild=true --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg'
|
||||
- task: PublishPipelineArtifact@1
|
||||
displayName: Publish nupkg
|
||||
inputs:
|
||||
@@ -146,11 +130,11 @@ stages:
|
||||
artifactName: build_output
|
||||
|
||||
- stage: Build_Docs
|
||||
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.buildApiDocs}}))
|
||||
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.buildApiDocs}}))
|
||||
displayName: Prepare API Documentation
|
||||
dependsOn: Build
|
||||
variables:
|
||||
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['determineMajorVersion.majorVersion'] ]
|
||||
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['build.NBGV_VersionMajor'] ]
|
||||
jobs:
|
||||
# C# API Reference
|
||||
# - job:
|
||||
@@ -286,6 +270,8 @@ stages:
|
||||
- stage: Integration
|
||||
displayName: Integration Tests
|
||||
dependsOn: Build
|
||||
variables:
|
||||
releaseTestFilter: eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True')
|
||||
jobs:
|
||||
# Integration Tests (SQLite)
|
||||
- job:
|
||||
@@ -320,7 +306,7 @@ stages:
|
||||
command: test
|
||||
projects: '**/*.Tests.Integration.csproj'
|
||||
testRunTitle: Integration Tests SQLite - $(Agent.OS)
|
||||
${{ if or( parameters.forceReleaseTestFilter, startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')) }}:
|
||||
${{ if or(variables.releaseTestFilter, parameters.forceReleaseTestFilter) }}:
|
||||
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationReleaseTestFilter}}'
|
||||
${{ else }}:
|
||||
arguments: '--configuration $(buildConfiguration) ${{parameters.integrationNonReleaseTestFilter}}'
|
||||
@@ -334,7 +320,7 @@ stages:
|
||||
command: test
|
||||
projects: '**/*.Tests.Integration.csproj'
|
||||
testRunTitle: Integration Tests SQLite - $(Agent.OS)
|
||||
${{ if or( parameters.forceReleaseTestFilter, startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')) }}:
|
||||
${{ if or(variables.releaseTestFilter, parameters.forceReleaseTestFilter) }}:
|
||||
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationReleaseTestFilter}}'
|
||||
${{ else }}:
|
||||
arguments: '--configuration $(buildConfiguration) ${{parameters.nonWindowsIntegrationNonReleaseTestFilter}}'
|
||||
@@ -345,7 +331,7 @@ stages:
|
||||
# Integration Tests (SQL Server)
|
||||
- job:
|
||||
timeoutInMinutes: 120
|
||||
condition: or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.sqlServerIntegrationTests}})
|
||||
condition: or(eq(stageDependencies.Build.A.outputs['build.NBGV_PublicRelease'], 'True'), ${{parameters.sqlServerIntegrationTests}})
|
||||
displayName: Integration Tests (SQL Server)
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -385,7 +371,7 @@ stages:
|
||||
command: test
|
||||
projects: '**/*.Tests.Integration.csproj'
|
||||
testRunTitle: Integration Tests SQL Server - $(Agent.OS)
|
||||
${{ if or( parameters.forceReleaseTestFilter, startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')) }}:
|
||||
${{ if or(variables.releaseTestFilter, parameters.forceReleaseTestFilter) }}:
|
||||
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationReleaseTestFilter}}'
|
||||
${{ else }}:
|
||||
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationNonReleaseTestFilter}}'
|
||||
@@ -400,7 +386,7 @@ stages:
|
||||
command: test
|
||||
projects: '**/*.Tests.Integration.csproj'
|
||||
testRunTitle: Integration Tests SQL Server - $(Agent.OS)
|
||||
${{ if or( parameters.forceReleaseTestFilter, startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')) }}:
|
||||
${{ if or(variables.releaseTestFilter, parameters.forceReleaseTestFilter) }}:
|
||||
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationReleaseTestFilter}}'
|
||||
${{ else }}:
|
||||
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationNonReleaseTestFilter}}'
|
||||
@@ -457,6 +443,7 @@ stages:
|
||||
# path: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/misc/nupkg
|
||||
# - task: NodeTool@0
|
||||
# displayName: Use Node.js $(nodeVersion)
|
||||
# retryCountOnTaskFailure: 3
|
||||
# inputs:
|
||||
# versionSpec: $(nodeVersion)
|
||||
# - task: Cache@2
|
||||
@@ -561,7 +548,7 @@ stages:
|
||||
- Unit
|
||||
- Integration
|
||||
# - E2E # TODO: Enable when stable.
|
||||
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.myGetDeploy}}))
|
||||
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.myGetDeploy}}))
|
||||
jobs:
|
||||
- job:
|
||||
displayName: Push to pre-release feed
|
||||
@@ -584,7 +571,7 @@ stages:
|
||||
dependsOn:
|
||||
- Deploy_MyGet
|
||||
- Build_Docs
|
||||
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.nuGetDeploy}}))
|
||||
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.nuGetDeploy}}))
|
||||
jobs:
|
||||
- job:
|
||||
displayName: Push to NuGet
|
||||
@@ -607,12 +594,12 @@ stages:
|
||||
pool:
|
||||
vmImage: 'windows-latest' # Apparently AzureFileCopy is windows only :(
|
||||
variables:
|
||||
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['determineMajorVersion.majorVersion'] ]
|
||||
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['build.NBGV_VersionMajor'] ]
|
||||
displayName: Upload API Documentation
|
||||
dependsOn:
|
||||
- Build
|
||||
- Deploy_MyGet # Change to "Deploy_Nuget" after release of v14
|
||||
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.uploadApiDocs}}))
|
||||
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.uploadApiDocs}}))
|
||||
jobs:
|
||||
# - job:
|
||||
# displayName: Upload C# Docs
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
name: Nightly_$(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
|
||||
|
||||
pr: none
|
||||
trigger: none
|
||||
|
||||
schedules:
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Security.Cryptography;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using Umbraco.Cms.Api.Common.Security;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.DependencyInjection;
|
||||
@@ -50,14 +52,6 @@ public static class UmbracoBuilderAuthExtensions
|
||||
.RequireProofKeyForCodeExchange()
|
||||
.AllowRefreshTokenFlow();
|
||||
|
||||
// Register the encryption and signing credentials.
|
||||
// - see https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
||||
options
|
||||
// TODO: use actual certificates here, see docs above
|
||||
.AddDevelopmentEncryptionCertificate()
|
||||
.AddDevelopmentSigningCertificate()
|
||||
.DisableAccessTokenEncryption();
|
||||
|
||||
// Register the ASP.NET Core host and configure for custom authentication endpoint.
|
||||
options
|
||||
.UseAspNetCore()
|
||||
@@ -79,6 +73,19 @@ public static class UmbracoBuilderAuthExtensions
|
||||
// and https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-7.0
|
||||
// for more information
|
||||
options.UseDataProtection();
|
||||
|
||||
// Register encryption and signing credentials to protect tokens.
|
||||
// Note that for tokens generated/validated using ASP.NET Core Data Protection,
|
||||
// a separate key ring is used, distinct from the credentials discussed in
|
||||
// https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
||||
// More details can be found here: https://github.com/openiddict/openiddict-core/issues/1892#issuecomment-1737308506
|
||||
// "When using ASP.NET Core Data Protection to generate opaque tokens, the signing and encryption credentials
|
||||
// registered via Add*Key/Certificate() are not used". But since OpenIddict requires the registration of such,
|
||||
// we can generate random keys per instance without them taking effect.
|
||||
// - see also https://github.com/openiddict/openiddict-core/issues/1231
|
||||
options
|
||||
.AddEncryptionKey(new SymmetricSecurityKey(RandomNumberGenerator.GetBytes(32))) // generate a cryptographically secure random 256-bits key
|
||||
.AddSigningKey(new RsaSecurityKey(RSA.Create(keySizeInBits: 2048))); // generate RSA key with recommended size of 2048-bits
|
||||
})
|
||||
|
||||
// Register the OpenIddict validation components.
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
<PackageReference Include="Asp.Versioning.Mvc" Version="7.0.1" />
|
||||
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="7.0.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||
<PackageReference Include="OpenIddict.Abstractions" Version="4.7.0" />
|
||||
<PackageReference Include="OpenIddict.AspNetCore" Version="4.7.0" />
|
||||
<PackageReference Include="OpenIddict.Abstractions" Version="4.9.0" />
|
||||
<PackageReference Include="OpenIddict.AspNetCore" Version="4.9.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Umbraco.Cms.Api.Common.DependencyInjection;
|
||||
using Umbraco.Cms.Api.Delivery.Accessors;
|
||||
@@ -7,6 +8,7 @@ using Umbraco.Cms.Api.Delivery.Configuration;
|
||||
using Umbraco.Cms.Api.Delivery.Handlers;
|
||||
using Umbraco.Cms.Api.Delivery.Json;
|
||||
using Umbraco.Cms.Api.Delivery.Rendering;
|
||||
using Umbraco.Cms.Api.Delivery.Routing;
|
||||
using Umbraco.Cms.Api.Delivery.Security;
|
||||
using Umbraco.Cms.Api.Delivery.Services;
|
||||
using Umbraco.Cms.Core;
|
||||
@@ -57,6 +59,9 @@ public static class UmbracoBuilderExtensions
|
||||
builder.AddNotificationAsyncHandler<MemberDeletedNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
|
||||
builder.AddNotificationAsyncHandler<AssignedMemberRolesNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
|
||||
builder.AddNotificationAsyncHandler<RemovedMemberRolesNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
|
||||
|
||||
// FIXME: remove this when Delivery API V1 is removed
|
||||
builder.Services.AddSingleton<MatcherPolicy, DeliveryApiItemsEndpointsMatcherPolicy>();
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.AspNetCore.Routing.Matching;
|
||||
using Umbraco.Cms.Api.Delivery.Controllers.Content;
|
||||
using Umbraco.Cms.Api.Delivery.Controllers.Media;
|
||||
|
||||
namespace Umbraco.Cms.Api.Delivery.Routing;
|
||||
|
||||
// FIXME: remove this when Delivery API V1 is removed
|
||||
internal sealed class DeliveryApiItemsEndpointsMatcherPolicy : MatcherPolicy, IEndpointSelectorPolicy
|
||||
{
|
||||
public override int Order => 100;
|
||||
|
||||
public bool AppliesToEndpoints(IReadOnlyList<Endpoint> endpoints)
|
||||
{
|
||||
for (var i = 0; i < endpoints.Count; i++)
|
||||
{
|
||||
ControllerActionDescriptor? controllerActionDescriptor = endpoints[i].Metadata.GetMetadata<ControllerActionDescriptor>();
|
||||
if (IsByIdsController(controllerActionDescriptor) || IsByRouteController(controllerActionDescriptor))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates)
|
||||
{
|
||||
var hasIdQueryParameter = httpContext.Request.Query.ContainsKey("id");
|
||||
for (var i = 0; i < candidates.Count; i++)
|
||||
{
|
||||
ControllerActionDescriptor? controllerActionDescriptor = candidates[i].Endpoint?.Metadata.GetMetadata<ControllerActionDescriptor>();
|
||||
if (IsByIdsController(controllerActionDescriptor))
|
||||
{
|
||||
candidates.SetValidity(i, hasIdQueryParameter);
|
||||
}
|
||||
else if (IsByRouteController(controllerActionDescriptor))
|
||||
{
|
||||
candidates.SetValidity(i, hasIdQueryParameter is false);
|
||||
}
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private static bool IsByIdsController(ControllerActionDescriptor? controllerActionDescriptor)
|
||||
=> IsControllerType<ByIdsContentApiController>(controllerActionDescriptor) || IsControllerType<ByIdsMediaApiController>(controllerActionDescriptor);
|
||||
|
||||
private static bool IsByRouteController(ControllerActionDescriptor? controllerActionDescriptor)
|
||||
=> IsControllerType<ByRouteContentApiController>(controllerActionDescriptor) || IsControllerType<ByPathMediaApiController>(controllerActionDescriptor);
|
||||
|
||||
private static bool IsControllerType<T>(ControllerActionDescriptor? controllerActionDescriptor)
|
||||
=> controllerActionDescriptor?.MethodInfo.DeclaringType == typeof(T);
|
||||
}
|
||||
@@ -49,6 +49,7 @@ public sealed class ImageSharpImageUrlGenerator : IImageUrlGenerator
|
||||
/// Initializes a new instance of the <see cref="ImageSharpImageUrlGenerator" /> class.
|
||||
/// </summary>
|
||||
/// <param name="supportedImageFileTypes">The supported image file types/extensions.</param>
|
||||
/// <param name="options">The ImageSharp middleware options.</param>
|
||||
/// <param name="requestAuthorizationUtilities">Contains helpers that allow authorization of image requests.</param>
|
||||
/// <remarks>
|
||||
/// This constructor is only used for testing.
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-rc.1.*" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-rc.2.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.1.*" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.2.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -22,7 +22,7 @@ internal class SqlServerEFCoreDistributedLockingMechanism<T> : IDistributedLocki
|
||||
private readonly Lazy<IEFCoreScopeAccessor<T>> _scopeAccessor; // Hooray it's a circular dependency.
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SqlServerDistributedLockingMechanism" /> class.
|
||||
/// Initializes a new instance of the <see cref="SqlServerEFCoreDistributedLockingMechanism{T}"/> class.
|
||||
/// </summary>
|
||||
public SqlServerEFCoreDistributedLockingMechanism(
|
||||
ILogger<SqlServerEFCoreDistributedLockingMechanism<T>> logger,
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.1.*" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-rc.1.*" />
|
||||
<PackageReference Include="OpenIddict.EntityFrameworkCore" Version="4.7.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-rc.2.*" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.2.*" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-rc.2.*"/>
|
||||
<PackageReference Include="OpenIddict.EntityFrameworkCore" Version="4.9.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.0-rc.1.*" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.0-rc.2.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
<Target Name="BuildBelle">
|
||||
<Exec WorkingDirectory="$(ProjectDir)..\Umbraco.Web.UI.Client\" Command="npm ci --no-fund --no-audit --prefer-offline" />
|
||||
<Exec WorkingDirectory="$(ProjectDir)..\Umbraco.Web.UI.Client\" Command="npm run build:skip-tests" />
|
||||
<Exec WorkingDirectory="$(ProjectDir)..\Umbraco.Web.UI.Login\" Command="npm ci --no-fund --no-audit --prefer-offline" />
|
||||
<Exec WorkingDirectory="$(ProjectDir)..\Umbraco.Web.UI.Login\" Command="npm run build" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildBackOffice">
|
||||
|
||||
@@ -56,15 +56,6 @@
|
||||
|
||||
@await Html.BareMinimumServerVariablesScriptAsync(backOfficeServerVariables)
|
||||
|
||||
<script type="text/javascript">
|
||||
document.angularReady = function (app) {
|
||||
|
||||
@await Html.AngularValueExternalLoginInfoScriptAsync(externalLogins, ViewData.GetExternalSignInProviderErrors()!)
|
||||
@Html.AngularValueResetPasswordCodeInfoScript(ViewData[ViewDataExtensions.TokenPasswordResetCode]!)
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
@*And finally we can load in our angular app*@
|
||||
<script type="text/javascript" src="lib/lazyload-js/LazyLoad.min.js"></script>
|
||||
<script src="@Url.GetUrlWithCacheBust("Application", "BackOffice", null!, hostingEnvironment, umbracoVersion, runtimeMinifier)"></script>
|
||||
|
||||
@@ -35,7 +35,7 @@ public abstract class CacheRefresherBase<TNotification> : ICacheRefresher
|
||||
public abstract string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="ICacheRefresherNotificationFactory" /> for <see cref="TNotification" />
|
||||
/// Gets the <see cref="ICacheRefresherNotificationFactory" /> for <typeparamref name="TNotification"/>.
|
||||
/// </summary>
|
||||
protected ICacheRefresherNotificationFactory NotificationFactory { get; }
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ public abstract class JsonCacheRefresherBase<TNotification, TJsonPayload> : Cach
|
||||
where TNotification : CacheRefresherNotification
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JsonCacheRefresherBase{TInstanceType}" />.
|
||||
/// Initializes a new instance of the <see cref="JsonCacheRefresherBase{TNotification, TJsonPayload}"/> class.
|
||||
/// </summary>
|
||||
protected JsonCacheRefresherBase(
|
||||
AppCaches appCaches,
|
||||
|
||||
@@ -37,7 +37,7 @@ public class EventClearingObservableCollection<TValue> : ObservableCollection<TV
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears all event handlers for the <see cref="CollectionChanged" /> event
|
||||
/// Clears all event handlers for the <see cref="INotifyCollectionChanged.CollectionChanged" /> event.
|
||||
/// </summary>
|
||||
public void ClearCollectionChangedEvents() => _changed = null;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
|
||||
namespace Umbraco.Cms.Core.Collections;
|
||||
@@ -84,7 +84,7 @@ public class ObservableDictionary<TKey, TValue> : ObservableCollection<TValue>,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clears all <see cref="CollectionChanged" /> event handlers
|
||||
/// Clears all <see cref="INotifyCollectionChanged.CollectionChanged" /> event handlers
|
||||
/// </summary>
|
||||
public void ClearCollectionChangedEvents() => _changed = null;
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Reflection;
|
||||
using Umbraco.Cms.Core.Semver;
|
||||
|
||||
namespace Umbraco.Cms.Core.Configuration;
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models;
|
||||
[UmbracoOptions(Constants.Configuration.ConfigIndexing)]
|
||||
public class IndexingSettings
|
||||
{
|
||||
private const bool StaticExplicitlyIndexEachNestedProperty = true;
|
||||
private const bool StaticExplicitlyIndexEachNestedProperty = false;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value for whether each nested property should have it's own indexed value. Requires a rebuild of indexes when changed.
|
||||
|
||||
@@ -17,6 +17,7 @@ public class SecuritySettings
|
||||
internal const bool StaticHideDisabledUsersInBackOffice = false;
|
||||
internal const bool StaticAllowPasswordReset = true;
|
||||
internal const bool StaticAllowEditInvariantFromNonDefault = false;
|
||||
internal const bool StaticAllowConcurrentLogins = false;
|
||||
internal const string StaticAuthCookieName = "UMB_UCONTEXT";
|
||||
|
||||
internal const string StaticAllowedUserNameCharacters =
|
||||
@@ -109,4 +110,10 @@ public class SecuritySettings
|
||||
[Obsolete("Use ContentSettings.AllowEditFromInvariant instead")]
|
||||
[DefaultValue(StaticAllowEditInvariantFromNonDefault)]
|
||||
public bool AllowEditInvariantFromNonDefault { get; set; } = StaticAllowEditInvariantFromNonDefault;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to allow concurrent logins.
|
||||
/// </summary>
|
||||
[DefaultValue(StaticAllowConcurrentLogins)]
|
||||
public bool AllowConcurrentLogins { get; set; } = StaticAllowConcurrentLogins;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public static partial class Constants
|
||||
public static readonly char[] Comma = { ',' };
|
||||
|
||||
/// <summary>
|
||||
/// Char array containing only &
|
||||
/// Char array containing only &
|
||||
/// </summary>
|
||||
public static readonly char[] Ampersand = { '&' };
|
||||
|
||||
@@ -88,7 +88,7 @@ public static partial class Constants
|
||||
public static readonly char[] QuestionMark = { '?' };
|
||||
|
||||
/// <summary>
|
||||
/// Char array containing ? &
|
||||
/// Char array containing ? &
|
||||
/// </summary>
|
||||
public static readonly char[] QuestionMarkAmpersand = { '?', '&' };
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ public static partial class Constants
|
||||
public const string BackOfficeArea = "UmbracoBackOffice"; // Used for area routes of non-api controllers
|
||||
public const string BackOfficeApiArea = "UmbracoApi"; // Same name as v8 so all routing remains the same
|
||||
public const string BackOfficeTreeArea = "UmbracoTrees"; // Same name as v8 so all routing remains the same
|
||||
public const string BackOfficeLoginArea = "UmbracoLogin"; // Used for area routes of non-api controllers for login
|
||||
}
|
||||
|
||||
public static class Routing
|
||||
|
||||
@@ -33,8 +33,8 @@ public class DelegateEqualityComparer<T> : IEqualityComparer<T>
|
||||
/// <returns>
|
||||
/// true if the specified objects are equal; otherwise, false.
|
||||
/// </returns>
|
||||
/// <param name="x">The first object of type <paramref name="T" /> to compare.</param>
|
||||
/// <param name="y">The second object of type <paramref name="T" /> to compare.</param>
|
||||
/// <param name="x">The first object of type <typeparamref name="T"/> to compare.</param>
|
||||
/// <param name="y">The second object of type <typeparamref name="T"/> to compare.</param>
|
||||
public bool Equals(T? x, T? y) => _equals.Invoke(x, y);
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.DeliveryApi;
|
||||
|
||||
namespace Umbraco.Cms.Core.DeliveryApi;
|
||||
@@ -38,7 +38,7 @@ public interface IApiContentQueryProvider
|
||||
ProtectedAccess protectedAccess,
|
||||
bool preview,
|
||||
int skip,
|
||||
int take);
|
||||
int take) => new();
|
||||
|
||||
/// <summary>
|
||||
/// Returns a selector option that can be applied to fetch "all content" (i.e. if a selector option is not present when performing a search).
|
||||
|
||||
@@ -22,5 +22,6 @@ public interface IApiContentQueryService
|
||||
/// <param name="take">The amount of items to take.</param>
|
||||
/// <param name="protectedAccess">Defines the limitations for querying protected content.</param>
|
||||
/// <returns>A paged model of item ids that are returned after applying the search queries in an attempt.</returns>
|
||||
Attempt<PagedModel<Guid>, ApiContentQueryOperationStatus> ExecuteQuery(string? fetch, IEnumerable<string> filters, IEnumerable<string> sorts, ProtectedAccess protectedAccess, int skip, int take);
|
||||
Attempt<PagedModel<Guid>, ApiContentQueryOperationStatus> ExecuteQuery(string? fetch, IEnumerable<string> filters, IEnumerable<string> sorts, ProtectedAccess protectedAccess, int skip, int take)
|
||||
=> default;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
namespace Umbraco.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Provides extension methods to the <see cref="IFactory" /> class.
|
||||
/// Provides extension methods to the <see cref="IServiceProvider" /> class.
|
||||
/// </summary>
|
||||
public static class ServiceProviderExtensions
|
||||
{
|
||||
@@ -28,7 +28,7 @@ public static class ServiceProviderExtensions
|
||||
/// <summary>
|
||||
/// Creates an instance of a service, with arguments.
|
||||
/// </summary>
|
||||
/// <param name="serviceProvider">The <see cref="IServiceProvider" /></param>
|
||||
/// <param name="serviceProvider">The <see cref="IServiceProvider" />.</param>
|
||||
/// <param name="type">The type of the instance.</param>
|
||||
/// <param name="args">Named arguments.</param>
|
||||
/// <returns>An instance of the specified type.</returns>
|
||||
|
||||
@@ -158,6 +158,12 @@
|
||||
<key alias="morePublishingOptions">Više opcija za objavljivanje</key>
|
||||
<key alias="submitChanges">Pošalji</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Mediji je izbrisan</key>
|
||||
<key alias="move">Mediji premješten</key>
|
||||
<key alias="copy">Mediji kopiran</key>
|
||||
<key alias="save">Mediji spremljen</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Pregled za</key>
|
||||
<key alias="delete">Sadržaj je izbrisan</key>
|
||||
@@ -2653,7 +2659,7 @@ Da upravljate svojom web lokacijom, jednostavno otvorite Umbraco backoffice i po
|
||||
</key>
|
||||
<key alias="learningBaseDescription">
|
||||
<![CDATA[
|
||||
<p>Želite savladati Umbraco? Provedite nekoliko minuta učeći neke najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a <a href="https://www.youtube.com/c/UmbracoLearningBase" target="_blank" rel="noopener"> Umbraco Learning Base Youtube kanal</a>. Ovdje možete pronaći gomilu video materijala koji pokriva mnoge aspekte Umbraco-a.</p>
|
||||
<p>Želite savladati Umbraco? Provedite nekoliko minuta učeći neke najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a <a class="btn-link -underline" href="https://www.youtube.com/c/UmbracoLearningBase" target="_blank" rel="noopener"> Umbraco Learning Base Youtube kanal</a>. Ovdje možete pronaći gomilu video materijala koji pokriva mnoge aspekte Umbraco-a.</p>
|
||||
]]>
|
||||
</key>
|
||||
<key alias="getStarted">Za početak</key>
|
||||
|
||||
@@ -151,6 +151,12 @@
|
||||
<key alias="confirmActionConfirm">Potvrdit</key>
|
||||
<key alias="morePublishingOptions">Další možnosti publikování</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Média smazán</key>
|
||||
<key alias="move">Média přesunut</key>
|
||||
<key alias="copy">Média zkopírován</key>
|
||||
<key alias="save">Média uložen</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Zobrazení pro</key>
|
||||
<key alias="delete">Obsah smazán</key>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -157,6 +157,12 @@
|
||||
<key alias="morePublishingOptions">Flere publiseringsmuligheder</key>
|
||||
<key alias="submitChanges">Indsæt</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Brugeren har slettet medie</key>
|
||||
<key alias="move">Brugeren har flyttet medie</key>
|
||||
<key alias="copy">Brugeren har kopieret medie</key>
|
||||
<key alias="save">Brugeren har gemt medie</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">For</key>
|
||||
<key alias="delete">Brugeren har slettet indholdet</key>
|
||||
@@ -828,6 +834,7 @@
|
||||
<key alias="sort">Sortér</key>
|
||||
<key alias="status">Status</key>
|
||||
<key alias="submit">Indsend</key>
|
||||
<key alias="success">Succes</key>
|
||||
<key alias="type">Type</key>
|
||||
<key alias="typeToSearch">Skriv for at søge...</key>
|
||||
<key alias="under">under</key>
|
||||
@@ -1016,6 +1023,7 @@
|
||||
<key alias="instruction">Log ind nedenfor</key>
|
||||
<key alias="signInWith">Log ind med</key>
|
||||
<key alias="timeout">Din session er udløbet</key>
|
||||
<key alias="userFailedLogin">Ups! Vi kunne ikke logge dig ind. Tjek at dit brugernavn og adgangskode er korrekt og prøv igen.</key>
|
||||
<key alias="bottomText">
|
||||
<![CDATA[<p style="text-align:right;">© 2001 - %0% <br /><a href="https://umbraco.com" style="text-decoration: none" target="_blank" rel="noopener">umbraco.com</a></p> ]]></key>
|
||||
<key alias="forgottenPassword">Glemt adgangskode?</key>
|
||||
|
||||
@@ -159,6 +159,12 @@
|
||||
<key alias="morePublishingOptions">Mehr Veröffentlichungs Optionen</key>
|
||||
<key alias="submitChanges">Senden</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Medie gelöscht</key>
|
||||
<key alias="move">Medie verschoben</key>
|
||||
<key alias="copy">Medie kopiert</key>
|
||||
<key alias="save">Medie gesichert</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Anzeigen als</key>
|
||||
<key alias="delete">Inhalt gelöscht</key>
|
||||
|
||||
@@ -159,6 +159,12 @@
|
||||
<key alias="morePublishingOptions">More publishing options</key>
|
||||
<key alias="submitChanges">Submit</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Media deleted</key>
|
||||
<key alias="move">Media moved</key>
|
||||
<key alias="copy">Media copied</key>
|
||||
<key alias="save">Media saved</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Viewing for</key>
|
||||
<key alias="delete">Content deleted</key>
|
||||
@@ -1069,6 +1075,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
|
||||
<key alias="instruction">Log in below</key>
|
||||
<key alias="signInWith">Sign in with</key>
|
||||
<key alias="timeout">Session timed out</key>
|
||||
<key alias="userFailedLogin">Oops! We couldn't log you in. Please check your credentials and try again.</key>
|
||||
<key alias="bottomText">
|
||||
<![CDATA[<p style="text-align:right;">© 2001 - %0% <br /><a href="https://umbraco.com" style="text-decoration: none" target="_blank" rel="noopener">Umbraco.com</a></p> ]]></key>
|
||||
<key alias="forgottenPassword">Forgotten password?</key>
|
||||
@@ -2520,6 +2527,8 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
|
||||
<key alias="addImageCaption">Add image caption</key>
|
||||
<key alias="searchContentTree">Search content tree</key>
|
||||
<key alias="maxAmount">Maximum amount</key>
|
||||
<key alias="expandChildItems">Expand child items for</key>
|
||||
<key alias="openContextNode">Open context node for</key>
|
||||
</area>
|
||||
<area alias="references">
|
||||
<key alias="tabName">References</key>
|
||||
@@ -2672,7 +2681,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
|
||||
</key>
|
||||
<key alias="learningBaseDescription">
|
||||
<![CDATA[
|
||||
<p>Want to master Umbraco? Spend a few minutes learning some best practices by visiting <a href="https://www.youtube.com/c/UmbracoLearningBase" target="_blank" rel="noopener">the Umbraco Learning Base Youtube channel</a>. Here you can find a bunch of video material covering many aspects of Umbraco.</p>
|
||||
<p>Want to master Umbraco? Spend a few minutes learning some best practices by visiting <a class="btn-link -underline" href="https://www.youtube.com/c/UmbracoLearningBase" target="_blank" rel="noopener">the Umbraco Learning Base Youtube channel</a>. Here you can find a bunch of video material covering many aspects of Umbraco.</p>
|
||||
]]>
|
||||
</key>
|
||||
<key alias="getStarted">To get you started</key>
|
||||
|
||||
@@ -160,6 +160,12 @@
|
||||
<key alias="morePublishingOptions">More publishing options</key>
|
||||
<key alias="submitChanges">Submit</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Media deleted</key>
|
||||
<key alias="move">Media moved</key>
|
||||
<key alias="copy">Media copied</key>
|
||||
<key alias="save">Media saved</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Viewing for</key>
|
||||
<key alias="delete">Content deleted</key>
|
||||
@@ -1098,6 +1104,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
|
||||
<key alias="instruction">Log in below</key>
|
||||
<key alias="signInWith">Sign in with</key>
|
||||
<key alias="timeout">Session timed out</key>
|
||||
<key alias="userFailedLogin">Oops! We couldn't log you in. Please check your credentials and try again.</key>
|
||||
<key alias="bottomText">
|
||||
<![CDATA[<p style="text-align:right;">© 2001 - %0% <br /><a href="https://umbraco.com" style="text-decoration: none" target="_blank" rel="noopener">Umbraco.com</a></p> ]]></key>
|
||||
<key alias="forgottenPassword">Forgotten password?</key>
|
||||
@@ -1195,6 +1202,8 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
|
||||
</body>
|
||||
</html>
|
||||
]]> </key>
|
||||
<key alias="mfaSecurityCodeSubject">Umbraco: Security Code</key>
|
||||
<key alias="mfaSecurityCodeMessage">Your security code is: %0%</key>
|
||||
<key alias="2faTitle">One last step</key>
|
||||
<key alias="2faText">You have enabled 2-factor authentication and must verify your identity.</key>
|
||||
<key alias="2faMultipleText">Please choose a 2-factor provider</key>
|
||||
@@ -2624,6 +2633,8 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
|
||||
<key alias="addImageCaption">Add image caption</key>
|
||||
<key alias="searchContentTree">Search content tree</key>
|
||||
<key alias="maxAmount">Maximum amount</key>
|
||||
<key alias="expandChildItems">Expand child items for</key>
|
||||
<key alias="openContextNode">Open context node for</key>
|
||||
</area>
|
||||
<area alias="references">
|
||||
<key alias="tabName">References</key>
|
||||
|
||||
@@ -150,6 +150,12 @@
|
||||
<key alias="confirmActionConfirm">Confirmer</key>
|
||||
<key alias="morePublishingOptions">Options de publication supplémentaires</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Media supprimé</key>
|
||||
<key alias="move">Media déplacé</key>
|
||||
<key alias="copy">Media copié</key>
|
||||
<key alias="save">Media sauvegardé</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Aperçu pour</key>
|
||||
<key alias="delete">Contenu supprimé</key>
|
||||
|
||||
@@ -158,6 +158,12 @@
|
||||
<key alias="morePublishingOptions">Više opcija za objavljivanje</key>
|
||||
<key alias="submitChanges">Pošalji</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Mediji je obrisan</key>
|
||||
<key alias="move">Mediji premješten</key>
|
||||
<key alias="copy">Mediji kopiran</key>
|
||||
<key alias="save">Mediji spremljen</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Pregled za</key>
|
||||
<key alias="delete">Sadržaj je obrisan</key>
|
||||
@@ -2610,7 +2616,7 @@ Da bi upravljali svojom web lokacijom, jednostavno otvorite Umbraco backoffice i
|
||||
</key>
|
||||
<key alias="learningBaseDescription">
|
||||
<![CDATA[
|
||||
<p>Želite savladati Umbraco? Provedite nekoliko minuta učeći najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a <a href="https://www.youtube.com/c/UmbracoLearningBase" target="_blank" rel="noopener"> Umbraco Learning Base Youtube kanal</a>. Ovdje možete pronaći gomilu video materijala koji pokriva mnoge aspekte Umbraco-a.</p>
|
||||
<p>Želite savladati Umbraco? Provedite nekoliko minuta učeći najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a <a class="btn-link -underline" href="https://www.youtube.com/c/UmbracoLearningBase" target="_blank" rel="noopener"> Umbraco Learning Base Youtube kanal</a>. Ovdje možete pronaći gomilu video materijala koji pokriva mnoge aspekte Umbraco-a.</p>
|
||||
]]>
|
||||
</key>
|
||||
<key alias="getStarted">Za početak</key>
|
||||
|
||||
@@ -163,6 +163,12 @@
|
||||
<key alias="submitChanges">Invia</key>
|
||||
<key alias="submitChangesAndClose">Invia e chiudi</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Media eliminato</key>
|
||||
<key alias="move">Media spostato</key>
|
||||
<key alias="copy">Media copiato</key>
|
||||
<key alias="save">Media salvato</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Visualizzazione per</key>
|
||||
<key alias="delete">Contenuto eliminato</key>
|
||||
|
||||
@@ -112,6 +112,12 @@
|
||||
zijn op de huidige node, tenzij een domein hieronder ook van toepassing is.]]></key>
|
||||
<key alias="setDomains">Domeinen</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Media verwijderd</key>
|
||||
<key alias="move">Media verplaatst</key>
|
||||
<key alias="copy">Media gekopieerd</key>
|
||||
<key alias="save">Media bewaard</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Tonen voor</key>
|
||||
<key alias="delete">Inhoud verwijderd</key>
|
||||
@@ -537,6 +543,7 @@
|
||||
</area>
|
||||
<area alias="dictionary">
|
||||
<key alias="noItems">Er zijn geen woordenboekitems.</key>
|
||||
<key alias="noItemsFound">Er zijn geen woordenboekitems gevonden.</key>
|
||||
<key alias="createNew">Woordenboekitem aanmaken</key>
|
||||
</area>
|
||||
<area alias="dictionaryItem">
|
||||
@@ -738,7 +745,7 @@
|
||||
<key alias="history">Geschiedenis</key>
|
||||
<key alias="icon">Icoon</key>
|
||||
<key alias="id">Id</key>
|
||||
<key alias="import">Import</key>
|
||||
<key alias="import">Importeren</key>
|
||||
<key alias="excludeFromSubFolders">Alleen in deze map zoeken</key>
|
||||
<key alias="info">Info</key>
|
||||
<key alias="innerMargin">Binnenste marge</key>
|
||||
|
||||
@@ -67,6 +67,12 @@
|
||||
<key alias="setLanguageHelp"><![CDATA[Sätt kulturen för noder under aktuell nod,<br /> eller ärv kulturen från föregående noder. Appliceras även<br />
|
||||
på befintlig nod.]]></key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Media raderat</key>
|
||||
<key alias="move">Media flyttat</key>
|
||||
<key alias="copy">Media kopierat</key>
|
||||
<key alias="save">Media sparat</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Visar för</key>
|
||||
<key alias="delete">Innehållet raderat</key>
|
||||
@@ -103,6 +109,12 @@
|
||||
<key alias="blockHasChanges">Du har gjort ändringar i detta innehåll. Är du säker på att du vill ta bort dem?</key>
|
||||
<key alias="confirmCancelBlockCreationHeadline">Ignorera skapandet</key>
|
||||
<key alias="confirmCancelBlockCreationMessage"><![CDATA[Är du säker på att du vill avbryta skapandet?]]></key>
|
||||
<key alias="areaValidationEntriesShort"><![CDATA[<strong>%0%</strong> måste vara närvarande åtminstone <strong>%2%</strong> time(s).]]></key>
|
||||
<key alias="areaValidationEntriesExceed"><![CDATA[<strong>%0%</strong> måste maximalt finnas <strong>%3%</strong> time(s).]]></key>
|
||||
</area>
|
||||
<area alias="validation">
|
||||
<key alias="entriesShort"><![CDATA[Minsta %0% poster, kräver <strong>%1%</strong> mer.]]></key>
|
||||
<key alias="entriesExceed"><![CDATA[Max %0% poster, <strong>%1%</strong> för många.]]></key>
|
||||
</area>
|
||||
<area alias="blueprints">
|
||||
<key alias="createBlueprintFrom"><![CDATA[Skapa en ny innehållsmall för <em>%0%</em>]]></key>
|
||||
@@ -240,6 +252,60 @@
|
||||
<key alias="memberIntro">Komma igång</key>
|
||||
<key alias="formsInstall">Installera Umbraco Forms</key>
|
||||
</area>
|
||||
<area alias="visuallyHiddenTexts">
|
||||
<key alias="goBack">Backa</key>
|
||||
<key alias="activeListLayout">Aktiv layout:</key>
|
||||
<key alias="jumpTo">Hoppa till</key>
|
||||
<key alias="group">grupp</key>
|
||||
<key alias="passed">godkänd</key>
|
||||
<key alias="warning">varning</key>
|
||||
<key alias="failed">underkänd</key>
|
||||
<key alias="suggestion">förslag</key>
|
||||
<key alias="checkPassed">Godkänd</key>
|
||||
<key alias="checkFailed">Underkänd</key>
|
||||
<key alias="openBackofficeSearch">Öppna sökfunktion (backoffice)</key>
|
||||
<key alias="openCloseBackofficeHelp">Öppna/stäng hjälpfunktion</key>
|
||||
<key alias="openCloseBackofficeProfileOptions">Öppna/stäng personliga inställningar</key>
|
||||
<key alias="assignDomainDescription">Redigera språk och värdnamn för %0%</key>
|
||||
<key alias="createDescription">Skapa en ny nod under %0%</key>
|
||||
<key alias="protectDescription">Ändra behörigheter för %0%</key>
|
||||
<key alias="rightsDescription">Redigera behörigheter för %0%</key>
|
||||
<key alias="sortDescription">Ändra sortering av %0%</key>
|
||||
<key alias="createblueprintDescription">Skapa innehållsmall baserad på %0%</key>
|
||||
<key alias="openContextMenu">Öppna kontextmeny för </key>
|
||||
<key alias="currentLanguage">Aktuellt språk</key>
|
||||
<key alias="switchLanguage">Byt språk till</key>
|
||||
<key alias="createNewFolder">Skapa ny mapp</key>
|
||||
<key alias="newPartialView">Del av vy</key>
|
||||
<key alias="newPartialViewMacro">Del av vy (makro)</key>
|
||||
<key alias="newMember">Medlem</key>
|
||||
<key alias="newDataType">Datatyp</key>
|
||||
<key alias="redirectDashboardSearchLabel">Sök bland omdirigeringar</key>
|
||||
<key alias="userGroupSearchLabel">Sök bland användargrupper</key>
|
||||
<key alias="userSearchLabel">Sök bland användare</key>
|
||||
<key alias="createItem">Skapa post</key>
|
||||
<key alias="create">Skapa</key>
|
||||
<key alias="edit">Redigera</key>
|
||||
<key alias="name">Namn</key>
|
||||
<key alias="addNewRow">Lägg till ny rad</key>
|
||||
<key alias="tabExpand">Visa fler alternativ</key>
|
||||
<key alias="searchOverlayTitle">Sök i Umbraco backoffice</key>
|
||||
<key alias="searchOverlayDescription">Sök efter innehåll, media etc i hela Umbraco.</key>
|
||||
<key alias="searchInputDescription">När det finns automatförslag, använd pil upp eller ner, eller använd tabbtangenten. Använd enter för att välja.
|
||||
</key>
|
||||
<key alias="path">Sökväg:</key>
|
||||
<key alias="foundIn">Hittad i</key>
|
||||
<key alias="hasTranslation">Har översättning</key>
|
||||
<key alias="noTranslation">Saknar översättning</key>
|
||||
<key alias="dictionaryListCaption">Post i ordlista</key>
|
||||
<key alias="contextMenuDescription">Välj ett av alternativen för att redigera noden.</key>
|
||||
<key alias="contextDialogDescription">Utför %0% på noden %1%</key>
|
||||
<key alias="addImageCaption">Lägg till bildtext</key>
|
||||
<key alias="searchContentTree">Sök i innehållsträdet</key>
|
||||
<key alias="maxAmount">Maximalt värde</key>
|
||||
<key alias="expandChildItems">Visa underliggande noder för</key>
|
||||
<key alias="openContextNode">Öppna kontext för</key>
|
||||
</area>
|
||||
<area alias="prompt">
|
||||
<key alias="stay">Stanna</key>
|
||||
<key alias="discardChanges">Ignorera ändringar</key>
|
||||
|
||||
@@ -156,6 +156,12 @@
|
||||
<key alias="morePublishingOptions">Daha fazla yayınlama seçeneği</key>
|
||||
<key alias="submitChanges">Gönder</key>
|
||||
</area>
|
||||
<area alias="auditTrailsMedia">
|
||||
<key alias="delete">Medya silindi</key>
|
||||
<key alias="move">Medya taşındı</key>
|
||||
<key alias="copy">Medya kopyalandı</key>
|
||||
<key alias="save">Medya kaydedildi</key>
|
||||
</area>
|
||||
<area alias="auditTrails">
|
||||
<key alias="atViewingFor">Görüntüleniyor</key>
|
||||
<key alias="delete">İçerik silindi</key>
|
||||
|
||||
@@ -167,7 +167,7 @@ public static class ExpressionHelper
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a <see cref="MethodInfo" /> from an <see cref="Expression{Action{T}}" /> provided it refers to a method call.
|
||||
/// Gets a <see cref="MethodInfo" /> from an <see cref="Expression{TDelegate}"/> of <see cref="Action{T}"/> provided it refers to a method call.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="fromExpression">From expression.</param>
|
||||
@@ -254,7 +254,7 @@ public static class ExpressionHelper
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a <see cref="MemberInfo" /> from an <see cref="Expression{Func{T, TReturn}}" /> provided it refers to member
|
||||
/// Gets a <see cref="MemberInfo" /> from an <see cref="Expression{TDelegate}" /> of <see cref="Func{T, TReturn}"/> provided it refers to member
|
||||
/// access.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
|
||||
@@ -320,6 +320,8 @@ public static class ContentExtensions
|
||||
/// Stores a file.
|
||||
/// </summary>
|
||||
/// <param name="content"><see cref="IContentBase" />A content item.</param>
|
||||
/// <param name="mediaFileManager">The media file manager.</param>
|
||||
/// <param name="contentTypeBaseServiceProvider">The content type base service provider.</param>
|
||||
/// <param name="propertyTypeAlias">The property alias.</param>
|
||||
/// <param name="filename">The name of the file.</param>
|
||||
/// <param name="filestream">A stream containing the file data.</param>
|
||||
|
||||
@@ -11,7 +11,7 @@ using Umbraco.Cms.Core;
|
||||
namespace Umbraco.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// Extension methods for Dictionary & ConcurrentDictionary
|
||||
/// Extension methods for Dictionary & ConcurrentDictionary.
|
||||
/// </summary>
|
||||
public static class DictionaryExtensions
|
||||
{
|
||||
@@ -254,7 +254,7 @@ public static class DictionaryExtensions
|
||||
|
||||
/// <summary>
|
||||
/// Converts a dictionary object to a query string representation such as:
|
||||
/// firstname=shannon&lastname=deminick
|
||||
/// firstname=shannon&lastname=deminick.
|
||||
/// </summary>
|
||||
/// <param name="d"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@@ -353,7 +353,8 @@ public static class EnumerableExtensions
|
||||
/// <summary>
|
||||
/// Transforms an enumerable.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <typeparam name="TSource"></typeparam>
|
||||
/// <typeparam name="TTarget"></typeparam>
|
||||
/// <param name="source"></param>
|
||||
/// <param name="transform"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@@ -1253,7 +1253,7 @@ public static class PublishedContentExtensions
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// This is the same as calling
|
||||
/// <see cref="Umbraco.Web.PublishedContentExtensions.AncestorOrSelf(IPublishedContent, int)" /> with <c>maxLevel</c>
|
||||
/// <see cref="AncestorOrSelf(IPublishedContent, int)" /> with <c>maxLevel</c>
|
||||
/// set to 1.
|
||||
/// </remarks>
|
||||
public static IPublishedContent Root(this IPublishedContent content) => content.AncestorOrSelf(1);
|
||||
@@ -1270,7 +1270,7 @@ public static class PublishedContentExtensions
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// This is the same as calling
|
||||
/// <see cref="Umbraco.Web.PublishedContentExtensions.AncestorOrSelf{T}(IPublishedContent, int)" /> with
|
||||
/// <see cref="AncestorOrSelf{T}(IPublishedContent, int)" /> with
|
||||
/// <c>maxLevel</c> set to 1.
|
||||
/// </remarks>
|
||||
public static T? Root<T>(this IPublishedContent content)
|
||||
|
||||
@@ -134,27 +134,6 @@ public static class PublishedElementExtensions
|
||||
|
||||
#endregion
|
||||
|
||||
#region CheckVariation
|
||||
/// <summary>
|
||||
/// Method to check if VariationContext culture differs from culture parameter, if so it will update the VariationContext for the PublishedValueFallback.
|
||||
/// </summary>
|
||||
/// <param name="publishedValueFallback">The requested PublishedValueFallback.</param>
|
||||
/// <param name="culture">The requested culture.</param>
|
||||
/// <param name="segment">The requested segment.</param>
|
||||
/// <returns></returns>
|
||||
private static void EventuallyUpdateVariationContext(IPublishedValueFallback publishedValueFallback, string? culture, string? segment)
|
||||
{
|
||||
IVariationContextAccessor? variationContextAccessor = publishedValueFallback.VariationContextAccessor;
|
||||
|
||||
//If there is a difference in requested culture and the culture that is set in the VariationContext, it will pick wrong localized content.
|
||||
//This happens for example using links to localized content in a RichText Editor.
|
||||
if (!string.IsNullOrEmpty(culture) && variationContextAccessor?.VariationContext?.Culture != culture)
|
||||
{
|
||||
variationContextAccessor!.VariationContext = new VariationContext(culture, segment);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Value<T>
|
||||
|
||||
/// <summary>
|
||||
@@ -195,8 +174,6 @@ public static class PublishedElementExtensions
|
||||
{
|
||||
IPublishedProperty? property = content.GetProperty(alias);
|
||||
|
||||
EventuallyUpdateVariationContext(publishedValueFallback, culture, segment);
|
||||
|
||||
// if we have a property, and it has a value, return that value
|
||||
if (property != null && property.HasValue(culture, segment))
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ public static class RequestHandlerSettingsExtension
|
||||
return RequestHandlerSettings.DefaultCharCollection;
|
||||
}
|
||||
|
||||
/// Merges CharCollection and UserDefinedCharCollection, prioritizing UserDefinedCharCollection.
|
||||
// Merges CharCollection and UserDefinedCharCollection, prioritizing UserDefinedCharCollection.
|
||||
return MergeUnique(requestHandlerSettings.UserDefinedCharCollection, RequestHandlerSettings.DefaultCharCollection);
|
||||
}
|
||||
|
||||
|
||||
@@ -194,7 +194,7 @@ public static class StringExtensions
|
||||
/// <returns></returns>
|
||||
/// <remarks>
|
||||
/// This methods ensures that the resulting URL is structured correctly, that there's only one '?' and that things are
|
||||
/// delimited properly with '&'
|
||||
/// delimited properly with '&'
|
||||
/// </remarks>
|
||||
public static string AppendQueryStringToUrl(this string url, params string[] queryStrings)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -51,7 +51,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -74,7 +74,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -102,7 +102,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -130,7 +130,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -153,7 +153,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -176,7 +176,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
@@ -203,7 +203,7 @@ public static class XmlExtensions
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="variables" />
|
||||
/// <paramref name="variables" />
|
||||
/// is <c>null</c>, or is empty, or contains only one single
|
||||
/// value which itself is <c>null</c>, then variables are ignored.
|
||||
/// </para>
|
||||
|
||||
@@ -121,7 +121,6 @@ public sealed class MediaFileManager
|
||||
/// <param name="content"></param>
|
||||
/// <param name="mediaFilePath">The file path if a file was found</param>
|
||||
/// <param name="propertyTypeAlias"></param>
|
||||
/// <param name="variationContextAccessor"></param>
|
||||
/// <param name="culture"></param>
|
||||
/// <param name="segment"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@@ -22,14 +22,14 @@ public class UniqueMediaPathScheme : IMediaPathScheme
|
||||
/// <inheritdoc />
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// Returning null so that <see cref="MediaFileSystem.DeleteMediaFiles" /> does *not*
|
||||
/// Returning null so that <see cref="MediaFileManager.DeleteMediaFiles(IEnumerable{string})" /> does *not*
|
||||
/// delete any directory. This is because the above shortening of the Guid to 8 chars
|
||||
/// means we're increasing the risk of collision, and we don't want to delete files
|
||||
/// belonging to other media items.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// And, at the moment, we cannot delete directory "only if it is empty" because of
|
||||
/// race conditions. We'd need to implement locks in <see cref="MediaFileSystem" /> for
|
||||
/// race conditions. We'd need to implement locks in <see cref="MediaFileManager" /> for
|
||||
/// this.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
|
||||
@@ -113,7 +113,7 @@ public class DisposableTimer : DisposableObjectSlim
|
||||
/// <summary>
|
||||
/// Disposes resources.
|
||||
/// </summary>
|
||||
/// <remarks>Overrides abstract class <see cref="DisposableObject" /> which handles required locking.</remarks>
|
||||
/// <remarks>Overrides abstract class <see cref="DisposableObjectSlim" /> which handles required locking.</remarks>
|
||||
protected override void DisposeResources()
|
||||
{
|
||||
Stopwatch.Stop();
|
||||
|
||||
@@ -141,7 +141,7 @@ public sealed class ProfilingLogger : IProfilingLogger
|
||||
public void LogTrace(string messageTemplate, params object[] propertyValues)
|
||||
=> Logger.LogTrace(messageTemplate, propertyValues);
|
||||
|
||||
///<inheritdoc>/>
|
||||
///<inheritdoc/>
|
||||
public bool IsEnabled(LogLevel logLevel)
|
||||
{
|
||||
switch (logLevel)
|
||||
|
||||
@@ -15,7 +15,7 @@ public interface IEmbedProvider
|
||||
/// <summary>
|
||||
/// A collection of querystring request parameters to append to the API URL
|
||||
/// </summary>
|
||||
/// <example>?key=value&key2=value2</example>
|
||||
/// <example>?key=value&key2=value2</example>
|
||||
Dictionary<string, string> RequestParams { get; }
|
||||
|
||||
string? GetMarkup(string url, int maxWidth = 0, int maxHeight = 0);
|
||||
|
||||
@@ -20,9 +20,7 @@ namespace Umbraco.Cms.Core.Models.Blocks
|
||||
/// <param name="content">The content.</param>
|
||||
/// <param name="settingsUdi">The settings UDI.</param>
|
||||
/// <param name="settings">The settings.</param>
|
||||
/// <param name="rowSpan">The number of rows to span</param>
|
||||
/// <param name="columnSpan">The number of columns to span</param>
|
||||
/// <exception cref="System.ArgumentNullException">contentUdi
|
||||
/// <exception cref="ArgumentNullException">contentUdi
|
||||
/// or
|
||||
/// content</exception>
|
||||
public BlockGridItem(Udi contentUdi, IPublishedElement content, Udi settingsUdi, IPublishedElement settings)
|
||||
@@ -114,8 +112,6 @@ namespace Umbraco.Cms.Core.Models.Blocks
|
||||
/// <param name="content">The content.</param>
|
||||
/// <param name="settingsUdi">The settings UDI.</param>
|
||||
/// <param name="settings">The settings.</param>
|
||||
/// <param name="rowSpan">The number of rows to span</param>
|
||||
/// <param name="columnSpan">The number of columns to span</param>
|
||||
public BlockGridItem(Udi contentUdi, T content, Udi settingsUdi, IPublishedElement settings)
|
||||
: base(contentUdi, content, settingsUdi, settings)
|
||||
{
|
||||
@@ -147,8 +143,6 @@ namespace Umbraco.Cms.Core.Models.Blocks
|
||||
/// <param name="content">The content.</param>
|
||||
/// <param name="settingsUdi">The settings udi.</param>
|
||||
/// <param name="settings">The settings.</param>
|
||||
/// <param name="rowSpan">The number of rows to span</param>
|
||||
/// <param name="columnSpan">The number of columns to span</param>
|
||||
public BlockGridItem(Udi contentUdi, TContent content, Udi settingsUdi, TSettings settings)
|
||||
: base(contentUdi, content, settingsUdi, settings)
|
||||
{
|
||||
|
||||
@@ -44,7 +44,8 @@ public interface IBlockReference<TSettings> : IBlockReference
|
||||
/// <summary>
|
||||
/// Represents a data item reference with content and settings for a Block editor implementation.
|
||||
/// </summary>
|
||||
/// <typeparam name="TSettings">The type of the content.</typeparam>
|
||||
/// <typeparam name="TContent">The type of the content.</typeparam>
|
||||
/// <typeparam name="TSettings">The type of the settings.</typeparam>
|
||||
public interface IBlockReference<TContent, TSettings> : IBlockReference<TSettings>
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -59,6 +59,7 @@ public static class ContentRepositoryExtensions
|
||||
/// </summary>
|
||||
/// <param name="content"></param>
|
||||
/// <param name="date"></param>
|
||||
/// <param name="publishing"></param>
|
||||
/// <remarks>
|
||||
/// This is so that in an operation where (for example) 2 languages are updates like french and english, it is possible
|
||||
/// that
|
||||
|
||||
@@ -182,7 +182,6 @@ public sealed class CultureImpact
|
||||
/// </summary>
|
||||
/// <param name="culture">The culture code.</param>
|
||||
/// <param name="isDefault">A value indicating whether the culture is the default culture.</param>
|
||||
/// <param name="allowEditInvariantFromNonDefault">A value indicating if publishing invariant properties from non-default language.</param>
|
||||
[Obsolete("Use ICultureImpactService instead.")]
|
||||
public static CultureImpact Explicit(string? culture, bool isDefault)
|
||||
{
|
||||
@@ -211,7 +210,6 @@ public sealed class CultureImpact
|
||||
/// <param name="culture">The culture code.</param>
|
||||
/// <param name="isDefault">A value indicating whether the culture is the default culture.</param>
|
||||
/// <param name="content">The content item.</param>
|
||||
/// <param name="allowEditInvariantFromNonDefault">A value indicating if publishing invariant properties from non-default language.</param>
|
||||
/// <remarks>
|
||||
/// <para>Validates that the culture is compatible with the variation.</para>
|
||||
/// </remarks>
|
||||
|
||||
@@ -10,6 +10,7 @@ public interface IMediaUrlGenerator
|
||||
/// </summary>
|
||||
/// <param name="propertyEditorAlias">The property editor alias</param>
|
||||
/// <param name="value">The value of the property</param>
|
||||
/// <param name="mediaPath">The media path</param>
|
||||
/// <returns>
|
||||
/// True if a media path was returned
|
||||
/// </returns>
|
||||
|
||||
@@ -58,7 +58,7 @@ public class Media : ContentBase, IMedia
|
||||
/// <summary>
|
||||
/// Changes the <see cref="IMediaType" /> for the current Media object
|
||||
/// </summary>
|
||||
/// <param name="contentType">New MediaType for this Media</param>
|
||||
/// <param name="mediaType">New MediaType for this Media</param>
|
||||
/// <remarks>Leaves PropertyTypes intact after change</remarks>
|
||||
internal void ChangeContentType(IMediaType mediaType) => ChangeContentType(mediaType, false);
|
||||
|
||||
@@ -66,7 +66,7 @@ public class Media : ContentBase, IMedia
|
||||
/// Changes the <see cref="IMediaType" /> for the current Media object and removes PropertyTypes,
|
||||
/// which are not part of the new MediaType.
|
||||
/// </summary>
|
||||
/// <param name="contentType">New MediaType for this Media</param>
|
||||
/// <param name="mediaType">New MediaType for this Media</param>
|
||||
/// <param name="clearProperties">Boolean indicating whether to clear PropertyTypes upon change</param>
|
||||
internal void ChangeContentType(IMediaType mediaType, bool clearProperties)
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using Umbraco.Cms.Core.Models.Entities;
|
||||
namespace Umbraco.Cms.Core.Models.Membership;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an <see cref="IContent" /> -> user group & permission key value pair collection
|
||||
/// Represents an <see cref="IContent" /> -> user group & permission key value pair collection
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This implements <see cref="IEntity" /> purely so it can be used with the repository layer which is why it's
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
namespace Umbraco.Cms.Core.Models.Membership;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an entity -> user group & permission key value pair collection
|
||||
/// Represents an entity -> user group & permission key value pair collection
|
||||
/// </summary>
|
||||
public class EntityPermissionSet
|
||||
{
|
||||
@@ -20,7 +20,7 @@ public class EntityPermissionSet
|
||||
public virtual int EntityId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The key/value pairs of user group id & single permission
|
||||
/// The key/value pairs of user group id & single permission
|
||||
/// </summary>
|
||||
public EntityPermissionCollection PermissionsSet { get; }
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ namespace Umbraco.Cms.Core.Models;
|
||||
/// <summary>
|
||||
/// Represents a paged result for a model collection
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
[DataContract(Name = "pagedCollection", Namespace = "")]
|
||||
public abstract class PagedResult
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@ using Umbraco.Cms.Core.Cache;
|
||||
namespace Umbraco.Cms.Core.Models.PublishedContent;
|
||||
|
||||
/// <summary>
|
||||
/// Implements <see cref="IVariationContextAccessor" /> on top of <see cref="IHttpContextAccessor" />.
|
||||
/// Implements <see cref="IVariationContextAccessor" /> on top of <see cref="IRequestCache" />.
|
||||
/// </summary>
|
||||
public class HttpContextVariationContextAccessor : IVariationContextAccessor
|
||||
{
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Umbraco.Cms.Core.Models.PublishedContent;
|
||||
/// </summary>
|
||||
public interface IPublishedValueFallback
|
||||
{
|
||||
[Obsolete("Scheduled for removal in v14")]
|
||||
/// <summary>
|
||||
/// VariationContextAccessor that is not required to be implemented, therefore throws NotImplementedException as default.
|
||||
/// </summary>
|
||||
|
||||
@@ -20,6 +20,7 @@ public class PublishedValueFallback : IPublishedValueFallback
|
||||
_variationContextAccessor = variationContextAccessor;
|
||||
}
|
||||
|
||||
[Obsolete("Scheduled for removal in v14")]
|
||||
public IVariationContextAccessor VariationContextAccessor { get { return _variationContextAccessor; } }
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -6,7 +6,9 @@ namespace Umbraco.Cms.Core.Models;
|
||||
/// Represents a range with a minimum and maximum value.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the minimum and maximum values.</typeparam>
|
||||
/// <seealso cref="IEquatable{Range{T}}" />
|
||||
/// <remarks>
|
||||
/// See also <see cref="IEquatable{T}"/> of <see cref="Range{T}"/>
|
||||
/// </remarks>
|
||||
public class Range<T> : IEquatable<Range<T>>
|
||||
where T : IComparable<T>
|
||||
{
|
||||
|
||||
15
src/Umbraco.Core/Models/UuiButtonColor.cs
Normal file
15
src/Umbraco.Core/Models/UuiButtonColor.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace Umbraco.Cms.Core.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Option to set the color of a uui-button element.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// See the UUI documentation for more details: https://uui.umbraco.com/?path=/story/uui-button--looks-and-colors.
|
||||
/// </remarks>
|
||||
public enum UuiButtonColor
|
||||
{
|
||||
Default,
|
||||
Positive,
|
||||
Warning,
|
||||
Danger
|
||||
}
|
||||
16
src/Umbraco.Core/Models/UuiButtonLook.cs
Normal file
16
src/Umbraco.Core/Models/UuiButtonLook.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace Umbraco.Cms.Core.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Option to set the look of a uui-button element.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// See the UUI documentation for more details: https://uui.umbraco.com/?path=/story/uui-button--looks-and-colors.
|
||||
/// </remarks>
|
||||
public enum UuiButtonLook
|
||||
{
|
||||
Default,
|
||||
Primary,
|
||||
Secondary,
|
||||
Outline,
|
||||
Placeholder
|
||||
}
|
||||
@@ -24,7 +24,6 @@ public sealed class ContentPublishedNotification : EnumerableObjectNotification<
|
||||
public ContentPublishedNotification(IEnumerable<IContent> target, EventMessages messages, bool includeDescendants)
|
||||
: base(target, messages) => IncludeDescendants = includeDescendants;
|
||||
|
||||
/// </summary>
|
||||
public IEnumerable<IContent> PublishedEntities => Target;
|
||||
|
||||
public bool IncludeDescendants { get; }
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Text;
|
||||
namespace Umbraco.Cms.Core.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Contains event data for the <see cref="ModelBindingException" /> event.
|
||||
/// Contains event data for the <see cref="T:Umbraco.Cms.Web.Common.ModelBinders.ModelBindingException" /> event.
|
||||
/// </summary>
|
||||
public class ModelBindingErrorNotification : INotification
|
||||
{
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
namespace Umbraco.Cms.Core.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Notification that occurs at the very end of the Umbraco boot process (after all <see cref="IComponent" />s are
|
||||
/// Notification that occurs at the very end of the Umbraco boot process (after all <see cref="Composing.IComponent" />s are
|
||||
/// initialized).
|
||||
/// </summary>
|
||||
/// <seealso cref="Umbraco.Cms.Core.Notifications.IUmbracoApplicationLifetimeNotification" />
|
||||
/// <seealso cref="IUmbracoApplicationLifetimeNotification" />
|
||||
public class UmbracoApplicationStartingNotification : IUmbracoApplicationLifetimeNotification
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -2,9 +2,9 @@ namespace Umbraco.Cms.Core.Notifications;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Notification that occurs when Umbraco is shutting down (after all <see cref="IComponent" />s are terminated).
|
||||
/// Notification that occurs when Umbraco is shutting down (after all <see cref="Composing.IComponent" />s are terminated).
|
||||
/// </summary>
|
||||
/// <seealso cref="Umbraco.Cms.Core.Notifications.IUmbracoApplicationLifetimeNotification" />
|
||||
/// <seealso cref="IUmbracoApplicationLifetimeNotification" />
|
||||
public class UmbracoApplicationStoppingNotification : IUmbracoApplicationLifetimeNotification
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -22,7 +22,7 @@ public interface IPackageInstallation
|
||||
/// <summary>
|
||||
/// Reads the package xml and returns the <see cref="CompiledPackage" /> model
|
||||
/// </summary>
|
||||
/// <param name="packageFile"></param>
|
||||
/// <param name="packageXmlFile"></param>
|
||||
/// <returns></returns>
|
||||
CompiledPackage ReadPackage(XDocument? packageXmlFile);
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using Umbraco.Cms.Core.Models;
|
||||
namespace Umbraco.Cms.Core.Persistence.Repositories;
|
||||
|
||||
/// <summary>
|
||||
/// Represents a repository for <see cref="ICacheInstruction" /> entities.
|
||||
/// Represents a repository for <see cref="CacheInstruction" /> entities.
|
||||
/// </summary>
|
||||
public interface ICacheInstructionRepository : IRepository
|
||||
{
|
||||
|
||||
@@ -36,9 +36,8 @@ public interface IDocumentRepository : IContentRepository<int, IContent>, IReadR
|
||||
/// Gets <see cref="IContent" /> objects having an expiration date before (lower than, or equal to) a specified date.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The content returned from this method may be culture variant, in which case the resulting
|
||||
/// <see cref="IContent.ContentSchedule" /> should be queried
|
||||
/// for which culture(s) have been scheduled.
|
||||
/// The content returned from this method may be culture variant, in which case you can use
|
||||
/// <see cref="Umbraco.Extensions.ContentExtensions.GetStatus(IContent, ContentScheduleCollection, string?)" /> to get the status for a specific culture.
|
||||
/// </remarks>
|
||||
IEnumerable<IContent> GetContentForExpiration(DateTime date);
|
||||
|
||||
@@ -46,9 +45,8 @@ public interface IDocumentRepository : IContentRepository<int, IContent>, IReadR
|
||||
/// Gets <see cref="IContent" /> objects having a release date before (lower than, or equal to) a specified date.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The content returned from this method may be culture variant, in which case the resulting
|
||||
/// <see cref="IContent.ContentSchedule" /> should be queried
|
||||
/// for which culture(s) have been scheduled.
|
||||
/// The content returned from this method may be culture variant, in which case you can use
|
||||
/// <see cref="Umbraco.Extensions.ContentExtensions.GetStatus(IContent, ContentScheduleCollection, string?)" /> to get the status for a specific culture.
|
||||
/// </remarks>
|
||||
IEnumerable<IContent> GetContentForRelease(DateTime date);
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace Umbraco.Cms.Core.PropertyEditors;
|
||||
|
||||
/// <summary>
|
||||
/// Provides a default implementation for
|
||||
/// <see ref="IPropertyIndexValueFactory">, returning a single field to index containing the property value.
|
||||
/// <see ref="IPropertyIndexValueFactory" />, returning a single field to index containing the property value.
|
||||
/// </summary>
|
||||
public class DefaultPropertyIndexValueFactory : IPropertyIndexValueFactory
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@ public class VoidEditor : DataEditor
|
||||
/// Initializes a new instance of the <see cref="VoidEditor" /> class.
|
||||
/// </summary>
|
||||
/// <param name="aliasSuffix">An optional alias suffix.</param>
|
||||
/// <param name="loggerFactory">A logger factory.</param>
|
||||
/// <param name="dataValueEditorFactory">A data value editor factory.</param>
|
||||
/// <remarks>
|
||||
/// The default alias of the editor is "Umbraco.Void". When a suffix is provided,
|
||||
/// it is appended to the alias. Eg if the suffix is "Foo" the alias is "Umbraco.Void.Foo".
|
||||
@@ -39,7 +39,7 @@ public class VoidEditor : DataEditor
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="VoidEditor" /> class.
|
||||
/// </summary>
|
||||
/// <param name="loggerFactory">A logger factory.</param>
|
||||
/// <param name="dataValueEditorFactory">A data value editor factory.</param>
|
||||
/// <remarks>The alias of the editor is "Umbraco.Void".</remarks>
|
||||
public VoidEditor(
|
||||
IDataValueEditorFactory dataValueEditorFactory)
|
||||
|
||||
@@ -19,7 +19,7 @@ public interface IPublishedContentCache : IPublishedCache
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="hideTopLevelNode" />
|
||||
/// <paramref name="hideTopLevelNode" />
|
||||
/// is <c>null</c> then the settings value is used.
|
||||
/// </para>
|
||||
/// <para>The value of <paramref name="preview" /> overrides defaults.</para>
|
||||
@@ -40,7 +40,7 @@ public interface IPublishedContentCache : IPublishedCache
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// If
|
||||
/// <param name="hideTopLevelNode" />
|
||||
/// <paramref name="hideTopLevelNode" />
|
||||
/// is <c>null</c> then the settings value is used.
|
||||
/// </para>
|
||||
/// <para>Considers published or unpublished content depending on defaults.</para>
|
||||
|
||||
@@ -47,7 +47,6 @@ public class DefaultUrlProvider : IUrlProvider
|
||||
/// <summary>
|
||||
/// Gets the other URLs of a published content.
|
||||
/// </summary>
|
||||
/// <param name="umbracoContextAccessor">The Umbraco context.</param>
|
||||
/// <param name="id">The published content id.</param>
|
||||
/// <param name="current">The current absolute URL.</param>
|
||||
/// <returns>The other URLs for the published content.</returns>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Core.Routing;
|
||||
|
||||
@@ -101,7 +102,7 @@ public interface IPublishedRequest
|
||||
/// This flag is based on previous Umbraco versions but it is not clear how this flag can be set by developers
|
||||
/// since
|
||||
/// collission checking only occurs in the back office which is launched by
|
||||
/// <see cref="IPublishedRouter.TryRouteRequestAsync(IPublishedRequestBuilder)" />
|
||||
/// <see cref="PublishedRouter.TryRouteRequest(IPublishedRequestBuilder)" />
|
||||
/// for which events do not execute.
|
||||
/// </para>
|
||||
/// <para>
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Globalization;
|
||||
using System.Net;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Core.Routing;
|
||||
|
||||
@@ -162,7 +163,7 @@ public interface IPublishedRequestBuilder
|
||||
/// This flag is based on previous Umbraco versions but it is not clear how this flag can be set by developers
|
||||
/// since
|
||||
/// collission checking only occurs in the back office which is launched by
|
||||
/// <see cref="IPublishedRouter.TryRouteRequestAsync(IPublishedRequestBuilder)" />
|
||||
/// <see cref="PublishedRouter.TryRouteRequest(IPublishedRequestBuilder)" />
|
||||
/// for which events do not execute.
|
||||
/// </para>
|
||||
/// <para>
|
||||
|
||||
@@ -26,6 +26,7 @@ public interface IPublishedRouter
|
||||
/// Updates the request to use the specified <see cref="IPublishedContent" /> item, or NULL
|
||||
/// </summary>
|
||||
/// <param name="request">The request.</param>
|
||||
/// <param name="publishedContent">The published content.</param>
|
||||
/// <remarks>
|
||||
/// <returns>
|
||||
/// A new <see cref="IPublishedRequest" /> based on values from the original <see cref="IPublishedRequest" />
|
||||
|
||||
@@ -21,7 +21,6 @@ namespace Umbraco.Cms.Core.Routing
|
||||
/// <param name="urlProviders">The list of URL providers.</param>
|
||||
/// <param name="mediaUrlProviders">The list of media URL providers.</param>
|
||||
/// <param name="variationContextAccessor">The current variation accessor.</param>
|
||||
/// <param name="propertyEditorCollection"></param>
|
||||
public UrlProvider(IUmbracoContextAccessor umbracoContextAccessor, IOptions<WebRoutingSettings> routingSettings, UrlProviderCollection urlProviders, MediaUrlProviderCollection mediaUrlProviders, IVariationContextAccessor variationContextAccessor)
|
||||
{
|
||||
_umbracoContextAccessor = umbracoContextAccessor ?? throw new ArgumentNullException(nameof(umbracoContextAccessor));
|
||||
|
||||
@@ -6,6 +6,7 @@ public interface ILockingMechanism : IDisposable
|
||||
/// Read-locks some lock objects lazily.
|
||||
/// </summary>
|
||||
/// <param name="instanceId">Instance id of the scope who is requesting the lock</param>
|
||||
/// <param name="timeout">Timeout for the lock</param>
|
||||
/// <param name="lockIds">Array of lock object identifiers.</param>
|
||||
void ReadLock(Guid instanceId, TimeSpan? timeout = null, params int[] lockIds);
|
||||
|
||||
@@ -15,6 +16,7 @@ public interface ILockingMechanism : IDisposable
|
||||
/// Write-locks some lock objects lazily.
|
||||
/// </summary>
|
||||
/// <param name="instanceId">Instance id of the scope who is requesting the lock</param>
|
||||
/// <param name="timeout">Timeout for the lock</param>
|
||||
/// <param name="lockIds">Array of object identifiers.</param>
|
||||
void WriteLock(Guid instanceId, TimeSpan? timeout = null, params int[] lockIds);
|
||||
|
||||
@@ -24,6 +26,7 @@ public interface ILockingMechanism : IDisposable
|
||||
/// Eagerly acquires a read-lock
|
||||
/// </summary>
|
||||
/// <param name="instanceId"></param>
|
||||
/// <param name="timeout">Timeout for the lock</param>
|
||||
/// <param name="lockIds"></param>
|
||||
void EagerReadLock(Guid instanceId, TimeSpan? timeout = null, params int[] lockIds);
|
||||
|
||||
@@ -33,6 +36,7 @@ public interface ILockingMechanism : IDisposable
|
||||
/// Eagerly acquires a write-lock
|
||||
/// </summary>
|
||||
/// <param name="instanceId"></param>
|
||||
/// <param name="timeout">Timeout for the lock</param>
|
||||
/// <param name="lockIds"></param>
|
||||
void EagerWriteLock(Guid instanceId, TimeSpan? timeout = null, params int[] lockIds);
|
||||
|
||||
|
||||
@@ -151,8 +151,6 @@ public class ContentPermissions
|
||||
/// </summary>
|
||||
/// <param name="nodeId"></param>
|
||||
/// <param name="user"></param>
|
||||
/// <param name="userService"></param>
|
||||
/// <param name="entityService"></param>
|
||||
/// <param name="entity">The <see cref="IUmbracoEntity" /> item resolved if one was found for the id</param>
|
||||
/// <param name="permissionsToCheck"></param>
|
||||
/// <returns></returns>
|
||||
@@ -218,9 +216,6 @@ public class ContentPermissions
|
||||
/// </summary>
|
||||
/// <param name="nodeId"></param>
|
||||
/// <param name="user"></param>
|
||||
/// <param name="userService"></param>
|
||||
/// <param name="contentService"></param>
|
||||
/// <param name="entityService"></param>
|
||||
/// <param name="contentItem">The <see cref="IContent" /> item resolved if one was found for the id</param>
|
||||
/// <param name="permissionsToCheck"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@@ -5,7 +5,6 @@ namespace Umbraco.Cms.Core.Security;
|
||||
/// <summary>
|
||||
/// An external login provider linked to a user
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey">The PK type for the user</typeparam>
|
||||
public interface IIdentityUserLogin : IEntity, IRememberBeingDirty
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -218,10 +218,9 @@ public class LegacyPasswordSecurity
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return the hash algorithm to use based on the <see cref="IPasswordConfiguration" />
|
||||
/// Return the hash algorithm to use based on the provided <paramref name="algorithm"/>.
|
||||
/// </summary>
|
||||
/// <param name="algorithm">The hashing algorithm name.</param>
|
||||
/// <param name="password"></param>
|
||||
/// <returns></returns>
|
||||
private HashAlgorithm GetHashAlgorithm(string algorithm)
|
||||
{
|
||||
|
||||
@@ -207,7 +207,7 @@ public class ContentService : RepositoryService, IContentService
|
||||
|
||||
/// <summary>
|
||||
/// Used to bulk update the permissions set for a content item. This will replace all permissions
|
||||
/// assigned to an entity with a list of user id & permission pairs.
|
||||
/// assigned to an entity with a list of user id & permission pairs.
|
||||
/// </summary>
|
||||
/// <param name="permissionSet"></param>
|
||||
public void SetPermissions(EntityPermissionSet permissionSet)
|
||||
|
||||
@@ -36,7 +36,9 @@ public interface ICacheInstructionService
|
||||
/// <summary>
|
||||
/// Processes and then prunes pending database cache instructions.
|
||||
/// </summary>
|
||||
/// <param name="released">Flag indicating if process is shutting now and operations should exit.</param>
|
||||
/// <param name="cacheRefreshers">Cache refreshers.</param>
|
||||
/// <param name="serverRole">Server role.</param>
|
||||
/// <param name="cancellationToken">Cancellation token.</param>
|
||||
/// <param name="localIdentity">Local identity of the executing AppDomain.</param>
|
||||
/// <param name="lastPruned">Date of last prune operation.</param>
|
||||
/// <param name="lastId">Id of the latest processed instruction</param>
|
||||
|
||||
@@ -76,12 +76,10 @@ public interface IContentService : IContentServiceBase<IContent>
|
||||
/// </summary>
|
||||
IContent? GetById(int id);
|
||||
|
||||
new
|
||||
|
||||
/// <summary>
|
||||
/// Gets a document.
|
||||
/// </summary>
|
||||
IContent? GetById(Guid key);
|
||||
new IContent? GetById(Guid key);
|
||||
|
||||
/// <summary>
|
||||
/// Gets publish/unpublish schedule for a content node.
|
||||
@@ -167,9 +165,8 @@ public interface IContentService : IContentServiceBase<IContent>
|
||||
/// </summary>
|
||||
/// <returns>An Enumerable list of <see cref="IContent" /> objects</returns>
|
||||
/// <remarks>
|
||||
/// The content returned from this method may be culture variant, in which case the resulting
|
||||
/// <see cref="IContent.ContentSchedule" /> should be queried
|
||||
/// for which culture(s) have been scheduled.
|
||||
/// The content returned from this method may be culture variant, in which case you can use
|
||||
/// <see cref="Umbraco.Extensions.ContentExtensions.GetStatus(IContent, ContentScheduleCollection, string?)" /> to get the status for a specific culture.
|
||||
/// </remarks>
|
||||
IEnumerable<IContent> GetContentForExpiration(DateTime date);
|
||||
|
||||
@@ -178,9 +175,8 @@ public interface IContentService : IContentServiceBase<IContent>
|
||||
/// </summary>
|
||||
/// <returns>An Enumerable list of <see cref="IContent" /> objects</returns>
|
||||
/// <remarks>
|
||||
/// The content returned from this method may be culture variant, in which case the resulting
|
||||
/// <see cref="IContent.ContentSchedule" /> should be queried
|
||||
/// for which culture(s) have been scheduled.
|
||||
/// The content returned from this method may be culture variant, in which case you can use
|
||||
/// <see cref="Umbraco.Extensions.ContentExtensions.GetStatus(IContent, ContentScheduleCollection, string?)" /> to get the status for a specific culture.
|
||||
/// </remarks>
|
||||
IEnumerable<IContent> GetContentForRelease(DateTime date);
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public interface IExternalLoginWithKeyService : IService
|
||||
/// <summary>
|
||||
/// Saves the external login tokens associated with the user
|
||||
/// </summary>
|
||||
/// <param name="userId">
|
||||
/// <param name="userOrMemberKey">
|
||||
/// The user or member key associated with the logins
|
||||
/// </param>
|
||||
/// <param name="tokens"></param>
|
||||
|
||||
@@ -90,9 +90,6 @@ public interface IMediaService : IContentServiceBase<IMedia>
|
||||
/// <param name="pageIndex">Page number</param>
|
||||
/// <param name="pageSize">Page size</param>
|
||||
/// <param name="totalRecords">Total records query would return without paging</param>
|
||||
/// <param name="orderBy">Field to order by</param>
|
||||
/// <param name="orderDirection">Direction to order by</param>
|
||||
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
|
||||
/// <param name="filter"></param>
|
||||
/// <param name="ordering"></param>
|
||||
/// <returns>An Enumerable list of <see cref="IContent" /> objects</returns>
|
||||
|
||||
@@ -178,7 +178,7 @@ public interface IMemberService : IMembershipMemberService
|
||||
/// </summary>
|
||||
/// <remarks>If no alias is supplied then the count for all Member will be returned</remarks>
|
||||
/// <param name="memberTypeAlias">Optional alias for the MemberType when counting number of Members</param>
|
||||
/// <returns><see cref="System.int" /> with number of Members</returns>
|
||||
/// <returns><see cref="int" /> with number of Members</returns>
|
||||
int Count(string? memberTypeAlias = null);
|
||||
|
||||
/// <summary>
|
||||
@@ -204,7 +204,7 @@ public interface IMemberService : IMembershipMemberService
|
||||
/// <summary>
|
||||
/// Gets a Member by its integer id
|
||||
/// </summary>
|
||||
/// <param name="id"><see cref="System.int" /> Id</param>
|
||||
/// <param name="id"><see cref="int" /> Id</param>
|
||||
/// <returns>
|
||||
/// <see cref="IMember" />
|
||||
/// </returns>
|
||||
@@ -287,7 +287,7 @@ public interface IMemberService : IMembershipMemberService
|
||||
/// Gets a list of Members based on a property search
|
||||
/// </summary>
|
||||
/// <param name="propertyTypeAlias">Alias of the PropertyType to search for</param>
|
||||
/// <param name="value"><see cref="System.string" /> Value to match</param>
|
||||
/// <param name="value"><see cref="string" /> Value to match</param>
|
||||
/// <param name="matchType">
|
||||
/// The type of match to make as <see cref="StringPropertyMatchType" />. Default is
|
||||
/// <see cref="StringPropertyMatchType.Exact" />
|
||||
@@ -304,7 +304,7 @@ public interface IMemberService : IMembershipMemberService
|
||||
/// Gets a list of Members based on a property search
|
||||
/// </summary>
|
||||
/// <param name="propertyTypeAlias">Alias of the PropertyType to search for</param>
|
||||
/// <param name="value"><see cref="System.int" /> Value to match</param>
|
||||
/// <param name="value"><see cref="int" /> Value to match</param>
|
||||
/// <param name="matchType">
|
||||
/// The type of match to make as <see cref="StringPropertyMatchType" />. Default is
|
||||
/// <see cref="StringPropertyMatchType.Exact" />
|
||||
@@ -318,7 +318,7 @@ public interface IMemberService : IMembershipMemberService
|
||||
/// Gets a list of Members based on a property search
|
||||
/// </summary>
|
||||
/// <param name="propertyTypeAlias">Alias of the PropertyType to search for</param>
|
||||
/// <param name="value"><see cref="System.bool" /> Value to match</param>
|
||||
/// <param name="value"><see cref="bool" /> Value to match</param>
|
||||
/// <returns>
|
||||
/// <see cref="IEnumerable{IMember}" />
|
||||
/// </returns>
|
||||
|
||||
@@ -48,7 +48,7 @@ public interface IMembershipMemberService<T> : IService
|
||||
/// but that is how MS have made theirs so we'll follow that principal.
|
||||
/// </remarks>
|
||||
/// <param name="countType"><see cref="MemberCountType" /> to count by</param>
|
||||
/// <returns><see cref="System.int" /> with number of Members or Users for passed in type</returns>
|
||||
/// <returns><see cref="int" /> with number of Members or Users for passed in type</returns>
|
||||
int GetCount(MemberCountType countType);
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -12,14 +12,14 @@ public interface IPackagingService : IService
|
||||
/// <summary>
|
||||
/// Returns a <see cref="CompiledPackage" /> result from an umbraco package file (zip)
|
||||
/// </summary>
|
||||
/// <param name="packageFile"></param>
|
||||
/// <param name="packageXml"></param>
|
||||
/// <returns></returns>
|
||||
CompiledPackage GetCompiledPackageInfo(XDocument packageXml);
|
||||
|
||||
/// <summary>
|
||||
/// Installs the data, entities, objects contained in an umbraco package file (zip)
|
||||
/// </summary>
|
||||
/// <param name="packageFile"></param>
|
||||
/// <param name="packageXmlFile"></param>
|
||||
/// <param name="userId"></param>
|
||||
InstallationSummary InstallCompiledPackageData(FileInfo packageXmlFile, int userId = Constants.Security.SuperUserId);
|
||||
|
||||
|
||||
@@ -168,7 +168,8 @@ public interface IRelationService : IService
|
||||
/// <param name="relationTypeId"></param>
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <param name="totalChildren"></param>
|
||||
/// <param name="totalRecords"></param>
|
||||
/// <param name="ordering"></param>
|
||||
/// <returns></returns>
|
||||
IEnumerable<IRelation> GetPagedByRelationTypeId(int relationTypeId, long pageIndex, int pageSize, out long totalRecords, Ordering? ordering = null);/// <summary>
|
||||
|
||||
@@ -225,6 +226,7 @@ public interface IRelationService : IService
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <param name="totalChildren"></param>
|
||||
/// <param name="entityTypes"></param>
|
||||
/// <returns>An enumerable list of <see cref="IUmbracoEntity" /></returns>
|
||||
IEnumerable<IUmbracoEntity> GetPagedParentEntitiesByChildId(int id, long pageIndex, int pageSize, out long totalChildren, params UmbracoObjectTypes[] entityTypes);
|
||||
|
||||
@@ -235,6 +237,7 @@ public interface IRelationService : IService
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <param name="totalChildren"></param>
|
||||
/// <param name="entityTypes"></param>
|
||||
/// <returns>An enumerable list of <see cref="IUmbracoEntity" /></returns>
|
||||
IEnumerable<IUmbracoEntity> GetPagedChildEntitiesByParentId(int id, long pageIndex, int pageSize, out long totalChildren, params UmbracoObjectTypes[] entityTypes);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user