Skip to content

Commit

Permalink
Add return url to add and edit field views to make them usable from d…
Browse files Browse the repository at this point in the history
…ifferent sources. (#3390)

Fixes #3389
  • Loading branch information
matiasmolleja authored and sebastienros committed Mar 25, 2019
1 parent 3c9cc4a commit 11cccdb
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 19 deletions.
Expand Up @@ -486,7 +486,7 @@ public async Task<ActionResult> DeletePart(string id)
return RedirectToAction("ListParts");
}

public async Task<ActionResult> AddFieldTo(string id)
public async Task<ActionResult> AddFieldTo(string id, string returnUrl = null)
{
if (!await _authorizationService.AuthorizeAsync(User, Permissions.EditContentTypes))
return Unauthorized();
Expand All @@ -504,11 +504,12 @@ public async Task<ActionResult> AddFieldTo(string id)
Fields = _contentDefinitionService.GetFields().Select(x => x.Name).OrderBy(x => x).ToList()
};

ViewData["ReturnUrl"] = returnUrl;
return View(viewModel);
}

[HttpPost, ActionName("AddFieldTo")]
public async Task<ActionResult> AddFieldToPOST(AddFieldViewModel viewModel, string id)
public async Task<ActionResult> AddFieldToPOST(AddFieldViewModel viewModel, string id, string returnUrl = null)
{
if (!await _authorizationService.AuthorizeAsync(User, Permissions.EditContentTypes))
return Unauthorized();
Expand Down Expand Up @@ -563,17 +564,25 @@ public async Task<ActionResult> AddFieldToPOST(AddFieldViewModel viewModel, stri

_session.Cancel();

ViewData["ReturnUrl"] = returnUrl;
return View(viewModel);
}

_contentDefinitionService.AddFieldToPart(viewModel.Name, viewModel.DisplayName, viewModel.FieldTypeName, partDefinition.Name);

_notifier.Success(T["The field \"{0}\" has been added.", viewModel.DisplayName]);

return RedirectToAction("EditField", new { id, viewModel.Name });
if (!String.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("EditField", new { id, viewModel.Name });
}
}

public async Task<ActionResult> EditField(string id, string name)
public async Task<ActionResult> EditField(string id, string name, string returnUrl = null)
{
if (!await _authorizationService.AuthorizeAsync(User, Permissions.EditContentTypes))
return Unauthorized();
Expand Down Expand Up @@ -602,12 +611,13 @@ public async Task<ActionResult> EditField(string id, string name)
Shape = await _contentDefinitionDisplayManager.BuildPartFieldEditorAsync(partFieldDefinition, this)
};

ViewData["ReturnUrl"] = returnUrl;
return View(viewModel);
}

[HttpPost, ActionName("EditField")]
[FormValueRequired("submit.Save")]
public async Task<ActionResult> EditFieldPOST(string id, EditFieldViewModel viewModel)
public async Task<ActionResult> EditFieldPOST(string id, EditFieldViewModel viewModel, string returnUrl = null)
{
if (!await _authorizationService.AuthorizeAsync(User, Permissions.EditContentTypes))
{
Expand All @@ -633,6 +643,7 @@ public async Task<ActionResult> EditFieldPOST(string id, EditFieldViewModel view
return NotFound();
}


if (field.DisplayName() != viewModel.DisplayName)
{
// prevent null reference exception in validation
Expand All @@ -651,6 +662,8 @@ public async Task<ActionResult> EditFieldPOST(string id, EditFieldViewModel view
if (!ModelState.IsValid)
{
_session.Cancel();

ViewData["ReturnUrl"] = returnUrl;
return View(viewModel);
}

Expand All @@ -667,21 +680,31 @@ public async Task<ActionResult> EditFieldPOST(string id, EditFieldViewModel view
if (!ModelState.IsValid)
{
_session.Cancel();

ViewData["ReturnUrl"] = returnUrl;
return View(viewModel);
}
else
{
_notifier.Success(T["The \"{0}\" field settings have been saved.", field.DisplayName()]);
}

// Redirect to the type editor if a type exists with this name
var typeViewModel = _contentDefinitionService.GetType(id);
if (typeViewModel != null)

if (!String.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
{
return RedirectToAction("Edit", new { id });
return Redirect(returnUrl);
}
else
{
// Redirect to the type editor if a type exists with this name
var typeViewModel = _contentDefinitionService.GetType(id);
if (typeViewModel != null)
{
return RedirectToAction("Edit", new { id });
}

return RedirectToAction("EditPart", new { id });
return RedirectToAction("EditPart", new { id });
}
}

[HttpPost, ActionName("RemoveFieldFrom")]
Expand Down
Expand Up @@ -3,9 +3,14 @@

@model AddFieldViewModel

@{
var returnUrl = ViewData["returnUrl"]?.ToString();
}


<h1>@RenderTitleSegments(T["Add New Field To \"{0}\"", Model.Part.DisplayName()])</h1>

<form asp-action="AddFieldTo">
<form asp-action="AddFieldTo" asp-route-returnUrl="@ViewData["returnUrl"]">
@Html.ValidationSummary()
<fieldset class="form-group">
<div class="row col-md">
Expand Down Expand Up @@ -40,7 +45,10 @@

<fieldset class="form-group">
<button class="btn btn-primary" type="submit">@T["Save"]</button>
<a asp-route-action="Edit" asp-route-id="@Model.Part.Name" class="btn btn-secondary">@T["Cancel"]</a>
@if (Url.IsLocalUrl(returnUrl))
{
<a class="btn btn-secondary" href="@returnUrl">@T["Cancel"]</a>
}
</fieldset>
</form>

Expand Down
Expand Up @@ -42,8 +42,8 @@
<li class="list-group-item" style="cursor: move;">
<div class="properties">
<div class="related">
<a asp-route-action="EditField" asp-route-id="@Model.TypeDefinition.Name" asp-route-name="@field.Name" class="btn btn-primary btn-sm" role="button">@T["Edit"]</a>
<a asp-route-action="RemoveFieldFrom" asp-route-id="@Model.TypeDefinition.Name" asp-route-name="@field.Name" class="btn btn-danger btn-sm" role="button" itemprop="UnsafeUrl RemoveUrl">@T["Remove"]</a>
<a asp-route-action="EditField" asp-route-id="@Model.TypeDefinition.Name" asp-route-name="@field.Name" asp-route-returnUrl="@FullRequestPath" class="btn btn-primary btn-sm" role="button">@T["Edit"]</a>
<a asp-route-action="RemoveFieldFrom" asp-route-id="@Model.TypeDefinition.Name" asp-route-name="@field.Name" class="btn btn-danger btn-sm" role="button" itemprop="UnsafeUrl RemoveUrl">@T["Remove"]</a>
</div>
@field.DisplayName() <span class="hint">@T["— {0}", field.FieldDefinition.Name.CamelFriendly()]</span>
</div>
Expand All @@ -54,7 +54,7 @@
</ul>
</fieldset>
<fieldset class="form-group">
<a asp-route-action="AddFieldTo" asp-route-id="@Model.TypeDefinition.Name" class="btn btn-info btn-sm" role="button">@T["Add Field"]</a>
<a asp-route-action="AddFieldTo" asp-route-id="@Model.TypeDefinition.Name" asp-route-returnUrl="@FullRequestPath" class="btn btn-info btn-sm" role="button">@T["Add Field"]</a>
</fieldset>
<fieldset class="form-group">
<h3>@T["Parts"]</h3>
Expand Down
Expand Up @@ -13,11 +13,12 @@
var shapeTable = ShapeTableManager.GetShapeTable(theme?.Id);
var editorShapes = shapeTable.ShapeBindings.Keys.Where(x => x.StartsWith(Model.PartFieldDefinition.FieldDefinition.Name + "_Option__", StringComparison.OrdinalIgnoreCase) || x.EndsWith(Model.PartFieldDefinition.FieldDefinition.Name + "_Option", StringComparison.OrdinalIgnoreCase));
var displayShapes = shapeTable.ShapeBindings.Keys.Where(x => x.StartsWith(Model.PartFieldDefinition.FieldDefinition.Name + "_DisplayOption__", StringComparison.OrdinalIgnoreCase) || x.EndsWith(Model.PartFieldDefinition.FieldDefinition.Name + "_Option", StringComparison.OrdinalIgnoreCase));
var returnUrl = ViewData["returnUrl"]?.ToString();
}

<h1>@RenderTitleSegments(T["\"{0}\" settings for \"{1}\"", Model.DisplayName, Model.PartFieldDefinition.PartDefinition.DisplayName()])</h1>

<form asp-action="EditField">
<form asp-action="EditField" asp-route-returnUrl="@ViewData["returnUrl"]">
@Html.ValidationSummary()
<fieldset class="form-group">
<div class="row col-md">
Expand Down Expand Up @@ -82,7 +83,10 @@

<fieldset class="form-group">
<button class="btn btn-primary" type="submit" name="submit.Save" value="Save">@T["Save"]</button>
<a asp-route-action="EditPart" asp-route-id="@Model.PartFieldDefinition.PartDefinition.Name" class="btn btn-secondary">@T["Cancel"]</a>
@if (Url.IsLocalUrl(returnUrl))
{
<a class="btn btn-secondary" href="@returnUrl">@T["Cancel"]</a>
}
</fieldset>
</form>

Expand Down
Expand Up @@ -34,7 +34,7 @@
<li class="list-group-item">
<div class="properties">
<div class="related">
<a asp-route-action="EditField" asp-route-id="@Model.PartDefinition.Name" asp-route-name="@field.Name" class="btn btn-primary btn-sm" role="button">@T["Edit"]</a>
<a asp-route-action="EditField" asp-route-id="@Model.PartDefinition.Name" asp-route-name="@field.Name" asp-route-returnUrl="@FullRequestPath" class="btn btn-primary btn-sm" role="button">@T["Edit"]</a>
<a asp-route-action="RemoveFieldFrom" asp-route-id="@Model.PartDefinition.Name" asp-route-name="@field.Name" class="btn btn-danger btn-sm" role="button" itemprop="UnsafeUrl RemoveUrl">@T["Remove"]</a>
</div>
@field.DisplayName() <span class="hint">@T["— {0}", field.FieldDefinition.Name.CamelFriendly()]</span>
Expand All @@ -46,7 +46,7 @@
}
</fieldset>
<fieldset class="form-group">
<a asp-route-action="AddFieldTo" asp-route-id="@Model.PartDefinition.Name" class="btn btn-info btn-sm" role="button">@T["Add Field"]</a>
<a asp-route-action="AddFieldTo" asp-route-id="@Model.PartDefinition.Name" asp-route-returnUrl="@FullRequestPath" class="btn btn-info btn-sm" role="button">@T["Add Field"]</a>
</fieldset>

<fieldset class="form-group">
Expand Down

0 comments on commit 11cccdb

Please sign in to comment.