* Run code cleanup * Run dotnet format * Start manual cleanup in Web.Common * Finish up manual cleanup * Fix tests * Fix up InMemoryModelFactory.cs * Inject proper macroRenderer * Update src/Umbraco.Web.Common/Filters/JsonDateTimeFormatAttribute.cs Co-authored-by: Mole <nikolajlauridsen@protonmail.ch> * Update src/Umbraco.Web.Common/Filters/ValidateUmbracoFormRouteStringAttribute.cs Co-authored-by: Mole <nikolajlauridsen@protonmail.ch> * Fix based on review Co-authored-by: Nikolaj Geisle <niko737@edu.ucl.dk> Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
106 lines
4.6 KiB
C#
106 lines
4.6 KiB
C#
using System.Linq.Expressions;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Umbraco.Cms.Core.Models.PublishedContent;
|
|
using Umbraco.Cms.Web.Common.DependencyInjection;
|
|
|
|
namespace Umbraco.Extensions;
|
|
|
|
public static class FriendlyPublishedElementExtensions
|
|
{
|
|
private static IPublishedValueFallback PublishedValueFallback { get; } =
|
|
StaticServiceProvider.Instance.GetRequiredService<IPublishedValueFallback>();
|
|
|
|
/// <summary>
|
|
/// Gets the value of a content's property identified by its alias.
|
|
/// </summary>
|
|
/// <param name="content">The content.</param>
|
|
/// <param name="alias">The property alias.</param>
|
|
/// <param name="culture">The variation language.</param>
|
|
/// <param name="segment">The variation segment.</param>
|
|
/// <param name="fallback">Optional fallback strategy.</param>
|
|
/// <param name="defaultValue">The default value.</param>
|
|
/// <returns>The value of the content's property identified by the alias, if it exists, otherwise a default value.</returns>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// The value comes from <c>IPublishedProperty</c> field <c>Value</c> ie it is suitable for use when rendering
|
|
/// content.
|
|
/// </para>
|
|
/// <para>
|
|
/// If no property with the specified alias exists, or if the property has no value, returns
|
|
/// <paramref name="defaultValue" />.
|
|
/// </para>
|
|
/// <para>
|
|
/// If eg a numeric property wants to default to 0 when value source is empty, this has to be done in the
|
|
/// converter.
|
|
/// </para>
|
|
/// <para>The alias is case-insensitive.</para>
|
|
/// </remarks>
|
|
public static object? Value(
|
|
this IPublishedElement content,
|
|
string alias,
|
|
string? culture = null,
|
|
string? segment = null,
|
|
Fallback fallback = default,
|
|
object? defaultValue = default)
|
|
=> content.Value(PublishedValueFallback, alias, culture, segment, fallback, defaultValue);
|
|
|
|
/// <summary>
|
|
/// Gets the value of a content's property identified by its alias, converted to a specified type.
|
|
/// </summary>
|
|
/// <typeparam name="T">The target property type.</typeparam>
|
|
/// <param name="content">The content.</param>
|
|
/// <param name="alias">The property alias.</param>
|
|
/// <param name="culture">The variation language.</param>
|
|
/// <param name="segment">The variation segment.</param>
|
|
/// <param name="fallback">Optional fallback strategy.</param>
|
|
/// <param name="defaultValue">The default value.</param>
|
|
/// <returns>The value of the content's property identified by the alias, converted to the specified type.</returns>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// The value comes from <c>IPublishedProperty</c> field <c>Value</c> ie it is suitable for use when rendering
|
|
/// content.
|
|
/// </para>
|
|
/// <para>
|
|
/// If no property with the specified alias exists, or if the property has no value, or if it could not be
|
|
/// converted, returns <c>default(T)</c>.
|
|
/// </para>
|
|
/// <para>
|
|
/// If eg a numeric property wants to default to 0 when value source is empty, this has to be done in the
|
|
/// converter.
|
|
/// </para>
|
|
/// <para>The alias is case-insensitive.</para>
|
|
/// </remarks>
|
|
public static T? Value<T>(
|
|
this IPublishedElement content,
|
|
string alias,
|
|
string? culture = null,
|
|
string? segment = null,
|
|
Fallback fallback = default,
|
|
T? defaultValue = default)
|
|
=> content.Value(PublishedValueFallback, alias, culture, segment, fallback, defaultValue);
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether the content is visible.
|
|
/// </summary>
|
|
/// <param name="content">The content.</param>
|
|
/// <returns>A value indicating whether the content is visible.</returns>
|
|
/// <remarks>
|
|
/// A content is not visible if it has an umbracoNaviHide property with a value of "1". Otherwise,
|
|
/// the content is visible.
|
|
/// </remarks>
|
|
public static bool IsVisible(this IPublishedElement content) => content.IsVisible(PublishedValueFallback);
|
|
|
|
/// <summary>
|
|
/// Gets the value of a property.
|
|
/// </summary>
|
|
public static TValue? ValueFor<TModel, TValue>(
|
|
this TModel model,
|
|
Expression<Func<TModel, TValue>> property,
|
|
string? culture = null,
|
|
string? segment = null,
|
|
Fallback fallback = default,
|
|
TValue? defaultValue = default)
|
|
where TModel : IPublishedElement =>
|
|
model.ValueFor(PublishedValueFallback, property, culture, segment, fallback);
|
|
}
|