diff --git a/src/Orchard.Web/Modules/Orchard.Users/Drivers/UserApprovePartDriver.cs b/src/Orchard.Web/Modules/Orchard.Users/Drivers/UserApprovePartDriver.cs new file mode 100644 index 000000000..5d06249e4 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Drivers/UserApprovePartDriver.cs @@ -0,0 +1,51 @@ +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Localization; +using Orchard.Mvc; +using Orchard.Users.Models; +using Orchard.Users.ViewModels; + +namespace Orchard.Users.Drivers { + public class UserApprovePartDriver : ContentPartDriver { + private const string TemplateName = "Parts/User.Approve"; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IOrchardServices _orchardServices; + + public UserApprovePartDriver( + IHttpContextAccessor httpContextAccessor, + IOrchardServices orchardServices + ) { + + _httpContextAccessor = httpContextAccessor; + _orchardServices = orchardServices; + + T = NullLocalizer.Instance; + } + + public Localizer T { get; set; } + + protected override DriverResult Editor(UserPart part, dynamic shapeHelper) { + var model = new UserEditViewModel { User = part }; + + return ContentShape("Parts_UserApprove_Edit", + () => { + if (!_orchardServices.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users"))) { + return null; + } + return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix); + }); + } + + protected override DriverResult Editor(UserPart part, IUpdateModel updater, dynamic shapeHelper) { + var model = new UserEditViewModel { User = part }; + + return ContentShape("Parts_UserApprove_Edit", + () => { + if (!_orchardServices.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users"))) { + return null; + } + return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix); + }); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Handlers/ApproveUserHandler.cs b/src/Orchard.Web/Modules/Orchard.Users/Handlers/ApproveUserHandler.cs new file mode 100644 index 000000000..7d6eb4c4b --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Handlers/ApproveUserHandler.cs @@ -0,0 +1,34 @@ +using Orchard.ContentManagement.Handlers; +using Orchard.Mvc; +using Orchard.Users.Events; +using Orchard.Users.Models; +using Orchard.Users.Services; + +namespace Orchard.Users.Handlers { + public class ApproveUserHandler : ContentHandler { + private readonly IApproveUserService _approveUserService; + private readonly IHttpContextAccessor _httpContextAccessor; + + public ApproveUserHandler( + IApproveUserService approveUserService, + IHttpContextAccessor httpContextAccessor) { + _approveUserService = approveUserService; + _httpContextAccessor = httpContextAccessor; + + OnPublished((context, part) => { + var httpContext = _httpContextAccessor.Current(); + // verify user click correct button and + // registration status is correct to approve/disable + if (httpContext.Request.Form["submit.Save"] == "submit.ApproveUser" && + part.RegistrationStatus == UserStatus.Pending) { + _approveUserService.Approve(part); + } + + if (httpContext.Request.Form["submit.Save"] == "submit.DisableUser" && + part.RegistrationStatus == UserStatus.Approved) { + _approveUserService.Disable(part); + } + }); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index 7e4a55dfe..4c7d003ae 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -111,6 +111,7 @@ + @@ -119,6 +120,7 @@ + @@ -135,6 +137,7 @@ + @@ -244,6 +247,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/src/Orchard.Web/Modules/Orchard.Users/Placement.info b/src/Orchard.Web/Modules/Orchard.Users/Placement.info index ef8077a94..96d11e639 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Placement.info +++ b/src/Orchard.Web/Modules/Orchard.Users/Placement.info @@ -1,5 +1,6 @@  + diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/ApproveUserService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/ApproveUserService.cs new file mode 100644 index 000000000..ab857dd31 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/ApproveUserService.cs @@ -0,0 +1,60 @@ +using Orchard; +using Orchard.ContentManagement; +using Orchard.Localization; +using Orchard.Users; +using Orchard.Security; +using Orchard.Users.Models; +using Orchard.UI.Notify; +using Orchard.Users.Events; + +namespace Orchard.Users.Services { + public interface IApproveUserService : IDependency { + void Approve(UserPart contentItem); + void Disable(UserPart contentItem); + } + + public class ApproveUserService : IApproveUserService { + + private readonly IUserEventHandler _userEventHandlers; + private readonly IOrchardServices _orchardServices; + + public ApproveUserService( + IUserEventHandler userEventHandlers, + IOrchardServices orchardServices) { + + _userEventHandlers = userEventHandlers; + _orchardServices = orchardServices; + + T = NullLocalizer.Instance; + } + public Localizer T { get; set; } + + + public void Approve(UserPart part) { + if (!_orchardServices.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users"))) { + return; + } + + if (part == null) { + return; + } + + part.RegistrationStatus = UserStatus.Approved; + _orchardServices.Notifier.Information(T("User {0} approved", part.UserName)); + _userEventHandlers.Approved(part); + } + + public void Disable(UserPart part) { + if (!_orchardServices.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users"))) + return; + + if (part == null) { + return; + } + + part.RegistrationStatus = UserStatus.Pending; + _orchardServices.Notifier.Information(T("User {0} disabled", part.UserName)); + _userEventHandlers.Moderate(part); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Views/EditorTemplates/Parts/User.Approve.cshtml b/src/Orchard.Web/Modules/Orchard.Users/Views/EditorTemplates/Parts/User.Approve.cshtml new file mode 100644 index 000000000..8e7d878cf --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Users/Views/EditorTemplates/Parts/User.Approve.cshtml @@ -0,0 +1,35 @@ +@model Orchard.Users.ViewModels.UserEditViewModel + +@using Orchard.Users.Models; +@using Orchard.ContentManagement; +@using Orchard.Core.Contents; +@using Orchard.Utility.Extensions; + + +
+ @T("Approve User") + @if (Model.User != null) { + var user = Model.User.As(); + if (user.RegistrationStatus == UserStatus.Pending) { + + } + else { + + } + } +
\ No newline at end of file