using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.DocumentEngine;
using CMS.UIControls;
using CMS.WorkflowEngine;
using TreeElemNode = System.Web.UI.WebControls.TreeNode;
public partial class CMSModules_Content_CMSDesk_Properties_Advanced_EditableContent_Tree : CMSModalPage
{
#region "Private & protected variables"
private string selectedNodeType = null;
private string selectedNodeName = null;
#endregion
#region "Properties"
public override CMS.ExtendedControls.MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
#endregion
#region "Page events"
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
DocumentManager.LocalMessagesPlaceHolder = plcMess;
DocumentManager.OnSaveData += DocumentManager_OnSaveData;
CurrentUserInfo user = CMSContext.CurrentUser;
// Check 'read' permissions
if (!user.IsAuthorizedPerResource("CMS.Content", "Read"))
{
RedirectToAccessDenied("CMS.Content", "Read");
}
// Check UIProfile
if (!user.IsAuthorizedPerUIElement("CMS.Content", "Properties.General"))
{
RedirectToCMSDeskUIElementAccessDenied("CMS.Content", "Properties.General");
}
if (!user.IsAuthorizedPerUIElement("CMS.Content", "General.Advanced"))
{
RedirectToCMSDeskUIElementAccessDenied("CMS.Content", "General.Advanced");
}
}
protected void Page_Load(object sender, EventArgs e)
{
CurrentMaster.FrameResizer.Visible = false;
// Get query parameters
selectedNodeType = QueryHelper.GetString("selectednodetype", "webpart");
selectedNodeName = QueryHelper.GetString("selectednodename", string.Empty);
hdnCurrentNodeType.Value = selectedNodeType;
hdnCurrentNodeName.Value = selectedNodeName;
// Images
if (hdnCurrentNodeType.Value == "region")
{
imgNewItem.ImageUrl = GetImageUrl("CMSModules/CMS_Content/EditableContent/addeditableitemsmall.png");
imgNewItem.DisabledImageUrl = GetImageUrl("CMSModules/CMS_Content/EditableContent/addeditableitemsmalldisabled.png");
}
else
{
imgNewItem.ImageUrl = GetImageUrl("CMSModules/CMS_Content/EditableContent/editablewebpart.png");
imgNewItem.DisabledImageUrl = GetImageUrl("CMSModules/CMS_Content/EditableContent/editablewebpartdisabled.png");
}
imgDeleteItem.ImageUrl = GetImageUrl("Objects/CMS_WebPart/delete.png");
imgDeleteItem.DisabledImageUrl = GetImageUrl("Objects/CMS_WebPart/deletedisabled.png");
bool enabled = DocumentManager.AllowSave;
string selectNodeName = QueryHelper.GetString("selectednodename", null);
if (!string.IsNullOrEmpty(selectedNodeName))
{
pnlDeleteItem.Enabled = enabled;
if (enabled)
{
lnkDeleteItem.CssClass = "NewItemLink";
lnkDeleteItem.Attributes.Add("onclick", "return DeleteItem();");
}
}
else
{
pnlDeleteItem.Enabled = false;
}
if (enabled)
{
lnkNewItem.CssClass = "NewItemLink";
lnkNewItem.Attributes.Add("onclick", "return CreateNew();");
pnlNewItem.Enabled = true;
}
else
{
lnkNewItem.CssClass = "NewItemLinkDisabled";
pnlNewItem.Enabled = false;
}
// Resource strings
lnkDeleteItem.Text = GetString("Development-WebPart_Tree.DeleteItem");
lnkNewItem.Text = GetString("Development-WebPart_Tree.NewWebPart");
string imageUrl = "Design/Controls/Tree";
// Initialize page
if (CultureHelper.IsUICultureRTL())
{
imageUrl = GetImageUrl("RTL/" + imageUrl, false, false);
}
else
{
imageUrl = GetImageUrl(imageUrl, false, false);
}
webpartsTree.LineImagesFolder = imageUrl;
regionsTree.LineImagesFolder = imageUrl;
if (Node != null)
{
string webpartRootAttributes = "class=\"ContentTreeItem\"";
string regionRootAttributes = "class=\"ContentTreeItem\"";
if (string.IsNullOrEmpty(selectedNodeName))
{
switch (selectedNodeType)
{
case "webpart":
webpartRootAttributes = "class=\"ContentTreeSelectedItem\" id=\"treeSelectedNode\"";
regionRootAttributes = "class=\"ContentTreeItem\" ";
break;
case "region":
webpartRootAttributes = "class=\"ContentTreeItem\" ";
regionRootAttributes = "class=\"ContentTreeSelectedItem\" id=\"treeSelectedNode\"";
break;
default:
webpartRootAttributes = "class=\"ContentTreeSelectedItem\" id=\"treeSelectedNode\"";
regionRootAttributes = "class=\"ContentTreeItem\" ";
break;
}
}
else
{
webpartRootAttributes = "class=\"ContentTreeSelectedItem\" id=\"treeSelectedNode\"";
regionRootAttributes = "class=\"ContentTreeItem\" ";
}
// Create tree menus
TreeElemNode rootWebpartNode = new TreeElemNode();
rootWebpartNode.Text = "" + GetString("EditableWebparts.Root") + "";
rootWebpartNode.ImageUrl = GetImageUrl("CMSModules/CMS_Content/EditableContent/editablewebparts.png");
rootWebpartNode.Expanded = true;
rootWebpartNode.NavigateUrl = "#";
TreeElemNode rootRegionNode = new TreeElemNode();
rootRegionNode.Text = "" + GetString("EditableRegions.Root") + "";
rootRegionNode.ImageUrl = GetImageUrl("CMSModules/CMS_Content/EditableContent/editableregions.png");
rootRegionNode.Expanded = true;
rootRegionNode.NavigateUrl = "#";
// Editable web parts
webpartsTree.Nodes.Add(rootWebpartNode);
if (Node.DocumentContent.EditableWebParts.Count > 0)
{
foreach (DictionaryEntry webPart in Node.DocumentContent.EditableWebParts)
{
string key = webPart.Key.ToString();
string name = DictionaryHelper.GetFirstKey(key);
AddNode(rootWebpartNode, name, "webpart");
}
}
// Editable regions
regionsTree.Nodes.Add(rootRegionNode);
if (Node.DocumentContent.EditableRegions.Count > 0)
{
foreach (DictionaryEntry region in Node.DocumentContent.EditableRegions)
{
string key = region.Key.ToString();
string name = DictionaryHelper.GetFirstKey(key);
AddNode(rootRegionNode, name, "region");
}
}
}
// Delete item if requested from query string
string nodeType = QueryHelper.GetString("nodetype", null);
string nodeName = QueryHelper.GetString("nodename", null);
if (!RequestHelper.IsPostBack() && !String.IsNullOrEmpty(nodeType) && QueryHelper.GetBoolean("deleteItem", false))
{
DeleteItem(nodeType, nodeName);
}
}
#endregion
#region "Private methods"
///
/// Adds node to parent node.
///
/// Parent node
/// Name of node
/// Node key
/// Type of node
private void AddNode(TreeElemNode parentNode, string nodeName, string nodeType)
{
TreeElemNode newNode = new TreeElemNode();
string cssClass = "ContentTreeItem";
string elemId = string.Empty;
// Select proper node
if (selectedNodeName == nodeName)
{
if (webpartsTree.Nodes.Count > 0)
{
webpartsTree.Nodes[0].Text = webpartsTree.Nodes[0].Text.Replace("ContentTreeSelectedItem", "ContentTreeItem").Replace("treeSelectedNode", string.Empty);
}
else if (regionsTree.Nodes.Count > 0)
{
regionsTree.Nodes[0].Text = regionsTree.Nodes[0].Text.Replace("ContentTreeSelectedItem", "ContentTreeItem").Replace("treeSelectedNode", string.Empty);
}
if (nodeType == selectedNodeType)
{
cssClass = "ContentTreeSelectedItem";
elemId = "id=\"treeSelectedNode\"";
}
}
newNode.Text = "" + HTMLHelper.HTMLEncode(nodeName) + "";
newNode.NavigateUrl = "#";
parentNode.ChildNodes.Add(newNode);
}
///
/// Deletes item.
///
protected void DeleteItem(string nodeType, string nodeName)
{
if (DocumentManager.AllowSave)
{
// Remove key from hashtable
switch (nodeType)
{
case "webpart":
Node.DocumentContent.EditableWebParts.Remove(nodeName);
break;
case "region":
Node.DocumentContent.EditableRegions.Remove(nodeName);
break;
}
// Save node
SaveNode();
// Refresh
ltlScript.Text += ScriptHelper.GetScript("document.location.replace('" + ResolveUrl("~/CMSModules/Content/CMSDesk/Properties/Advanced/EditableContent/tree.aspx") + "?nodeid=" + Node.NodeID + "&selectednodetype=" + nodeType + "'); parent.frames['main'].SelectNode('','" + nodeType + "');");
}
else
{
ltlScript.Text += ScriptHelper.GetAlertScript(string.Format(GetString("cmsdesk.notauthorizedtoeditdocument"), Node.NodeAliasPath));
}
}
///
/// Saves node, ensures workflow.
///
protected void SaveNode()
{
// Save content
DocumentManager.SaveDocument();
}
void DocumentManager_OnSaveData(object sender, CMS.ExtendedControls.DocumentManagerEventArgs e)
{
TreeNode node = e.Node;
// Get content
string content = node.DocumentContent.GetContentXml();
node.UpdateOriginalValues();
node.SetValue("DocumentContent", content);
}
#endregion
}