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