📄 managesectionpermissionsadmin.cs
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
// Copyright (c) Telligent Systems Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
using CommunityServer.Components;
namespace CommunityServer.Controls
{
//TODO: Move DM querystring logic to SiteUrls
/// <summary>
/// Base class for managing a sections permissions
/// </summary>
public abstract class ManageSectionPermissionsAdmin : TemplatedWebControl
{
#region Child Controls
Repeater GroupRepeater;
CheckBox displayMode;
protected DisplayMode PermissionRepeaterDisplayMode
{
get
{
if(displayMode != null && displayMode.Checked)
return DisplayMode.All;
return DisplayMode.Explicit;
}
}
#endregion
#region Events
/// <summary>
/// Ensures databind is called
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
if ( !Page.IsPostBack )
{
this.DataBind();
}
base.OnLoad (e);
}
/// <summary>
/// Creates reference to the Group Repeater
/// </summary>
protected override void AttachChildControls()
{
GroupRepeater = (Repeater)FindControl( "GroupRepeater" );
GroupRepeater.ItemCreated += new RepeaterItemEventHandler(SectionGroupRepeater_ItemCreated);
displayMode = FindControl("DisplayMode") as CheckBox;
if(displayMode != null)
{
displayMode.AutoPostBack = true;
displayMode.CheckedChanged +=new EventHandler(displayMode_CheckedChanged);
if(Context.Request.QueryString["DM"] != null)
{
displayMode.Checked = bool.Parse(Context.Request.QueryString["DM"]);
}
displayMode.Text = ResourceManager.GetString("Admin_CommonTerms_ShowDefaultPermissions");
}
}
/// <summary>
/// Binds the Groups to the Repeater
/// </summary>
public override void DataBind()
{
base.DataBind();
GroupRepeater.DataSource = GetGroups();
GroupRepeater.DataBind();
}
#endregion
#region Abstracts
/// <summary>
/// Add a new role to a Section
/// </summary>
protected abstract void AddRole( Int32 sectionID, Guid roleID );
protected abstract string GetPermissionLink(int sectionID, Guid roleID);
/// <summary>
/// Remove a role from a Section
/// </summary>
protected abstract void RemoveRole( Int32 sectionID, Guid roleID );
protected abstract ArrayList GetGroups();
protected abstract ControlUserMode GetMode
{
get;
}
protected abstract void SetPermissions(RepeaterItem item);
#endregion
#region GroupRepeater Controls DataBinding
private void SectionGroupRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
SectionRepeater setctionRepeater = e.Item.FindControl( "SectionList" ) as SectionRepeater;
setctionRepeater.Mode = GetMode;
setctionRepeater.DataBinding += new EventHandler(sectionRepeater_DataBinding);
setctionRepeater.ItemCreated += new RepeaterItemEventHandler(sectionRepeater_ItemCreated);
setctionRepeater.ItemCommand += new RepeaterCommandEventHandler(sectionRepeater_ItemCommand);
Label groupName = (Label)e.Item.FindControl( "GroupName" );
groupName.DataBinding += new EventHandler(GroupName_DataBinding);
}
private void sectionRepeater_DataBinding(object sender, EventArgs e)
{
SectionRepeater sectionRepeater = sender as SectionRepeater;
RepeaterItem container = sectionRepeater.NamingContainer as RepeaterItem;
sectionRepeater.GroupID = Convert.ToInt32( DataBinder.Eval( container.DataItem, "GroupID" ) );
}
private void GroupName_DataBinding( Object sender, EventArgs e )
{
Label groupName = (Label)sender;
RepeaterItem container = groupName.NamingContainer as RepeaterItem;
Group g = container.DataItem as Group;
groupName.Text = g.Name;
}
#endregion
#region SectionRepeater Controls DataBinding
private void sectionRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
Control sectionName = e.Item.FindControl( "SectionName" );
sectionName.DataBinding += new EventHandler(SectionName_DataBinding);
Control AddRole = e.Item.FindControl( "AddRole" );
AddRole.DataBinding += new EventHandler(AddRole_DataBinding);
PermissionRepater PermRepeater = (PermissionRepater)e.Item.FindControl( "PermissionRepeater" );
PermRepeater.DisplayMode = this.PermissionRepeaterDisplayMode;
PermRepeater.DataBinding += new EventHandler(PermRepeater_DataBinding);
PermRepeater.ItemCommand += new RepeaterCommandEventHandler(PermRepeater_ItemCommand);
}
private void SectionName_DataBinding(object sender, EventArgs e)
{
Label sectionName = (Label)sender;
RepeaterItem container = sectionName.NamingContainer as RepeaterItem;
Section section = container.DataItem as Section;
sectionName.Text = section.Name;
}
private void AddRole_DataBinding(object sender, EventArgs e)
{
Button AddRole = (Button)sender;
RepeaterItem container = AddRole.NamingContainer as RepeaterItem;
Section section = container.DataItem as Section;
AddRole.Text = ResourceManager.GetString( "Add" );
AddRole.CommandName = "Add";
AddRole.CommandArgument = section.SectionID.ToString();
}
private void PermRepeater_DataBinding(object sender, EventArgs e)
{
PermissionRepater PermRepeater = sender as PermissionRepater;
RepeaterItem container = PermRepeater.NamingContainer as RepeaterItem;
Section section = container.DataItem as Section;
PermRepeater.SectionID = section.SectionID;
PermRepeater.ItemCreated += new RepeaterItemEventHandler(PermRepeater_ItemCreated);
}
#endregion
#region Perm Repeater Controls DataBinding
/// <summary>
/// Sets the X/- indicating which permissions have been set
/// </summary>
/// <param name="tf"></param>
/// <param name="c"></param>
protected void SetText(bool tf, Control c)
{
if(c == null)
return;
CheckmarkControl cmc = c as CheckmarkControl;
cmc.Checked = tf;
}
private void PermRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
{
HyperLink EditPermissionLink = (HyperLink)e.Item.FindControl( "EditPermissionLink" );
EditPermissionLink.DataBinding += new EventHandler(EditPermissionLink_DataBinding);
Button RemoveRole = (Button)e.Item.FindControl( "RemoveRole" );
RemoveRole.DataBinding += new EventHandler(RemoveRole_DataBinding);
if( e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem )
{
SetPermissions(e.Item);
}
}
private void EditPermissionLink_DataBinding(object sender, EventArgs e)
{
HyperLink EditPermissionLink = (HyperLink)sender;
RepeaterItem container = EditPermissionLink.NamingContainer as RepeaterItem;
EditPermissionLink.Text = Convert.ToString( DataBinder.Eval( container.DataItem, "Name") );
PermissionRepater pr = container.Parent as PermissionRepater;
PermissionBase pb = container.DataItem as PermissionBase;
EditPermissionLink.NavigateUrl = GetPermissionLink( pr.SectionID,pb.RoleID ) + (displayMode == null ? string.Empty : string.Format("&DM={0}",displayMode.Checked));
}
private void RemoveRole_DataBinding(object sender, EventArgs e)
{
Button RemoveRole = (Button)sender;
RepeaterItem container = RemoveRole.NamingContainer as RepeaterItem;
RemoveRole.CommandName = "Remove";
PermissionRepater pr = container.Parent as PermissionRepater;
PermissionBase pb = container.DataItem as PermissionBase;
RemoveRole.CommandArgument = pr.SectionID.ToString() + "," + pb.RoleID.ToString();
RemoveRole.Text = ResourceManager.GetString("Delete");
}
#endregion
#region Command Handlers
private void sectionRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
ButtomCommand( source, e );
}
private void PermRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
ButtomCommand( source, e );
}
private void ButtomCommand( Object source, RepeaterCommandEventArgs e )
{
Button sender = e.CommandSource as Button;
if ( sender != null )
{
switch( e.CommandName )
{
case "Add":
RoleDropDownList roleSelector = (RoleDropDownList)sender.NamingContainer.FindControl("Roles");
Int32 sectionIdToAdd = Convert.ToInt32( sender.CommandArgument );
Guid roleIDToAdd = new Guid( roleSelector.SelectedValue );
AddRole( sectionIdToAdd, roleIDToAdd );
Context.Response.Redirect(GetPermissionLink(sectionIdToAdd,roleIDToAdd), true);
break;
case "Remove":
String[] args = sender.CommandArgument.Split(',');
if ( args.Length == 2 )
{
Int32 sectionIdToRemove = Convert.ToInt32( args[ 0 ] );
Guid roleIdToRemove = new Guid( args[ 1 ] );
RemoveRole( sectionIdToRemove, roleIdToRemove );
DataBind();
}
break;
}
}
}
#endregion
private void displayMode_CheckedChanged(object sender, EventArgs e)
{
this.DataBind();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -