using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text.RegularExpressions;
using System.Web;
using Umbraco.Core.Auditing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Events;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.UnitOfWork;
namespace Umbraco.Core.Services
{
///
/// Represents the File Service, which is an easy access to operations involving objects like Scripts, Stylesheets and Templates
///
public class FileService : RepositoryService, IFileService
{
private readonly IUnitOfWorkProvider _fileUowProvider;
private const string PartialViewHeader = "@inherits Umbraco.Web.Mvc.UmbracoTemplatePage";
private const string PartialViewMacroHeader = "@inherits Umbraco.Web.Macros.PartialViewMacroPage";
public FileService(
IUnitOfWorkProvider fileProvider,
IDatabaseUnitOfWorkProvider dataProvider,
RepositoryFactory repositoryFactory,
ILogger logger,
IEventMessagesFactory eventMessagesFactory)
: base(dataProvider, repositoryFactory, logger, eventMessagesFactory)
{
_fileUowProvider = fileProvider;
}
#region Stylesheets
///
/// Gets a list of all objects
///
/// An enumerable list of objects
public IEnumerable GetStylesheets(params string[] names)
{
using (var repository = RepositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork(), UowProvider.GetUnitOfWork()))
{
return repository.GetAll(names);
}
}
///
/// Gets a object by its name
///
/// Name of the stylesheet incl. extension
/// A object
public Stylesheet GetStylesheetByName(string name)
{
using (var repository = RepositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork(), UowProvider.GetUnitOfWork()))
{
return repository.Get(name);
}
}
///
/// Saves a
///
/// to save
///
public void SaveStylesheet(Stylesheet stylesheet, int userId = 0)
{
if (SavingStylesheet.IsRaisedEventCancelled(new SaveEventArgs(stylesheet), this))
return;
var uow = _fileUowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateStylesheetRepository(uow, UowProvider.GetUnitOfWork()))
{
repository.AddOrUpdate(stylesheet);
uow.Commit();
SavedStylesheet.RaiseEvent(new SaveEventArgs(stylesheet, false), this);
}
Audit(AuditType.Save, string.Format("Save Stylesheet performed by user"), userId, -1);
}
///
/// Deletes a stylesheet by its name
///
/// Name incl. extension of the Stylesheet to delete
///
public void DeleteStylesheet(string path, int userId = 0)
{
var uow = _fileUowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateStylesheetRepository(uow, UowProvider.GetUnitOfWork()))
{
var stylesheet = repository.Get(path);
if (stylesheet == null) return;
if (DeletingStylesheet.IsRaisedEventCancelled(new DeleteEventArgs(stylesheet), this))
return;
repository.Delete(stylesheet);
uow.Commit();
DeletedStylesheet.RaiseEvent(new DeleteEventArgs(stylesheet, false), this);
Audit(AuditType.Delete, string.Format("Delete Stylesheet performed by user"), userId, -1);
}
}
///
/// Validates a
///
/// to validate
/// True if Stylesheet is valid, otherwise false
public bool ValidateStylesheet(Stylesheet stylesheet)
{
var uow = _fileUowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateStylesheetRepository(uow, UowProvider.GetUnitOfWork()))
{
return repository.ValidateStylesheet(stylesheet);
}
}
#endregion
#region Scripts
///
/// Gets a list of all objects
///
/// An enumerable list of objects
public IEnumerable