public void GetNavigation(INavigationBuilder navigationBuilder) { navigationBuilder .Add("缩略图尺寸管理", PermissionProvider.Thumbnail, builder => builder.Action("Index", "Thumbnail", new { area = "Admin" })) .Add("角色管理", PermissionProvider.Role, builder => builder.Action("Index", "Role", new { area = "Admin" })) .Add("用户管理", PermissionProvider.Account, builder => builder.Action("Index", "Account", new { area = "Admin" })) .Add("系统信息管理", PermissionProvider.SysSetting, builder => builder.Action("Index", "Setting", new { area = "Admin" }), 100) .Add("导航管理", PermissionProvider.Navigation, builder => builder.Action("Index", "Navigation", new { area = "Admin" })) .Add("分类管理", PermissionProvider.Category, builder => builder.Action("Index", "Category", new { area = "Admin" })) .Add("控制台", PermissionProvider.Dashboard, builder => builder.Action("Index", "Dashboard", new { area = "Admin" })); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "topic", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Topic)] as Topic; if (entity == null) { return; } // No edited information if (entity.EditedDate == null) { return; } // Add HistoryMenu view to entity builder .Add(T["History"], int.MinValue, history => history .View("HistoryMenu", new { model = new HistoryMenuViewModel() { Entity = entity, DialogUrl = _contextFacade.GetRouteUrl(new RouteValueDictionary() { ["area"] = "Plato.Discuss.History", ["controller"] = "Home", ["action"] = "Index", ["id"] = 0 }) } }) .Permission(Permissions.ViewEntityHistory) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "admin", StringComparison.OrdinalIgnoreCase)) { return; } // Hidden whilst in demo mode, still accessible via direct Url if (_platoOptions.DemoMode) { return; } builder .Add(T["Settings"], int.MaxValue, settings => settings .IconCss("fal fa-cog") .Add(T["Demo"], int.MaxValue - 450, demo => demo .Action("Index", "Admin", "Plato.Site.Demo") .LocalNav()) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "post", StringComparison.OrdinalIgnoreCase)) { return; } // Ensure we have a dropdown view model provided via our view provider if (!(builder.ActionContext.HttpContext.Items[typeof(VisibilityDropDownViewModel)] is VisibilityDropDownViewModel dropdown)) { return; } // Get area name var areaName = string.Empty; if (builder.ActionContext.RouteData.Values.ContainsKey("area")) { areaName = builder.ActionContext.RouteData.Values["area"].ToString(); } // Ensure we are in the correct area if (!String.Equals(areaName, "Plato.Articles", StringComparison.OrdinalIgnoreCase)) { return; } // Build navigation builder .Add(dropdown.SelectedValue == "hidden" ? T["Hidden"] : T["Public"], int.MinValue + 10, create => create .View("SelectDropDown", new { model = dropdown }) , new List <string>() { "nav-item", "text-muted" }); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "doc-footer", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Doc)] as Doc; var reply = builder.ActionContext.HttpContext.Items[typeof(DocComment)] as DocComment; // Add reaction list to navigation builder .Add(T["DocFlipper"], int.MaxValue - 10, flipper => flipper .View("DocFlipper", new { entity, reply }) //.Permission(Permissions.ViewDocReactions) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "profile", StringComparison.OrdinalIgnoreCase)) { return; } var context = _actionContextAccessor.ActionContext; object id = context.RouteData.Values["opts.id"], alias = context.RouteData.Values["opts.alias"]; builder .Add(T["Overview"], 1, profile => profile .Action("Display", "Home", "Plato.Users", new RouteValueDictionary() { ["opts.id"] = id?.ToString(), ["opts.alias"] = alias?.ToString() }) //.Permission(Permissions.ManageUsers) .LocalNav() ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "topic-reply-details", StringComparison.OrdinalIgnoreCase)) { return; } // Get entity from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Topic)] as Topic; if (entity == null) { return; } // Get reply from navigation builder var reply = builder.ActionContext.HttpContext.Items[typeof(Reply)] as Reply; if (reply == null) { return; } // Add reaction menu view to navigation builder .Add(T["Vote"], react => react .View("VoteToggle", new { model = new VoteToggleViewModel() { Entity = entity, Reply = reply, Permission = Permissions.VoteTopicReplies, ApiUrl = "api/discuss/vote/post" } }) //.Permission(Permissions.ReactToTopics) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "question-details", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Question)] as Question; // We always need an entity if (entity == null) { return; } // If entity is hidden don't allow voting if (entity.IsHidden()) { return; } // Add reaction menu view to navigation builder .Add(T["Vote"], react => react .View("VoteToggle", new { model = new VoteToggleViewModel() { Entity = entity, Permission = Permissions.VoteQuestions, ApiUrl = "api/questions/vote/post" } }) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "issue-comment-details", StringComparison.OrdinalIgnoreCase)) { return; } // Get entity from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Issue)] as Issue; if (entity == null) { return; } // Get reply from navigation builder var reply = builder.ActionContext.HttpContext.Items[typeof(Comment)] as Comment; if (reply == null) { return; } // Add vote toggle view to navigation builder .Add(T["Vote"], react => react .View("VoteToggle", new { model = new VoteToggleViewModel() { Entity = entity, Reply = reply, Permission = Permissions.VoteIdeaComments, ApiUrl = "api/ideas/vote/post" } }) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "site", StringComparison.OrdinalIgnoreCase)) { return; } builder .Add(T["Issues"], 7, issues => issues .IconCss("fal fa-bug") .Action("Index", "Home", "Plato.Issues") .Attributes(new Dictionary <string, object>() { { "data-provide", "tooltip" }, { "data-placement", "bottom" }, { "title", T["Issues"] } }) .LocalNav() , new List <string>() { "articles", "text-hidden" } ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "admin", StringComparison.OrdinalIgnoreCase)) { return; } builder .Add(T["Files"], int.MaxValue - 15, configuration => configuration .IconCss("fal fa-paperclip") .Add(T["Browse"], int.MinValue + 30, installed => installed .Action("Index", "Admin", "Plato.Files") .Permission(Permissions.BrowseFiles) .LocalNav() ).Add(T["Add"], int.MinValue + 30, installed => installed .Action("Create", "Admin", "Plato.Files") .Permission(Permissions.AddFiles) .LocalNav() ).Add(T["Settings"], int.MinValue + 30, installed => installed .Action("Settings", "Admin", "Plato.Files") .Permission(Permissions.ManageFileSettings) .LocalNav() )); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "article", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Article)] as Article; // We need an entity if (entity == null) { return; } // Don't allow reactions for hidden entities if (entity.IsHidden()) { return; } // Add reaction menu view to navigation builder .Add(T["React"], react => react .View("ReactionMenu", new { model = new ReactionMenuViewModel() { ModuleId = "Plato.Articles.Reactions", Entity = entity, Permission = Permissions.ReactToArticles } }) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "topic-reply-footer", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from navigation builder var entity = builder.ActionContext.HttpContext.Items[typeof(Topic)] as Topic; if (entity == null) { return; } var reply = builder.ActionContext.HttpContext.Items[typeof(Reply)] as Reply; if (reply == null) { return; } builder .Add(T["React"], int.MaxValue, react => react .View("ReactionList", new { model = new ReactionListViewModel() { Entity = entity, Reply = reply, Permission = Permissions.ReactToReplies } }) .Permission(Permissions.ViewReplyReactions) ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "question-answer", StringComparison.OrdinalIgnoreCase)) { return; } // Get entity from context var entity = builder.ActionContext.HttpContext.Items[typeof(Question)] as Question; if (entity == null) { return; } // Get reply from context var reply = builder.ActionContext.HttpContext.Items[typeof(Answer)] as Answer; if (reply == null) { return; } //// Get authenticated user from features var user = builder.ActionContext.HttpContext.Features[typeof(User)] as User; // Get delete / restore permission Permission deletePermission = null; if (reply.IsDeleted) { deletePermission = user?.Id == reply.CreatedUserId ? Permissions.RestoreOwnAnswers : Permissions.RestoreAnyAnswer; } else { deletePermission = user?.Id == reply.CreatedUserId ? Permissions.DeleteOwnAnswers : Permissions.DeleteAnyAnswer; } // Options builder .Add(T["Options"], int.MaxValue, options => options .IconCss("fa fa-ellipsis-h") .Attributes(new Dictionary <string, object>() { { "data-provide", "tooltip" }, { "title", T["Options"] } }) .Add(T["Edit"], int.MinValue, edit => edit .Action("EditReply", "Home", "Plato.Questions", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Permission(user?.Id == reply.CreatedUserId ? Permissions.EditOwnAnswers : Permissions.EditAnyAnswer) .LocalNav()) .Add(reply.IsHidden ? T["Unhide"] : T["Hide"], 2, edit => edit .Action(reply.IsHidden ? "ShowReply" : "HideReply", "Home", "Plato.Questions", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Resource(entity.CategoryId) .Permission(reply.IsHidden ? Permissions.ShowAnswers : Permissions.HideAnswers) .LocalNav() ) .Add(reply.IsSpam ? T["Not Spam"] : T["Spam"], 3, spam => spam .Action(reply.IsSpam ? "ReplyFromSpam" : "ReplyToSpam", "Home", "Plato.Questions", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Resource(entity.CategoryId) .Permission(reply.IsSpam ? Permissions.AnswerFromSpam : Permissions.AnswerToSpam) .LocalNav() ) .Add(T["Report"], int.MaxValue - 2, report => report .Action("Report", "Home", "Plato.Questions", new RouteValueDictionary() { ["opts.id"] = entity.Id, ["opts.alias"] = entity.Alias, ["opts.replyId"] = reply.Id }) .Attributes(new Dictionary <string, object>() { { "data-provide", "dialog" }, { "data-dialog-modal-css", "modal fade" }, { "data-dialog-css", "modal-dialog modal-lg" } }) .Permission(Permissions.ReportAnswers) .LocalNav() ) .Add(T["Divider"], int.MaxValue - 1, divider => divider .Permission(deletePermission) .DividerCss("dropdown-divider").LocalNav() ) .Add(reply.IsDeleted ? T["Restore"] : T["Delete"], int.MaxValue, edit => edit .Action(reply.IsDeleted ? "RestoreReply" : "DeleteReply", "Home", "Plato.Questions", new RouteValueDictionary() { ["id"] = reply.Id }) .Permission(deletePermission) .LocalNav(), reply.IsDeleted ? new List <string>() { "dropdown-item", "dropdown-item-success" } : new List <string>() { "dropdown-item", "dropdown-item-danger" } ) , new List <string>() { "answer-options", "text-muted", "dropdown-toggle-no-caret", "text-hidden" } ); // If the reply if deleted display permanent delete option if (reply.IsDeleted) { // Permanent delete permissions var permanentDeletePermission = reply.CreatedUserId == user?.Id ? Permissions.PermanentDeleteOwnAnswers : Permissions.PermanentDeleteAnyAnswer; builder .Add(T["Delete"], int.MinValue, options => options .IconCss("fal fa-trash-alt") .Attributes(new Dictionary <string, object>() { { "data-toggle", "tooltip" }, { "data-provide", "confirm" }, { "title", T["Permanent Delete"] }, }) .Action("PermanentDeleteReply", "Home", "Plato.Questions", new RouteValueDictionary() { ["id"] = reply.Id }) .Permission(permanentDeletePermission) .LocalNav() , new List <string>() { "question-permanent-delete", "text-muted", "text-hidden" } ); } // If entity & reply are not hidden and entity is not locked allow replies if (!entity.IsHidden() && !reply.IsHidden() && !entity.IsLocked) { builder .Add(T["Comment"], int.MaxValue, options => options .IconCss("fa fa-reply") .Attributes(new Dictionary <string, object>() { { "data-provide", "postQuote" }, { "data-quote-selector", "#quote" + reply.Id.ToString() }, { "data-toggle", "tooltip" }, { "title", T["Reply"] } }) .Action("Login", "Account", "Plato.Users", new RouteValueDictionary() { ["returnUrl"] = builder.ActionContext.HttpContext.Request.Path }) .Permission(Permissions.PostAnswers) .LocalNav() , new List <string>() { "answer-reply", "text-muted", "text-hidden" } ); } }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "idea", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from context var entity = builder.ActionContext.HttpContext.Items[typeof(Idea)] as Idea; if (entity == null) { return; } // Get authenticated user from context var user = builder.ActionContext.HttpContext.Features[typeof(User)] as User; Permission deletePermission = null; if (entity.IsDeleted) { // Do we have restore permissions? deletePermission = user?.Id == entity.CreatedUserId ? Permissions.RestoreOwnIdeas : Permissions.RestoreAnyIdea; } else { // Do we have delete permissions? deletePermission = user?.Id == entity.CreatedUserId ? Permissions.DeleteOwnIdeas : Permissions.DeleteAnyIdeaComment; } // Add entity options builder .Add(T["Options"], int.MaxValue, options => options .IconCss("fa fa-ellipsis-h") .Attributes(new Dictionary <string, object>() { { "data-provide", "tooltip" }, { "title", T["Options"] } }) .Add(T["Edit"], int.MinValue, edit => edit .Action("Edit", "Home", "Plato.Ideas", new RouteValueDictionary() { ["opts.id"] = entity.Id, ["opts.alias"] = entity.Alias }) .Permission(user?.Id == entity.CreatedUserId ? Permissions.EditOwnIdeas : Permissions.EditAnyIdea) .LocalNav() ) .Add(entity.IsPinned ? T["Unpin"] : T["Pin"], 1, edit => edit .Action(entity.IsPinned ? "Unpin" : "Pin", "Home", "Plato.Ideas", new RouteValueDictionary() { ["id"] = entity.Id }) .Resource(entity.CategoryId) .Permission(entity.IsPinned ? Permissions.UnpinIdeas : Permissions.PinIdeas) .LocalNav() ) .Add(entity.IsLocked ? T["Unlock"] : T["Lock"], 2, edit => edit .Action(entity.IsLocked ? "Unlock" : "Lock", "Home", "Plato.Ideas", new RouteValueDictionary() { ["id"] = entity.Id }) .Resource(entity.CategoryId) .Permission(entity.IsLocked ? Permissions.UnlockIdeas : Permissions.LockIdeas) .LocalNav() ) .Add(entity.IsHidden ? T["Unhide"] : T["Hide"], 2, edit => edit .Action(entity.IsHidden ? "Show" : "Hide", "Home", "Plato.Ideas", new RouteValueDictionary() { ["id"] = entity.Id }) .Resource(entity.CategoryId) .Permission(entity.IsHidden ? Permissions.ShowIdeas : Permissions.HideIdeas) .LocalNav() ) .Add(entity.IsSpam ? T["Not Spam"] : T["Spam"], 2, spam => spam .Action(entity.IsSpam ? "FromSpam" : "ToSpam", "Home", "Plato.Ideas", new RouteValueDictionary() { ["id"] = entity.Id }) .Resource(entity.CategoryId) .Permission(entity.IsSpam ? Permissions.IdeaFromSpam : Permissions.IdeaToSpam) .LocalNav() ) .Add(T["Report"], int.MaxValue - 2, report => report .Action("Report", "Home", "Plato.Ideas", new RouteValueDictionary() { ["opts.id"] = entity.Id, ["opts.alias"] = entity.Alias }) .Attributes(new Dictionary <string, object>() { { "data-provide", "dialog" }, { "data-dialog-modal-css", "modal fade" }, { "data-dialog-css", "modal-dialog modal-lg" } }) .Permission(Permissions.ReportIdeas) .LocalNav() ) .Add(T["Divider"], int.MaxValue - 1, divider => divider .Permission(deletePermission) .DividerCss("dropdown-divider").LocalNav() ) .Add(entity.IsDeleted ? T["Restore"] : T["Delete"], int.MaxValue, edit => edit .Attributes(!entity.IsDeleted ? new Dictionary <string, object>() { ["data-provide"] = "confirm", ["data-confirm-message"] = "Are you sure you want to delete this idea?\n\nClick OK to confirm..." } : new Dictionary <string, object>()) .Action(entity.IsDeleted ? "Restore" : "Delete", "Home", "Plato.Ideas", new RouteValueDictionary() { ["id"] = entity.Id }) .Permission(deletePermission) .LocalNav(), entity.IsDeleted ? new List <string>() { "dropdown-item", "dropdown-item-success" } : new List <string>() { "dropdown-item", "dropdown-item-danger" } ) , new List <string>() { "idea-options", "text-muted", "dropdown-toggle-no-caret", "text-hidden" } ); // If the entity if deleted display permanent delete option if (entity.IsDeleted) { // Permanent delete permissions var permanentDeletePermission = entity.CreatedUserId == user?.Id ? Permissions.PermanentDeleteOwnIdeas : Permissions.PermanentDeleteAnyIdea; builder .Add(T["Delete"], int.MinValue, options => options .IconCss("fal fa-trash-alt") .Attributes(new Dictionary <string, object>() { { "data-toggle", "tooltip" }, { "data-provide", "confirm" }, { "title", T["Permanent Delete"] }, }) .Action("PermanentDelete", "Home", "Plato.Ideas", new RouteValueDictionary() { ["id"] = entity.Id.ToString(), }) .Permission(permanentDeletePermission) .LocalNav() , new List <string>() { "idea-permanent-delete", "text-muted", "text-hidden" } ); } // If entity is not hidden or locked allow replies if (!entity.IsHidden() && !entity.IsLocked) { builder .Add(T["Comment"], int.MaxValue, options => options .IconCss("fa fa-reply") .Attributes(new Dictionary <string, object>() { { "data-provide", "postReply" }, { "data-toggle", "tooltip" }, { "title", T["Comment"] } }) .Action("Login", "Account", "Plato.Users", new RouteValueDictionary() { ["returnUrl"] = builder.ActionContext.HttpContext.Request.Path }) .Permission(Permissions.PostIdeaComments) .LocalNav() , new List <string>() { "idea-reply", "text-muted", "text-hidden" } ); } }
public void GetNavigation(INavigationBuilder navigationBuilder) { navigationBuilder .Add("微信管理", PermissionProvider.WeChat, builder => builder.Action("Index", "WeChat", new { area = "WeChat" }), 10) .Add("微信菜单管理", PermissionProvider.WeChatMenus, builder => builder.Action("WechatMenus", "WeChat", new { area = "WeChat" }), 11); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "question-answer", StringComparison.OrdinalIgnoreCase)) { return; } // Get authenticated user var user = builder.ActionContext.HttpContext.Features[typeof(User)] as User; // We need to be authenticated to flag replies as accepted answers if (user == null) { return; } // Get entity from context var entity = builder.ActionContext.HttpContext.Items[typeof(Question)] as Question; if (entity == null) { return; } // Get reply from navigation builder var reply = builder.ActionContext.HttpContext.Items[typeof(Answer)] as Answer; if (reply == null) { return; } // Get permission var permission = entity.CreatedUserId == user.Id ? Permissions.MarkOwnRepliesAnswer : Permissions.MarkAnyReplyAnswer; // If entity & reply are not hidden and entity is not locked allow answers if (!entity.IsHidden() && !reply.IsHidden() && !entity.IsLocked) { builder .Add(T["Answer"], int.MinValue, options => options .IconCss(reply.IsAnswer ? "fa fa-times" : "fa fa-check") .Attributes(new Dictionary <string, object>() { { "data-toggle", "tooltip" }, { "title", reply.IsAnswer ? T["Remove As Answer"] : T["Mark As Answer"] } }) .Action(reply.IsAnswer ? "FromAnswer" : "ToAnswer", "Home", "Plato.Questions.Answers", new RouteValueDictionary() { ["Id"] = reply.Id }) .Permission(permission) .LocalNav() , new List <string>() { "topic-answer", "text-muted", "text-hidden" } ); } }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "topic", StringComparison.OrdinalIgnoreCase)) { return; } // Get authenticated user from features var user = builder.ActionContext.HttpContext.Features[typeof(User)] as User; // We always need to be authenticated as a moderator if (user == null) { return; } // Get model from context var topic = builder.ActionContext.HttpContext.Items[typeof(Topic)] as Topic; if (topic == null) { return; } // Get moderator from context provided by moderator topic view provider var moderator = builder.ActionContext.HttpContext.Items[typeof(Moderator)] as Moderator; // We always need a moderator to show this menu if (moderator == null) { return; } // Add moderator options builder .Add(T["Options"], int.MaxValue, options => options .IconCss("fa fa-ellipsis-h") .Attributes(new Dictionary <string, object>() { { "data-provide", "tooltip" }, { "title", T["Options"] } }) .Add(T["Edit"], "1", int.MinValue, edit => edit .Action("Edit", "Home", "Plato.Discuss", new RouteValueDictionary() { ["opts.id"] = topic.Id, ["opts.alias"] = topic.Alias }) .Resource(topic.CategoryId) .Permission(ModeratorPermissions.EditTopics) .LocalNav() ) .Add(topic.IsPinned ? T["Unpin"] : T["Pin"], 1, edit => edit .Action(topic.IsPinned ? "Unpin" : "Pin", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = topic.Id }) .Resource(topic.CategoryId) .Permission(topic.IsPinned ? ModeratorPermissions.UnpinTopics : ModeratorPermissions.PinTopics) .LocalNav() ) .Add(topic.IsLocked ? T["Unlock"] : T["Lock"], 2, edit => edit .Action(topic.IsLocked ? "Unlock" : "Lock", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = topic.Id }) .Resource(topic.CategoryId) .Permission(topic.IsLocked ? ModeratorPermissions.UnlockTopics : ModeratorPermissions.LockTopics) .LocalNav() ) .Add(topic.IsHidden ? T["Unhide"] : T["Hide"], 2, edit => edit .Action(topic.IsHidden ? "Show" : "Hide", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = topic.Id }) .Resource(topic.CategoryId) .Permission(topic.IsHidden ? ModeratorPermissions.ShowTopics : ModeratorPermissions.HideTopics) .LocalNav() ) .Add(topic.IsSpam ? T["Not Spam"] : T["Spam"], 2, spam => spam .Action(topic.IsSpam ? "FromSpam" : "ToSpam", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = topic.Id }) .Resource(topic.CategoryId) .Permission(topic.IsSpam ? ModeratorPermissions.TopicFromSpam : ModeratorPermissions.TopicToSpam) .LocalNav() ) .Add(T["Divider"], int.MaxValue - 1, divider => divider .Permission(ModeratorPermissions.DeleteTopics) .DividerCss("dropdown-divider").LocalNav() ) .Add(topic.IsDeleted ? T["Restore"] : T["Delete"], "1", int.MaxValue, delete => delete .Attributes(!topic.IsDeleted ? new Dictionary <string, object>() { ["data-provide"] = "confirm", ["data-confirm-message"] = "Are you sure you want to delete this topic?\n\nClick OK to confirm..." } : new Dictionary <string, object>()) .Action(topic.IsDeleted ? "Restore" : "Delete", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = topic.Id }) .Resource(topic.CategoryId) .Permission(ModeratorPermissions.DeleteTopics) .LocalNav(), topic.IsDeleted ? new List <string>() { "dropdown-item", "dropdown-item-success" } : new List <string>() { "dropdown-item", "dropdown-item-danger" } ) , new List <string>() { "topic-options", "text-muted", "dropdown-toggle-no-caret", "text-hidden" } ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "admin-user", StringComparison.OrdinalIgnoreCase)) { return; } // Get user we are editing from context var user = builder.ActionContext.HttpContext.Items[typeof(User)] as User; if (user == null) { return; } // Add topic options builder .Add(T["Options"], options => options .IconCss("fa fa-ellipsis-h") .Attributes(new Dictionary <string, object>() { { "data-provide", "tooltip" }, { "title", T["Options"] } }) .Add(user.IsVerified ? T["Remove Verified"] : T["Add to Verified"], verified => verified .Action(user.IsVerified ? "InvalidateUser" : "ValidateUser", "Admin", "Plato.Users", new RouteValueDictionary() { ["Id"] = user.Id.ToString() }) .Permission(Permissions.UserToVerify) .LocalNav().LocalNav(), new List <string>() { "is-verified" } ) .Add(user.IsStaff ? T["Remove Staff"] : T["Add to Staff"], staff => staff .Action(user.IsStaff ? "FromStaff" : "ToStaff", "Admin", "Plato.Users", new RouteValueDictionary() { ["Id"] = user.Id.ToString() }) .Permission(Permissions.UserToStaff) .LocalNav(), new List <string>() { "is-staff" }) .Add(T["Divider"], divider => divider .Permission(Permissions.UserToSpam) .DividerCss("dropdown-divider").LocalNav() ) .Add(user.IsSpam ? T["Remove from SPAM"] : T["Add to SPAM"], spam => spam .Attributes(!user.IsSpam ? new Dictionary <string, object>() { { "data-provide", "confirm" }, { "data-confirm-message", T[ "Are you sure you want to flag this user as SPAM?\n\nAll new and existing contributions will be flagged as SPAM and only visible to those with permission to view content flagged as SPAM.\n\nClick OK to confirm..."] } } : new Dictionary <string, object>()) .Action(user.IsSpam ? "RemoveSpam" : "SpamUser", "Admin", "Plato.Users", new RouteValueDictionary() { ["Id"] = user.Id.ToString() }) .Permission(Permissions.UserToSpam) .LocalNav(), user.IsSpam ? new List <string>() { "dropdown-item is-spam", "dropdown-item-danger is-spam" } : new List <string>() { "dropdown-item is-spam" } ) .Add(user.IsBanned ? T["Remove Ban"] : T["Add to Banned"], banned => banned .Attributes(!user.IsBanned ? new Dictionary <string, object>() { { "data-provide", "confirm" }, { "data-confirm-message", T[ "Are you sure you want to ban this user?\n\nContributions from this user will be soft deleted and only visible to those with permission to view deleted content. The user will be logged out and will not be able to login again or post new content.\n\nClick OK to confirm..."] } } : new Dictionary <string, object>()) .Action(user.IsBanned ? "RemoveBan" : "BanUser", "Admin", "Plato.Users", new RouteValueDictionary() { ["Id"] = user.Id.ToString() }) .Permission(Permissions.UserToBanned) .LocalNav(), user.IsBanned ? new List <string>() { "dropdown-item is-banned", "dropdown-item-danger" } : new List <string>() { "dropdown-item is-banned" } ) .Add(T["Divider"], divider => divider .Permission(Permissions.ResetUserPasswords) .DividerCss("dropdown-divider").LocalNav() ) .Add(T["Edit Password"], password => password .Action("EditPassword", "Admin", "Plato.Users", new RouteValueDictionary() { ["Id"] = user.Id.ToString() }) .Permission(Permissions.ResetUserPasswords) .LocalNav() ) , new List <string>() { "topic-options", "text-muted", "dropdown-toggle-no-caret", "text-hidden" } ); }
public void BuildNavigation(string name, INavigationBuilder builder) { if (!String.Equals(name, "topic-reply", StringComparison.OrdinalIgnoreCase)) { return; } // Get model from navigation builder var topic = builder.ActionContext.HttpContext.Items[typeof(Topic)] as Topic; if (topic == null) { return; } // Get model from navigation builder var reply = builder.ActionContext.HttpContext.Items[typeof(Reply)] as Reply; if (reply == null) { return; } // Get moderator from context provided by moderator topic view provider var moderator = builder.ActionContext.HttpContext.Items[typeof(Moderator)] as Moderator; // We always need a moderator to show this menu if (moderator == null) { return; } // Options builder .Add(T["Options"], int.MaxValue, options => options .IconCss("fa fa-ellipsis-h") .Attributes(new Dictionary <string, object>() { { "data-provide", "tooltip" }, { "title", T["Options"] } }) .Add(T["Edit"], "1", int.MinValue, edit => edit .Action("EditReply", "Home", "Plato.Discuss", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Resource(topic.CategoryId) .Permission(ModeratorPermissions.EditReplies) .LocalNav()) .Add(reply.IsHidden ? T["Unhide"] : T["Hide"], 2, edit => edit .Action(reply.IsHidden ? "ShowReply" : "HideReply", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Resource(topic.CategoryId) .Permission(reply.IsHidden ? ModeratorPermissions.ShowReplies : ModeratorPermissions.HideReplies) .LocalNav() ) .Add(reply.IsSpam ? T["Not Spam"] : T["Spam"], 3, spam => spam .Action(reply.IsSpam ? "ReplyFromSpam" : "ReplyToSpam", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Resource(topic.CategoryId) .Permission(reply.IsSpam ? ModeratorPermissions.ReplyFromSpam : ModeratorPermissions.ReplyToSpam) .LocalNav() ) .Add(T["Divider"], int.MaxValue - 1, divider => divider .Permission(ModeratorPermissions.DeleteReplies) .DividerCss("dropdown-divider").LocalNav() ) .Add(reply.IsDeleted ? T["Restore"] : T["Delete"], int.MaxValue, delete => delete .Action(reply.IsDeleted ? "RestoreReply" : "DeleteReply", "Home", "Plato.Discuss.Categories.Moderators", new RouteValueDictionary() { ["id"] = reply?.Id ?? 0 }) .Resource(topic.CategoryId) .Permission(reply.IsDeleted ? ModeratorPermissions.RestoreReplies : ModeratorPermissions.DeleteReplies) .LocalNav(), new List <string>() { "dropdown-item", "dropdown-item-danger" } ) , new List <string>() { "topic-options", "text-muted", "dropdown-toggle-no-caret", "text-hidden" } ); }