Skip to content

Commit

Permalink
Keep only important methods in ContentPartDisplayDriver and ContentFi…
Browse files Browse the repository at this point in the history
…eldDisplayDriver (#16530)
  • Loading branch information
MikeAlhayek authored Aug 7, 2024
1 parent c347a81 commit 39f6038
Show file tree
Hide file tree
Showing 55 changed files with 297 additions and 248 deletions.
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

0 comments on commit 39f6038

Please sign in to comment.