From: <ro...@us...> - 2006-07-28 17:14:57
|
Revision: 232 Author: rouquin Date: 2006-07-28 10:14:52 -0700 (Fri, 28 Jul 2006) ViewCVS: http://svn.sourceforge.net/tcdb/?rev=232&view=rev Log Message: ----------- Updated User Settings to show roles as a heirarchy Modified Paths: -------------- Website/Includes/UserSettings.ascx Website/Includes/UserSettings.ascx.cs Modified: Website/Includes/UserSettings.ascx =================================================================== --- Website/Includes/UserSettings.ascx 2006-07-28 16:44:32 UTC (rev 231) +++ Website/Includes/UserSettings.ascx 2006-07-28 17:14:52 UTC (rev 232) @@ -77,19 +77,7 @@ <div class="item"> <label> Roles:<br /> - </label> - <ew:MultiTextListBox ID="roleList" runat="server" DataSourceID="UserRolesDataSource" DataTextFields="productName,roleName" DataValueField="roleID" - DataTextFormatString="{0}: {1}" SelectionMode="Multiple"> - </ew:MultiTextListBox><asp:ObjectDataSource ID="UserRolesDataSource" runat="server" OldValuesParameterFormatString="original_{0}" - SelectMethod="GetData" TypeName="tcdbDataSetTableAdapters.db_roleUserProductTableAdapter"> - <SelectParameters> - <asp:SessionParameter Name="userID" SessionField="userID" Type="Int32" /> - <asp:Parameter Name="productID" Type="Int32" /> - <asp:Parameter DefaultValue="true" Name="active" Type="Boolean" /> - </SelectParameters> - </asp:ObjectDataSource> - - </div> + <asp:Literal ID="roleTree" runat="server" OnInit="roleTree_Init"></asp:Literal></label></div> </div> <div class="end"> </div> @@ -179,12 +167,11 @@ <div class="cm"> <div class="left"> <div class="item"> - <label> - Roles:</label><br /> - <label>Product: </label> <asp:DropDownList ID="productList" - runat="server" DataSourceID="ProductDataList" DataTextField="name" DataValueField="productID" OnDataBound="productListEdit_DataBound" OnSelectedIndexChanged="productList_SelectedIndexChanged" AutoPostBack="True"> - </asp:DropDownList><br /> - <asp:ListBox ID="roleList" runat="server" DataSourceID="RolesDataSource" DataTextField="roleName" DataValueField="roleID" OnDataBound="roleList_DataBound" OnSelectedIndexChanged="roleList_SelectedIndexChanged" AutoPostBack="True" SelectionMode="Multiple"></asp:ListBox> + <asp:TreeView ID="roleTree" runat="server" OnInit="roleTree_Init1" OnTreeNodePopulate="roleTree_TreeNodePopulate" ShowCheckBoxes="All" OnSelectedNodeChanged="roleTree_SelectedNodeChanged"> + <Nodes> + <asp:TreeNode SelectAction="SelectExpand" ShowCheckBox="True" Text="<strong>Roles</strong>" Value="Roles" PopulateOnDemand="True"></asp:TreeNode> + </Nodes> + </asp:TreeView> </div> </div> <div class="end"> @@ -259,11 +246,13 @@ </tr> <tr> <td align="left" valign="top"> - <label>Roles:</label><br /> - <label>Product:</label> <asp:DropDownList ID="productList" - runat="server" DataSourceID="ProductDataList" DataTextField="name" DataValueField="productID" OnDataBound="productListInsert_DataBound" AutoPostBack="True" OnSelectedIndexChanged="productList_SelectedIndexChanged"> - </asp:DropDownList><br /> - <asp:ListBox ID="roleList" runat="server" DataSourceID="RolesDateSource" DataTextField="roleName" DataValueField="roleID" AutoPostBack="True" OnDataBound="roleList_DataBound" OnSelectedIndexChanged="roleList_SelectedIndexChanged" SelectionMode="Multiple"></asp:ListBox> + <div class="item"> + <asp:TreeView ID="roleTree" runat="server" OnInit="roleTree_Init1" OnTreeNodePopulate="roleTree_TreeNodePopulate" ShowCheckBoxes="All" OnSelectedNodeChanged="roleTree_SelectedNodeChanged"> + <Nodes> + <asp:TreeNode SelectAction="SelectExpand" ShowCheckBox="True" Text="<strong>Roles</strong>" Value="Roles" PopulateOnDemand="True"></asp:TreeNode> + </Nodes> + </asp:TreeView> + </div> </td> <td> <asp:LinkButton ID="editConfig" runat="server" CommandName="editConfig" OnCommand="editConfig">Edit User Configuration Settings...</asp:LinkButton></td> Modified: Website/Includes/UserSettings.ascx.cs =================================================================== --- Website/Includes/UserSettings.ascx.cs 2006-07-28 16:44:32 UTC (rev 231) +++ Website/Includes/UserSettings.ascx.cs 2006-07-28 17:14:52 UTC (rev 232) @@ -159,96 +159,179 @@ } } } - protected void roleList_DataBound(object sender, EventArgs e) + protected void roleTree_Init(object sender, EventArgs e) { + Literal roleTree = (Literal)sender; + roleTree.ID = "roleTree"; + roleTree.Text = "<ul>\n"; + + // Initialize Product Roles + if (Session["ProductRoles"] == null) + Session.Add("ProductRoles", new Dictionary<String, ArrayList>()); Dictionary<String, ArrayList> ProductRoles = (Dictionary<String, ArrayList>)Session["ProductRoles"]; + ProductRoles.Clear(); - if (ProductRoles != null) + // Get products + tcdbDataSetTableAdapters.db_productsTableAdapter pAdapter = new tcdbDataSetTableAdapters.db_productsTableAdapter(); + tcdbDataSet.db_productsDataTable pTable = pAdapter.GetData(null, null); + + foreach (tcdbDataSet.db_productsRow pRow in pTable) { - ListBox roleList = (ListBox)sender; - DropDownList productList = (DropDownList)FormView1.FindControl("productList"); - String productID = productList.SelectedValue; - roleList.ClearSelection(); + // Get Roles + tcdbDataSetTableAdapters.db_roleUserProductTableAdapter rupAdapter = new tcdbDataSetTableAdapters.db_roleUserProductTableAdapter(); + tcdbDataSet.db_roleUserProductDataTable rupTable = rupAdapter.GetData(userID, pRow.productID, true); + ArrayList roles = new ArrayList(); - if (ProductRoles.ContainsKey(productID)) - { - foreach (String roleID in ProductRoles[productID]) - roleList.Items.FindByValue(roleID).Selected = true; - } + foreach (tcdbDataSet.db_roleUserProductRow rupRow in rupTable) + roles.Add(rupRow.roleName); + + if (roles.Count > 0) + ProductRoles[pRow.name] = roles; } + + // Setup list + foreach (String product in ProductRoles.Keys) + { + roleTree.Text += "\t<li><strong>" + product + "</strong>\n"; + roleTree.Text += "\t\t<ul>\n"; + + foreach (String role in ProductRoles[product]) + roleTree.Text += "\t\t\t<li>" + role + "</li>\n"; + + roleTree.Text += "\t\t</ul>\n"; + roleTree.Text += "\t</li>\n"; + } + + roleTree.Text += "</ul>\n"; } - protected void productListEdit_DataBound(object sender, EventArgs e) + protected void BuildProductList(TreeNode parent) { - DropDownList productList = (DropDownList)sender; - ListBox roleList = (ListBox)FormView1.FindControl("roleList"); + tcdbDataSetTableAdapters.db_productsTableAdapter pAdapter = new tcdbDataSetTableAdapters.db_productsTableAdapter(); + tcdbDataSet.db_productsDataTable pTable = pAdapter.GetData(true, null); - // Init ProductRoles - if (Session["ProductRoles"] == null) - Session.Add("ProductRoles", new Dictionary<String, ArrayList>()); + foreach (tcdbDataSet.db_productsRow row in pTable) + { + TreeNode child = new TreeNode(); + child.Text = "<strong>" + row.name + "</strong>"; + child.Value = row.productID.ToString(); + child.SelectAction = TreeNodeSelectAction.SelectExpand; + child.PopulateOnDemand = true; + child.ShowCheckBox = true; + + parent.ChildNodes.Add(child); + } + } + protected void BuildRoleList(TreeNode parent) + { + tcdbDataSetTableAdapters.db_roleTableAdapter rAdapter = new tcdbDataSetTableAdapters.db_roleTableAdapter(); + tcdbDataSet.db_roleDataTable rTable = rAdapter.GetData(null,null,true); Dictionary<String, ArrayList> ProductRoles = (Dictionary<String, ArrayList>)Session["ProductRoles"]; + int numChecked = 0; - ProductRoles.Clear(); - foreach (ListItem productItem in productList.Items) + foreach (tcdbDataSet.db_roleRow row in rTable) { - ArrayList roles = new ArrayList(); - String productID = productItem.Value; + TreeNode child = new TreeNode(); + child.Text = row.roleName; + child.Value = row.roleID.ToString(); + child.SelectAction = TreeNodeSelectAction.Expand; + child.ShowCheckBox = true; + if (ProductRoles.ContainsKey(parent.Value)) + { + if (ProductRoles[parent.Value].Contains(row.roleID.ToString())) + { + child.Checked = true; + numChecked++; + } + } - tcdbDataSetTableAdapters.db_roleUserProductTableAdapter rupAdapter = new tcdbDataSetTableAdapters.db_roleUserProductTableAdapter(); - tcdbDataSet.db_roleUserProductDataTable rupTable = rupAdapter.GetData(userID, Convert.ToInt32(productID), true); - - foreach (tcdbDataSet.db_roleUserProductRow row in rupTable) - roles.Add(row.roleID.ToString()); - - if (ProductRoles.ContainsKey(productID)) - ProductRoles[productID] = roles; - else - ProductRoles.Add(productID, roles); + parent.ChildNodes.Add(child); + if (numChecked == rTable.Count) + parent.Checked = true; } - if (product != null) - productList.SelectedValue = product; - roleList.DataBind(); } - protected void productListInsert_DataBound(object sender, EventArgs e) + protected void roleTree_TreeNodePopulate(object sender, TreeNodeEventArgs e) { - DropDownList productList = (DropDownList)sender; + switch (e.Node.Depth) + { + case 0: + BuildProductList(e.Node); + break; + case 1: + BuildRoleList(e.Node); + break; + default: + break; + } + } + protected void roleTree_Init1(object sender, EventArgs e) + { + TreeView roleTree = (TreeView) sender; // Initialize Product Roles if (Session["ProductRoles"] == null) Session.Add("ProductRoles", new Dictionary<String, ArrayList>()); Dictionary<String, ArrayList> ProductRoles = (Dictionary<String, ArrayList>)Session["ProductRoles"]; + ProductRoles.Clear(); - ProductRoles.Clear(); - foreach (ListItem productItem in productList.Items) + // Get products + tcdbDataSetTableAdapters.db_productsTableAdapter pAdapter = new tcdbDataSetTableAdapters.db_productsTableAdapter(); + tcdbDataSet.db_productsDataTable pTable = pAdapter.GetData(null, null); + + foreach (tcdbDataSet.db_productsRow pRow in pTable) { + // Get Roles + tcdbDataSetTableAdapters.db_roleUserProductTableAdapter rupAdapter = new tcdbDataSetTableAdapters.db_roleUserProductTableAdapter(); + tcdbDataSet.db_roleUserProductDataTable rupTable = rupAdapter.GetData(userID, pRow.productID, true); ArrayList roles = new ArrayList(); - String productID = productItem.Value; - if (ProductRoles.ContainsKey(productID)) - ProductRoles[productID] = roles; - else - ProductRoles.Add(productID, roles); + foreach (tcdbDataSet.db_roleUserProductRow rupRow in rupTable) + roles.Add(rupRow.roleID.ToString()); + + if (roles.Count > 0) + ProductRoles[pRow.productID.ToString()] = roles; } - - // Init productList - if (product != null) - productList.SelectedValue = product; } - protected void roleList_SelectedIndexChanged(object sender, EventArgs e) + protected void roleTree_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { - ListBox roleList = (ListBox)sender; - DropDownList productList = (DropDownList)FormView1.FindControl("productList"); + TreeNode node = (TreeNode)e.Node; Dictionary<String, ArrayList> ProductRoles = (Dictionary<String, ArrayList>)Session["ProductRoles"]; - int[] indices = roleList.GetSelectedIndices(); - ArrayList roles = new ArrayList(); - String productID = productList.SelectedValue; - foreach (int index in indices) - roles.Add(roleList.Items[index].Value); - ProductRoles[productID] = roles; + // update ProductUsers + if (node.Parent != null && node.Parent.Value != "Roles"){ + String product = node.Parent.Value; + if (ProductRoles.ContainsKey(product)) + { + if (ProductRoles[product].Contains(node.Value) && node.Checked == false) + ProductRoles[node.Parent.Value].Remove(node.Value); + else if (!ProductRoles[product].Contains(node.Value) && node.Checked == true) + ProductRoles[product].Add(node.Value); + } + else if (node.Checked == true) + { + ArrayList roles = new ArrayList(); + roles.Add(node.Value); + + ProductRoles.Add(product, roles); + } + } + + foreach (TreeNode child in e.Node.ChildNodes) + { + child.Checked = (node.Checked == true) ? true : false; + roleTree_TreeNodeCheckChanged(child, new TreeNodeEventArgs(child)); + } } - protected void productList_SelectedIndexChanged(object sender, EventArgs e) + protected void roleTree_SelectedNodeChanged(object sender, EventArgs e) { - ListBox roleList = (ListBox)FormView1.FindControl("roleList"); - roleList.DataBind(); + TreeView tree = (TreeView)sender; + TreeNode node = tree.SelectedNode; + + node.Checked = (node.Checked == true) ? false : true; + foreach (TreeNode child in node.ChildNodes) + { + child.Selected = true; + child.Checked = (node.Checked == true) ? true : false; + roleTree_TreeNodeCheckChanged(child, new TreeNodeEventArgs(child)); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |