using System;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.MessageBoard;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
using TreeElemNode = System.Web.UI.WebControls.TreeNode;
public partial class CMSModules_MessageBoards_Content_Properties_Tree : CMSContentMessageBoardsPage
{
#region "Private variables"
private string navUrl = null;
private string groupNavUrl = null;
private int docId = 0;
private bool selectedSet = false;
private string selectedNodeName = String.Empty;
#endregion
protected void Page_Load(object sender, EventArgs e)
{
// Initialize page
navUrl = ResolveUrl("~/CMSModules/MessageBoards/Tools/Boards/Board_Edit.aspx") + "?changemaster=0";
groupNavUrl = ResolveUrl("~/CMSModules/Groups/Tools/MessageBoards/Boards/Board_Edit.aspx") + "?changemaster=0";
PageStatusContainer.Controls.Add(new LiteralControl("
"));
// Delete action
string[,] actions = new string[1,11];
actions[0, 0] = HeaderActions.TYPE_HYPERLINK;
actions[0, 1] = GetString("general.delete");
actions[0, 2] = "return confirm(" + ScriptHelper.GetString(GetString("general.confirmdelete")) + ");";
actions[0, 5] = GetImageUrl("Design/Controls/UniGrid/Actions/delete.png");
actions[0, 6] = "delete";
actions[0, 8] = "true";
actionsElem.ActionPerformed += HeaderActions_ActionPerformed;
actionsElem.Actions = actions;
// Ensure RTL
treeElem.LineImagesFolder = GetImageUrl(CultureHelper.IsUICultureRTL() ? "RTL/Design/Controls/Tree" : "Design/Controls/Tree", false, true);
selectedNodeName = QueryHelper.GetString("selectednodename", string.Empty);
RegisterScripts();
PopulateTree();
}
///
/// Actions handler.
///
protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e)
{
switch (e.CommandName.ToLowerCSafe())
{
case "delete":
// Check 'Modify' permission
if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.MessageBoards", "Modify"))
{
RedirectToAccessDenied("CMS.MessageBoards", "Modify");
}
BoardInfoProvider.DeleteBoardInfo(ValidationHelper.GetInteger(hdnBoardId.Value, 0));
ltlScript.Text += ScriptHelper.GetScript("parent.frames['main'].location.href = '" + ResolveUrl("~/CMSPages/blank.htm") + "'");
ltlScript.Text += ScriptHelper.GetScript("window.location.replace(window.location);");
break;
}
}
#region "Private methods"
///
/// Populates the tree with the data.
///
private void PopulateTree()
{
// Create root node
TreeElemNode rootNode = new TreeElemNode();
rootNode.Text = "" + GetString("board.header.messageboards") + "";
rootNode.Expanded = true;
treeElem.Nodes.Add(rootNode);
// Populate the tree
docId = QueryHelper.GetInteger("documentid", 0);
if (docId > 0)
{
DataSet ds = BoardInfoProvider.GetMessageBoards("BoardDocumentID = " + docId, null);
if (!DataHelper.DataSourceIsEmpty(ds))
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
AddNode(Convert.ToString(dr["BoardDisplayName"]), ValidationHelper.GetInteger(dr["BoardId"], -1), ValidationHelper.GetInteger(dr["BoardGroupID"], 0) > 0);
}
}
}
}
///
/// Registers all necessary scripts.
///
private void RegisterScripts()
{
ltlScript.Text += ScriptHelper.GetScript(
"var hiddenField = document.getElementById('" + hdnBoardId.ClientID + "');" +
"var currentNode = document.getElementById('treeSelectedNode');" +
"var currentNodeName = \"\";" +
"" +
"treeUrl = '" + ResolveUrl("~/CMSModules/Content/CMSDesk/Properties/Advanced/MessageBoards/tree.aspx") + "';" +
"function SelectNode(nodeName, nodeElem, boardId, navUrl)" +
"{" +
" if ((currentNode != null) && (nodeElem != null))" +
" {" +
" currentNode.className = 'ContentTreeItem';" +
" }" +
" " +
" parent.frames['main'].location.href = navUrl + '&boardid=' + boardId;" +
" currentNodeName = nodeName;" +
" " +
" if (nodeElem != null)" +
" {" +
" currentNode = nodeElem;" +
" if (currentNode != null)" +
" {" +
" currentNode.className = 'ContentTreeSelectedItem';" +
" }" +
" }" +
" if (hiddenField != null) {" +
" hiddenField.value = boardId;" +
" }" +
"}");
}
///
/// Adds node to the root node.
///
/// Name of node
/// Message board identifier
private void AddNode(string nodeName, int boardId, bool group)
{
TreeElemNode newNode = new TreeElemNode();
string cssClass = "ContentTreeItem";
string elemId = string.Empty;
string url = group ? groupNavUrl : navUrl;
// Select proper node
if ((!selectedSet) && String.IsNullOrEmpty(selectedNodeName))
{
if (!RequestHelper.IsPostBack())
{
hdnBoardId.Value = boardId.ToString();
}
ltlScript.Text += ScriptHelper.GetScript("parent.frames['main'].location.href = '" + url + "&boardid=" + boardId + "'");
selectedSet = true;
cssClass = "ContentTreeSelectedItem";
elemId = "id=\"treeSelectedNode\"";
}
if (selectedNodeName == nodeName)
{
cssClass = "ContentTreeSelectedItem";
elemId = "id=\"treeSelectedNode\"";
}
newNode.Text = "" + HTMLHelper.HTMLEncode(nodeName) + "";
newNode.ImageUrl = GetImageUrl("Objects/Board_Board/list.png");
newNode.NavigateUrl = "#";
treeElem.Nodes[0].ChildNodes.Add(newNode);
return;
}
#endregion
}