Merge pull request #176 from pynej/add-stylesheet-ids

Fix for missing Id's on FileService.GetStylesheets() call.  This is need...
This commit is contained in:
Morten Christensen
2013-11-07 03:41:33 -08:00
3 changed files with 29 additions and 11 deletions

View File

@@ -14,14 +14,16 @@ namespace Umbraco.Core.Persistence.Repositories
/// </summary>
internal class StylesheetRepository : FileRepository<string, Stylesheet>, IStylesheetRepository
{
internal StylesheetRepository(IUnitOfWork work, IFileSystem fileSystem)
private readonly IDatabaseUnitOfWork _dbwork;
internal StylesheetRepository(IUnitOfWork work, IDatabaseUnitOfWork db, IFileSystem fileSystem)
: base(work, fileSystem)
{
_dbwork = db;
}
public StylesheetRepository(IUnitOfWork work)
: this(work, new PhysicalFileSystem(SystemDirectories.Css))
public StylesheetRepository(IUnitOfWork work, IDatabaseUnitOfWork db)
: this(work, db, new PhysicalFileSystem(SystemDirectories.Css))
{
}
@@ -53,7 +55,8 @@ namespace Umbraco.Core.Persistence.Repositories
Content = content,
Key = path.EncodeAsGuid(),
CreateDate = created,
UpdateDate = updated
UpdateDate = updated,
Id = GetStylesheetId(path)
};
//on initial construction we don't want to have dirty properties tracked
@@ -61,6 +64,21 @@ namespace Umbraco.Core.Persistence.Repositories
stylesheet.ResetDirtyProperties(false);
return stylesheet;
}
// Fix for missing Id's on FileService.GetStylesheets() call. This is needed as sytlesheets can only bo loaded in the editor via
// their Id so listing stylesheets needs to list there Id as well for custom plugins to render the build in editor.
// http://issues.umbraco.org/issue/U4-3258
private int GetStylesheetId(string path)
{
var sql = new Sql()
.Select("id")
.From("umbracoNode")
.Where("umbracoNode.nodeObjectType = @NodeObjectType AND umbracoNode.text = @Alias",
new { NodeObjectType = UmbracoObjectTypes.Stylesheet.GetGuid(), Alias = path.TrimEnd(".css").Replace("\\", "/") });
var nodeDto = _dbwork.Database.FirstOrDefault<Umbraco.Core.Models.Rdbms.NodeDto>(sql);
return nodeDto == null ? 0 : nodeDto.NodeId;
}
public override IEnumerable<Stylesheet> GetAll(params string[] ids)

View File

@@ -97,9 +97,9 @@ namespace Umbraco.Core.Persistence
return new ScriptRepository(uow);
}
public virtual IStylesheetRepository CreateStylesheetRepository(IUnitOfWork uow)
public virtual IStylesheetRepository CreateStylesheetRepository(IUnitOfWork uow, IDatabaseUnitOfWork db)
{
return new StylesheetRepository(uow);
return new StylesheetRepository(uow, db);
}
public virtual ITemplateRepository CreateTemplateRepository(IDatabaseUnitOfWork uow)

View File

@@ -39,7 +39,7 @@ namespace Umbraco.Core.Services
/// <returns>An enumerable list of <see cref="Stylesheet"/> objects</returns>
public IEnumerable<Stylesheet> GetStylesheets(params string[] names)
{
using (var repository = _repositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork()))
using (var repository = _repositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork(), _dataUowProvider.GetUnitOfWork()))
{
return repository.GetAll(names);
}
@@ -52,7 +52,7 @@ namespace Umbraco.Core.Services
/// <returns>A <see cref="Stylesheet"/> object</returns>
public Stylesheet GetStylesheetByName(string name)
{
using (var repository = _repositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork()))
using (var repository = _repositoryFactory.CreateStylesheetRepository(_fileUowProvider.GetUnitOfWork(), _dataUowProvider.GetUnitOfWork()))
{
return repository.Get(name);
}
@@ -69,7 +69,7 @@ namespace Umbraco.Core.Services
return;
var uow = _fileUowProvider.GetUnitOfWork();
using (var repository = _repositoryFactory.CreateStylesheetRepository(uow))
using (var repository = _repositoryFactory.CreateStylesheetRepository(uow, _dataUowProvider.GetUnitOfWork()))
{
repository.AddOrUpdate(stylesheet);
uow.Commit();
@@ -88,7 +88,7 @@ namespace Umbraco.Core.Services
public void DeleteStylesheet(string name, int userId = 0)
{
var uow = _fileUowProvider.GetUnitOfWork();
using (var repository = _repositoryFactory.CreateStylesheetRepository(uow))
using (var repository = _repositoryFactory.CreateStylesheetRepository(uow, _dataUowProvider.GetUnitOfWork()))
{
var stylesheet = repository.Get(name);