using System;
using System.Linq;
using System.Runtime.Serialization;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
namespace Umbraco.Core.Models
{
///
/// Represents a Script file
///
[Serializable]
[DataContract(IsReference = true)]
public class Script : File
{
public Script(string path) : base(path)
{
base.Path = path;
}
///
/// Boolean indicating whether the file could be validated
///
///
/// The validation logic was previsouly placed in the codebehind of editScript.aspx,
/// but has been moved to the script file so the validation is central.
///
/// True if file is valid, otherwise false
public override bool IsValid()
{
//NOTE Since a script file can be both JS, Razor Views, Razor Macros and Xslt
//it might be an idea to create validations for all 3 and divide the validation
//into 4 private methods.
//See codeEditorSave.asmx.cs for reference.
var exts = LegacyUmbracoSettings.ScriptFileTypes.Split(',').ToList();
/*if (UmbracoSettings.DefaultRenderingEngine == RenderingEngine.Mvc)
{
exts.Add("cshtml");
exts.Add("vbhtml");
}*/
var dirs = SystemDirectories.Scripts;
/*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;
}
///
/// Indicates whether the current entity has an identity, which in this case is a path/name.
///
///
/// Overrides the default Entity identity check.
///
public override bool HasIdentity
{
get { return string.IsNullOrEmpty(Path) == false; }
}
}
}