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.GlobalHelper;
using CMS.MessageBoard;
using CMS.SettingsProvider;
using CMS.UIControls;
public partial class CMSModules_MessageBoards_Controls_LiveControls_Boards : CMSAdminItemsControl
{
#region "Selected tab enumeration"
private enum SelectedControlEnum
{
Listing,
Messages,
General,
Subscriptions,
Moderators,
Security
};
#endregion
#region "Private fields"
private BoardInfo board = null;
private int mGroupID = 0;
private bool mHideWhenGroupIsNotSupplied = false;
private const string breadCrumbsSeparator = " ";
#endregion
#region "Private properties"
///
/// Returns currently selected tab.
///
private SelectedControlEnum SelectedControl
{
get
{
int selectedTab = ValidationHelper.GetInteger(ViewState["SelectedControl"], 0);
switch (selectedTab)
{
case 1:
return SelectedControlEnum.General;
case 2:
return SelectedControlEnum.Moderators;
case 3:
return SelectedControlEnum.Security;
case 4:
return SelectedControlEnum.Subscriptions;
default:
return SelectedControlEnum.Messages;
}
}
set
{
// Convert enum to int
switch (value)
{
case SelectedControlEnum.General:
tabElem.SelectedTab = 1;
break;
case SelectedControlEnum.Moderators:
tabElem.SelectedTab = 2;
break;
case SelectedControlEnum.Security:
tabElem.SelectedTab = 3;
break;
case SelectedControlEnum.Subscriptions:
tabElem.SelectedTab = 4;
break;
case SelectedControlEnum.Messages:
tabElem.SelectedTab = 0;
break;
}
}
}
///
/// Current board ID for internal use.
///
private int BoardID
{
get
{
return ValidationHelper.GetInteger(ViewState["BoardID"], 0);
}
}
#endregion
#region "Public properties"
///
/// Current group ID.
///
public int GroupID
{
get
{
if (mGroupID == 0)
{
mGroupID = ValidationHelper.GetInteger(GetValue("GroupID"), 0);
}
if (mGroupID == 0)
{
mGroupID = QueryHelper.GetInteger("groupid", 0);
}
return mGroupID;
}
set
{
mGroupID = value;
}
}
///
/// Determines whether to hide the content of the control when GroupID is not supplied.
///
public bool HideWhenGroupIsNotSupplied
{
get
{
return mHideWhenGroupIsNotSupplied;
}
set
{
mHideWhenGroupIsNotSupplied = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
// Check if the group was supplied and hide control if necessary
if ((GroupID == 0) && (HideWhenGroupIsNotSupplied))
{
Visible = false;
}
if (StopProcessing || !Visible)
{
EnableViewState = false;
boardMessages.StopProcessing = true;
boardList.StopProcessing = true;
boardEdit.StopProcessing = true;
boardModerators.StopProcessing = true;
boardSecurity.StopProcessing = true;
boardSubscriptions.StopProcessing = true;
return;
}
// Initializes the controls
SetupControls();
// Display current control
if (ViewState["SelectedControl"] != null)
{
DisplayControl(SelectedControl, false);
}
// Reload data if necessary
if (!URLHelper.IsPostback() && !IsLiveSite)
{
ReloadData();
}
}
///
/// Initializes all the nested controls.
///
private void SetupControls()
{
tabElem.TabControlIdPrefix = "boards";
tabElem.OnTabClicked += new EventHandler(tabElem_OnTabChanged);
lnkEditBack.Text = GetString("Group_General.Boards.Boards.BackToList");
lnkEditBack.Click += new EventHandler(lnkEditBack_Click);
// Register for the security events
boardList.OnCheckPermissions += new CheckPermissionsEventHandler(boardList_OnCheckPermissions);
boardEdit.OnCheckPermissions += new CheckPermissionsEventHandler(boardEdit_OnCheckPermissions);
boardModerators.OnCheckPermissions += new CheckPermissionsEventHandler(boardModerators_OnCheckPermissions);
boardSecurity.OnCheckPermissions += new CheckPermissionsEventHandler(boardSecurity_OnCheckPermissions);
// Setup controls
boardList.IsLiveSite = IsLiveSite;
boardList.GroupID = GroupID;
boardList.OnAction += new CommandEventHandler(boardList_OnAction);
boardMessages.IsLiveSite = IsLiveSite;
boardMessages.OnCheckPermissions += new CheckPermissionsEventHandler(boardMessages_OnCheckPermissions);
boardMessages.BoardID = BoardID;
boardMessages.GroupID = GroupID;
boardMessages.EditPageUrl = (GroupID > 0) ? "~/CMSModules/Groups/CMSPages/Message_Edit.aspx" : "~/CMSModules/MessageBoards/CMSPages/Message_Edit.aspx";
boardEdit.IsLiveSite = IsLiveSite;
boardEdit.BoardID = BoardID;
boardEdit.DisplayMode = DisplayMode;
boardModerators.IsLiveSite = IsLiveSite;
boardModerators.BoardID = BoardID;
boardSecurity.IsLiveSite = IsLiveSite;
boardSecurity.BoardID = BoardID;
boardSecurity.GroupID = GroupID;
boardSubscriptions.IsLiveSite = IsLiveSite;
boardSubscriptions.BoardID = BoardID;
boardSubscriptions.GroupID = GroupID;
// Initialize tab control
string[,] tabs = new string[5,4];
tabs[0, 0] = GetString("Group_General.Boards.Boards.Messages");
tabs[1, 0] = GetString("Group_General.Boards.Boards.Edit");
tabs[2, 0] = GetString("Group_General.Boards.Boards.Moderators");
tabs[3, 0] = GetString("Group_General.Boards.Boards.Security");
tabs[4, 0] = GetString("Group_General.Boards.Boards.SubsList");
tabElem.Tabs = tabs;
// Initialize breadcrubms
if (BoardID > 0)
{
board = BoardInfoProvider.GetBoardInfo(BoardID);
if (board != null)
{
lblEditBack.Text = breadCrumbsSeparator + HTMLHelper.HTMLEncode(board.BoardDisplayName);
}
}
}
///
/// Displays specified control.
///
/// Control to be displayed
/// If True, ReloadData on child control is called
private void DisplayControl(SelectedControlEnum selectedControl, bool reload)
{
// First hide and stop all elements
plcList.Visible = false;
boardList.StopProcessing = true;
plcTabs.Visible = true;
plcTabsHeader.Visible = true;
tabEdit.Visible = false;
boardEdit.StopProcessing = true;
tabMessages.Visible = false;
boardMessages.StopProcessing = true;
tabModerators.Visible = false;
boardModerators.StopProcessing = true;
tabSecurity.Visible = false;
boardSecurity.StopProcessing = true;
tabSubscriptions.Visible = false;
boardSubscriptions.StopProcessing = true;
// Set correct tab
SelectedControl = selectedControl;
pnlContent.CssClass = "TabBody";
// Enable currently selected element
switch (selectedControl)
{
case SelectedControlEnum.Listing:
pnlContent.CssClass = "";
plcTabs.Visible = false;
plcTabsHeader.Visible = false;
plcList.Visible = true;
boardList.StopProcessing = false;
if (reload)
{
// Relaod data
boardList.ReloadData();
}
break;
case SelectedControlEnum.General:
tabEdit.Visible = true;
boardEdit.StopProcessing = false;
if (reload)
{
// Relaod data
boardEdit.ReloadData();
}
break;
case SelectedControlEnum.Messages:
tabMessages.Visible = true;
boardMessages.StopProcessing = false;
if (reload)
{
boardMessages.IsLiveSite = IsLiveSite;
boardMessages.BoardID = ValidationHelper.GetInteger(ViewState["BoardID"], 0);
boardMessages.ReloadData();
}
// Breadcrumbs
if (board == null)
{
board = BoardInfoProvider.GetBoardInfo(BoardID);
if (board != null)
{
lblEditBack.Text = breadCrumbsSeparator + HTMLHelper.HTMLEncode(board.BoardDisplayName);
}
}
break;
case SelectedControlEnum.Moderators:
tabModerators.Visible = true;
boardModerators.StopProcessing = false;
if (reload)
{
// Relaod data
boardModerators.ReloadData(true);
}
break;
case SelectedControlEnum.Security:
tabSecurity.Visible = true;
boardSecurity.StopProcessing = false;
if (reload)
{
// Relaod data
boardSecurity.ReloadData();
}
break;
case SelectedControlEnum.Subscriptions:
tabSubscriptions.Visible = true;
boardSubscriptions.StopProcessing = false;
if (reload)
{
boardSubscriptions.BoardID = BoardID;
// Relaod data
boardSubscriptions.ReloadData();
}
break;
}
}
///
/// Reloads the contol data.
///
public override void ReloadData()
{
base.ReloadData();
SetupControls();
DisplayControl(SelectedControlEnum.Listing, true);
}
///
/// Displays the default contol.
///
public void SetDefault()
{
DisplayControl(SelectedControlEnum.Listing, true);
}
///
/// Clears the boards filter up.
///
public void ClearFilter()
{
boardList.ClearFilter();
}
#region "Event handlers"
protected void tabElem_OnTabChanged(object sender, EventArgs e)
{
ViewState.Add("SelectedControl", tabElem.SelectedTab);
DisplayControl(SelectedControl, true);
}
protected void boardList_OnAction(object sender, CommandEventArgs e)
{
if ((e.CommandName.ToLowerCSafe() == "edit") && plcList.Visible)
{
ViewState["BoardID"] = e.CommandArgument;
DisplayControl(SelectedControlEnum.Messages, true);
}
}
protected void lnkEditBack_Click(object sender, EventArgs e)
{
ViewState.Add("SelectedControl", null);
DisplayControl(SelectedControlEnum.Listing, true);
}
#endregion
#region "Security event handlers"
protected void boardList_OnCheckPermissions(string permissionType, CMSAdminControl sender)
{
// Raise event
RaiseOnCheckPermissions(permissionType, sender);
}
protected void boardMessages_OnCheckPermissions(string permissionType, CMSAdminControl sender)
{
// Raise event
RaiseOnCheckPermissions(permissionType, sender);
}
protected void boardSecurity_OnCheckPermissions(string permissionType, CMSAdminControl sender)
{
// Raise event
RaiseOnCheckPermissions(permissionType, sender);
}
protected void boardModerators_OnCheckPermissions(string permissionType, CMSAdminControl sender)
{
// Raise event
RaiseOnCheckPermissions(permissionType, sender);
}
protected void boardEdit_OnCheckPermissions(string permissionType, CMSAdminControl sender)
{
// Raise event
RaiseOnCheckPermissions(permissionType, sender);
}
#endregion
}