// Copyright © 2007 Jeffrey Bazinet, http://www.vwd-cms.com/
using System;
using System.Configuration;
using System.Web;
using System.Web.Util;
using System.Web.Configuration;
using System.Collections.Specialized;
using System.Collections;
using System.IO;
using System.Collections.Generic;
namespace VwdCms.Configuration
{
public class SiteMapSettings
{
//public StringCollection PageExtensions = new StringCollection();
//public StringCollection HiddenFolders = new StringCollection();
//public StringCollection HiddenPages = new StringCollection();
private Dictionarystring, string _pageExtensions = new Dictionarystring, string();
private Dictionarystring, string _hiddenFolders = new Dictionarystring, string();
private Dictionarystring, string _hiddenPages = new Dictionarystring, string();
private Hashtable _pageExtensionsHashtable = null;
private Hashtable _hiddenFoldersHashtable = null;
private Hashtable _hiddenPagesHashtable = null;
public CmsConfig CmsConfig = null;
public SiteMapSettings(CmsConfig cmsconfig)
{
this.CmsConfig = cmsconfig;
}
public SiteMapSettings(CmsConfig cmsconfig, System.Xml.XmlNode node)
{
this.CmsConfig = cmsconfig;
if (node != null node.ChildNodes.Count 0)
{
// <pageextensions>
LoadCollection(this.PageExtensions, "pageextensions", node);
// <hiddenfolders>
LoadCollection(this.HiddenFolders, "hiddenfolders", node);
// <hiddenpages>
LoadCollection(this.HiddenPages, "hiddenpages", node);
}
}
public Dictionarystring, string PageExtensions
{
get { return _pageExtensions; }
}
public Dictionarystring, string HiddenFolders
{
get { return _hiddenFolders; }
}
public Dictionarystring, string HiddenPages
{
get { return _hiddenPages; }
}
[NotPersisted]
public Hashtable PageExtensionsHashtable
{
get
{
if (_pageExtensionsHashtable == null)
{
LoadPageExtensionsHashtable();
}
return _pageExtensionsHashtable;
}
}
[NotPersisted]
public Hashtable HiddenFoldersHashtable
{
get
{
if (_hiddenFoldersHashtable == null)
{
LoadHiddenFoldersHashtable();
}
return _hiddenFoldersHashtable;
}
}
[NotPersisted]
public Hashtable HiddenPagesHashtable
{
get
{
if (_hiddenPagesHashtable == null)
{
LoadHiddenPagesHashtable();
}
return _hiddenPagesHashtable;
}
}
//private void LoadCollection(StringCollection col, string collectionName, System.Xml.XmlNode node)
private void LoadCollection(Dictionarystring, string col, string collectionName, System.Xml.XmlNode node)
{
if (node != null node.ChildNodes.Count 0)
{
System.Xml.XmlNode colnode = null;
string name = "./";
string val = null;
colnode = node.SelectSingleNode(name + collectionName);
if (colnode != null colnode.ChildNodes.Count 0)
{
foreach (System.Xml.XmlNode n in colnode.ChildNodes)
{
if (n != null n.NodeType == System.Xml.XmlNodeType.Element)
{
val = n.InnerText;
if (!string.IsNullOrEmpty(val))
{
val = val.Trim();
if (val != string.Empty)
{
val = val.ToLower();
if (!col.ContainsKey(val))
{
col.Add(val, val);
}
}
}
}
}
}
}
}
private void LoadHiddenFoldersHashtable()
{
_hiddenFoldersHashtable = new Hashtable();
string vpSitePath = VwdCms.Configuration.Utilities.SitePath;
string lpSitePath = HttpContext.Current.Server.MapPath(vpSitePath);
DirectoryInfo diHidden = null;
DirectoryInfo[] diChildren = null;
string lpFolder = null;
string key = null;
string folder = null;
foreach (KeyValuePairstring, string kvp in this.HiddenFolders)
{
folder = kvp.Value;
lpFolder = lpSitePath + folder;
if (Directory.Exists(lpFolder))
{
diHidden = new DirectoryInfo(lpFolder);
if (diHidden != null)
{
key = diHidden.FullName.ToLower();
if (!_hiddenFoldersHashtable.ContainsKey(key))
{
_hiddenFoldersHashtable.Add(key, key);
}
diChildren = diHidden.GetDirectories("*", SearchOption.AllDirectories);
if (diChildren != null diChildren.Length 0)
{
foreach (DirectoryInfo diChild in diChildren)
{
key = diChild.FullName.ToLower();
if (!_hiddenFoldersHashtable.ContainsKey(key))
{
_hiddenFoldersHashtable.Add(key, key);
}
}
}
}
}
}
}
private void LoadHiddenPagesHashtable()
{
_hiddenPagesHashtable = new Hashtable();
string vpSitePath = VwdCms.Configuration.Utilities.SitePath;
string lpSitePath = HttpContext.Current.Server.MapPath(vpSitePath);
FileInfo fiHidden = null;
string lpFile = null;
string key = null;
string file = null;
foreach (KeyValuePairstring,string kvp in this.HiddenPages)
{
file = kvp.Value;
lpFile = lpSitePath + file;
if (File.Exists(lpFile))
{
fiHidden = new FileInfo(lpFile);
if (fiHidden != null)
{
key = fiHidden.FullName.ToLower();
if (!_hiddenPagesHashtable.ContainsKey(key))
{
_hiddenPagesHashtable.Add(key, key);
}
}
}
}
}
private void LoadPageExtensionsHashtable()
{
string key = null;
_pageExtensionsHashtable = new Hashtable();
string ext = null;
foreach(KeyValuePairstring, string kvp in this.PageExtensions)
{
ext = kvp.Value;
if (!string.IsNullOrEmpty(ext))
{
key = ext.ToLower();
if (!_pageExtensionsHashtable.ContainsKey(key))
{
_pageExtensionsHashtable.Add(key, key);
}
}
}
}
}
}