diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/DocTypeBase.cs b/LinqToUmbraco/src/umbraco.Linq/Core/DocTypeBase.cs index b10ed2b773..a4d147ba1e 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/DocTypeBase.cs +++ b/LinqToUmbraco/src/umbraco.Linq/Core/DocTypeBase.cs @@ -313,6 +313,8 @@ namespace umbraco.Linq.Core } } + public virtual string CreatorName { get; internal set; } + /// /// ID of the user who last edited the item /// @@ -344,6 +346,8 @@ namespace umbraco.Linq.Core } } + public virtual string WriterName { get; internal set; } + /// /// Raises the property changing event. /// diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/IDocTypeBase.cs b/LinqToUmbraco/src/umbraco.Linq/Core/IDocTypeBase.cs index 8e01b38fdc..786c03edb0 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/IDocTypeBase.cs +++ b/LinqToUmbraco/src/umbraco.Linq/Core/IDocTypeBase.cs @@ -36,6 +36,11 @@ namespace umbraco.Linq.Core /// The creator ID. int CreatorID { get; } /// + /// Gets the name of the creator. + /// + /// The name of the creator. + string CreatorName { get; } + /// /// Gets the id of the item. /// /// The id. @@ -67,14 +72,6 @@ namespace umbraco.Linq.Core /// The parent node id. int ParentNodeId { get; set; } /// - /// Occurs when a property value changes. - /// - event PropertyChangedEventHandler PropertyChanged; - /// - /// Occurs when a property value is changing. - /// - event PropertyChangingEventHandler PropertyChanging; - /// /// Gets or sets the sort order. /// /// The sort order. @@ -99,5 +96,10 @@ namespace umbraco.Linq.Core /// /// The writer ID. int WriterID { get; } + /// + /// Gets the name of the writer. + /// + /// The name of the writer. + string WriterName { get; } } } diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeAssociationTree.cs b/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeAssociationTree.cs index 102c5502ef..30ecdd60cd 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeAssociationTree.cs +++ b/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeAssociationTree.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Xml.Linq; namespace umbraco.Linq.Core.Node { @@ -60,7 +58,7 @@ namespace umbraco.Linq.Core.Node var rawNodes = parents .Single() .Elements() - .Where(x => x.HasAttributes) + .Where(x => x.Attribute("isDoc") != null) ; this._nodes = provider.DynamicNodeCreation(rawNodes).Cast(); //drop is back to the type which was asked for } @@ -86,6 +84,9 @@ namespace umbraco.Linq.Core.Node /// The provider. public override UmbracoDataProvider Provider { get; protected set; } + /// + /// Reloads the cache. + /// public override void ReloadCache() { this.LoadNodes(); diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeDataProvider.cs b/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeDataProvider.cs index cfc86ee2c9..4a4caf06d2 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeDataProvider.cs +++ b/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeDataProvider.cs @@ -1,12 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Linq.Expressions; using System.IO; using System.Xml.Linq; -using System.Xml.Schema; -using System.Xml; using System.Reflection; using umbraco.presentation; using umbraco.cms.helpers; @@ -18,19 +14,16 @@ namespace umbraco.Linq.Core.Node /// Data Provider for LINQ to umbraco via umbraco ndoes /// /// - /// This class provides a data access model for the umbraco XML cache. - /// It is responsible for the access to the XML and construction of nodes from it. - /// - /// The is capable of reading the XML cache from either the path provided in the umbraco settings or from a specified location on the file system. + /// This class provides a data access model for the umbraco XML cache. + /// It is responsible for the access to the XML and construction of nodes from it. + /// The is capable of reading the XML cache from either the path provided in the umbraco settings or from a specified location on the file system. /// public sealed class NodeDataProvider : UmbracoDataProvider { private object lockObject = new object(); private string _xmlPath; private Dictionary _trees; - private bool _enforceSchemaValidation; private XDocument _xml; - private const string UMBRACO_XSD_PATH = "umbraco.Linq.Core.Node.UmbracoConfig.xsd"; private Dictionary _knownTypes; private bool _tryMemoryCache = false; @@ -43,10 +36,10 @@ namespace umbraco.Linq.Core.Node { if (this._tryMemoryCache) { - var doc = content.Instance.XmlContent; + var doc = UmbracoContext.Current.Server.ContentXml; if (doc != null) { - this._xml = XDocument.Load(new XmlNodeReader(doc)); + this._xml = doc; } else { @@ -57,55 +50,29 @@ namespace umbraco.Linq.Core.Node { this._xml = XDocument.Load(this._xmlPath); } - - if (this._enforceSchemaValidation) - { - XmlSchemaSet schemas = new XmlSchemaSet(); - //read the resorce for the XSD to validate against - schemas.Add("", System.Xml.XmlReader.Create(this.GetType().Assembly.GetManifestResourceStream(UMBRACO_XSD_PATH))); - - //we'll have a list of all validation exceptions to put them to the screen - List exList = new List(); - - //some funky in-line event handler. Lambda loving goodness ;) - this._xml.Validate(schemas, (o, e) => { exList.Add(e.Exception); }); - - if (exList.Count > 0) - { - //dump out the exception list - StringBuilder sb = new StringBuilder(); - sb.AppendLine("The following validation errors occuring with the XML:"); - foreach (var item in exList) - { - sb.AppendLine(" * " + item.Message + " - " + item.StackTrace); - } - throw new XmlSchemaException(sb.ToString()); - } - } } return this._xml; //cache the XML in memory to increase performance and force the disposable pattern } } - private void Init(string xmlPath, bool legacySchema) + /// + /// Initializes the NodeDataProvider, performing validation + /// + /// The XML path. + /// if set to true [new schema mode]. + protected void Init(string xmlPath, bool newSchemaMode) { - if (legacySchema) - { - throw new NotSupportedException("The NodeDataProvider does not support the old XML schema mode. Set \"UseLegacyXmlSchema\" in your umbracoSettings.Config to \"true\" and republish the site"); - } + if (!newSchemaMode) + throw new NotSupportedException(this.Name + " only supports the new XML schema. Change the umbracoSettings.config to implement this and republish"); if (string.IsNullOrEmpty(xmlPath)) - { throw new ArgumentNullException("xmlPath"); - } if (!File.Exists(xmlPath)) - { throw new FileNotFoundException("The XML used by the provider must exist", xmlPath); - } - this._xmlPath = xmlPath; + this._xmlPath = xmlPath; this._trees = new Dictionary(); } @@ -113,7 +80,7 @@ namespace umbraco.Linq.Core.Node /// Initializes a new instance of the class using umbraco settings as XML path /// public NodeDataProvider() - : this(UmbracoContext.Current.Server.MapPath(UmbracoContext.Current.Server.ContentXmlPath), !UmbracoContext.Current.NewSchemaMode) + : this(UmbracoContext.Current.Server.MapPath(UmbracoContext.Current.Server.ContentXmlPath), UmbracoContext.Current.NewSchemaMode) { this._tryMemoryCache = true; } @@ -122,27 +89,13 @@ namespace umbraco.Linq.Core.Node /// Initializes a new instance of the class /// /// The path of the umbraco XML - /// if set to true [legacy schema]. + /// Indicates which Schema mode is used for the XML file /// /// This constructor is ideal for unit testing as it allows for the XML to be located anywhere /// - public NodeDataProvider(string xmlPath, bool legacySchema) - : this(xmlPath, legacySchema, false) + public NodeDataProvider(string xmlPath, bool newSchemaMode) { - } - - /// - /// Initializes a new instance of the class. - /// - /// The XML path. - /// if set to true [legacy schema]. - /// if set to true when the XML document is accessed validation against the umbraco XSD will be done. - /// Thrown when the xmlPath is null - /// Thrown when the xmlPath does not resolve to a physical file - public NodeDataProvider(string xmlPath, bool legacySchema, bool enforceValidation) - { - this.Init(xmlPath, legacySchema); - this._enforceSchemaValidation = enforceValidation; + this.Init(xmlPath, newSchemaMode); } #region IDisposable Members @@ -198,9 +151,7 @@ namespace umbraco.Linq.Core.Node var attr = ReflectionAssistance.GetUmbracoInfoAttribute(typeof(TDocType)); if (!this._trees.ContainsKey(attr)) - { SetupNodeTree(attr); - } return (NodeTree)this._trees[attr]; } @@ -237,14 +188,10 @@ namespace umbraco.Linq.Core.Node var parentXml = this.Xml.Descendants().SingleOrDefault(d => (int)d.Attribute("id") == id); if (!ReflectionAssistance.CompareByAlias(typeof(TDocType), parentXml)) - { throw new DocTypeMissMatchException(parentXml.Name.LocalName, ReflectionAssistance.GetUmbracoInfoAttribute(typeof(TDocType)).Alias); - } if (parentXml == null) //really shouldn't happen! - { throw new ArgumentException("Parent ID \"" + id + "\" cannot be found in the loaded XML. Ensure that the umbracoDataContext is being disposed of once it is no longer needed"); - } var parent = new TDocType(); this.LoadFromXml(parentXml, parent); @@ -337,10 +284,9 @@ namespace umbraco.Linq.Core.Node { return ((UmbracoInfoAttribute)k.GetCustomAttributes(typeof(UmbracoInfoAttribute), true)[0]).Alias; }); + foreach (var type in types) - { this._knownTypes.Add(Casing.SafeAlias(type.Key), type.Value); - } } @@ -380,7 +326,9 @@ namespace umbraco.Linq.Core.Node node.SortOrder = (int)xml.Attribute("sortOrder"); node.UpdateDate = (DateTime)xml.Attribute("updateDate"); node.CreatorID = (int)xml.Attribute("creatorID"); + node.CreatorName = (string)xml.Attribute("creatorName"); node.WriterID = (int)xml.Attribute("writerID"); + node.WriterName = (string)xml.Attribute("writerName"); node.Level = (int)xml.Attribute("level"); node.TemplateId = (int)xml.Attribute("template"); @@ -391,9 +339,8 @@ namespace umbraco.Linq.Core.Node var data = xml.Element(Casing.SafeAlias(attr.Alias)).Value; if (p.PropertyType == typeof(int) && string.IsNullOrEmpty(data)) - { data = "-1"; - } + // TODO: Address how Convert.ChangeType works in globalisation p.SetValue(node, Convert.ChangeType(data, p.PropertyType), null); } diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeTree.cs b/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeTree.cs index 6a3c066efa..8d4248ce53 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeTree.cs +++ b/LinqToUmbraco/src/umbraco.Linq/Core/Node/NodeTree.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Xml.Linq; namespace umbraco.Linq.Core.Node diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/Tree.cs b/LinqToUmbraco/src/umbraco.Linq/Core/Tree.cs index 6363dda737..285c42cfee 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/Tree.cs +++ b/LinqToUmbraco/src/umbraco.Linq/Core/Tree.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using System.Collections; -using System.ComponentModel; -using System.Linq.Expressions; -using System.Xml.Linq; namespace umbraco.Linq.Core { @@ -12,7 +7,7 @@ namespace umbraco.Linq.Core /// Represents a collection within DataProvider of a DocType /// /// - /// Similar to the implementation of , + /// Similar to the implementation of , /// providing a single collection which represents all instances of the given type within the DataProvider. /// /// Implementers of this type will need to provide a manner of retrieving the TDocType from the DataProvider @@ -69,9 +64,25 @@ namespace umbraco.Linq.Core #endregion + /// + /// Insert an item on submit of the DataContext + /// + /// The item. public abstract void InsertOnSubmit(TDocType item); + /// + /// Insert a collection of items on submit of the DataContext + /// + /// The items. public abstract void InsertAllOnSubmit(IEnumerable items); + /// + /// Deletes an item on submit of the DataContext + /// + /// The itemm. public abstract void DeleteOnSubmit(TDocType itemm); + /// + /// Deletes a collection of items on submit of the DataContext + /// + /// The items. public abstract void DeleteAllOnSubmit(IEnumerable items); } } diff --git a/LinqToUmbraco/src/umbraco.Linq/Core/umbraco.Linq.Core.csproj b/LinqToUmbraco/src/umbraco.Linq/Core/umbraco.Linq.Core.csproj index 8ad3cf9f92..8da30d905a 100644 --- a/LinqToUmbraco/src/umbraco.Linq/Core/umbraco.Linq.Core.csproj +++ b/LinqToUmbraco/src/umbraco.Linq/Core/umbraco.Linq.Core.csproj @@ -53,6 +53,9 @@ 3.5 + + 3.5 + 3.0 @@ -90,9 +93,6 @@ - - Node\UmbracoConfig.xsd - diff --git a/umbraco.sln b/umbraco.sln index 4f8196aacc..523bccc6a8 100644 --- a/umbraco.sln +++ b/umbraco.sln @@ -48,7 +48,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{05329D config templates\config\404handlers.config = config templates\config\404handlers.config config templates\config\Dashboard.config = config templates\config\Dashboard.config umbraco\presentation\config\ExamineIndex.config = umbraco\presentation\config\ExamineIndex.config - umbraco\presentation\config\ExamineSettings.config = umbraco\presentation\config\ExamineSettings.config config templates\config\formHandlers.config = config templates\config\formHandlers.config config templates\config\metablogConfig.config = config templates\config\metablogConfig.config config templates\config\restExtensions.config = config templates\config\restExtensions.config diff --git a/umbraco/presentation/web.config b/umbraco/presentation/web.config deleted file mode 100644 index be28a290aa..0000000000 --- a/umbraco/presentation/web.config +++ /dev/null @@ -1,218 +0,0 @@ - - - -
-
- - - -
- -
-
-
-
- - - - -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://regexlib.com/WebServices.asmx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file