Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keep only important methods in ContentPartDisplayDriver and ContentFieldDisplayDriver #16530

Merged
merged 3 commits into from
Aug 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,13 @@ public override IDisplayResult Edit(DashboardPart dashboardPart, BuildPartEditor
return Initialize<DashboardPartViewModel>(GetEditorShapeType(context), m => BuildViewModel(m, dashboardPart));
}

public override async Task<IDisplayResult> UpdateAsync(DashboardPart model, IUpdateModel updater, UpdatePartEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(DashboardPart model, UpdatePartEditorContext context)
{
await updater.TryUpdateModelAsync(model, Prefix, t => t.Position, t => t.Width, t => t.Height);
await context.Updater.TryUpdateModelAsync(model, Prefix,
t => t.Position,
t => t.Width,
t => t.Height);

return Edit(model, context);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using OrchardCore.Alias.ViewModels;
using OrchardCore.ContentManagement.Display.ContentDisplay;
using OrchardCore.ContentManagement.Display.Models;
using OrchardCore.DisplayManagement.ModelBinding;
using OrchardCore.DisplayManagement.Views;
using OrchardCore.Mvc.ModelBinding;
using YesSql;
Expand All @@ -32,13 +31,13 @@ public override IDisplayResult Edit(AliasPart aliasPart, BuildPartEditorContext
return Initialize<AliasPartViewModel>(GetEditorShapeType(context), m => BuildViewModel(m, aliasPart, context.TypePartDefinition.GetSettings<AliasPartSettings>()));
}

public override async Task<IDisplayResult> UpdateAsync(AliasPart model, IUpdateModel updater, UpdatePartEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(AliasPart model, UpdatePartEditorContext context)
{
await updater.TryUpdateModelAsync(model, Prefix, t => t.Alias);
await context.Updater.TryUpdateModelAsync(model, Prefix, t => t.Alias);

await foreach (var item in model.ValidateAsync(S, _session))
{
updater.ModelState.BindValidationResult(Prefix, item);
context.Updater.ModelState.BindValidationResult(Prefix, item);
}

return Edit(model, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ public override IDisplayResult Edit(ArchiveLaterPart part, BuildPartEditorContex
GetEditorShapeType(context),
model => PopulateViewModel(part, model)).Location("Actions:10.5");

public override async Task<IDisplayResult> UpdateAsync(ArchiveLaterPart part, IUpdateModel updater, UpdatePartEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(ArchiveLaterPart part, UpdatePartEditorContext context)
{
var httpContext = _httpContextAccessor.HttpContext;

if (await _authorizationService.AuthorizeAsync(httpContext?.User, CommonPermissions.PublishContent, part.ContentItem))
{
var viewModel = new ArchiveLaterPartViewModel();

await updater.TryUpdateModelAsync(viewModel, Prefix);
await context.Updater.TryUpdateModelAsync(viewModel, Prefix);

if (viewModel.ScheduledArchiveLocalDateTime == null || httpContext.Request.Form["submit.Publish"] == "submit.CancelArchiveLater")
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,16 @@ public override IDisplayResult Edit(AutoroutePart autoroutePart, BuildPartEditor
});
}

public override async Task<IDisplayResult> UpdateAsync(AutoroutePart model, IUpdateModel updater, UpdatePartEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(AutoroutePart model, UpdatePartEditorContext context)
{
var viewModel = new AutoroutePartViewModel();

await updater.TryUpdateModelAsync(viewModel, Prefix, t => t.Path, t => t.UpdatePath, t => t.RouteContainedItems, t => t.Absolute, t => t.Disabled);
await context.Updater.TryUpdateModelAsync(viewModel, Prefix,
t => t.Path,
t => t.UpdatePath,
t => t.RouteContainedItems,
t => t.Absolute,
t => t.Disabled);

var settings = context.TypePartDefinition.GetSettings<AutoroutePartSettings>();

Expand All @@ -102,17 +107,17 @@ public override async Task<IDisplayResult> UpdateAsync(AutoroutePart model, IUpd
if (settings.AllowUpdatePath && viewModel.UpdatePath)
{
// Make it empty to force a regeneration
model.Path = "";
model.Path = string.Empty;
}

var httpContext = _httpContextAccessor.HttpContext;

if (httpContext != null && await _authorizationService.AuthorizeAsync(httpContext.User, Permissions.SetHomepage))
{
await updater.TryUpdateModelAsync(model, Prefix, t => t.SetHomepage);
await context.Updater.TryUpdateModelAsync(model, Prefix, t => t.SetHomepage);
}

updater.ModelState.BindValidationResults(Prefix, model.ValidatePathFieldValue(S));
context.Updater.ModelState.BindValidationResults(Prefix, model.ValidatePathFieldValue(S));

// This can only validate the path if the Autoroute is not managing content item routes or the path is absolute.
if (!string.IsNullOrEmpty(model.Path) && (!settings.ManageContainedItemRoutes || (settings.ManageContainedItemRoutes && model.Absolute)))
Expand All @@ -123,7 +128,7 @@ public override async Task<IDisplayResult> UpdateAsync(AutoroutePart model, IUpd
var possibleConflicts = await _session.QueryIndex<AutoroutePartIndex>(o => (o.Published || o.Latest) && o.Path.IsIn(paths)).ListAsync();
if (possibleConflicts.Any(x => x.ContentItemId != model.ContentItem.ContentItemId && x.ContainedContentItemId != model.ContentItem.ContentItemId))
{
updater.ModelState.AddModelError(Prefix, nameof(model.Path), S["Your permalink is already in use."]);
context.Updater.ModelState.AddModelError(Prefix, nameof(model.Path), S["Your permalink is already in use."]);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ public override IDisplayResult Edit(BooleanField field, BuildFieldEditorContext
});
}

public override async Task<IDisplayResult> UpdateAsync(BooleanField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(BooleanField field, UpdateFieldEditorContext context)
{
await updater.TryUpdateModelAsync(field, Prefix, f => f.Value);
await context.Updater.TryUpdateModelAsync(field, Prefix, f => f.Value);

return Edit(field, context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,30 +99,31 @@ public override IDisplayResult Edit(ContentPickerField field, BuildFieldEditorCo
});
}

public override async Task<IDisplayResult> UpdateAsync(ContentPickerField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(ContentPickerField field, UpdateFieldEditorContext context)
{
var viewModel = new EditContentPickerFieldViewModel();

var modelUpdated = await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.ContentItemIds);
var modelUpdated = await context.Updater.TryUpdateModelAsync(viewModel, Prefix, f => f.ContentItemIds);

if (!modelUpdated)
{
return Edit(field, context);
}

field.ContentItemIds = viewModel.ContentItemIds == null
? [] : viewModel.ContentItemIds.Split(',', StringSplitOptions.RemoveEmptyEntries);
? []
: viewModel.ContentItemIds.Split(',', StringSplitOptions.RemoveEmptyEntries);

var settings = context.PartFieldDefinition.GetSettings<ContentPickerFieldSettings>();

if (settings.Required && field.ContentItemIds.Length == 0)
{
updater.ModelState.AddModelError(Prefix, nameof(field.ContentItemIds), S["The {0} field is required.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.ContentItemIds), S["The {0} field is required.", context.PartFieldDefinition.DisplayName()]);
}

if (!settings.Multiple && field.ContentItemIds.Length > 1)
{
updater.ModelState.AddModelError(Prefix, nameof(field.ContentItemIds), S["The {0} field cannot contain multiple items.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.ContentItemIds), S["The {0} field cannot contain multiple items.", context.PartFieldDefinition.DisplayName()]);
}

return Edit(field, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@ public override IDisplayResult Edit(DateField field, BuildFieldEditorContext con
});
}

public override async Task<IDisplayResult> UpdateAsync(DateField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(DateField field, UpdateFieldEditorContext context)
{
await updater.TryUpdateModelAsync(field, Prefix, f => f.Value);
await context.Updater.TryUpdateModelAsync(field, Prefix, f => f.Value);
var settings = context.PartFieldDefinition.GetSettings<DateFieldSettings>();

if (settings.Required && field.Value == null)
{
updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
}

return Edit(field, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,16 @@ public override IDisplayResult Edit(DateTimeField field, BuildFieldEditorContext
});
}

public override async Task<IDisplayResult> UpdateAsync(DateTimeField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(DateTimeField field, UpdateFieldEditorContext context)
{
var model = new EditDateTimeFieldViewModel();

await updater.TryUpdateModelAsync(model, Prefix, f => f.LocalDateTime);
await context.Updater.TryUpdateModelAsync(model, Prefix, f => f.LocalDateTime);
var settings = context.PartFieldDefinition.GetSettings<DateTimeFieldSettings>();

if (settings.Required && model.LocalDateTime == null)
{
updater.ModelState.AddModelError(Prefix, nameof(model.LocalDateTime), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(model.LocalDateTime), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ public override IDisplayResult Edit(HtmlField field, BuildFieldEditorContext con
});
}

public override async Task<IDisplayResult> UpdateAsync(HtmlField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(HtmlField field, UpdateFieldEditorContext context)
{
var viewModel = new EditHtmlFieldViewModel();

var settings = context.PartFieldDefinition.GetSettings<HtmlFieldSettings>();
await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.Html);
await context.Updater.TryUpdateModelAsync(viewModel, Prefix, f => f.Html);

if (!string.IsNullOrEmpty(viewModel.Html) && !_liquidTemplateManager.Validate(viewModel.Html, out var errors))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ public override IDisplayResult Edit(LinkField field, BuildFieldEditorContext con
});
}

public override async Task<IDisplayResult> UpdateAsync(LinkField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(LinkField field, UpdateFieldEditorContext context)
{
var modelUpdated = await updater.TryUpdateModelAsync(field, Prefix, f => f.Url, f => f.Text, f => f.Target);
var modelUpdated = await context.Updater.TryUpdateModelAsync(field, Prefix, f => f.Url, f => f.Text, f => f.Target);

if (modelUpdated)
{
Expand All @@ -96,33 +96,33 @@ public override async Task<IDisplayResult> UpdateAsync(LinkField field, IUpdateM
// Validate Url
if (settings.Required && string.IsNullOrWhiteSpace(field.Url))
{
updater.ModelState.AddModelError(Prefix, nameof(field.Url), S["The url is required for {0}.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Url), S["The url is required for {0}.", context.PartFieldDefinition.DisplayName()]);
}
else if (!string.IsNullOrWhiteSpace(field.Url))
{
if (!Uri.IsWellFormedUriString(urlToValidate, UriKind.RelativeOrAbsolute))
{
updater.ModelState.AddModelError(Prefix, nameof(field.Url), S["{0} is an invalid url.", field.Url]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Url), S["{0} is an invalid url.", field.Url]);
}
else
{
var link = $"<a href=\"{_htmlencoder.Encode(urlToValidate)}\"></a>";

if (!string.Equals(link, _htmlSanitizerService.Sanitize(link), StringComparison.OrdinalIgnoreCase))
{
updater.ModelState.AddModelError(Prefix, nameof(field.Url), S["{0} is an invalid url.", field.Url]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Url), S["{0} is an invalid url.", field.Url]);
}
}
}

// Validate Text
if (settings.LinkTextMode == LinkTextMode.Required && string.IsNullOrWhiteSpace(field.Text))
{
updater.ModelState.AddModelError(Prefix, nameof(field.Text), S["The link text is required for {0}.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Text), S["The link text is required for {0}.", context.PartFieldDefinition.DisplayName()]);
}
else if (settings.LinkTextMode == LinkTextMode.Static && string.IsNullOrWhiteSpace(settings.DefaultText))
{
updater.ModelState.AddModelError(Prefix, nameof(field.Text), S["The text default value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Text), S["The text default value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,11 @@ public override IDisplayResult Edit(LocalizationSetContentPickerField field, Bui
});
}

public override async Task<IDisplayResult> UpdateAsync(LocalizationSetContentPickerField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(LocalizationSetContentPickerField field, UpdateFieldEditorContext context)
{
var viewModel = new EditLocalizationSetContentPickerFieldViewModel();

var modelUpdated = await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.LocalizationSets);
var modelUpdated = await context.Updater.TryUpdateModelAsync(viewModel, Prefix, f => f.LocalizationSets);

if (!modelUpdated)
{
Expand All @@ -95,12 +95,12 @@ public override async Task<IDisplayResult> UpdateAsync(LocalizationSetContentPic

if (settings.Required && field.LocalizationSets.Length == 0)
{
updater.ModelState.AddModelError(Prefix, nameof(field.LocalizationSets), S["The {0} field is required.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.LocalizationSets), S["The {0} field is required.", context.PartFieldDefinition.DisplayName()]);
}

if (!settings.Multiple && field.LocalizationSets.Length > 1)
{
updater.ModelState.AddModelError(Prefix, nameof(field.LocalizationSets), S["The {0} field cannot contain multiple items.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.LocalizationSets), S["The {0} field cannot contain multiple items.", context.PartFieldDefinition.DisplayName()]);
}

return Edit(field, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@ public override IDisplayResult Edit(MultiTextField field, BuildFieldEditorContex
});
}

public override async Task<IDisplayResult> UpdateAsync(MultiTextField field, IUpdateModel updater, UpdateFieldEditorContext context)
public override async Task<IDisplayResult> UpdateAsync(MultiTextField field, UpdateFieldEditorContext context)
{
var viewModel = new EditMultiTextFieldViewModel();
await updater.TryUpdateModelAsync(viewModel, Prefix);
await context.Updater.TryUpdateModelAsync(viewModel, Prefix);

field.Values = viewModel.Values;

var settings = context.PartFieldDefinition.GetSettings<MultiTextFieldSettings>();
if (settings.Required && viewModel.Values.Length == 0)
{
updater.ModelState.AddModelError(Prefix, nameof(field.Values), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
context.Updater.ModelState.AddModelError(Prefix, nameof(field.Values), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]);
}

return Edit(field, context);
Expand Down
Loading