diff --git a/src/Orchard.Web/Core/Contents/Shapes.cs b/src/Orchard.Web/Core/Contents/Shapes.cs index 0999dea75..22615f9df 100644 --- a/src/Orchard.Web/Core/Contents/Shapes.cs +++ b/src/Orchard.Web/Core/Contents/Shapes.cs @@ -5,6 +5,10 @@ namespace Orchard.Core.Contents { public class Shapes : IShapeTableProvider { public void Discover(ShapeTableBuilder builder) { builder.Describe("Content") + .OnCreated(created => { + var content = created.Shape; + content.Child.Add(created.New.PlaceChildContent(Source: content)); + }) .OnDisplaying(displaying => { ContentItem contentItem = displaying.Shape.ContentItem; if (contentItem != null) { @@ -16,6 +20,9 @@ namespace Orchard.Core.Contents { displaying.ShapeMetadata.Alternates.Add("Content_" + displaying.ShapeMetadata.DisplayType); //Content.Summary-Page displaying.ShapeMetadata.Alternates.Add("Content_" + displaying.ShapeMetadata.DisplayType + "__" + contentItem.ContentType); + + if (!displaying.ShapeMetadata.DisplayType.Contains("Admin")) + displaying.ShapeMetadata.Wrappers.Add("Content_ControlWrapper"); } }); diff --git a/src/Orchard.Web/Core/Contents/Views/Content.ControlWrapper.cshtml b/src/Orchard.Web/Core/Contents/Views/Content.ControlWrapper.cshtml new file mode 100644 index 000000000..c34821b5b --- /dev/null +++ b/src/Orchard.Web/Core/Contents/Views/Content.ControlWrapper.cshtml @@ -0,0 +1,11 @@ +@using Orchard.ContentManagement; +@using Orchard.Core.Contents; +@if (AuthorizedFor(Permissions.EditContent)) { +
+
@Html.ItemEditLinkWithReturnUrl(T("Edit").Text, (ContentItem)Model.ContentItem)
+ @Display(Model.Child) +
+} +else { + @Display(Model.Child) +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index c3f5499d7..87b28803c 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -394,6 +394,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj index a3ef9685a..c66115457 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj @@ -138,11 +138,11 @@ Code - - - - - + + + + + @@ -165,10 +165,10 @@ - - - - + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.DetailAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.DetailAdmin.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.DetailAdmin.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.DetailAdmin.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.Editor.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.Editor.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.Editor.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.Editor.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.Summary.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.Summary.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.Summary.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.Summary.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.SummaryAdmin.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.SummaryAdmin.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.SummaryAdmin.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Blog.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-Blog.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.Editor.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.Editor.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.Editor.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.Editor.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.Summary.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.Summary.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.Summary.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.Summary.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.SummaryAdmin.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.SummaryAdmin.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.SummaryAdmin.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.cshtml b/src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.cshtml similarity index 100% rename from src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/BlogPost.cshtml rename to src/Orchard.Web/Modules/Orchard.Blogs/Views/Items/Content-BlogPost.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj b/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj index 6180ebec2..0dfae91f7 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj @@ -80,6 +80,10 @@ + + + + diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditFieldViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditFieldViewModel.cs new file mode 100644 index 000000000..5b0f7bcbf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditFieldViewModel.cs @@ -0,0 +1,16 @@ +using Orchard.ContentManagement.MetaData.Models; + +namespace Orchard.ContentTypes.ViewModels { + + public class EditFieldViewModel { + public EditFieldViewModel() { } + + public EditFieldViewModel(ContentFieldDefinition contentFieldDefinition) { + Name = contentFieldDefinition.Name; + _Definition = contentFieldDefinition; + } + + public string Name { get; set; } + public ContentFieldDefinition _Definition { get; private set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditPartFieldViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditPartFieldViewModel.cs new file mode 100644 index 000000000..982c7e603 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditPartFieldViewModel.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.ViewModels; + +namespace Orchard.ContentTypes.ViewModels { + public class EditPartFieldViewModel { + + public EditPartFieldViewModel() { + Settings = new SettingsDictionary(); + } + + public EditPartFieldViewModel(int index, ContentPartFieldDefinition field) { + Index = index; + Name = field.Name; + FieldDefinition = new EditFieldViewModel(field.FieldDefinition); + Settings = field.Settings; + _Definition = field; + } + + public int Index { get; set; } + public string Prefix { get { return "Fields[" + Index + "]"; } } + public EditPartViewModel Part { get; set; } + + public string Name { get; set; } + public IEnumerable Templates { get; set; } + public EditFieldViewModel FieldDefinition { get; set; } + public SettingsDictionary Settings { get; set; } + public ContentPartFieldDefinition _Definition { get; private set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditPartViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditPartViewModel.cs new file mode 100644 index 000000000..624f791e4 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditPartViewModel.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.ViewModels; +using Orchard.Utility.Extensions; +using Orchard.ContentTypes.Extensions; + +namespace Orchard.ContentTypes.ViewModels { + public class EditPartViewModel { + public EditPartViewModel() { + Fields = new List(); + Settings = new SettingsDictionary(); + } + + public EditPartViewModel(ContentPartDefinition contentPartDefinition) { + Name = contentPartDefinition.Name; + Fields = contentPartDefinition.Fields.Select((f, i) => new EditPartFieldViewModel(i, f) { Part = this }).ToList(); + Settings = contentPartDefinition.Settings; + _Definition = contentPartDefinition; + } + + public string Prefix { get { return "PartDefinition"; } } + public string Name { get; set; } + private string _displayName; + public string DisplayName { + get { return !string.IsNullOrWhiteSpace(_displayName) ? _displayName : Name.TrimEnd("Part").CamelFriendly(); } + set { _displayName = value; } + } + public IEnumerable Templates { get; set; } + public IEnumerable Fields { get; set; } + public SettingsDictionary Settings { get; set; } + public ContentPartDefinition _Definition { get; private set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypePartViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypePartViewModel.cs new file mode 100644 index 000000000..4a735195a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypePartViewModel.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.ViewModels; + +namespace Orchard.ContentTypes.ViewModels { + public class EditTypePartViewModel { + public EditTypePartViewModel() { + Settings = new SettingsDictionary(); + } + + public EditTypePartViewModel(int index, ContentTypePartDefinition part) { + Index = index; + PartDefinition = new EditPartViewModel(part.PartDefinition); + Settings = part.Settings; + _Definition = part; + } + + public int Index { get; set; } + public string Prefix { get { return "Parts[" + Index + "]"; } } + public EditPartViewModel PartDefinition { get; set; } + public SettingsDictionary Settings { get; set; } + public EditTypeViewModel Type { get; set; } + public IEnumerable Templates { get; set; } + public ContentTypePartDefinition _Definition { get; private set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs index 7404c5f46..4c6634530 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/EditTypeViewModel.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.Linq; using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentManagement.ViewModels; -using Orchard.ContentTypes.Extensions; -using Orchard.Utility.Extensions; namespace Orchard.ContentTypes.ViewModels { public class EditTypeViewModel { @@ -46,87 +44,4 @@ namespace Orchard.ContentTypes.ViewModels { } } - public class EditTypePartViewModel { - public EditTypePartViewModel() { - Settings = new SettingsDictionary(); - } - - public EditTypePartViewModel(int index, ContentTypePartDefinition part) { - Index = index; - PartDefinition = new EditPartViewModel(part.PartDefinition); - Settings = part.Settings; - _Definition = part; - } - - public int Index { get; set; } - public string Prefix { get { return "Parts[" + Index + "]"; } } - public EditPartViewModel PartDefinition { get; set; } - public SettingsDictionary Settings { get; set; } - public EditTypeViewModel Type { get; set; } - public IEnumerable Templates { get; set; } - public ContentTypePartDefinition _Definition { get; private set; } - } - - public class EditPartViewModel { - public EditPartViewModel() { - Fields = new List(); - Settings = new SettingsDictionary(); - } - - public EditPartViewModel(ContentPartDefinition contentPartDefinition) { - Name = contentPartDefinition.Name; - Fields = contentPartDefinition.Fields.Select((f, i) => new EditPartFieldViewModel(i, f) { Part = this }).ToList(); - Settings = contentPartDefinition.Settings; - _Definition = contentPartDefinition; - } - - public string Prefix { get { return "PartDefinition"; } } - public string Name { get; set; } - private string _displayName; - public string DisplayName { - get { return !string.IsNullOrWhiteSpace(_displayName) ? _displayName : Name.TrimEnd("Part").CamelFriendly(); } - set { _displayName = value; } - } - public IEnumerable Templates { get; set; } - public IEnumerable Fields { get; set; } - public SettingsDictionary Settings { get; set; } - public ContentPartDefinition _Definition { get; private set; } - } - - public class EditPartFieldViewModel { - - public EditPartFieldViewModel() { - Settings = new SettingsDictionary(); - } - - public EditPartFieldViewModel(int index, ContentPartFieldDefinition field) { - Index = index; - Name = field.Name; - FieldDefinition = new EditFieldViewModel(field.FieldDefinition); - Settings = field.Settings; - _Definition = field; - } - - public int Index { get; set; } - public string Prefix { get { return "Fields[" + Index + "]"; } } - public EditPartViewModel Part { get; set; } - - public string Name { get; set; } - public IEnumerable Templates { get; set; } - public EditFieldViewModel FieldDefinition { get; set; } - public SettingsDictionary Settings { get; set; } - public ContentPartFieldDefinition _Definition { get; private set; } - } - - public class EditFieldViewModel { - public EditFieldViewModel() { } - - public EditFieldViewModel(ContentFieldDefinition contentFieldDefinition) { - Name = contentFieldDefinition.Name; - _Definition = contentFieldDefinition; - } - - public string Name { get; set; } - public ContentFieldDefinition _Definition { get; private set; } - } } diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.cshtml b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.cshtml index 5cf769f41..6efdbf882 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/EditPart.cshtml @@ -1,4 +1,5 @@ @model Orchard.ContentTypes.ViewModels.EditPartViewModel +@{ Style.Require("ContentTypesAdmin"); }

@Html.TitleForPage(T("Edit Part").ToString())

@@ -6,19 +7,30 @@ @Html.ValidationSummary()
- @* has unintended consequences (renamging the part) - changing the name creates a new part of that name *@ + @* has unintended consequences (renaming the part) - changing the name creates a new part of that name *@ @Html.TextBoxFor(m => m.Name, new {@class = "textMedium", disabled = "disabled"}) @Html.HiddenFor(m => m.Name)
- @DisplayChildren(Model.Templates) + @{ Html.RenderTemplates(Model.Templates); }

@T("Fields")

@Html.ActionLink(T("Add").Text, "AddFieldTo", new { area = "Orchard.ContentTypes", id = Model.Name }, new { @class = "button" })
- @DisplayChildren(Model.Fields) + @Html.EditorFor(m => m.Fields, "Fields", "")
} + +@using(Script.Foot()){ + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePartField.cshtml b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePartField.cshtml index 4d9f1db2d..3daec4aea 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePartField.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePartField.cshtml @@ -1,7 +1,7 @@ @model Orchard.ContentTypes.ViewModels.EditPartFieldViewModel

@Model.Name (@Model.FieldDefinition.Name)

@if (Model.Templates.Any()) { -
@Html.RenderTemplates(Model.Templates); +
@{Html.RenderTemplates(Model.Templates);}
} @Html.HiddenFor(m => m.Name)@Html.HiddenFor(m => m.FieldDefinition.Name)@Html.HiddenFor(m => m.Index)
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs index 1b5109d90..cedc19a43 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs @@ -18,6 +18,7 @@ namespace Orchard.Roles.Drivers { private readonly INotifier _notifier; private readonly IAuthenticationService _authenticationService; private readonly IAuthorizationService _authorizationService; + private const string TemplateName = "Parts/Roles.UserRoles"; public UserRolesPartDriver( IRepository userRolesRepository, @@ -46,20 +47,19 @@ namespace Orchard.Roles.Drivers { if (!_authorizationService.TryCheckAccess(Permissions.ApplyRoles, _authenticationService.GetAuthenticatedUser(), userRolesPart)) return null; - var roles = - _roleService.GetRoles().Select( - x => new UserRoleEntry { - RoleId = x.Id, - Name = x.Name, - Granted = userRolesPart.Roles.Contains(x.Name) - }); - - var model = new UserRolesViewModel { - User = userRolesPart.As(), - UserRoles = userRolesPart, - Roles = roles.ToList(), - }; - return ContentPartTemplate(model, "Parts/Roles.UserRoles"); + return ContentShape("Parts_Roles_UserRoles_Edit", + () => { + var roles =_roleService.GetRoles().Select(x => new UserRoleEntry { + RoleId = x.Id, + Name = x.Name, + Granted = userRolesPart.Roles.Contains(x.Name)}); + var model = new UserRolesViewModel { + User = userRolesPart.As(), + UserRoles = userRolesPart, + Roles = roles.ToList(), + }; + return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix); + }); } protected override DriverResult Editor(UserRolesPart userRolesPart, IUpdateModel updater, dynamic shapeHelper) { @@ -67,29 +67,26 @@ namespace Orchard.Roles.Drivers { if (!_authorizationService.TryCheckAccess(Permissions.ApplyRoles, _authenticationService.GetAuthenticatedUser(), userRolesPart)) return null; - var model = new UserRolesViewModel { - User = userRolesPart.As(), - UserRoles = userRolesPart, - }; - + var model = BuildEditorViewModel(userRolesPart); if (updater.TryUpdateModel(model, Prefix, null, null)) { - var currentUserRoleRecords = _userRolesRepository.Fetch(x => x.UserId == model.User.Id); var currentRoleRecords = currentUserRoleRecords.Select(x => x.Role); var targetRoleRecords = model.Roles.Where(x => x.Granted).Select(x => _roleService.GetRole(x.RoleId)); - foreach (var addingRole in targetRoleRecords.Where(x => !currentRoleRecords.Contains(x))) { _notifier.Warning(T("Adding role {0} to user {1}", addingRole.Name, userRolesPart.As().UserName)); _userRolesRepository.Create(new UserRolesPartRecord { UserId = model.User.Id, Role = addingRole }); } - foreach (var removingRole in currentUserRoleRecords.Where(x => !targetRoleRecords.Contains(x.Role))) { _notifier.Warning(T("Removing role {0} from user {1}", removingRole.Role.Name, userRolesPart.As().UserName)); _userRolesRepository.Delete(removingRole); } - } - return ContentPartTemplate(model, "Parts/Roles.UserRoles"); + return ContentShape("Parts_Roles_UserRoles_Edit", + () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)); + } + + private static UserRolesViewModel BuildEditorViewModel(UserRolesPart userRolesPart) { + return new UserRolesViewModel { User = userRolesPart.As(), UserRoles = userRolesPart }; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj b/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj index 5276d0806..aeea6b32c 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj +++ b/src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj @@ -39,6 +39,7 @@ AllRules.ruleset + @@ -108,6 +109,9 @@ Orchard.Core + + +