📄 managecategoriestreecontrol.ascx.cs
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
// Copyright (c) Telligent Systems Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Data;
using CommunityServer.Components;
using CommunityServer.ControlPanel.UI;
using CA = ComponentArt.Web.UI;
namespace CommunityServer.ControlPanel.Photos
{
/// <summary>
/// Summary description for ManageCategoriesTreeControl.
/// </summary>
public class ManageCategoriesTreeControl : BaseGalleryControl
{
#region Public Properties
private int categoryID = CSContext.Current.GetIntFromQueryString("CategoryID",0);
public virtual int CategoryID
{
get{return categoryID;}
set
{
categoryID = value;
if(pageHasLoaded)
{
//SetSelectedNode(CategoryID);
}
}
}
#endregion
#region Child Controls
protected CommunityServer.ControlPanel.Controls.Hyperlink AddAlbumButton;
protected CommunityServer.ControlPanel.Controls.Hyperlink DeleteAlbumButton;
protected ComponentArt.Web.UI.TreeView TreeView1; // using strongly typed name to avoid name conflict in asp.net 2.0
#endregion
bool pageHasLoaded = false;
protected CommunityServer.ControlPanel.Controls.Hyperlink AddAlbumButtonCancel;
protected CommunityServer.Controls.Modal Modal1;
private bool IsAdministrator
{
get{return CSContext.Current.User.IsGalleryAdministrator;}
}
const string CurrentURI = "CategoryManager.aspx?CategoryID={0}";
protected string CurrentURL
{
get{return string.Format(CurrentURI, this.CategoryID); }
}
private void Page_Load(object sender, EventArgs e)
{
AjaxManager.Register(this,"ManageCategoriesTreeControl");
if(!Page.IsPostBack)
{
buildTree();
}
pageHasLoaded=true;
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.TreeView1.NodeMoved += new ComponentArt.Web.UI.TreeView.NodeMovedEventHandler(this.TreeView1_NodeMoved);
this.TreeView1.NodeSelected += new ComponentArt.Web.UI.TreeView.NodeSelectedEventHandler(this.TreeView1_NodeSelected);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void TreeView1_NodeSelected(object sender, CA.TreeViewNodeEventArgs e)
{
//updateSelectedPath();
//OnPageChange(e);
CSContext.Current.Context.Response.Redirect(GetURL(Globals.SafeInt(e.Node.ID,0)));
}
private void TreeView1_NodeMoved(object sender, CA.TreeViewNodeMovedEventArgs e)
{
PostCategory category = PostCategories.GetCategory(Globals.SafeInt(e.Node.ID,0), this.CurrentGallery.SectionID, true, true);
if(e.Node.ParentNode != null)
category.ParentID = Globals.SafeInt(e.Node.ParentNode.ID, 0);
else
category.ParentID = 0;
PostCategories.UpdateCategory(category);
//updateSelectedPath();
OnPageChange(e);
}
private void buildTree()
{
ArrayList categories = PostCategories.GetCategories(CurrentGallery.SectionID, true, true, -1,true);
PostCategory root = new PostCategory();
root.Name = "\\";
root.IsEnabled = true;
categories.Add(root);
DataTable dt = CADataConverter.ToDataTable(categories,typeof(PostCategory));
foreach(DataRow dbRow in dt.Rows)
{
if(dbRow["CategoryID"].ToString() == "0")
{
dbRow["ParentID"] = DBNull.Value;
}
}
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["CategoryID"], ds.Tables[0].Columns["ParentID"]);
foreach(DataRow dbRow in ds.Tables[0].Rows)
{
if(dbRow.IsNull("ParentID"))
{
CA.TreeViewNode newNode = CreateNode(dbRow["CategoryID"].ToString(), dbRow["Name"].ToString(), CurrentGallery.IsActive, true);
newNode.EditingEnabled = false;
TreeView1.Nodes.Add(newNode);
if(newNode.ID == categoryID.ToString())
TreeView1.SelectedNode = newNode;
PopulateSubTree(dbRow, newNode);
}
}
}
private void PopulateSubTree(DataRow dbRow, CA.TreeViewNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
{
CA.TreeViewNode childNode = CreateNode(childRow["CategoryID"].ToString(), childRow["Name"].ToString(), Globals.SafeBool(childRow["IsEnabled"].ToString(),true) , true);
node.Nodes.Add(childNode);
if(childNode.ID == categoryID.ToString())
TreeView1.SelectedNode = childNode;
PopulateSubTree(childRow, childNode);
}
}
private CA.TreeViewNode CreateNode(string categoryID, string text, bool enabled, bool expanded)
{
CA.TreeViewNode node = new CA.TreeViewNode();
node.Text = text;//GetHREF(text, Globals.SafeInt(categoryID, 0));
if(enabled)
node.ImageUrl = "folder.gif";
else
node.ImageUrl = "folderdisabled.gif";
node.Expanded = expanded;
node.Attributes.Add("IsEnabled", enabled.ToString());
node.Checked = enabled;
node.ID = categoryID;
return node;
}
public event EventHandler TreeChanged;
protected void OnPageChange(EventArgs e)
{
if(TreeChanged != null)
TreeChanged(this, e);
}
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public int ChangeCategoryEnabled(int categoryID)
{
if( !IsAdministrator )
return -1;
if(categoryID == 0)
{
CurrentGallery.IsActive = !CurrentGallery.IsActive;
CommunityServer.Galleries.Galleries.Update(CurrentGallery);
}
if(categoryID > 0)
{
PostCategory pc = PostCategories.GetCategory(categoryID,this.CurrentGallery.SectionID,true, true);
if(pc != null)
{
pc.IsEnabled = !pc.IsEnabled;
PostCategories.UpdateCategory(pc);
//not cluster safe, but lets update the cache on this server anyways
pc = PostCategories.GetCategory(categoryID,this.CurrentGallery.SectionID,true, true);
}
}
return categoryID;
}
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public int RenameCategory(int categoryID, string newName)
{
if( !IsAdministrator )
return 0;
// Check to make sure it isn't a duplicate
ArrayList categories = PostCategories.GetCategories(this.CurrentGallery.SectionID, true);
foreach(PostCategory cat in categories)
{
if((cat.Name.ToLower() == newName) && (cat.CategoryID != categoryID) || categoryID == 0 )
{
/*ErrorLabel.Text = "<span style='color: red'>" + ResourceManager.GetString( "CategoryAdmin_Duplicate" ) + "</span>";
ErrorLabel.Visible = true;
Name.ForeColor = Color.Red;
((RequiredFieldValidator)FindControl( "NameValidator" )).IsValid = false;
*/
//debugComment.Text = "Error '" + e.OldText + "' to '" + e.Node.Text + "'; duplicate name already exists in tree!";
//Just set it back for now
//e.Node.Text = e.OldText;
return -1;
}
}
PostCategory category = PostCategories.GetCategory(categoryID, this.CurrentGallery.SectionID , true);
category.Name = HtmlScrubber.Clean(newName, false, true);
PostCategories.UpdateCategory(category);
//updateSelectedPath();
return categoryID;
}
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public int UpdateParentCategory(int categoryID, int parentCategoryID)
{
PostCategory category = PostCategories.GetCategory(categoryID, this.CurrentGallery.SectionID, true, true);
if(category == null)
return -1;
if(parentCategoryID > 0)
category.ParentID = parentCategoryID;
else
category.ParentID = 0;
PostCategories.UpdateCategory(category);
return 0;
}
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public string AddCategory(int parentCategoryID)
{
if( !IsAdministrator )
return "0";
string name = CommunityServer.ControlPanel.Components.ResourceManager.GetString("CP_Photos_ManageCategories_NewCategoryString");
// Check to make sure it isn't a duplicate
ArrayList categories = PostCategories.GetCategories(this.CurrentGallery.SectionID, true, true, -1, true);
name = PostCategories.NextCategoryName(categories, name);
PostCategory category = new PostCategory() ;
category.SectionID = this.CurrentGallery.SectionID;
category.Name = HtmlScrubber.Clean(name, false, true);
category.Description = string.Empty;
if(parentCategoryID > 0)
category.ParentID = parentCategoryID;
category.IsEnabled = true;
PostCategories.CreateCategory(category);
return string.Format("{0}^{1}^{2}",category.CategoryID, category.ParentID, name) ;
}
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public int DeleteCategory(int categoryID)
{
if( !IsAdministrator )
return 0;
if(categoryID > 0)
{
PostCategory pc = PostCategories.GetCategory(categoryID,this.CurrentGallery.SectionID,true, true);
if(pc.SectionID != CurrentGallery.SectionID)
throw new CSException(CSExceptionType.SectionNotFound);
if(pc != null)
PostCategories.DeleteCategory(pc.CategoryID,pc.SectionID);
}
return categoryID;
}
private string GetURL(int categoryID)
{
return string.Format(CurrentURI, categoryID);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -