diff --git a/umbraco/cms/businesslogic/ContentType.cs b/umbraco/cms/businesslogic/ContentType.cs index 33287cd49d..c59afba4a5 100644 --- a/umbraco/cms/businesslogic/ContentType.cs +++ b/umbraco/cms/businesslogic/ContentType.cs @@ -35,7 +35,7 @@ namespace umbraco.cms.businesslogic /// /// /// - public ContentType(int id) : base(id) { } + public ContentType(int id) : base(id) { } /// /// Initializes a new instance of the class. @@ -98,7 +98,7 @@ namespace umbraco.cms.businesslogic FROM umbracoNode INNER JOIN cmsContentType ON umbracoNode.id = cmsContentType.nodeId WHERE nodeObjectType = @nodeObjectType"; - private static readonly object m_Locker = new object(); + private static readonly object m_Locker = new object(); #endregion @@ -117,7 +117,7 @@ namespace umbraco.cms.businesslogic delegate { return new ContentType(id); - }); + }); } /// @@ -206,7 +206,7 @@ namespace umbraco.cms.businesslogic private static readonly object propertyTypesCacheSyncLock = new object(); #endregion - + #region Public Properties /// @@ -351,7 +351,7 @@ namespace umbraco.cms.businesslogic set { _alias = helpers.Casing.SafeAliasWithForcingCheck(value); - + // validate if alias is empty if (String.IsNullOrEmpty(_alias)) { @@ -488,7 +488,7 @@ namespace umbraco.cms.businesslogic /// /// The list of all ContentTypes public ContentType[] GetAll() - { + { var contentTypes = new List(); using (IRecordsReader dr = @@ -508,7 +508,7 @@ namespace umbraco.cms.businesslogic } return contentTypes.ToArray(); - + } /// @@ -517,7 +517,7 @@ namespace umbraco.cms.businesslogic /// The DataTypeDefinition of the PropertyType /// The Alias of the PropertyType /// The userfriendly name - public void AddPropertyType(DataTypeDefinition dt, string Alias, string Name) + public PropertyType AddPropertyType(DataTypeDefinition dt, string Alias, string Name) { PropertyType pt = PropertyType.MakeNew(dt, this, Name, Alias); @@ -532,6 +532,8 @@ namespace umbraco.cms.businesslogic // Remove from cache FlushFromCache(Id); + + return pt; } /// @@ -541,13 +543,11 @@ namespace umbraco.cms.businesslogic /// The PropertyType /// The Id of the Tab public void SetTabOnPropertyType(PropertyType pt, int TabId) - { + { // This is essentially just a wrapper for the property pt.TabId = TabId; //flush the content type cache, the the tab cache (why so much cache?! argh!) - FlushFromCache(Id); - foreach (TabI t in getVirtualTabs.ToList()) - FlushTabCache(t.Id, pt.ContentTypeId); + pt.FlushCacheBasedOnTab(); } /// @@ -555,7 +555,7 @@ namespace umbraco.cms.businesslogic /// /// The PropertyType which should be freed from its tab public void removePropertyTypeFromTab(PropertyType pt) - { + { pt.TabId = 0; //this will set to null in the database. // Remove from cache FlushFromCache(Id); @@ -734,12 +734,12 @@ namespace umbraco.cms.businesslogic { if (dr.Read()) { - PopulateContentTypeNodeFromReader(dr); + PopulateContentTypeNodeFromReader(dr); } else { throw new ArgumentException("No Contenttype with id: " + Id); - } + } } } @@ -756,18 +756,20 @@ namespace umbraco.cms.businesslogic /// Flushes the cache. /// /// The id. - public void FlushFromCache(int Id) + public static void FlushFromCache(int id) { - Cache.ClearCacheItem(string.Format("UmbracoContentType{0}", Id.ToString())); - Cache.ClearCacheItem(GetPropertiesCacheKey()); + ContentType ct = new ContentType(id); + Cache.ClearCacheItem(string.Format("UmbracoContentType{0}", id)); + Cache.ClearCacheItem(ct.GetPropertiesCacheKey()); + + ct.ClearVirtualTabs(); - ClearVirtualTabs(); // clear anything that uses this as master content type - if (this.nodeObjectType == DocumentType._objectType) + if (ct.nodeObjectType == DocumentType._objectType) { - List cacheToFlush = DocumentType.GetAllAsList().FindAll(dt => dt.MasterContentType == Id); - foreach(DocumentType dt in cacheToFlush) + List cacheToFlush = DocumentType.GetAllAsList().FindAll(dt => dt.MasterContentType == id); + foreach (DocumentType dt in cacheToFlush) FlushFromCache(dt.Id); } @@ -779,7 +781,7 @@ namespace umbraco.cms.businesslogic Cache.ClearCacheByKeySearch("ContentType_PropertyTypes_Content"); ClearVirtualTabs(); - } + } #endregion @@ -799,6 +801,9 @@ namespace umbraco.cms.businesslogic /// private void ClearVirtualTabs() { + foreach (TabI t in getVirtualTabs) + Tab.FlushCache(t.Id, t.ContentType); + m_VirtualTabs = null; } @@ -862,7 +867,7 @@ namespace umbraco.cms.businesslogic SqlHelper.ExecuteNonQuery( "insert into cmsPropertyData (contentNodeId, versionId, propertyTypeId) select contentId, versionId, " + pt.Id + " from cmsContent inner join cmsContentVersion on cmsContent.nodeId = cmsContentVersion.contentId where contentType = @contentTypeId", SqlHelper.CreateParameter("@contentTypeId", contentTypeId)); - } + } #endregion @@ -912,7 +917,7 @@ namespace umbraco.cms.businesslogic /// Method for moving the tab down /// void MoveDown(); - } + } #endregion #region Protected Tab Class @@ -920,7 +925,7 @@ namespace umbraco.cms.businesslogic /// A tab is merely a way to organize data on a ContentType to make it more /// human friendly /// - protected class Tab : TabI + public class Tab : TabI { private ContentType _contenttype; private static object propertyTypesCacheSyncLock = new object(); @@ -967,13 +972,33 @@ namespace umbraco.cms.businesslogic }); } + public static Tab GetTab(int id) + { + Tab tab = null; + using (IRecordsReader dr = SqlHelper.ExecuteReader( + string.Format( + "Select Id, text, contenttypeNodeId, sortOrder from cmsTab where Id = {0} order by sortOrder", + id))) + { + if (dr.Read()) + { + tab = new Tab(id, dr.GetString("text"), dr.GetInt("sortOrder"), new ContentType(dr.GetInt("contenttypeNodeId")), + true); + } + dr.Close(); + } + + return tab; + } + /// /// Flushes the cache. /// - /// The id. - public static void FlushCache(int Id, int ContentTypeId) + /// The id. + /// + public static void FlushCache(int id, int contentTypeId) { - Cache.ClearCacheItem(generateCacheKey(Id, ContentTypeId)); + Cache.ClearCacheItem(generateCacheKey(id, contentTypeId)); } private static string generateCacheKey(int tabId, int contentTypeId) @@ -1169,9 +1194,9 @@ namespace umbraco.cms.businesslogic } } } - } + } #endregion - + ///// ///// Analyzes the content types. @@ -1209,6 +1234,6 @@ namespace umbraco.cms.businesslogic // return (bool) _optimizedContentTypes[UniqueId]; //} - + } } diff --git a/umbraco/cms/businesslogic/propertytype/propertytype.cs b/umbraco/cms/businesslogic/propertytype/propertytype.cs index 6c9946922e..de27e951a4 100644 --- a/umbraco/cms/businesslogic/propertytype/propertytype.cs +++ b/umbraco/cms/businesslogic/propertytype/propertytype.cs @@ -1,93 +1,93 @@ using System; using System.Collections.Generic; -using System.Data; +using System.Linq; using System.Runtime.CompilerServices; using System.Threading; -using System.Web.UI; -using System.Linq; +using umbraco.BusinessLogic; using umbraco.cms.businesslogic.cache; using umbraco.cms.businesslogic.datatype; using umbraco.cms.businesslogic.language; -using umbraco.interfaces; -using umbraco.DataLayer; -using umbraco.BusinessLogic; +using umbraco.cms.businesslogic.property; using umbraco.cms.businesslogic.web; +using umbraco.cms.helpers; +using umbraco.DataLayer; +using umbraco.interfaces; namespace umbraco.cms.businesslogic.propertytype { - /// - /// Summary description for propertytype. - /// - public class PropertyType - { - #region Declarations + /// + /// Summary description for propertytype. + /// + public class PropertyType + { + #region Declarations - private string _alias; - private string _name; - private int _id; - private int _DataTypeId; - private int _contenttypeid; - private int _sortOrder; - private bool _mandatory = false; - private string _validationRegExp = ""; - private string _description = ""; - private int _tabId = 0; - private static string _connstring = GlobalSettings.DbDSN; + private static string _connstring = GlobalSettings.DbDSN; - private static object propertyTypeCacheSyncLock = new object(); - private static readonly string UmbracoPropertyTypeCacheKey = "UmbracoPropertyTypeCache"; + private static readonly object propertyTypeCacheSyncLock = new object(); + private static readonly string UmbracoPropertyTypeCacheKey = "UmbracoPropertyTypeCache"; + private readonly int _contenttypeid; + private readonly int _id; + private int _DataTypeId; + private string _alias; + private string _description = ""; + private bool _mandatory; + private string _name; + private int _sortOrder; + private int _tabId; + private string _validationRegExp = ""; - #endregion + #endregion protected static ISqlHelper SqlHelper { get { return Application.SqlHelper; } } - #region Constructors + #region Constructors - public PropertyType(int id) - { - using (IRecordsReader dr = SqlHelper.ExecuteReader( - "Select mandatory, DataTypeId, tabId, ContentTypeId, sortOrder, alias, name, validationRegExp, description from cmsPropertyType where id=@id", - SqlHelper.CreateParameter("@id", id))) - { - if(!dr.Read()) - throw new ArgumentException("Propertytype with id: " + id + " doesnt exist!"); - _mandatory = dr.GetBoolean("mandatory"); - _id = id; - if(!dr.IsNull("tabId")) - _tabId = dr.GetInt("tabId"); - _sortOrder = dr.GetInt("sortOrder"); - _alias = dr.GetString("alias"); - _name = dr.GetString("Name"); - _validationRegExp = dr.GetString("validationRegExp"); - _DataTypeId = dr.GetInt("DataTypeId"); - _contenttypeid = dr.GetInt("contentTypeId"); - _description = dr.GetString("description"); - } - } + public PropertyType(int id) + { + using (IRecordsReader dr = SqlHelper.ExecuteReader( + "Select mandatory, DataTypeId, tabId, ContentTypeId, sortOrder, alias, name, validationRegExp, description from cmsPropertyType where id=@id", + SqlHelper.CreateParameter("@id", id))) + { + if (!dr.Read()) + throw new ArgumentException("Propertytype with id: " + id + " doesnt exist!"); + _mandatory = dr.GetBoolean("mandatory"); + _id = id; + if (!dr.IsNull("tabId")) + _tabId = dr.GetInt("tabId"); + _sortOrder = dr.GetInt("sortOrder"); + _alias = dr.GetString("alias"); + _name = dr.GetString("Name"); + _validationRegExp = dr.GetString("validationRegExp"); + _DataTypeId = dr.GetInt("DataTypeId"); + _contenttypeid = dr.GetInt("contentTypeId"); + _description = dr.GetString("description"); + } + } - #endregion + #endregion - #region Properties + #region Properties - public DataTypeDefinition DataTypeDefinition - { - get { return DataTypeDefinition.GetDataTypeDefinition(_DataTypeId); } - set - { - _DataTypeId = value.Id; - this.InvalidateCache(); - SqlHelper.ExecuteNonQuery( - "Update cmsPropertyType set DataTypeId = " + value.Id + " where id=" + this.Id); - } - } + public DataTypeDefinition DataTypeDefinition + { + get { return DataTypeDefinition.GetDataTypeDefinition(_DataTypeId); } + set + { + _DataTypeId = value.Id; + InvalidateCache(); + SqlHelper.ExecuteNonQuery( + "Update cmsPropertyType set DataTypeId = " + value.Id + " where id=" + Id); + } + } - public int Id - { - get { return _id; } - } + public int Id + { + get { return _id; } + } /// /// Setting the tab id is not meant to be used directly in code. Use the ContentType SetTabOnPropertyType method instead @@ -96,158 +96,171 @@ namespace umbraco.cms.businesslogic.propertytype /// /// Setting the tab id to a negative value will actually set the value to NULL in the database /// - public int TabId - { - get { return _tabId; } - set - { - _tabId = value; - this.InvalidateCache(); + public int TabId + { + get { return _tabId; } + set + { + _tabId = value; + InvalidateCache(); object tabId = value; if (value < 1) { tabId = DBNull.Value; } - SqlHelper.ExecuteNonQuery( "Update cmsPropertyType set tabId = @tabId where id = @id", - SqlHelper.CreateParameter("@tabId", tabId), - SqlHelper.CreateParameter("@id", this.Id)); - } - } + SqlHelper.ExecuteNonQuery("Update cmsPropertyType set tabId = @tabId where id = @id", + SqlHelper.CreateParameter("@tabId", tabId), + SqlHelper.CreateParameter("@id", Id)); + } + } - public bool Mandatory - { - get { return _mandatory; } - set - { - _mandatory = value; - this.InvalidateCache(); - SqlHelper.ExecuteNonQuery( - "Update cmsPropertyType set mandatory = @mandatory where id = @id", SqlHelper.CreateParameter("@mandatory", value), - SqlHelper.CreateParameter("@id", this.Id)); - } - } + public bool Mandatory + { + get { return _mandatory; } + set + { + _mandatory = value; + InvalidateCache(); + SqlHelper.ExecuteNonQuery( + "Update cmsPropertyType set mandatory = @mandatory where id = @id", + SqlHelper.CreateParameter("@mandatory", value), + SqlHelper.CreateParameter("@id", Id)); + } + } - public string ValidationRegExp - { - get { return _validationRegExp; } - set - { - _validationRegExp = value; - this.InvalidateCache(); - SqlHelper.ExecuteNonQuery( - "Update cmsPropertyType set validationRegExp = @validationRegExp where id = @id", - SqlHelper.CreateParameter("@validationRegExp", value), SqlHelper.CreateParameter("@id", this.Id)); - } - } + public string ValidationRegExp + { + get { return _validationRegExp; } + set + { + _validationRegExp = value; + InvalidateCache(); + SqlHelper.ExecuteNonQuery( + "Update cmsPropertyType set validationRegExp = @validationRegExp where id = @id", + SqlHelper.CreateParameter("@validationRegExp", value), SqlHelper.CreateParameter("@id", Id)); + } + } - public string Description - { - get { - if (_description != null) { + public string Description + { + get + { + if (_description != null) + { if (!_description.StartsWith("#")) return _description; - else { + else + { Language lang = Language.GetByCultureCode(Thread.CurrentThread.CurrentCulture.Name); - if (lang != null) { - if (Dictionary.DictionaryItem.hasKey(_description.Substring(1, _description.Length - 1))) { - Dictionary.DictionaryItem di = new Dictionary.DictionaryItem(_description.Substring(1, _description.Length - 1)); + if (lang != null) + { + if (Dictionary.DictionaryItem.hasKey(_description.Substring(1, _description.Length - 1))) + { + var di = + new Dictionary.DictionaryItem(_description.Substring(1, _description.Length - 1)); return di.Value(lang.id); } } } return "[" + _description + "]"; - } else + } + else return _description; } - set - { - _description = value; - this.InvalidateCache(); - SqlHelper.ExecuteNonQuery( - "Update cmsPropertyType set description = @description where id = @id", SqlHelper.CreateParameter("@description", value), - SqlHelper.CreateParameter("@id", this.Id)); - } - } - - public int SortOrder - { - get { return _sortOrder; } - set - { - _sortOrder = value; - this.InvalidateCache(); - SqlHelper.ExecuteNonQuery( - "Update cmsPropertyType set sortOrder = @sortOrder where id = @id", SqlHelper.CreateParameter("@sortOrder", value), - SqlHelper.CreateParameter("@id", this.Id)); - } - } - - public string Alias - { - get { return _alias; } - set - { - _alias = value; - this.InvalidateCache(); - SqlHelper.ExecuteNonQuery("Update cmsPropertyType set alias = @alias where id= @id", - SqlHelper.CreateParameter("@alias", helpers.Casing.SafeAliasWithForcingCheck(_alias)), + set + { + _description = value; + InvalidateCache(); + SqlHelper.ExecuteNonQuery( + "Update cmsPropertyType set description = @description where id = @id", + SqlHelper.CreateParameter("@description", value), SqlHelper.CreateParameter("@id", Id)); - } - } + } + } + + public int SortOrder + { + get { return _sortOrder; } + set + { + _sortOrder = value; + InvalidateCache(); + SqlHelper.ExecuteNonQuery( + "Update cmsPropertyType set sortOrder = @sortOrder where id = @id", + SqlHelper.CreateParameter("@sortOrder", value), + SqlHelper.CreateParameter("@id", Id)); + } + } + + public string Alias + { + get { return _alias; } + set + { + _alias = value; + InvalidateCache(); + SqlHelper.ExecuteNonQuery("Update cmsPropertyType set alias = @alias where id= @id", + SqlHelper.CreateParameter("@alias", Casing.SafeAliasWithForcingCheck(_alias)), + SqlHelper.CreateParameter("@id", Id)); + } + } public int ContentTypeId { get { return _contenttypeid; } } - public string Name - { - get - { - if(!_name.StartsWith("#")) - return _name; - else - { - Language lang = Language.GetByCultureCode(Thread.CurrentThread.CurrentCulture.Name); - if(lang != null) - { - if(Dictionary.DictionaryItem.hasKey(_name.Substring(1, _name.Length - 1))) - { - Dictionary.DictionaryItem di = new Dictionary.DictionaryItem(_name.Substring(1, _name.Length - 1)); - return di.Value(lang.id); - } - } + public string Name + { + get + { + if (!_name.StartsWith("#")) + return _name; + else + { + Language lang = Language.GetByCultureCode(Thread.CurrentThread.CurrentCulture.Name); + if (lang != null) + { + if (Dictionary.DictionaryItem.hasKey(_name.Substring(1, _name.Length - 1))) + { + var di = new Dictionary.DictionaryItem(_name.Substring(1, _name.Length - 1)); + return di.Value(lang.id); + } + } - return "[" + _name + "]"; - } - } - set - { - _name = value; - InvalidateCache(); - SqlHelper.ExecuteNonQuery( - "UPDATE cmsPropertyType SET name=@name WHERE id=@id", + return "[" + _name + "]"; + } + } + set + { + _name = value; + InvalidateCache(); + SqlHelper.ExecuteNonQuery( + "UPDATE cmsPropertyType SET name=@name WHERE id=@id", SqlHelper.CreateParameter("@name", _name), SqlHelper.CreateParameter("@id", Id)); - } - } + } + } - #endregion + #endregion - #region Methods + #region Methods - public string GetRawName() - { - return _name; - } - public string GetRawDescription() { + public string GetRawName() + { + return _name; + } + + public string GetRawDescription() + { return _description; } + [MethodImpl(MethodImplOptions.Synchronized)] - public static PropertyType MakeNew(DataTypeDefinition dt, ContentType ct, string name, string alias) - { + public static PropertyType MakeNew(DataTypeDefinition dt, ContentType ct, string name, string alias) + { //make sure that the alias starts with a letter if (string.IsNullOrEmpty(alias)) throw new ArgumentNullException("alias"); @@ -256,42 +269,45 @@ namespace umbraco.cms.businesslogic.propertytype if (!Char.IsLetter(alias[0])) throw new ArgumentException("alias must start with a letter", "alias"); - PropertyType pt; - try - { + PropertyType pt; + try + { // The method is synchronized, but we'll still look it up with an additional parameter (alias) - SqlHelper.ExecuteNonQuery("INSERT INTO cmsPropertyType (DataTypeId, ContentTypeId, alias, name) VALUES (@DataTypeId, @ContentTypeId, @alias, @name)", + SqlHelper.ExecuteNonQuery( + "INSERT INTO cmsPropertyType (DataTypeId, ContentTypeId, alias, name) VALUES (@DataTypeId, @ContentTypeId, @alias, @name)", SqlHelper.CreateParameter("@DataTypeId", dt.Id), SqlHelper.CreateParameter("@ContentTypeId", ct.Id), SqlHelper.CreateParameter("@alias", alias), SqlHelper.CreateParameter("@name", name)); - pt = new PropertyType(SqlHelper.ExecuteScalar("SELECT MAX(id) FROM cmsPropertyType WHERE alias=@alias", - SqlHelper.CreateParameter("@alias", alias))); - } - finally - { - // Clear cached items - Cache.ClearCacheByKeySearch(UmbracoPropertyTypeCacheKey); - } + pt = + new PropertyType( + SqlHelper.ExecuteScalar("SELECT MAX(id) FROM cmsPropertyType WHERE alias=@alias", + SqlHelper.CreateParameter("@alias", alias))); + } + finally + { + // Clear cached items + Cache.ClearCacheByKeySearch(UmbracoPropertyTypeCacheKey); + } - return pt; - } + return pt; + } - public static PropertyType[] GetAll() - { - List result = new List(); - using (IRecordsReader dr = - SqlHelper.ExecuteReader("select id, Name from cmsPropertyType order by Name")) - { - while(dr.Read()) - { - PropertyType pt = GetPropertyType(dr.GetInt("id")); - if(pt != null) - result.Add(pt); - } - } + public static PropertyType[] GetAll() + { + var result = new List(); + using (IRecordsReader dr = + SqlHelper.ExecuteReader("select id, Name from cmsPropertyType order by Name")) + { + while (dr.Read()) + { + PropertyType pt = GetPropertyType(dr.GetInt("id")); + if (pt != null) + result.Add(pt); + } + } return result.ToArray(); - } + } /// /// Returns all property types based on the data type definition @@ -300,7 +316,7 @@ namespace umbraco.cms.businesslogic.propertytype /// public static IEnumerable GetByDataTypeDefinition(int dataTypeDefId) { - List result = new List(); + var result = new List(); using (IRecordsReader dr = SqlHelper.ExecuteReader( "select id, Name from cmsPropertyType where dataTypeId=@dataTypeId order by Name", @@ -311,41 +327,55 @@ namespace umbraco.cms.businesslogic.propertytype PropertyType pt = GetPropertyType(dr.GetInt("id")); if (pt != null) result.Add(pt); - } + } } return result.ToList(); } - public void delete() - { + public void delete() + { // flush cache FlushCache(); // clean all properties on inherited document types (if this propertytype is removed from a master) cleanPropertiesOnDeletion(_contenttypeid); -// DocumentType.GetAllAsList().FindAll(dt => dt.MasterContentType == _contenttypeid).ForEach(dt => cleanPropertiesOnDeletion(dt.Id)); + // DocumentType.GetAllAsList().FindAll(dt => dt.MasterContentType == _contenttypeid).ForEach(dt => cleanPropertiesOnDeletion(dt.Id)); // Delete all properties of propertytype cleanPropertiesOnDeletion(_contenttypeid); // Delete PropertyType .. - SqlHelper.ExecuteNonQuery("Delete from cmsPropertyType where id = " + this.Id); + SqlHelper.ExecuteNonQuery("Delete from cmsPropertyType where id = " + Id); - // delete - this.InvalidateCache(); - } + // delete cache from either master (via tabid) or current contentype + FlushCacheBasedOnTab(); + InvalidateCache(); + } + + public void FlushCacheBasedOnTab() + { + if (TabId != 0) + { + ContentType.FlushFromCache(ContentType.Tab.GetTab(TabId).ContentType); + } + else + { + ContentType.FlushFromCache(ContentTypeId); + } + } private void cleanPropertiesOnDeletion(int contentTypeId) { // first delete from all master document types - DocumentType.GetAllAsList().FindAll(dt => dt.MasterContentType == contentTypeId).ForEach(dt => cleanPropertiesOnDeletion(dt.Id)); + DocumentType.GetAllAsList().FindAll(dt => dt.MasterContentType == contentTypeId).ForEach( + dt => cleanPropertiesOnDeletion(dt.Id)); // then remove from the current doc type - var objs = Content.getContentOfContentType(new ContentType(contentTypeId)); + Content[] objs = Content.getContentOfContentType(new ContentType(contentTypeId)); foreach (Content c in objs.ToList()) { - var prop = c.getProperty(this); + Property prop = c.getProperty(this); if (prop != null) { prop.delete(); @@ -353,34 +383,34 @@ namespace umbraco.cms.businesslogic.propertytype } // invalidate content type cache - ContentType.GetContentType(contentTypeId).FlushFromCache(contentTypeId); + ContentType.FlushFromCache(contentTypeId); } - public IDataType GetEditControl(object Value, bool IsPostBack) - { - IDataType dt = this.DataTypeDefinition.DataType; - dt.DataEditor.Editor.ID = this.Alias; - IData df = this.DataTypeDefinition.DataType.Data; - ((Control)dt.DataEditor.Editor).ID = this.Alias; + public IDataType GetEditControl(object value, bool isPostBack) + { + IDataType dt = DataTypeDefinition.DataType; + dt.DataEditor.Editor.ID = Alias; + IData df = DataTypeDefinition.DataType.Data; + (dt.DataEditor.Editor).ID = Alias; - if(!IsPostBack) - { - if(Value != null) - dt.Data.Value = Value; - else - dt.Data.Value = ""; - } + if (!isPostBack) + { + if (value != null) + dt.Data.Value = value; + else + dt.Data.Value = ""; + } - return dt; - } + return dt; + } - /// - /// Used to persist object changes to the database. In Version3.0 it's just a stub for future compatibility - /// - public virtual void Save() - { + /// + /// Used to persist object changes to the database. In Version3.0 it's just a stub for future compatibility + /// + public virtual void Save() + { FlushCache(); - } + } protected virtual void FlushCache() { @@ -388,40 +418,40 @@ namespace umbraco.cms.businesslogic.propertytype Cache.ClearCacheItem(GetCacheKey(Id)); // clear cache in contentype - Cache.ClearCacheItem("ContentType_PropertyTypes_Content:" + this._contenttypeid.ToString()); + Cache.ClearCacheItem("ContentType_PropertyTypes_Content:" + _contenttypeid); // clear cache in tab - foreach(umbraco.cms.businesslogic.ContentType.TabI t in new ContentType(ContentTypeId).getVirtualTabs) + foreach (ContentType.TabI t in new ContentType(ContentTypeId).getVirtualTabs) ContentType.FlushTabCache(t.Id, t.ContentType); } - public static PropertyType GetPropertyType(int id) - { - return Cache.GetCacheItem(GetCacheKey(id), propertyTypeCacheSyncLock, - TimeSpan.FromMinutes(30), - delegate - { - try - { - return new PropertyType(id); - } - catch - { - return null; - } - }); - } + public static PropertyType GetPropertyType(int id) + { + return Cache.GetCacheItem(GetCacheKey(id), propertyTypeCacheSyncLock, + TimeSpan.FromMinutes(30), + delegate + { + try + { + return new PropertyType(id); + } + catch + { + return null; + } + }); + } - private void InvalidateCache() - { - Cache.ClearCacheItem(GetCacheKey(this.Id)); - } + private void InvalidateCache() + { + Cache.ClearCacheItem(GetCacheKey(Id)); + } - private static string GetCacheKey(int id) - { - return UmbracoPropertyTypeCacheKey + id; - } + private static string GetCacheKey(int id) + { + return UmbracoPropertyTypeCacheKey + id; + } - #endregion - } -} + #endregion + } +} \ No newline at end of file diff --git a/umbraco/presentation/umbraco/controls/ContentTypeControlNew.ascx.cs b/umbraco/presentation/umbraco/controls/ContentTypeControlNew.ascx.cs index 28f2630b42..f2848fa567 100644 --- a/umbraco/presentation/umbraco/controls/ContentTypeControlNew.ascx.cs +++ b/umbraco/presentation/umbraco/controls/ContentTypeControlNew.ascx.cs @@ -55,7 +55,7 @@ namespace umbraco.controls { base.OnInit(e); - int docTypeId = int.Parse(Request.QueryString["id"]); + int docTypeId = getDocTypeId(); cType = new cms.businesslogic.ContentType(docTypeId); setupInfoPane(); @@ -68,6 +68,11 @@ namespace umbraco.controls } + private int getDocTypeId() + { + return int.Parse(Request.QueryString["id"]); + } + protected void Page_Load(object sender, System.EventArgs e) { @@ -109,6 +114,9 @@ namespace umbraco.controls SaveTabs(); SaveAllowedChildTypes(); + + // reload content type (due to caching) + cType = new ContentType(cType.Id); bindDataGenericProperties(true); // we need to re-bind the alias as the SafeAlias method can have changed it @@ -554,8 +562,7 @@ jQuery(function() { refreshDropDowns(); }); if (cType.getPropertyType(Casing.SafeAliasWithForcingCheck(gpData.Alias.Trim())) == null) { string[] info = { gpData.Name, gpData.Type.ToString() }; - cType.AddPropertyType(cms.businesslogic.datatype.DataTypeDefinition.GetDataTypeDefinition(gpData.Type), Casing.SafeAliasWithForcingCheck(gpData.Alias.Trim()), gpData.Name); - cms.businesslogic.propertytype.PropertyType pt = cType.getPropertyType(Casing.SafeAliasWithForcingCheck(gpData.Alias.Trim())); + cms.businesslogic.propertytype.PropertyType pt = cType.AddPropertyType(cms.businesslogic.datatype.DataTypeDefinition.GetDataTypeDefinition(gpData.Type), Casing.SafeAliasWithForcingCheck(gpData.Alias.Trim()), gpData.Name); pt.Mandatory = gpData.Mandatory; pt.ValidationRegExp = gpData.Validation; pt.Description = gpData.Description; diff --git a/umbraco/presentation/umbraco/developer/Cache/viewCacheItem.aspx.cs b/umbraco/presentation/umbraco/developer/Cache/viewCacheItem.aspx.cs index c32cd6cca7..bb1fd0d51b 100644 --- a/umbraco/presentation/umbraco/developer/Cache/viewCacheItem.aspx.cs +++ b/umbraco/presentation/umbraco/developer/Cache/viewCacheItem.aspx.cs @@ -1,49 +1,43 @@ using System; -using System.Collections; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.Web; -using System.Web.SessionState; -using System.Web.UI; -using System.Web.UI.WebControls; -using System.Web.UI.HtmlControls; +using umbraco.BasePages; namespace umbraco.cms.presentation.developer { - /// - /// Summary description for viewCacheItem. - /// - public partial class viewCacheItem : BasePages.UmbracoEnsuredPage - { - - protected void Page_Load(object sender, System.EventArgs e) - { - // Put user code to initialize the page here - Panel1.Text = ui.Text("viewCacheItem"); - string cacheKey = Request.QueryString["key"]; - LabelCacheAlias.Text = cacheKey; - LabelCacheValue.Text = System.Web.HttpRuntime.Cache[cacheKey].ToString(); - } + /// + /// Summary description for viewCacheItem. + /// + public partial class viewCacheItem : UmbracoEnsuredPage + { + protected void Page_Load(object sender, EventArgs e) + { + // Put user code to initialize the page here + Panel1.Text = ui.Text("viewCacheItem"); + string cacheKey = Request.QueryString["key"]; + LabelCacheAlias.Text = cacheKey; + object cacheItem = HttpRuntime.Cache[cacheKey]; + LabelCacheValue.Text = cacheItem != null ? cacheItem.ToString() : "Cache item isn't in cache anymore!"; + } - #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); - } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { + #region Web Form Designer generated code - } - #endregion - } -} + protected override void OnInit(EventArgs e) + { + // + // CODEGEN: This call is required by the ASP.NET Web Form Designer. + // + InitializeComponent(); + base.OnInit(e); + } + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + } + + #endregion + } +} \ No newline at end of file