2012-12-10 13:49:20 -01:00
|
|
|
using System;
|
2012-11-07 13:56:52 -01:00
|
|
|
using System.Collections.Generic;
|
2012-12-10 13:49:20 -01:00
|
|
|
using Umbraco.Core.Auditing;
|
2012-12-15 10:43:03 +05:00
|
|
|
using Umbraco.Core.Events;
|
2012-10-24 11:29:51 -02:00
|
|
|
using Umbraco.Core.Models;
|
|
|
|
|
using Umbraco.Core.Persistence;
|
|
|
|
|
using Umbraco.Core.Persistence.UnitOfWork;
|
|
|
|
|
|
2012-11-12 07:40:11 -01:00
|
|
|
namespace Umbraco.Core.Services
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-10-30 09:25:28 -01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Represents the File Service, which is an easy access to operations involving <see cref="IFile"/> objects like Scripts, Stylesheets and Templates
|
|
|
|
|
/// </summary>
|
2012-10-24 11:29:51 -02:00
|
|
|
public class FileService : IFileService
|
|
|
|
|
{
|
2012-12-14 08:22:42 +05:00
|
|
|
private readonly RepositoryFactory _repositoryFactory;
|
2012-12-14 12:59:47 -01:00
|
|
|
private readonly IUnitOfWorkProvider _fileUowProvider;
|
|
|
|
|
private readonly IDatabaseUnitOfWorkProvider _dataUowProvider;
|
2012-10-24 11:29:51 -02:00
|
|
|
|
2012-12-14 13:27:10 -01:00
|
|
|
public FileService()
|
|
|
|
|
: this(new RepositoryFactory())
|
|
|
|
|
{}
|
|
|
|
|
|
2012-12-14 08:22:42 +05:00
|
|
|
public FileService(RepositoryFactory repositoryFactory)
|
|
|
|
|
: this(new FileUnitOfWorkProvider(), new PetaPocoUnitOfWorkProvider(), repositoryFactory)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2012-12-14 08:22:42 +05:00
|
|
|
public FileService(IUnitOfWorkProvider fileProvider, IDatabaseUnitOfWorkProvider dataProvider, RepositoryFactory repositoryFactory)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-14 08:22:42 +05:00
|
|
|
_repositoryFactory = repositoryFactory;
|
2012-12-14 12:59:47 -01:00
|
|
|
_fileUowProvider = fileProvider;
|
|
|
|
|
_dataUowProvider = dataProvider;
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a list of all <see cref="Stylesheet"/> objects
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>An enumerable list of <see cref="Stylesheet"/> objects</returns>
|
|
|
|
|
public IEnumerable<Stylesheet> GetStylesheets(params string[] names)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
using (var repository = _repositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork()))
|
|
|
|
|
{
|
|
|
|
|
return repository.GetAll(names);
|
|
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a <see cref="Stylesheet"/> object by its name
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">Name of the stylesheet incl. extension</param>
|
|
|
|
|
/// <returns>A <see cref="Stylesheet"/> object</returns>
|
|
|
|
|
public Stylesheet GetStylesheetByName(string name)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
using (var repository = _repositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork()))
|
|
|
|
|
{
|
|
|
|
|
return repository.Get(name);
|
|
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Saves a <see cref="Stylesheet"/>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="stylesheet"><see cref="Stylesheet"/> to save</param>
|
2012-12-10 13:49:20 -01:00
|
|
|
/// <param name="userId"></param>
|
|
|
|
|
public void SaveStylesheet(Stylesheet stylesheet, int userId = -1)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-10 13:49:20 -01:00
|
|
|
var e = new SaveEventArgs();
|
|
|
|
|
if (Saving != null)
|
|
|
|
|
Saving(stylesheet, e);
|
|
|
|
|
|
|
|
|
|
if (!e.Cancel)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
var uow = _fileUowProvider.GetUnitOfWork();
|
|
|
|
|
using (var repository = _repositoryFactory.CreateStylesheetRepository(uow))
|
|
|
|
|
{
|
|
|
|
|
repository.AddOrUpdate(stylesheet);
|
|
|
|
|
uow.Commit();
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (Saved != null)
|
|
|
|
|
Saved(stylesheet, e);
|
|
|
|
|
}
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-10 14:53:36 -01:00
|
|
|
Audit.Add(AuditTypes.Save, string.Format("Save Stylesheet performed by user"), userId == -1 ? 0 : userId, -1);
|
2012-12-10 13:49:20 -01:00
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Deletes a stylesheet by its name
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">Name incl. extension of the Stylesheet to delete</param>
|
2012-12-10 13:49:20 -01:00
|
|
|
/// <param name="userId"></param>
|
|
|
|
|
public void DeleteStylesheet(string name, int userId = -1)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
var uow = _fileUowProvider.GetUnitOfWork();
|
|
|
|
|
using (var repository = _repositoryFactory.CreateStylesheetRepository(uow))
|
|
|
|
|
{
|
|
|
|
|
var stylesheet = repository.Get(name);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
var e = new DeleteEventArgs();
|
|
|
|
|
if (Deleting != null)
|
|
|
|
|
Deleting(stylesheet, e);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (!e.Cancel)
|
|
|
|
|
{
|
|
|
|
|
repository.Delete(stylesheet);
|
|
|
|
|
uow.Commit();
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (Deleted != null)
|
|
|
|
|
Deleted(stylesheet, e);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
Audit.Add(AuditTypes.Delete, string.Format("Delete Stylesheet performed by user"), userId == -1 ? 0 : userId, -1);
|
|
|
|
|
}
|
2012-12-10 13:49:20 -01:00
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Validates a <see cref="Stylesheet"/>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="stylesheet"><see cref="Stylesheet"/> to validate</param>
|
|
|
|
|
/// <returns>True if Stylesheet is valid, otherwise false</returns>
|
|
|
|
|
public bool ValidateStylesheet(Stylesheet stylesheet)
|
|
|
|
|
{
|
|
|
|
|
return stylesheet.IsValid() && stylesheet.IsFileValidCss();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a list of all <see cref="Script"/> objects
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>An enumerable list of <see cref="Script"/> objects</returns>
|
|
|
|
|
public IEnumerable<Script> GetScripts(params string[] names)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
using (var repository = _repositoryFactory.CreateScriptRepository(_fileUowProvider.GetUnitOfWork()))
|
|
|
|
|
{
|
|
|
|
|
return repository.GetAll(names);
|
|
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets a <see cref="Script"/> object by its name
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">Name of the script incl. extension</param>
|
|
|
|
|
/// <returns>A <see cref="Script"/> object</returns>
|
|
|
|
|
public Script GetScriptByName(string name)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
using (var repository = _repositoryFactory.CreateScriptRepository(_fileUowProvider.GetUnitOfWork()))
|
|
|
|
|
{
|
|
|
|
|
return repository.Get(name);
|
|
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Saves a <see cref="Script"/>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="script"><see cref="Script"/> to save</param>
|
2012-12-10 13:49:20 -01:00
|
|
|
/// <param name="userId"></param>
|
|
|
|
|
public void SaveScript(Script script, int userId = -1)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-10 13:49:20 -01:00
|
|
|
var e = new SaveEventArgs();
|
|
|
|
|
if (Saving != null)
|
|
|
|
|
Saving(script, e);
|
|
|
|
|
|
|
|
|
|
if (!e.Cancel)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
var uow = _fileUowProvider.GetUnitOfWork();
|
|
|
|
|
using (var repository = _repositoryFactory.CreateScriptRepository(uow))
|
|
|
|
|
{
|
|
|
|
|
repository.AddOrUpdate(script);
|
|
|
|
|
uow.Commit();
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (Saved != null)
|
|
|
|
|
Saved(script, e);
|
|
|
|
|
}
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-10 14:53:36 -01:00
|
|
|
Audit.Add(AuditTypes.Save, string.Format("Save Script performed by user"), userId == -1 ? 0 : userId, -1);
|
2012-12-10 13:49:20 -01:00
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Deletes a script by its name
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name">Name incl. extension of the Script to delete</param>
|
2012-12-10 13:49:20 -01:00
|
|
|
/// <param name="userId"></param>
|
|
|
|
|
public void DeleteScript(string name, int userId = -1)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
var uow = _fileUowProvider.GetUnitOfWork();
|
|
|
|
|
using (var repository = _repositoryFactory.CreateScriptRepository(uow))
|
|
|
|
|
{
|
|
|
|
|
var script = repository.Get(name);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
var e = new DeleteEventArgs();
|
|
|
|
|
if (Deleting != null)
|
|
|
|
|
Deleting(script, e);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (!e.Cancel)
|
|
|
|
|
{
|
|
|
|
|
repository.Delete(script);
|
|
|
|
|
uow.Commit();
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (Deleted != null)
|
|
|
|
|
Deleted(script, e);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
Audit.Add(AuditTypes.Delete, string.Format("Delete Script performed by user"),
|
|
|
|
|
userId == -1 ? 0 : userId, -1);
|
|
|
|
|
}
|
2012-12-10 13:49:20 -01:00
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Validates a <see cref="Script"/>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="script"><see cref="Script"/> to validate</param>
|
|
|
|
|
/// <returns>True if Script is valid, otherwise false</returns>
|
|
|
|
|
public bool ValidateScript(Script script)
|
|
|
|
|
{
|
|
|
|
|
return script.IsValid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2012-11-11 12:20:14 -01:00
|
|
|
/// Gets a list of all <see cref="ITemplate"/> objects
|
2012-10-24 11:29:51 -02:00
|
|
|
/// </summary>
|
2012-11-11 12:20:14 -01:00
|
|
|
/// <returns>An enumerable list of <see cref="ITemplate"/> objects</returns>
|
|
|
|
|
public IEnumerable<ITemplate> GetTemplates(params string[] aliases)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
using (var repository = _repositoryFactory.CreateTemplateRepository(_dataUowProvider.GetUnitOfWork()))
|
|
|
|
|
{
|
|
|
|
|
return repository.GetAll(aliases);
|
|
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2012-11-11 12:20:14 -01:00
|
|
|
/// Gets a <see cref="ITemplate"/> object by its alias
|
2012-10-24 11:29:51 -02:00
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="alias">Alias of the template</param>
|
|
|
|
|
/// <returns>A <see cref="Template"/> object</returns>
|
2012-11-11 12:20:14 -01:00
|
|
|
public ITemplate GetTemplateByAlias(string alias)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
using (var repository = _repositoryFactory.CreateTemplateRepository(_dataUowProvider.GetUnitOfWork()))
|
|
|
|
|
{
|
|
|
|
|
return repository.Get(alias);
|
|
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Saves a <see cref="Template"/>
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="template"><see cref="Template"/> to save</param>
|
2012-12-10 13:49:20 -01:00
|
|
|
/// <param name="userId"></param>
|
|
|
|
|
public void SaveTemplate(ITemplate template, int userId = -1)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-10 13:49:20 -01:00
|
|
|
var e = new SaveEventArgs();
|
|
|
|
|
if (Saving != null)
|
|
|
|
|
Saving(template, e);
|
|
|
|
|
|
|
|
|
|
if (!e.Cancel)
|
|
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
var uow = _dataUowProvider.GetUnitOfWork();
|
|
|
|
|
using (var repository = _repositoryFactory.CreateTemplateRepository(uow))
|
|
|
|
|
{
|
|
|
|
|
repository.AddOrUpdate(template);
|
|
|
|
|
uow.Commit();
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (Saved != null)
|
|
|
|
|
Saved(template, e);
|
|
|
|
|
}
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-10 14:53:36 -01:00
|
|
|
Audit.Add(AuditTypes.Save, string.Format("Save Template performed by user"), userId == -1 ? 0 : userId, template.Id);
|
2012-12-10 13:49:20 -01:00
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Deletes a template by its alias
|
|
|
|
|
/// </summary>
|
2012-11-11 12:20:14 -01:00
|
|
|
/// <param name="alias">Alias of the <see cref="ITemplate"/> to delete</param>
|
2012-12-10 13:49:20 -01:00
|
|
|
/// <param name="userId"></param>
|
|
|
|
|
public void DeleteTemplate(string alias, int userId = -1)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
2012-12-14 12:59:47 -01:00
|
|
|
var uow = _dataUowProvider.GetUnitOfWork();
|
|
|
|
|
using (var repository = _repositoryFactory.CreateTemplateRepository(uow))
|
|
|
|
|
{
|
|
|
|
|
var template = repository.Get(alias);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
var e = new DeleteEventArgs();
|
|
|
|
|
if (Deleting != null)
|
|
|
|
|
Deleting(template, e);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (!e.Cancel)
|
|
|
|
|
{
|
|
|
|
|
repository.Delete(template);
|
|
|
|
|
uow.Commit();
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
if (Deleted != null)
|
|
|
|
|
Deleted(template, e);
|
2012-12-10 13:49:20 -01:00
|
|
|
|
2012-12-14 12:59:47 -01:00
|
|
|
Audit.Add(AuditTypes.Delete, string.Format("Delete Template performed by user"),
|
|
|
|
|
userId == -1 ? 0 : userId, template.Id);
|
|
|
|
|
}
|
2012-12-10 13:49:20 -01:00
|
|
|
}
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2012-11-11 12:20:14 -01:00
|
|
|
/// Validates a <see cref="ITemplate"/>
|
2012-10-24 11:29:51 -02:00
|
|
|
/// </summary>
|
2012-11-11 12:20:14 -01:00
|
|
|
/// <param name="template"><see cref="ITemplate"/> to validate</param>
|
2012-10-24 11:29:51 -02:00
|
|
|
/// <returns>True if Script is valid, otherwise false</returns>
|
2012-11-11 12:20:14 -01:00
|
|
|
public bool ValidateTemplate(ITemplate template)
|
2012-10-24 11:29:51 -02:00
|
|
|
{
|
|
|
|
|
return template.IsValid();
|
|
|
|
|
}
|
2012-11-11 06:53:02 -01:00
|
|
|
|
|
|
|
|
//TODO Method to change name and/or alias of view/masterpage template
|
2012-12-10 13:49:20 -01:00
|
|
|
|
|
|
|
|
#region Event Handlers
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Occurs before Delete
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static event EventHandler<DeleteEventArgs> Deleting;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Occurs after Delete
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static event EventHandler<DeleteEventArgs> Deleted;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Occurs before Save
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static event EventHandler<SaveEventArgs> Saving;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Occurs after Save
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static event EventHandler<SaveEventArgs> Saved;
|
|
|
|
|
#endregion
|
2012-10-24 11:29:51 -02:00
|
|
|
}
|
|
|
|
|
}
|