using System; using System.Collections.Generic; using System.Runtime.Serialization; using Umbraco.Core.Configuration; using Umbraco.Core.IO; namespace Umbraco.Core.Models { /// /// Represents a Template file /// [Serializable] [DataContract(IsReference = true)] public class Template : File, ITemplate { private readonly string _alias; private readonly string _name; internal Template(string path) : base(path) { base.Path = path; ParentId = -1; } public Template(string path, string name, string alias) : base(path) { base.Path = path; ParentId = -1; Key = name.EncodeAsGuid(); _name = name; _alias = alias; CreateDate = DateTime.Now; UpdateDate = DateTime.Now; } [DataMember] internal int CreatorId { get; set; } [DataMember] internal int Level { get; set; } [DataMember] internal int SortOrder { get; set; } [DataMember] internal int ParentId { get; set; } [DataMember] internal string NodePath { get; set; } [DataMember] internal int MasterTemplateId { get; set; } [DataMember] internal string MasterTemplateAlias { get; set; } [DataMember] public override string Alias { get { return _alias; } } [DataMember] public override string Name { get { return _name; } } /// /// Returns the that corresponds to the template file /// /// public RenderingEngine GetTypeOfRenderingEngine() { if(Path.EndsWith("cshtml") || Path.EndsWith("vbhtml")) return RenderingEngine.Mvc; return RenderingEngine.WebForms; } /// /// Boolean indicating whether the file could be validated /// /// True if file is valid, otherwise false public override bool IsValid() { var exts = new List(); if (UmbracoSettings.DefaultRenderingEngine == RenderingEngine.Mvc) { exts.Add("cshtml"); exts.Add("vbhtml"); } else { exts.Add(UmbracoSettings.UseAspNetMasterPages ? "master" : "aspx"); } var dirs = SystemDirectories.Masterpages; if (UmbracoSettings.DefaultRenderingEngine == RenderingEngine.Mvc) dirs += "," + SystemDirectories.MvcViews; //Validate file var validFile = IOHelper.VerifyEditPath(Path, dirs.Split(',')); //Validate extension var validExtension = IOHelper.VerifyFileExtension(Path, exts); return validFile && validExtension; } } }