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 } }