@inherits Dynamicweb.Rendering.ViewModelTemplate @using System @using System.Web @using Dynamicweb.Rapido.Blocks.Extensibility @using Dynamicweb.Rapido.Blocks @using Dynamicweb.Rapido.Blocks.Components.General @using Dynamicweb.Frontend @functions { int impersonationPageId; string impersonationLayout; int impersonationFeed; Block impersonationBar; string getUserNameFromParams(string firstName, string middleName, string lastName, string name, string email, string userName) { string username = ""; if (!string.IsNullOrEmpty(firstName) && !string.IsNullOrEmpty(lastName)) { username = firstName + " " + (!string.IsNullOrEmpty(middleName) ? middleName + " " : "") + lastName; } else if (!string.IsNullOrEmpty(name)) { username = name; } else if (!string.IsNullOrEmpty(email)) { username = email; } else { username = userName; } return username; } string getUserName(UserViewModel user) { return getUserNameFromParams(user.FirstName, user.MiddleName, user.LastName, user.Name, user.Email, user.UserName); } string getUserName(Dynamicweb.Security.UserManagement.User user) { return getUserNameFromParams(user.FirstName, user.MiddleName, user.LastName, user.Name, user.Email, user.UserName); } } @{ impersonationPageId = GetPageIdByNavigationTag("Impersonation"); impersonationLayout = Model.Area.Item.GetItem("Ecommerce").GetList("ImpersonationLayout") != null ? Model.Area.Item.GetItem("Ecommerce").GetList("ImpersonationLayout").SelectedValue : "bar"; impersonationFeed = GetPageIdByNavigationTag("UsersFeed"); if (Model.CurrentUser.ID > 0 && Model.HasSecondaryUsers) { impersonationBar = new Block { Id = "ImpersonationBar", SortId = 50, Template = RenderImpersonation(), SkipRenderBlocksList = true, Design = new Design { Size = "auto-width", HidePadding = true, RenderType = RenderType.Column } }; if (impersonationLayout == "top-bar") { impersonationBar.SortId = 9; } Block impersonationContent = new Block { Id = "ImpersonationContent", SortId = 20 }; if (Model.CurrentSecondaryUser != null && Model.CurrentSecondaryUser.ID > 0) { //Render stop impersonation view impersonationContent.Template = RenderStopImpersonationView(); Modal stopImpersonation = new Modal { Id = "StopImpersonation", Heading = new Heading { Level = 2, Title = Translate("Sign out"), Icon = new Icon { Name = "fa-sign-out", Prefix = "fas", LabelPosition = IconLabelPosition.After } }, Width = ModalWidth.Sm, BodyTemplate = RenderStopImpersonationForm() }; Block stopImpersonationBlock = new Block { Id = "StopImpersonationBlock", SortId = 10, Component = stopImpersonation }; impersonationBar.BlocksList.Add(stopImpersonationBlock); } else { //Render main view switch (impersonationLayout) { case "right-lower-box": impersonationContent.BlocksList.Add( new Block { Id = "RightLowerBoxHeader", SortId = 10, Component = new Heading { Level = 5, Title = Translate("View the list of users you can sign in as"), CssClass = "impersonation-text" } } ); impersonationContent.BlocksList.Add( new Block { Id = "RightLowerBoxContent", SortId = 20, Template = RenderImpersonationControls() } ); break; case "right-lower-bar": impersonationContent.BlocksList.Add( new Block { Id = "RightLowerBarContent", SortId = 10, Template = RenderImpersonationControls() } ); break; case "bar": default: impersonationContent.BlocksList.Add( new Block { Id = "ViewListLink", SortId = 20, Template = RenderViewListLink() } ); impersonationContent.BlocksList.Add( new Block { Id = "BarTypeaheadSearch", SortId = 30, Template = RenderTypeaheadSearch() } ); break; } } impersonationBar.BlocksList.Add(impersonationContent); impersonationBar.BlocksList.Add( new Block { Id = "ImpersonationSearchTemplates", SortId = 30, Template = RenderSearchResultTemplate() } ); if (impersonationLayout != "bar" && impersonationLayout != "top-bar") { impersonationBar.BlocksList.Add( new Block { Id = "ImpersonationSearchScripts", SortId = 40, Template = RenderSearchScripts() } ); } BlocksPage.GetBlockPage("Master").Add("MasterHeader", impersonationBar); } } @helper RenderImpersonation() { List subBlocks = impersonationBar.BlocksList.OrderBy(item => item.SortId).ToList();
@if (impersonationLayout == "right-lower-box") { @RenderRightLowerBoxHeader() }
@*Impersonation*@ @RenderBlockList(subBlocks)
} @helper RenderRightLowerBoxHeader() {
@Translate("Impersonation")
} @helper RenderStopImpersonationView() { string secondaryUserName = getUserName(Model.CurrentSecondaryUser); string userName = getUserName(Pageview.User); string impersonationText = "" + Translate("Logged in as") + " " + secondaryUserName + " " + Translate("by") + " " + userName + " "; impersonationText = Dynamicweb.Security.UserManagement.User.ImpersonationMode == Dynamicweb.Security.UserManagement.UserImpersonation.Full ? "" + Translate("Logged in as") + " " + userName + " " + Translate("by") + " " + secondaryUserName + " " : impersonationText; if (impersonationLayout == "right-lower-box") {
@impersonationText
@RenderSwitchAccountButton()
@RenderStopImpersonationButton() } else {
@impersonationText
@RenderSwitchAccountButton()
@RenderStopImpersonationButton()
} } @helper RenderSwitchAccountButton() { @Render(new Button { Href = "/Default.aspx?ID=" + impersonationPageId, ButtonType = ButtonType.Button, ButtonLayout = ButtonLayout.Clean, Title = Translate("Switch account"), Icon = new Icon { Name = "fa-users", Prefix = "fal", LabelPosition = IconLabelPosition.After }, CssClass = "u-no-margin u-color-inherit" }) } @helper RenderStopImpersonationForm() { string secondaryUserName = getUserName(Model.CurrentSecondaryUser); string userName = getUserName(Pageview.User); int pageId = Model.TopPage.ID;
@Render(new Button { ButtonType = ButtonType.Submit, ButtonLayout = ButtonLayout.Secondary, Title = Translate("Sign out as") + " " + userName, Href = "/Default.aspx?ID=" + impersonationPageId, CssClass = "btn--full", Name = "DwExtranetRemoveSecondaryUser" }) @Render(new Button { ButtonType = ButtonType.Submit, ButtonLayout = ButtonLayout.Secondary, Title = Translate("Sign out as") + " " + secondaryUserName, Href = "/Admin/Public/ExtranetLogoff.aspx?ID=" + pageId, CssClass = "btn--full", Name = "DwExtranetRemoveSecondaryUser" })
} @helper RenderStopImpersonationButton() { @Render(new Button { ButtonType = ButtonType.Button, ButtonLayout = ButtonLayout.Clean, Title = Translate("Sign out"), Icon = new Icon { Name = "fa-sign-out", Prefix = "fal", LabelPosition = IconLabelPosition.After }, OnClick = "document.getElementById('StopImpersonationModalTrigger').checked = true", CssClass = "u-no-margin" }) } @helper RenderImpersonationControls() {
@RenderViewListLink() @RenderSearchBox()
@RenderResultsList() } @helper RenderViewListLink() { string title = impersonationLayout == "right-lower-box" ? Translate("View the list") : Translate("View the list of users you can sign in as"); string buttonClasses = impersonationLayout == "right-lower-box" ? "impersonation__button btn btn--impersonation" : "impersonation__link impersonation__link"; @Render(new Link { ButtonLayout = ButtonLayout.None, Title = title, Href = "/Default.aspx?ID=" + impersonationPageId, CssClass = buttonClasses }) } @helper RenderSearchBox() {
} @helper RenderTypeaheadSearch() {
} @helper RenderResultsList() { } @helper RenderSearchResultTemplate() { } @helper RenderSearchScripts() { }