using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; namespace ASPNetPortal { public class TabLayout : System.Web.UI.Page { protected System.Web.UI.WebControls.TextBox tabName; protected System.Web.UI.WebControls.CheckBoxList authRoles; protected System.Web.UI.WebControls.CheckBox showMobile; protected System.Web.UI.WebControls.TextBox mobileTabName; protected System.Web.UI.WebControls.DropDownList moduleType; protected System.Web.UI.WebControls.TextBox moduleTitle; protected System.Web.UI.WebControls.ListBox leftPane; protected System.Web.UI.WebControls.ListBox contentPane; protected System.Web.UI.WebControls.ListBox rightPane; protected System.Web.UI.WebControls.LinkButton applyBtn; protected System.Web.UI.WebControls.LinkButton AddModuleBtn; protected System.Web.UI.WebControls.ImageButton LeftUpBtn; protected System.Web.UI.WebControls.ImageButton LeftRightBtn; protected System.Web.UI.WebControls.ImageButton LeftDownBtn; protected System.Web.UI.WebControls.ImageButton LeftEditBtn; protected System.Web.UI.WebControls.ImageButton LeftDeleteBtn; protected System.Web.UI.WebControls.ImageButton ContentUpBtn; protected System.Web.UI.WebControls.ImageButton ContentLeftBtn; protected System.Web.UI.WebControls.ImageButton ContentRightBtn; protected System.Web.UI.WebControls.ImageButton ContentDownBtn; protected System.Web.UI.WebControls.ImageButton ContentEditBtn; protected System.Web.UI.WebControls.ImageButton ContentDeleteBtn; protected System.Web.UI.WebControls.ImageButton RightUpBtn; protected System.Web.UI.WebControls.ImageButton RightLeftBtn; protected System.Web.UI.WebControls.ImageButton RightDownBtn; protected System.Web.UI.WebControls.ImageButton RightEditBtn; protected System.Web.UI.WebControls.ImageButton RightDeleteBtn; int tabId = 0; protected ArrayList leftList; protected ArrayList contentList; protected ArrayList rightList; //******************************************************* // // The Page_Load server event handler on this page is used // to populate a tab's layout settings on the page // //******************************************************* private void Page_Load(object sender, System.EventArgs e) { // Verify that the current user has access to access this page if (PortalSecurity.IsInRoles("Admins") == false) { Response.Redirect("~/Admin/EditAccessDenied.aspx"); } // Determine Tab to Edit if (Request.Params["tabid"] != null) { tabId = Int32.Parse(Request.Params["tabid"]); } // If first visit to the page, update all entries if (Page.IsPostBack == false) { BindData(); } } //******************************************************* // // The AddModuleToPane_Click server event handler on this page is used // to add a new portal module into the tab // //******************************************************* private void AddModuleToPane_Click(Object sender, EventArgs e) { // All new modules go to the end of the contentpane ModuleItem m = new ModuleItem(); m.ModuleTitle = moduleTitle.Text; m.ModuleDefId = Int32.Parse(moduleType.SelectedItem.Value); m.ModuleOrder = 999; // save to database AdminDB admin = new AdminDB(); m.ModuleId = admin.AddModule(tabId, m.ModuleOrder, "ContentPane", m.ModuleTitle, m.ModuleDefId, 0, "Admins", false); // Obtain portalId from Current Context PortalSettings portalSettings = (PortalSettings) Context.Items["PortalSettings"]; // reload the portalSettings from the database HttpContext.Current.Items["PortalSettings"] = new PortalSettings(portalSettings.PortalId, tabId); // reorder the modules in the content pane ArrayList modules = GetModules("ContentPane"); OrderModules(modules); // resave the order foreach (ModuleItem item in modules) { admin.UpdateModuleOrder(item.ModuleId, item.ModuleOrder, "ContentPane"); } // Redirect to the same page to pick up changes Response.Redirect(Request.RawUrl); } //******************************************************* // // The UpDown_Click server event handler on this page is // used to move a portal module up or down on a tab's layout pane // //******************************************************* private void UpDown_Click(Object sender, ImageClickEventArgs e) { String cmd = ((ImageButton)sender).CommandName; String pane = ((ImageButton)sender).CommandArgument; ListBox _listbox = (ListBox) Page.FindControl(pane); ArrayList modules = GetModules(pane); if (_listbox.SelectedIndex != -1) { int delta; int selection = -1; // Determine the delta to apply in the order number for the module // within the list. +3 moves down one item; -3 moves up one item if (cmd == "down") { delta = 3; if (_listbox.SelectedIndex < _listbox.Items.Count-1) selection = _listbox.SelectedIndex + 1; } else { delta = -3; if (_listbox.SelectedIndex > 0) selection = _listbox.SelectedIndex - 1; } ModuleItem m; m = (ModuleItem) modules[_listbox.SelectedIndex]; m.ModuleOrder += delta; // reorder the modules in the content pane OrderModules(modules); // resave the order AdminDB admin = new AdminDB(); foreach (ModuleItem item in modules) { admin.UpdateModuleOrder(item.ModuleId, item.ModuleOrder, pane); } } // Redirect to the same page to pick up changes Response.Redirect(Request.RawUrl); } //******************************************************* // // The RightLeft_Click server event handler on this page is // used to move a portal module between layout panes on // the tab page // //******************************************************* private void RightLeft_Click(Object sender, ImageClickEventArgs e) { String sourcePane = ((ImageButton)sender).Attributes["sourcepane"]; String targetPane = ((ImageButton)sender).Attributes["targetpane"]; ListBox sourceBox = (ListBox) Page.FindControl(sourcePane); ListBox targetBox = (ListBox) Page.FindControl(targetPane); if (sourceBox.SelectedIndex != -1) { // get source arraylist ArrayList sourceList = GetModules(sourcePane); // get a reference to the module to move // and assign a high order number to send it to the end of the target list ModuleItem m = (ModuleItem) sourceList[sourceBox.SelectedIndex]; // add it to the database AdminDB admin = new AdminDB(); admin.UpdateModuleOrder(m.ModuleId, 998, targetPane); // delete it from the source list sourceList.RemoveAt(sourceBox.SelectedIndex); // Obtain portalId from Current Context PortalSettings portalSettings = (PortalSettings) Context.Items["PortalSettings"]; // reload the portalSettings from the database HttpContext.Current.Items["PortalSettings"] = new PortalSettings(portalSettings.PortalId, tabId); // reorder the modules in the source pane sourceList = GetModules(sourcePane); OrderModules(sourceList); // resave the order foreach (ModuleItem item in sourceList) { admin.UpdateModuleOrder(item.ModuleId, item.ModuleOrder, sourcePane); } // reorder the modules in the target pane ArrayList targetList = GetModules(targetPane); OrderModules(targetList); // resave the order foreach (ModuleItem item in targetList) { admin.UpdateModuleOrder(item.ModuleId, item.ModuleOrder, targetPane); } // Redirect to the same page to pick up changes Response.Redirect(Request.RawUrl); } } //******************************************************* // // The Apply_Click server event handler on this page is // used to save the current tab settings to the database and // then redirect back to the main admin page. // //******************************************************* private void Apply_Click(Object Sender, EventArgs e) { // Save changes then navigate back to admin. String id = (String)((LinkButton)Sender).ID; SaveTabData(); // redirect back to the admin page // Obtain PortalSettings from Current Context PortalSettings portalSettings = (PortalSettings) Context.Items["PortalSettings"]; int adminIndex = portalSettings.DesktopTabs.Count-1; Response.Redirect("~/DesktopDefault.aspx?tabindex=" + adminIndex.ToString() + "&tabid=" + ((TabStripDetails)portalSettings.DesktopTabs[adminIndex]).TabId); } //******************************************************* // // The TabSettings_Change server event handler on this page is // invoked any time the tab name or access security settings // change. The event handler in turn calls the "SaveTabData" // helper method to ensure that these changes are persisted // to the portal configuration file. // //******************************************************* private void TabSettings_Change(Object sender, EventArgs e) { // Ensure that settings are saved SaveTabData(); } //******************************************************* // // The SaveTabData helper method is used to persist the // current tab settings to the database. // //******************************************************* private void SaveTabData() { // Construct Authorized User Roles String String authorizedRoles = ""; foreach(ListItem item in authRoles.Items) { if (item.Selected == true) { authorizedRoles = authorizedRoles + item.Text + ";"; } } // Obtain PortalSettings from Current Context PortalSettings portalSettings = (PortalSettings) Context.Items["PortalSettings"]; // update Tab info in the database AdminDB admin = new AdminDB(); admin.UpdateTab(portalSettings.PortalId, tabId, tabName.Text, portalSettings.ActiveTab.TabOrder, authorizedRoles, mobileTabName.Text, showMobile.Checked); } //******************************************************* // // The EditBtn_Click server event handler on this page is // used to edit an individual portal module's settings // //******************************************************* private void EditBtn_Click(Object sender, ImageClickEventArgs e) { String pane = ((ImageButton)sender).CommandArgument; ListBox _listbox = (ListBox) Page.FindControl(pane); if (_listbox.SelectedIndex != -1) { int mid = Int32.Parse(_listbox.SelectedItem.Value); // Redirect to module settings page Response.Redirect("ModuleSettings.aspx?mid=" + mid + "&tabid=" + tabId); } } //******************************************************* // // The DeleteBtn_Click server event handler on this page is // used to delete an portal module from the page // //******************************************************* private void DeleteBtn_Click(Object sender, ImageClickEventArgs e) { String pane = ((ImageButton)sender).CommandArgument; ListBox _listbox = (ListBox) Page.FindControl(pane); ArrayList modules = GetModules(pane); if (_listbox.SelectedIndex != -1) { ModuleItem m = (ModuleItem) modules[_listbox.SelectedIndex]; if (m.ModuleId > -1) { // must delete from database too AdminDB admin = new AdminDB(); admin.DeleteModule(m.ModuleId); } } // Redirect to the same page to pick up changes Response.Redirect(Request.RawUrl); } //******************************************************* // // The BindData helper method is used to update the tab's // layout panes with the current configuration information // //******************************************************* private void BindData() { // Obtain PortalSettings from Current Context PortalSettings portalSettings = (PortalSettings) Context.Items["PortalSettings"]; TabSettings tab = portalSettings.ActiveTab; // Populate Tab Names, etc. tabName.Text = tab.TabName; mobileTabName.Text = tab.MobileTabName; showMobile.Checked = tab.ShowMobile; // Populate checkbox list with all security roles for this portal // and "check" the ones already configured for this tab AdminDB admin = new AdminDB(); SqlDataReader roles = admin.GetPortalRoles(portalSettings.PortalId); // Clear existing items in checkboxlist authRoles.Items.Clear(); ListItem allItem = new ListItem(); allItem.Text = "All Users"; if (tab.AuthorizedRoles.LastIndexOf("All Users") > -1) { allItem.Selected = true; } authRoles.Items.Add(allItem); while(roles.Read()) { ListItem item = new ListItem(); item.Text = (String) roles["RoleName"]; item.Value = roles["RoleID"].ToString(); if ((tab.AuthorizedRoles.LastIndexOf(item.Text)) > -1) { item.Selected = true; } authRoles.Items.Add(item); } // Populate the "Add Module" Data moduleType.DataSource = admin.GetModuleDefinitions(portalSettings.PortalId); moduleType.DataBind(); // Populate Right Hand Module Data rightList = GetModules("RightPane"); rightPane.DataBind(); // Populate Content Pane Module Data contentList = GetModules("ContentPane"); contentPane.DataBind(); // Populate Left Hand Pane Module Data leftList = GetModules("LeftPane"); leftPane.DataBind(); } //******************************************************* // // The GetModules helper method is used to get the modules // for a single pane within the tab // //******************************************************* private ArrayList GetModules (String pane) { // Obtain PortalSettings from Current Context PortalSettings portalSettings = (PortalSettings) Context.Items["PortalSettings"]; ArrayList paneModules = new ArrayList(); foreach (ModuleSettings module in portalSettings.ActiveTab.Modules) { if ((module.PaneName).ToLower() == pane.ToLower()) { ModuleItem m = new ModuleItem(); m.ModuleTitle = module.ModuleTitle; m.ModuleId = module.ModuleId; m.ModuleDefId = module.ModuleDefId; m.ModuleOrder = module.ModuleOrder; paneModules.Add(m); } } return paneModules; } //******************************************************* // // The OrderModules helper method is used to reset the display // order for modules within a pane // //******************************************************* private void OrderModules (ArrayList list) { int i = 1; // sort the arraylist list.Sort(); // renumber the order foreach (ModuleItem m in list) { // number the items 1, 3, 5, etc. to provide an empty order // number when moving items up and down in the list. m.ModuleOrder = i; i += 2; } } public TabLayout() { Page.Init += new System.EventHandler(Page_Init); } private void Page_Init(object sender, EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); } #region Web Form Designer generated code ////// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.AddModuleBtn.Click += new System.EventHandler(this.AddModuleToPane_Click); this.LeftUpBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click); this.LeftRightBtn.Click += new System.Web.UI.ImageClickEventHandler(this.RightLeft_Click); this.LeftDownBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click); this.LeftEditBtn.Click += new System.Web.UI.ImageClickEventHandler(this.EditBtn_Click); this.LeftDeleteBtn.Click += new System.Web.UI.ImageClickEventHandler(this.DeleteBtn_Click); this.ContentUpBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click); this.ContentLeftBtn.Click += new System.Web.UI.ImageClickEventHandler(this.RightLeft_Click); this.ContentRightBtn.Click += new System.Web.UI.ImageClickEventHandler(this.RightLeft_Click); this.ContentDownBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click); this.ContentEditBtn.Click += new System.Web.UI.ImageClickEventHandler(this.EditBtn_Click); this.ContentDeleteBtn.Click += new System.Web.UI.ImageClickEventHandler(this.DeleteBtn_Click); this.RightUpBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click); this.RightLeftBtn.Click += new System.Web.UI.ImageClickEventHandler(this.RightLeft_Click); this.RightDownBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click); this.RightEditBtn.Click += new System.Web.UI.ImageClickEventHandler(this.EditBtn_Click); this.RightDeleteBtn.Click += new System.Web.UI.ImageClickEventHandler(this.DeleteBtn_Click); this.applyBtn.Click += new System.EventHandler(this.Apply_Click); this.tabName.TextChanged += new System.EventHandler(this.TabSettings_Change); this.authRoles.SelectedIndexChanged += new System.EventHandler(this.TabSettings_Change); this.showMobile.CheckedChanged += new System.EventHandler(this.TabSettings_Change); this.mobileTabName.TextChanged += new System.EventHandler(this.TabSettings_Change); this.Load += new System.EventHandler(this.Page_Load); } #endregion } }