using System;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.MessageBoard;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
public partial class CMSModules_MessageBoards_Controls_Boards_BoardSecurity : CMSAdminEditControl
{
#region "Variables"
private int mBoardId = 0;
private BoardInfo mBoard = null;
private int mGroupId = 0;
#endregion
#region "Public properties"
///
/// Messages placeholder
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
///
/// Indicates if control is used on live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
plcMess.IsLiveSite = value;
base.IsLiveSite = value;
}
}
///
/// ID of the current message board.
///
public int BoardID
{
get
{
if (mBoard != null)
{
return mBoard.BoardID;
}
return mBoardId;
}
set
{
mBoardId = value;
mBoard = null;
}
}
///
/// Current message board info object.
///
public BoardInfo Board
{
get
{
return mBoard ?? (mBoard = BoardInfoProvider.GetBoardInfo(BoardID));
}
set
{
mBoard = value;
mBoardId = 0;
}
}
///
/// ID of the current group.
///
public int GroupID
{
get
{
return mGroupId;
}
set
{
mGroupId = value;
}
}
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
// Register script for pendingCallbacks repair
ScriptHelper.FixPendingCallbacks(Page);
// Initializes the controls
SetupControls();
if (!RequestHelper.IsPostBack() && !IsLiveSite)
{
ReloadData();
}
else
{
addRoles.CurrentValues = GetRoles();
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// Check permissions and disable controls
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.messageboards", PERMISSION_MODIFY))
{
btnRemoveRole.Enabled = false;
addRoles.CurrentSelector.Enabled = false;
lstRoles.Enabled = false;
}
}
protected void radOnlyOwner_CheckedChanged(object sender, EventArgs e)
{
if (radOnlyOwner.Checked)
{
// Disable controls
addRoles.CurrentSelector.Enabled = false;
btnRemoveRole.Enabled = false;
lstRoles.Enabled = false;
}
}
protected void radGroupMembers_CheckedChanged(object sender, EventArgs e)
{
if (radGroupMembers.Checked)
{
// Disable controls
addRoles.CurrentSelector.Enabled = false;
btnRemoveRole.Enabled = false;
lstRoles.Enabled = false;
}
}
protected void radOnlyGroupAdmin_CheckedChanged(object sender, EventArgs e)
{
if (radOnlyGroupAdmin.Checked)
{
// Disable controls
addRoles.CurrentSelector.Enabled = false;
btnRemoveRole.Enabled = false;
lstRoles.Enabled = false;
}
}
protected void radAllUsers_CheckedChanged(object sender, EventArgs e)
{
if (radAllUsers.Checked)
{
// Disable controls
addRoles.CurrentSelector.Enabled = false;
btnRemoveRole.Enabled = false;
lstRoles.Enabled = false;
}
}
protected void radOnlyUsers_CheckedChanged(object sender, EventArgs e)
{
if (radOnlyUsers.Checked)
{
// Disable controls
btnRemoveRole.Enabled = false;
addRoles.CurrentSelector.Enabled = false;
lstRoles.Enabled = false;
}
}
protected void radOnlyRoles_CheckedChanged(object sender, EventArgs e)
{
if (radOnlyRoles.Checked)
{
// Enable controls
addRoles.CurrentSelector.Enabled = true;
btnRemoveRole.Enabled = true;
lstRoles.Enabled = true;
}
}
protected void btnRemoveRole_Click(object sender, EventArgs e)
{
if (!CheckPermissions("cms.messageboards", PERMISSION_MODIFY))
{
return;
}
foreach (ListItem item in lstRoles.Items)
{
// Delete selected item
if (item.Selected)
{
int roleId = Convert.ToInt32(item.Value);
BoardRoleInfoProvider.RemoveRoleFromBoard(roleId, BoardID);
}
}
ReloadRoles();
}
protected void addRoles_Changed(object sender, EventArgs e)
{
ReloadRoles();
pnlUpdate.Update();
}
protected void btnOk_Click(object sender, EventArgs e)
{
// Check permissions
if (!CheckPermissions("cms.messageboards", PERMISSION_MODIFY))
{
return;
}
// Check if board exists
if (Board != null)
{
if (radOnlyUsers.Checked)
{
Board.BoardAccess = SecurityAccessEnum.AuthenticatedUsers;
}
if (radAllUsers.Checked)
{
Board.BoardAccess = SecurityAccessEnum.AllUsers;
}
if (radOnlyRoles.Checked)
{
Board.BoardAccess = SecurityAccessEnum.AuthorizedRoles;
}
if (radOnlyGroupAdmin.Visible && radOnlyGroupAdmin.Checked)
{
Board.BoardAccess = SecurityAccessEnum.GroupAdmin;
}
if (radGroupMembers.Visible && radGroupMembers.Checked)
{
Board.BoardAccess = SecurityAccessEnum.GroupMembers;
}
if (radOnlyOwner.Visible && radOnlyOwner.Checked)
{
Board.BoardAccess = SecurityAccessEnum.Owner;
}
Board.BoardUseCaptcha = chkUseCaptcha.Checked;
// Save changes
BoardInfoProvider.SetBoardInfo(Board);
ShowChangesSaved();
}
}
#endregion
#region "General methods"
///
/// Initializes the controls.
///
private void SetupControls()
{
radAllUsers.Text = GetString("security.allusers");
radOnlyRoles.Text = GetString("board.security.onlyroles");
radOnlyUsers.Text = GetString("board.security.onlyusers");
radGroupMembers.Text = GetString("board.security.onlygroupmembers");
radOnlyGroupAdmin.Text = GetString("board.security.groupadmin");
radOnlyOwner.Text = GetString("board.security.owner");
btnRemoveRole.Text = GetString("general.remove");
lblTitleComments.Text = GetString("board.security.commentstitle");
lblTitleGeneral.Text = GetString("general.general");
addRoles.BoardID = BoardID;
addRoles.CurrentSelector.IsLiveSite = IsLiveSite;
addRoles.Changed += addRoles_Changed;
addRoles.GroupID = GroupID;
addRoles.IsLiveSite = IsLiveSite;
addRoles.ShowSiteFilter = false;
}
///
/// Reloads the listbox with roles.
///
private void ReloadRoles()
{
// Load the roles into the ListBox
DataSet roles = BoardRoleInfoProvider.GetBoardRoles(BoardID, "RoleID,RoleDisplayName,SiteID");
lstRoles.Items.Clear();
foreach (DataRow dr in roles.Tables[0].Rows)
{
string name = Convert.ToString(dr["RoleDisplayName"]);
if (ValidationHelper.GetInteger(dr["SiteID"], 0) == 0)
{
name += " " + GetString("general.global");
}
lstRoles.Items.Add(new ListItem(name, Convert.ToString(dr["RoleID"])));
}
addRoles.CurrentSelector.Value = TextHelper.Join(";", SystemDataHelper.GetStringValues(roles.Tables[0], "RoleID"));
}
///
/// Returns board roles separated by semicolon.
///
private string GetRoles()
{
// Load the roles into the ListBox
DataSet roles = BoardRoleInfoProvider.GetBoardRoles(BoardID, "RoleID,RoleDisplayName");
return TextHelper.Join(";", SystemDataHelper.GetStringValues(roles.Tables[0], "RoleID"));
}
///
/// Reloads data.
///
public override void ReloadData()
{
base.ReloadData();
ReloadRoles();
EditedObject = Board;
if (Board != null)
{
plcOnlyGroupAdmin.Visible = (GroupID > 0);
plcGroupMembers.Visible = (GroupID > 0);
plcOnlyOwner.Visible = (Board.BoardUserID > 0);
switch (Board.BoardAccess)
{
// All users
case SecurityAccessEnum.AllUsers:
radAllUsers.Checked = true;
break;
// Authenticated users
case SecurityAccessEnum.AuthenticatedUsers:
radOnlyUsers.Checked = true;
break;
//Selected roles
case SecurityAccessEnum.AuthorizedRoles:
radOnlyRoles.Checked = true;
radOnlyRoles_CheckedChanged(null, null);
break;
// Group members
case SecurityAccessEnum.GroupMembers:
radGroupMembers.Checked = true;
radGroupMembers_CheckedChanged(null, null);
break;
case SecurityAccessEnum.GroupAdmin:
radOnlyGroupAdmin.Checked = true;
radOnlyGroupAdmin_CheckedChanged(null, null);
break;
case SecurityAccessEnum.Owner:
radOnlyOwner.Checked = true;
radOnlyOwner_CheckedChanged(null, null);
break;
default:
radAllUsers.Checked = true;
break;
}
lstRoles.Enabled = radOnlyRoles.Checked;
btnRemoveRole.Enabled = radOnlyRoles.Checked;
addRoles.CurrentSelector.Enabled = radOnlyRoles.Checked;
chkUseCaptcha.Checked = Board.BoardUseCaptcha;
addRoles.ReloadData();
addRoles.DataBind();
}
}
#endregion
}