diff --git a/src/Umbraco.Core/Cache/CacheKeys.cs b/src/Umbraco.Core/Cache/CacheKeys.cs
index 18019b005d..5b31a4f315 100644
--- a/src/Umbraco.Core/Cache/CacheKeys.cs
+++ b/src/Umbraco.Core/Cache/CacheKeys.cs
@@ -6,6 +6,8 @@ namespace Umbraco.Core.Cache
///
public static class CacheKeys
{
+ public const string UserTypeCacheKey = "UserTypeCache";
+
public const string ContentItemCacheKey = "contentItem";
public const string MediaCacheKey = "UL_GetMedia";
diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings.cs b/src/Umbraco.Core/Configuration/UmbracoSettings.cs
index d2e681695c..2abba35948 100644
--- a/src/Umbraco.Core/Configuration/UmbracoSettings.cs
+++ b/src/Umbraco.Core/Configuration/UmbracoSettings.cs
@@ -22,6 +22,8 @@ namespace Umbraco.Core.Configuration
//TODO: Re-enable logging !!!!
+ //TODO: We need to convert this to a real section, it's currently using HttpRuntime.Cache to detect cahnges, this is real poor, especially in a console app
+
///
/// The UmbracoSettings Class contains general settings information for the entire Umbraco instance based on information from the /config/umbracoSettings.config file
///
diff --git a/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs b/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs
index 806a7b2236..6176446088 100644
--- a/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs
+++ b/src/Umbraco.Web/Cache/CacheRefresherEventHandler.cs
@@ -22,6 +22,10 @@ namespace Umbraco.Web.Cache
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
+ //bind to user type events
+ UserType.Deleted += UserTypeDeleted;
+ UserType.New += UserTypeNew;
+ UserType.Updated += UserTypeUpdated;
//Bind to dictionary events
//NOTE: we need to bind to legacy and new API events currently: http://issues.umbraco.org/issue/U4-1979
@@ -111,6 +115,23 @@ namespace Umbraco.Web.Cache
MediaService.Moving += MediaServiceMoving;
MediaService.Trashing += MediaServiceTrashing;
}
+
+ #region UserType event handlers
+ static void UserTypeUpdated(UserType sender, System.EventArgs e)
+ {
+ DistributedCache.Instance.RefreshUserTypeCache(sender.Id);
+ }
+
+ static void UserTypeNew(UserType sender, System.EventArgs e)
+ {
+ DistributedCache.Instance.RefreshAllUserTypeCache();
+ }
+
+ static void UserTypeDeleted(UserType sender, System.EventArgs e)
+ {
+ DistributedCache.Instance.RemoveUserTypeCache(sender.Id);
+ }
+ #endregion
#region Dictionary event handlers
diff --git a/src/Umbraco.Web/Cache/DistributedCache.cs b/src/Umbraco.Web/Cache/DistributedCache.cs
index 15d54ef151..ffc43c1a73 100644
--- a/src/Umbraco.Web/Cache/DistributedCache.cs
+++ b/src/Umbraco.Web/Cache/DistributedCache.cs
@@ -41,6 +41,7 @@ namespace Umbraco.Web.Cache
public const string MediaCacheRefresherId = "B29286DD-2D40-4DDB-B325-681226589FEC";
public const string MacroCacheRefresherId = "7B1E683C-5F34-43dd-803D-9699EA1E98CA";
public const string UserCacheRefresherId = "E057AF6D-2EE6-41F4-8045-3694010F0AA6";
+ public const string UserTypeCacheRefresherId = "7E707E21-0195-4522-9A3C-658CC1761BD4";
public const string ContentTypeCacheRefresherId = "6902E22C-9C10-483C-91F3-66B7CAE9E2F5";
public const string LanguageCacheRefresherId = "3E0F95D8-0BE5-44B8-8394-2B8750B62654";
public const string DomainCacheRefresherId = "11290A79-4B57-4C99-AD72-7748A3CF38AF";
diff --git a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
index 228854b9b3..48f8bf7bdd 100644
--- a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
+++ b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
@@ -13,6 +13,23 @@ namespace Umbraco.Web.Cache
///
internal static class DistributedCacheExtensions
{
+ #region User type cache
+ public static void RemoveUserTypeCache(this DistributedCache dc, int userTypeId)
+ {
+ dc.Remove(new Guid(DistributedCache.UserTypeCacheRefresherId), userTypeId);
+ }
+
+ public static void RefreshUserTypeCache(this DistributedCache dc, int userTypeId)
+ {
+ dc.Refresh(new Guid(DistributedCache.UserTypeCacheRefresherId), userTypeId);
+ }
+
+ public static void RefreshAllUserTypeCache(this DistributedCache dc)
+ {
+ dc.RefreshAll(new Guid(DistributedCache.UserTypeCacheRefresherId));
+ }
+ #endregion
+
#region User cache
public static void RemoveUserCache(this DistributedCache dc, int userId)
{
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index ad5099541e..4cf8f78146 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -279,6 +279,7 @@
+
diff --git a/src/umbraco.businesslogic/UserType.cs b/src/umbraco.businesslogic/UserType.cs
index 54a300d083..e049a4023a 100644
--- a/src/umbraco.businesslogic/UserType.cs
+++ b/src/umbraco.businesslogic/UserType.cs
@@ -1,9 +1,12 @@
using System;
using System.Collections.Generic;
using System.Data;
+using System.Runtime.CompilerServices;
using System.Web;
using System.Web.Caching;
-
+using Umbraco.Core;
+using Umbraco.Core.Cache;
+using Umbraco.Core.Events;
using umbraco.DataLayer;
namespace umbraco.BusinessLogic
@@ -30,7 +33,6 @@ namespace umbraco.BusinessLogic
/// The UserType id to find
public UserType(int id)
{
- Cache();
this.LoadByPrimaryKey(id);
}
@@ -41,8 +43,8 @@ namespace umbraco.BusinessLogic
/// The name.
public UserType(int id, string name)
{
- m_id = id;
- m_name = name;
+ _id = id;
+ _name = name;
}
///
@@ -54,26 +56,17 @@ namespace umbraco.BusinessLogic
///
public UserType(int id, string name, string defaultPermissions, string alias)
{
- m_name = name;
- m_id = id;
- m_defaultPermissions = defaultPermissions;
- m_alias = alias;
+ _name = name;
+ _id = id;
+ _defaultPermissions = defaultPermissions;
+ _alias = alias;
}
- ///
- /// A static constructor that will Cache the current UserTypes
- ///
- static UserType()
- {
- Cache();
- }
-
- private const string CACHE_KEY = "UserTypeCache";
- private int m_id;
- private string m_name;
- private string m_defaultPermissions;
- private string m_alias;
+ private int _id;
+ private string _name;
+ private string _defaultPermissions;
+ private string _alias;
///
/// The cache storage for all user types
@@ -82,14 +75,24 @@ namespace umbraco.BusinessLogic
{
get
{
- //ensure cache exists
- if (HttpRuntime.Cache[CACHE_KEY] == null)
- ReCache();
- return HttpRuntime.Cache[CACHE_KEY] as List;
- }
- set
- {
- HttpRuntime.Cache[CACHE_KEY] = value;
+ return ApplicationContext.Current.ApplicationCache.GetCacheItem(
+ CacheKeys.UserTypeCacheKey,
+ () =>
+ {
+ var tmp = new List();
+ using (var dr = SqlHelper.ExecuteReader("select id, userTypeName, userTypeAlias, userTypeDefaultPermissions from umbracoUserType"))
+ {
+ while (dr.Read())
+ {
+ tmp.Add(new UserType(
+ dr.GetShort("id"),
+ dr.GetString("userTypeName"),
+ dr.GetString("userTypeDefaultPermissions"),
+ dr.GetString("userTypeAlias")));
+ }
+ }
+ return tmp;
+ });
}
}
@@ -104,8 +107,8 @@ namespace umbraco.BusinessLogic
///
public string Alias
{
- get { return m_alias; }
- set { m_alias = value; }
+ get { return _alias; }
+ set { _alias = value; }
}
///
@@ -113,8 +116,8 @@ namespace umbraco.BusinessLogic
///
public string Name
{
- get { return m_name; }
- set { m_name = value; }
+ get { return _name; }
+ set { _name = value; }
}
///
@@ -122,7 +125,7 @@ namespace umbraco.BusinessLogic
///
public int Id
{
- get { return m_id; }
+ get { return _id; }
}
///
@@ -130,8 +133,8 @@ namespace umbraco.BusinessLogic
///
public string DefaultPermissions
{
- get { return m_defaultPermissions; }
- set { m_defaultPermissions = value; }
+ get { return _defaultPermissions; }
+ set { _defaultPermissions = value; }
}
///
@@ -150,20 +153,21 @@ namespace umbraco.BusinessLogic
public void Save()
{
//ensure that this object has an ID specified (it exists in the database)
- if (m_id <= 0)
+ if (_id <= 0)
throw new Exception("The current UserType object does not exist in the database. New UserTypes should be created with the MakeNew method");
SqlHelper.ExecuteNonQuery(@"
update umbracoUserType set
userTypeAlias=@alias,userTypeName=@name,userTypeDefaultPermissions=@permissions
where id=@id",
- SqlHelper.CreateParameter("@alias", m_alias),
- SqlHelper.CreateParameter("@name", m_name),
- SqlHelper.CreateParameter("@permissions", m_defaultPermissions),
- SqlHelper.CreateParameter("@id", m_id)
- );
+ SqlHelper.CreateParameter("@alias", _alias),
+ SqlHelper.CreateParameter("@name", _name),
+ SqlHelper.CreateParameter("@permissions", _defaultPermissions),
+ SqlHelper.CreateParameter("@id", _id)
+ );
- ReCache();
+ //raise event
+ OnUpdated(this, new EventArgs());
}
///
@@ -172,14 +176,13 @@ namespace umbraco.BusinessLogic
public void Delete()
{
//ensure that this object has an ID specified (it exists in the database)
- if (m_id <= 0)
+ if (_id <= 0)
throw new Exception("The current UserType object does not exist in the database. New UserTypes should be created with the MakeNew method");
- SqlHelper.ExecuteNonQuery(@"
- delete from umbracoUserType where id=@id",
- SqlHelper.CreateParameter("@id", m_id));
-
- ReCache();
+ SqlHelper.ExecuteNonQuery(@"delete from umbracoUserType where id=@id", SqlHelper.CreateParameter("@id", _id));
+
+ //raise event
+ OnDeleted(this, new EventArgs());
}
///
@@ -190,14 +193,14 @@ namespace umbraco.BusinessLogic
/// and the data was loaded, false if it wasn't
public bool LoadByPrimaryKey(int id)
{
- UserType userType = GetUserType(id);
+ var userType = GetUserType(id);
if (userType == null)
return false;
- this.m_id = userType.Id;
- this.m_alias = userType.Alias;
- this.m_defaultPermissions = userType.DefaultPermissions;
- this.m_name = userType.Name;
+ _id = userType.Id;
+ _alias = userType.Alias;
+ _defaultPermissions = userType.DefaultPermissions;
+ _name = userType.Name;
return true;
}
@@ -208,16 +211,13 @@ namespace umbraco.BusinessLogic
///
///
///
+ [MethodImpl(MethodImplOptions.Synchronized)]
public static UserType MakeNew(string name, string defaultPermissions, string alias)
{
//ensure that the current alias does not exist
//get the id for the new user type
- UserType existing = UserTypes.Find(
- delegate(UserType ut)
- {
- return (ut.Alias == alias);
- }
- );
+ var existing = UserTypes.Find(ut => (ut.Alias == alias));
+
if (existing != null)
throw new Exception("The UserType alias specified already exists");
@@ -228,18 +228,30 @@ namespace umbraco.BusinessLogic
SqlHelper.CreateParameter("@alias", alias),
SqlHelper.CreateParameter("@name", name),
SqlHelper.CreateParameter("@permissions", defaultPermissions));
+
+ //get it's id
+ var newId = SqlHelper.ExecuteScalar("SELECT MAX(id) FROM umbracoUserType WHERE userTypeAlias=@alias", SqlHelper.CreateParameter("@alias", alias));
- ReCache();
-
- //find the new user type
- existing = UserTypes.Find(
- delegate(UserType ut)
+ //load the instance and return it
+ using (var dr = SqlHelper.ExecuteReader(
+ "select id, userTypeName, userTypeAlias, userTypeDefaultPermissions from umbracoUserType where id=@id",
+ SqlHelper.CreateParameter("@id", newId)))
+ {
+ if (dr.Read())
{
- return (ut.Alias == alias);
- }
- );
+ var ut = new UserType(
+ dr.GetShort("id"),
+ dr.GetString("userTypeName"),
+ dr.GetString("userTypeDefaultPermissions"),
+ dr.GetString("userTypeAlias"));
- return existing;
+ //raise event
+ OnNew(ut, new EventArgs());
+
+ return ut;
+ }
+ throw new InvalidOperationException("Could not read the new User Type with id of " + newId);
+ }
}
///
@@ -249,12 +261,7 @@ namespace umbraco.BusinessLogic
///
public static UserType GetUserType(int id)
{
- return UserTypes.Find(
- delegate(UserType ut)
- {
- return (ut.Id == id);
- }
- );
+ return UserTypes.Find(ut => (ut.Id == id));
}
///
@@ -266,42 +273,32 @@ namespace umbraco.BusinessLogic
return UserTypes;
}
- ///
- /// Removes the UserType cache and re-reads the data from the db.
- ///
- private static void ReCache()
+ internal static event TypedEventHandler New;
+ private static void OnNew(UserType userType, EventArgs args)
{
- HttpRuntime.Cache.Remove(CACHE_KEY);
- Cache();
- }
-
- ///
- /// Read all UserType data and store it in cache.
- ///
- private static void Cache()
- {
- //don't query the database is the cache is not null
- if (HttpRuntime.Cache[CACHE_KEY] != null)
- return;
-
- List tmp = new List();
- using (IRecordsReader dr =
- SqlHelper.ExecuteReader("select id, userTypeName, userTypeAlias, userTypeDefaultPermissions from umbracoUserType"))
+ if (New != null)
{
- while (dr.Read())
- {
- tmp.Add(new UserType(
- dr.GetShort("id"),
- dr.GetString("userTypeName"),
- dr.GetString("userTypeDefaultPermissions"),
- dr.GetString("userTypeAlias")));
- }
+ New(userType, args);
}
-
- UserTypes = tmp;
-
}
+ internal static event TypedEventHandler Deleted;
+ private static void OnDeleted(UserType userType, EventArgs args)
+ {
+ if (Deleted != null)
+ {
+ Deleted(userType, args);
+ }
+ }
+
+ internal static event TypedEventHandler Updated;
+ private static void OnUpdated(UserType userType, EventArgs args)
+ {
+ if (Updated != null)
+ {
+ Updated(userType, args);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/umbraco.cms/businesslogic/skinning/Skinning.cs b/src/umbraco.cms/businesslogic/skinning/Skinning.cs
index a5dffa0932..62558b9f8f 100644
--- a/src/umbraco.cms/businesslogic/skinning/Skinning.cs
+++ b/src/umbraco.cms/businesslogic/skinning/Skinning.cs
@@ -3,31 +3,34 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
-using umbraco.IO;
using System.IO;
using System.Collections;
using System.Web;
using System.Web.Caching;
+using Umbraco.Core;
+using Umbraco.Core.IO;
using umbraco.cms.businesslogic.web;
using umbraco.BusinessLogic;
using umbraco.cms.businesslogic.template;
namespace umbraco.cms.businesslogic.skinning
{
+
+ //TODO: Convert the caching to use ApplicationContext.Current.ApplicationCache
+
public class Skinning
{
- static private Hashtable _checkedPages = new Hashtable();
+ static private readonly Hashtable CheckedPages = new Hashtable();
static private XmlDocument _skinningXmlContent;
static private string _skinningXmlSource = IOHelper.MapPath(SystemFiles.SkinningXml, false);
- private const string CACHEKEY = "SkinnableTemplates";
+ private const string Cachekey = "SkinnableTemplates";
- private static void clearCheckPages()
+ private static void ClearCheckPages()
{
- _checkedPages.Clear();
+ CheckedPages.Clear();
}
-
public static void RollbackSkin(int template)
{
string currentSkin = GetCurrentSkinAlias(template);
@@ -45,7 +48,7 @@ namespace umbraco.cms.businesslogic.skinning
}
RemoveSkin(template);
- save();
+ Save();
}
public static void ActivateAsCurrentSkin(Skin skin)
@@ -78,71 +81,68 @@ namespace umbraco.cms.businesslogic.skinning
newSkin.ExecuteInstallTasks();
- save();
+ Save();
}
}
-
-
-
- private static void save()
+
+ private static void Save()
{
- System.IO.FileStream f = System.IO.File.Open(_skinningXmlSource, FileMode.Create);
+ var f = File.Open(_skinningXmlSource, FileMode.Create);
SkinXml.Save(f);
f.Close();
}
public static string GetCurrentSkinAlias(int templateID)
{
- XmlElement x = (XmlElement)getTemplate(templateID);
+ var x = (XmlElement)GetTemplate(templateID);
if (x != null && x.HasAttribute("alias") && !string.IsNullOrEmpty(x.Attributes["alias"].Value))
return x.Attributes["alias"].Value;
return string.Empty;
}
- private static void SetSkin(int templateID, string skinAlias)
+ private static void SetSkin(int templateId, string skinAlias)
{
- XmlElement x = (XmlElement)getTemplate(templateID);
+ var x = (XmlElement)GetTemplate(templateId);
if (x == null)
{
x = (XmlElement)_skinningXmlContent.CreateNode(XmlNodeType.Element, "skin", "");
SkinXml.DocumentElement.AppendChild(x);
}
- x.SetAttribute("template", templateID.ToString());
+ x.SetAttribute("template", templateId.ToString());
x.SetAttribute("alias", skinAlias);
- save();
+ Save();
- clearCheckPages();
+ ClearCheckPages();
}
- private static void RemoveSkin(int templateID)
+ private static void RemoveSkin(int templateId)
{
- XmlElement x = (XmlElement)getTemplate(templateID);
+ var x = (XmlElement)GetTemplate(templateId);
if (x != null)
{
x.ParentNode.RemoveChild(x);
- save();
- clearCheckPages();
+ Save();
+ ClearCheckPages();
}
}
-
-
- private static XmlNode getTemplate(int templateId)
+
+ private static XmlNode GetTemplate(int templateId)
{
- XmlNode x = SkinXml.SelectSingleNode("/skinning/skin [@template=" + templateId.ToString() + "]");
+ var x = SkinXml.SelectSingleNode("/skinning/skin [@template=" + templateId.ToString() + "]");
return x;
}
public static List GetAllSkins()
{
- List skins = new List();
+ var skins = new List();
- foreach (string dir in Directory.GetDirectories(IO.IOHelper.MapPath(SystemDirectories.Masterpages)))
+ foreach (var dir in Directory.GetDirectories(IOHelper.MapPath(SystemDirectories.Masterpages)))
{
if (File.Exists(Path.Combine(dir, "skin.xml")))
{
- Skin s = Skin.CreateFromFile((Path.Combine(dir, "skin.xml")));
+ var s = Skin.CreateFromFile((Path.Combine(dir, "skin.xml")));
s.Alias = new DirectoryInfo(dir).Name;
skins.Add(s);
}
@@ -165,10 +165,10 @@ namespace umbraco.cms.businesslogic.skinning
_skinningXmlContent = new XmlDocument();
- if (!System.IO.File.Exists(_skinningXmlSource))
+ if (!File.Exists(_skinningXmlSource))
{
- System.IO.FileStream f = System.IO.File.Open(_skinningXmlSource, FileMode.Create);
- System.IO.StreamWriter sw = new StreamWriter(f);
+ var f = File.Open(_skinningXmlSource, FileMode.Create);
+ var sw = new StreamWriter(f);
sw.WriteLine("");
sw.Close();
f.Close();
@@ -181,44 +181,45 @@ namespace umbraco.cms.businesslogic.skinning
public static Dictionary> SkinnableTemplates()
{
- Dictionary> dts = (Dictionary>)HttpRuntime.Cache[CACHEKEY];
+ var dts = (Dictionary>)HttpRuntime.Cache[Cachekey];
if (dts == null)
- dts = registerSkinnableTemplates();
+ dts = RegisterSkinnableTemplates();
return dts;
}
//this is an pretty expensive operation, so we will cache the result...
- private static Dictionary> registerSkinnableTemplates()
+ private static Dictionary> RegisterSkinnableTemplates()
{
- HttpRuntime.Cache.Remove(CACHEKEY);
- Dictionary> _allowedTemplates = new Dictionary>();
+ HttpRuntime.Cache.Remove(Cachekey);
- foreach (string dir in Directory.GetDirectories(IO.IOHelper.MapPath(SystemDirectories.Masterpages)))
+ var allowedTemplates = new Dictionary>();
+
+ foreach (string dir in Directory.GetDirectories(IOHelper.MapPath(SystemDirectories.Masterpages)))
{
if (File.Exists(Path.Combine(dir, "skin.xml")))
{
- XmlDocument manifest = new XmlDocument();
+ var manifest = new XmlDocument();
manifest.Load(Path.Combine(dir, "skin.xml"));
- string name = umbraco.xmlHelper.GetNodeValue(manifest.SelectSingleNode("/Skin/Name"));
- string[] types = umbraco.xmlHelper.GetNodeValue(manifest.SelectSingleNode("/Skin/AllowedRootTemplate")).Split(',');
- string alias = new DirectoryInfo(dir).Name;
+ var name = XmlHelper.GetNodeValue(manifest.SelectSingleNode("/Skin/Name"));
+ var types = XmlHelper.GetNodeValue(manifest.SelectSingleNode("/Skin/AllowedRootTemplate")).Split(',');
+ var alias = new DirectoryInfo(dir).Name;
//foreach allowed type, test if it is already there...
- foreach (string t in types)
+ foreach (var t in types)
{
- if (!_allowedTemplates.ContainsKey(t))
- _allowedTemplates.Add(t, new Dictionary());
+ if (!allowedTemplates.ContainsKey(t))
+ allowedTemplates.Add(t, new Dictionary());
- if (!_allowedTemplates[t].ContainsKey(alias))
- _allowedTemplates[t].Add(alias, name);
+ if (!allowedTemplates[t].ContainsKey(alias))
+ allowedTemplates[t].Add(alias, name);
}
}
}
- HttpRuntime.Cache.Insert(CACHEKEY, _allowedTemplates, new CacheDependency(IO.IOHelper.MapPath(SystemDirectories.Masterpages)));
+ HttpRuntime.Cache.Insert(Cachekey, allowedTemplates, new CacheDependency(IOHelper.MapPath(SystemDirectories.Masterpages)));
- return _allowedTemplates;
+ return allowedTemplates;
}
//Helpers for detecting what skins work with what document types
@@ -235,7 +236,7 @@ namespace umbraco.cms.businesslogic.skinning
public static Dictionary AllowedSkins(int templateID)
{
- Template template = new Template(templateID);
+ var template = new Template(templateID);
return AllowedSkins(template.Alias);
}
@@ -256,7 +257,7 @@ namespace umbraco.cms.businesslogic.skinning
public static bool IsStarterKitInstalled()
{
- foreach (packager.InstalledPackage p in packager.InstalledPackage.GetAllInstalledPackages())
+ foreach (var p in packager.InstalledPackage.GetAllInstalledPackages())
{
if (p.Data.EnableSkins)
return true;
@@ -267,7 +268,7 @@ namespace umbraco.cms.businesslogic.skinning
public static Guid? StarterKitGuid()
{
- foreach (packager.InstalledPackage p in packager.InstalledPackage.GetAllInstalledPackages())
+ foreach (var p in packager.InstalledPackage.GetAllInstalledPackages())
{
if (p.Data.EnableSkins)
return new Guid(p.Data.PackageGuid);
@@ -278,13 +279,13 @@ namespace umbraco.cms.businesslogic.skinning
public static Guid? StarterKitGuid(int template)
{
- string packageFile = IO.IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config";
- XmlDocument installed = new XmlDocument();
+ string packageFile = IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config";
+ var installed = new XmlDocument();
if (File.Exists(packageFile))
{
installed.Load(packageFile);
- XmlNode starterKit = installed.SelectSingleNode(
+ var starterKit = installed.SelectSingleNode(
string.Format("//package [@enableSkins = 'True' and @packageGuid != '' and contains(./templates, '{0}')]", template));
if (starterKit != null)
@@ -296,24 +297,24 @@ namespace umbraco.cms.businesslogic.skinning
public static bool HasAvailableSkins(int template)
{
- bool r = false;
+ var r = false;
- Guid? g = StarterKitGuid(template);
+ var g = StarterKitGuid(template);
if (g != null)
{
try
{
- string skinRepoGuid = "65194810-1f85-11dd-bd0b-0800200c9a66";
+ var skinRepoGuid = "65194810-1f85-11dd-bd0b-0800200c9a66";
- if (umbraco.cms.businesslogic.packager.InstalledPackage.GetByGuid(g.ToString()).Data.SkinRepoGuid != null &&
- umbraco.cms.businesslogic.packager.InstalledPackage.GetByGuid(g.ToString()).Data.SkinRepoGuid != Guid.Empty)
+ if (packager.InstalledPackage.GetByGuid(g.ToString()).Data.SkinRepoGuid != null &&
+ packager.InstalledPackage.GetByGuid(g.ToString()).Data.SkinRepoGuid != Guid.Empty)
{
- skinRepoGuid = umbraco.cms.businesslogic.packager.InstalledPackage.GetByGuid(g.ToString()).Data.SkinRepoGuid.ToString();
+ skinRepoGuid = packager.InstalledPackage.GetByGuid(g.ToString()).Data.SkinRepoGuid.ToString();
}
- umbraco.cms.businesslogic.packager.repositories.Repository repo = cms.businesslogic.packager.repositories.Repository.getByGuid(skinRepoGuid);
+ packager.repositories.Repository repo = packager.repositories.Repository.getByGuid(skinRepoGuid);
r = repo.Webservice.Skins(g.ToString()).Length > 0;
}
@@ -330,10 +331,10 @@ namespace umbraco.cms.businesslogic.skinning
public static bool IsPackageInstalled(Guid PackageGuid)
{
- XmlDocument installed = new XmlDocument();
- installed.Load(IO.IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config");
+ var installed = new XmlDocument();
+ installed.Load(IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config");
- XmlNode packageNode = installed.SelectSingleNode(
+ var packageNode = installed.SelectSingleNode(
string.Format("//package [@packageGuid = '{0}']", PackageGuid.ToString()));
return packageNode != null;
@@ -341,10 +342,10 @@ namespace umbraco.cms.businesslogic.skinning
public static bool IsPackageInstalled(string Name)
{
- XmlDocument installed = new XmlDocument();
- installed.Load(IO.IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config");
+ var installed = new XmlDocument();
+ installed.Load(IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config");
- XmlNode packageNode = installed.SelectSingleNode(
+ var packageNode = installed.SelectSingleNode(
string.Format("//package [@name = '{0}']", Name));
return packageNode != null;
@@ -352,171 +353,18 @@ namespace umbraco.cms.businesslogic.skinning
public static string GetModuleAlias(string Name)
{
- XmlDocument installed = new XmlDocument();
- installed.Load(IO.IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config");
+ var installed = new XmlDocument();
+ installed.Load(IOHelper.MapPath(SystemDirectories.Packages) + "/installed/installedPackages.config");
- XmlNode packageNode = installed.SelectSingleNode(
+ var packageNode = installed.SelectSingleNode(
string.Format("//package [@name = '{0}']", Name));
- XmlNode macroNode = packageNode.SelectSingleNode(".//macros");
+ var macroNode = packageNode.SelectSingleNode(".//macros");
- cms.businesslogic.macro.Macro m = new cms.businesslogic.macro.Macro(Convert.ToInt32(macroNode.InnerText.Split(',')[0]));
+ var m = new macro.Macro(Convert.ToInt32(macroNode.InnerText.Split(',')[0]));
return m.Alias;
}
- #region old code
-
-
-
- /*
-
- public static string FindAppliedSkin(int DocumentId, string Path)
- {
- string skinAlias = string.Empty;
-
- if (!_checkedPages.ContainsKey(DocumentId))
- {
- foreach (string id in Path.Split(','))
- {
- XmlNode n = getPage(int.Parse(id));
- if (n != null && n.Attributes["skin"] != null && !string.IsNullOrEmpty(n.Attributes["skin"].Value))
- {
- skinAlias = n.Attributes["skin"].Value;
- break;
- }
- }
-
- // Add thread safe updating to the hashtable
- System.Web.HttpContext.Current.Application.Lock();
- if (!_checkedPages.ContainsKey(DocumentId))
- _checkedPages.Add(DocumentId, skinAlias);
-
- System.Web.HttpContext.Current.Application.UnLock();
- }
- else
- skinAlias = (string)_checkedPages[DocumentId];
-
- return skinAlias;
- }
- *
- *
- public static Skin AppliedSkin(int DocumentId, string Path)
- {
- string active = FindAppliedSkin(DocumentId, Path);
- if (!string.IsNullOrEmpty(active))
- {
-
- return Skin.CreateFromFile(IO.IOHelper.MapPath(SystemDirectories.Masterpages) + "/" + active + "/skin.xml");
- }
-
- return null;
- }
-
-
- public static Dictionary> SkinnableDocumentTypes()
- {
- Dictionary> dts = (Dictionary>)HttpRuntime.Cache[CACHEKEY];
- if (dts == null)
- dts = registerAllowedDocumentTypes();
-
- return dts;
- }
-
- //this is an pretty expensive operation, so we will cache the result...
- private static Dictionary> registerAllowedDocumentTypes()
- {
- HttpRuntime.Cache.Remove(CACHEKEY);
- Dictionary> _allowedDocumentTypes = new Dictionary>();
-
- foreach (string dir in Directory.GetDirectories(IO.IOHelper.MapPath(SystemDirectories.Masterpages)))
- {
- if( File.Exists( Path.Combine( dir , "skin.xml" ) )) {
- XmlDocument manifest = new XmlDocument();
- manifest.Load(Path.Combine(dir, "skin.xml"));
-
- string name = umbraco.xmlHelper.GetNodeValue( manifest.SelectSingleNode("/Skin/Name"));
- string[] types = umbraco.xmlHelper.GetNodeValue( manifest.SelectSingleNode("/Skin/AllowedDocumentTypes")).Split(',');
- string alias = new DirectoryInfo(dir).Name;
-
- //foreach allowed type, test if it is already there...
- foreach(string t in types){
- if (!_allowedDocumentTypes.ContainsKey(t))
- _allowedDocumentTypes.Add(t, new Dictionary());
-
- if (!_allowedDocumentTypes[t].ContainsKey(alias))
- _allowedDocumentTypes[t].Add(alias, name);
- }
- }
- }
- HttpRuntime.Cache.Insert(CACHEKEY, _allowedDocumentTypes, new CacheDependency( IO.IOHelper.MapPath(SystemDirectories.Masterpages) ));
-
- return _allowedDocumentTypes;
- }
-
- public static void SetSkin(int DocumentId, string skinAlias)
- {
-
- XmlElement x = (XmlElement)getPage(DocumentId);
- if (x == null)
- {
- x = (XmlElement)_skinningXmlContent.CreateNode(XmlNodeType.Element, "page", "");
- SkinXml.DocumentElement.AppendChild(x);
- }
-
- x.SetAttribute("id", DocumentId.ToString());
- x.SetAttribute("skin", skinAlias);
- save();
-
- clearCheckPages();
- }
-
- public static void RemoveSkin(int DocumentId)
- {
- XmlElement x = (XmlElement)getPage(DocumentId);
- if (x != null)
- {
- x.ParentNode.RemoveChild(x);
- save();
- clearCheckPages();
- }
- }
-
- private static XmlNode getPage(int documentId)
- {
- XmlNode x = SkinXml.SelectSingleNode("/skinning/page [@id=" + documentId.ToString() + "]");
- return x;
- }
-
- //Helpers for detecting what skins work with what document types
- public static bool IsSkinnable(string documentTypeAlias)
- {
- return SkinnableDocumentTypes().ContainsKey(documentTypeAlias);
- }
-
- public static bool IsSkinnable(DocumentType documentType)
- {
- return IsSkinnable(documentType.Alias);
- }
-
-
- public static Dictionary AllowedSkins(DocumentType documentType)
- {
- return AllowedSkins(documentType.Alias);
- }
-
- public static Dictionary AllowedSkins(string documentTypeAlias)
- {
- if (IsSkinnable(documentTypeAlias))
- {
- return SkinnableDocumentTypes()[documentTypeAlias];
- }
- else
- return new Dictionary();
- }
- *
- *
- */
- #endregion
}
}