Beginning of the "add field" UI for parts

--HG--
branch : dev
This commit is contained in:
Nathan Heskew
2010-06-23 14:53:41 -07:00
parent 613cf2afaf
commit d74c9a13b2
7 changed files with 130 additions and 64 deletions

View File

@@ -102,44 +102,12 @@ namespace Orchard.Core.Contents.Controllers {
var viewModel = new EditTypeViewModel(); var viewModel = new EditTypeViewModel();
TryUpdateModel(viewModel); TryUpdateModel(viewModel);
if (!ModelState.IsValid) { if (!ModelState.IsValid)
return EditType(id); return EditType(id);
}
var contentTypeDefinitionParts = viewModel.Parts.Select( var contentTypeDefinitionParts = viewModel.Parts.Select(GenerateTypePart).ToList();
p => new ContentTypeDefinition.Part( if (viewModel.Fields.Any())
new ContentPartDefinition( contentTypeDefinitionParts.Add(GenerateTypePart(viewModel));
p.PartDefinition.Name,
p.PartDefinition.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
p.PartDefinition.Settings
),
p.Settings
)
).ToList();
if (viewModel.Fields.Any()) {
var implicitContentTypeDefinitionPart = new ContentTypeDefinition.Part(
new ContentPartDefinition(
viewModel.Name,
viewModel.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
null
),
null
);
contentTypeDefinitionParts.Add(implicitContentTypeDefinitionPart);
}
//todo: apply the changes along the lines of but definately not resembling //todo: apply the changes along the lines of but definately not resembling
// for now this _might_ just get a little messy -> // for now this _might_ just get a little messy ->
@@ -151,11 +119,48 @@ namespace Orchard.Core.Contents.Controllers {
viewModel.Settings viewModel.Settings
) )
); );
// little == lot
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
private static ContentTypeDefinition.Part GenerateTypePart(EditTypePartViewModel viewModel) {
return new ContentTypeDefinition.Part(
new ContentPartDefinition(
viewModel.PartDefinition.Name,
viewModel.PartDefinition.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
viewModel.PartDefinition.Settings
),
viewModel.Settings
);
}
private static ContentTypeDefinition.Part GenerateTypePart(EditTypeViewModel viewModel) {
return new ContentTypeDefinition.Part(
new ContentPartDefinition(
viewModel.Name,
viewModel.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
null
),
null
);
}
#endregion
#region Parts
public ActionResult EditPart(string id) { public ActionResult EditPart(string id) {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a part."))) if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a part.")))
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
@@ -187,30 +192,66 @@ namespace Orchard.Core.Contents.Controllers {
//todo: apply the changes along the lines of but definately not resembling //todo: apply the changes along the lines of but definately not resembling
// for now this _might_ just get a little messy -> // for now this _might_ just get a little messy ->
_contentDefinitionService.AlterPartDefinition( _contentDefinitionService.AlterPartDefinition(GeneratePart(viewModel));
new ContentPartDefinition(
viewModel.Name,
viewModel.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
viewModel.Settings
)
);
// little == lot
return RedirectToAction("Index"); return RedirectToAction("Index");
} }
public ActionResult AddFieldTo(string id) {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a part.")))
return new HttpUnauthorizedResult();
var contentPartDefinition = _contentDefinitionService.GetPartDefinition(id);
if (contentPartDefinition == null) {
//id passed in might be that of a type w/ no implicit field
var contentTypeDefinition = _contentDefinitionService.GetTypeDefinition(id);
if (contentTypeDefinition != null)
contentPartDefinition = new ContentPartDefinition(id);
else
return new NotFoundResult();
}
//get all of the field types
var viewModel = new AddFieldViewModel(contentPartDefinition);
return View(viewModel);
}
[HttpPost, ActionName("AddFieldTo")]
public ActionResult AddFieldToPOST(string id) {
if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a part.")))
return new HttpUnauthorizedResult();
var contentPartDefinition = _contentDefinitionService.GetPartDefinition(id);
var contentTypeDefinition = _contentDefinitionService.GetTypeDefinition(id);
if (contentTypeDefinition != null)
return RedirectToAction("EditType", new { id });
return RedirectToAction("EditPart", new {id});
}
private static ContentPartDefinition GeneratePart(EditPartViewModel viewModel) {
return new ContentPartDefinition(
viewModel.Name,
viewModel.Fields.Select(
f => new ContentPartDefinition.Field(
new ContentFieldDefinition(f.FieldDefinition.Name),
f.Name,
f.Settings
)
),
viewModel.Settings
);
}
#endregion #endregion
#region Content #region Content
#endregion
public ActionResult List(ListContentsViewModel model) { public ActionResult List(ListContentsViewModel model) {
const int pageSize = 20; const int pageSize = 20;
var skip = (Math.Max(model.Page ?? 0, 1) - 1) * pageSize; var skip = (Math.Max(model.Page ?? 0, 1) - 1) * pageSize;
@@ -328,5 +369,7 @@ namespace Orchard.Core.Contents.Controllers {
void IUpdateModel.AddModelError(string key, LocalizedString errorMessage) { void IUpdateModel.AddModelError(string key, LocalizedString errorMessage) {
ModelState.AddModelError(key, errorMessage.ToString()); ModelState.AddModelError(key, errorMessage.ToString());
} }
#endregion
} }
} }

View File

@@ -0,0 +1,12 @@
using Orchard.ContentManagement.MetaData.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Core.Contents.ViewModels {
public class AddFieldViewModel : BaseViewModel {
public AddFieldViewModel(ContentPartDefinition part) {
Part = part;
}
public ContentPartDefinition Part { get; private set; }
}
}

View File

@@ -0,0 +1,10 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<AddFieldViewModel>" %>
<%@ Import Namespace="Orchard.Core.Contents.ViewModels" %><%
Html.RegisterStyle("admin.css"); %>
<h1><%:Html.TitleForPage(T("Add a new field to {0}", Model.Part.Name).ToString())%></h1><%
using (Html.BeginFormAntiForgeryPost()) { %>
<%:Html.ValidationSummary() %>
<fieldset>
<button class="primaryAction" type="submit"><%:T("Save") %></button>
</fieldset><%
} %>

View File

@@ -1,7 +1,7 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<EditPartViewModel>" %> <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<EditPartViewModel>" %>
<%@ Import Namespace="Orchard.Core.Contents.ViewModels" %><% <%@ Import Namespace="Orchard.Core.Contents.ViewModels" %><%
Html.RegisterStyle("admin.css"); %> Html.RegisterStyle("admin.css"); %>
<h1><%:Html.TitleForPage(T("Edit Part").ToString())%></h1><% <h1><%:Html.TitleForPage(T("Edit Part").ToString()) %></h1><%
using (Html.BeginFormAntiForgeryPost()) { %> using (Html.BeginFormAntiForgeryPost()) { %>
<%:Html.ValidationSummary() %> <%:Html.ValidationSummary() %>
<fieldset> <fieldset>
@@ -9,9 +9,9 @@ using (Html.BeginFormAntiForgeryPost()) { %>
<%--// has unintended consequences (renamging the part) - changing the name creates a new part of that name--%> <%--// has unintended consequences (renamging the part) - changing the name creates a new part of that name--%>
<%:Html.TextBoxFor(m => m.Name, new {@class = "textMedium"}) %> <%:Html.TextBoxFor(m => m.Name, new {@class = "textMedium"}) %>
</fieldset> </fieldset>
<%:Html.EditorFor(m => m.Settings, "Settings", "")%> <%:Html.EditorFor(m => m.Settings, "Settings", "") %>
<h2><%:T("Fields") %></h2> <h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddField", new { }, new { @class = "button" })%></div> <div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Contents", id = Model.Name }, new { @class = "button" }) %></div>
<%:Html.EditorFor(m => m.Fields, "Fields", "") %> <%:Html.EditorFor(m => m.Fields, "Fields", "") %>
<fieldset> <fieldset>
<button class="primaryAction" type="submit"><%:T("Save") %></button> <button class="primaryAction" type="submit"><%:T("Save") %></button>

View File

@@ -1,7 +1,8 @@
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<EditTypeViewModel>" %> <%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<EditTypeViewModel>" %>
<%@ Import Namespace="Orchard.Core.Contents.ViewModels" %><% <%@ Import Namespace="Orchard.Core.Contents.ViewModels" %><%
Html.RegisterStyle("admin.css"); %> Html.RegisterStyle("admin.css"); %>
<h1><%:Html.TitleForPage(T("Edit Content Type").ToString())%></h1><% <h1><%:Html.TitleForPage(T("Edit Content Type").ToString())%></h1>
<p class="breadcrumb"><%:Html.ActionLink(T("Content Types").Text, "index") %><%:T(" &#62; ") %><%:T("Edit Content Type") %></p><%
using (Html.BeginFormAntiForgeryPost()) { %> using (Html.BeginFormAntiForgeryPost()) { %>
<%:Html.ValidationSummary() %> <%:Html.ValidationSummary() %>
<fieldset> <fieldset>
@@ -14,11 +15,11 @@ using (Html.BeginFormAntiForgeryPost()) { %>
</fieldset> </fieldset>
<%:Html.EditorFor(m => m.Settings) %> <%:Html.EditorFor(m => m.Settings) %>
<h2><%:T("Parts") %></h2> <h2><%:T("Parts") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddPart", new { }, new { @class = "button" })%></div> <div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddPart", new { }, new { @class = "button" }) %></div>
<%:Html.EditorFor(m => m.Parts, "Parts", "") %> <%:Html.EditorFor(m => m.Parts, "Parts", "") %>
<h2><%:T("Fields") %></h2> <h2><%:T("Fields") %></h2>
<div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddField", new { }, new { @class = "button" })%></div> <div class="manage add-to-type"><%: Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Contents", id = Model.Name }, new { @class = "button" }) %></div>
<%:Html.EditorFor(m => m.Fields, "Fields", "")%> <%:Html.EditorFor(m => m.Fields, "Fields", "") %>
<fieldset> <fieldset>
<button class="primaryAction" type="submit"><%:T("Save") %></button> <button class="primaryAction" type="submit"><%:T("Save") %></button>
</fieldset><% </fieldset><%

View File

@@ -11,12 +11,10 @@
<button type="submit" title="<%:T("Remove") %>"><%:T("Remove") %></button> <button type="submit" title="<%:T("Remove") %>"><%:T("Remove") %></button>
<% } %> --%> <% } %> --%>
</div> </div>
<%:Html.EditorFor(m => m.Settings, "Settings", "") %><% <%:Html.EditorFor(m => m.Settings, "Settings", "") %>
if (Model.PartDefinition.Settings.Any() || Model.PartDefinition.Fields.Any()) { %>
<h4><%:T("Global configuration") %></h4> <h4><%:T("Global configuration") %></h4>
<div class="manage minor"><%:Html.ActionLink(T("Edit").Text, "EditPart", new { area = "Contents", id = Model.PartDefinition.Name }) %></div> <div class="manage minor"><%:Html.ActionLink(T("Edit").Text, "EditPart", new { area = "Contents", id = Model.PartDefinition.Name }) %></div>
<%:Html.DisplayFor(m => m.PartDefinition.Settings, "Settings", "PartDefinition") %> <%:Html.DisplayFor(m => m.PartDefinition.Settings, "Settings", "PartDefinition") %>
<%:Html.EditorFor(m => m.PartDefinition.Fields, "Part.Fields") %><% <%:Html.EditorFor(m => m.PartDefinition.Fields, "Part.Fields") %>
} %>
<%:Html.Hidden("PartDefinition.Name", Model.PartDefinition.Name) %> <%:Html.Hidden("PartDefinition.Name", Model.PartDefinition.Name) %>
</fieldset> </fieldset>

View File

@@ -77,6 +77,7 @@
<Compile Include="Contents\Permissions.cs" /> <Compile Include="Contents\Permissions.cs" />
<Compile Include="Contents\Services\ContentDefinitionService.cs" /> <Compile Include="Contents\Services\ContentDefinitionService.cs" />
<Compile Include="Contents\Services\IContentDefinitionService.cs" /> <Compile Include="Contents\Services\IContentDefinitionService.cs" />
<Compile Include="Contents\ViewModels\AddFieldViewModel.cs" />
<Compile Include="Contents\ViewModels\EditTypeViewModel.cs" /> <Compile Include="Contents\ViewModels\EditTypeViewModel.cs" />
<Compile Include="Contents\ViewModels\CreateTypeViewModel.cs" /> <Compile Include="Contents\ViewModels\CreateTypeViewModel.cs" />
<Compile Include="Contents\ViewModels\ListContentsViewModel.cs" /> <Compile Include="Contents\ViewModels\ListContentsViewModel.cs" />
@@ -208,6 +209,7 @@
<Content Include="Common\Views\EditorTemplates\Parts\Common.TextContentField.ascx" /> <Content Include="Common\Views\EditorTemplates\Parts\Common.TextContentField.ascx" />
<Content Include="Contents\Module.txt" /> <Content Include="Contents\Module.txt" />
<Content Include="Contents\Styles\admin.css" /> <Content Include="Contents\Styles\admin.css" />
<Content Include="Contents\Views\Admin\AddFieldTo.ascx" />
<Content Include="Contents\Views\Admin\EditPart.ascx" /> <Content Include="Contents\Views\Admin\EditPart.ascx" />
<Content Include="Contents\Views\Admin\EditType.ascx" /> <Content Include="Contents\Views\Admin\EditType.ascx" />
<Content Include="Contents\Views\Admin\CreateType.ascx" /> <Content Include="Contents\Views\Admin\CreateType.ascx" />