From dc336728b5483cabef10b161f742be6b0c273e2d Mon Sep 17 00:00:00 2001 From: Jeremy Pyne Date: Mon, 28 Oct 2013 14:32:18 -0400 Subject: [PATCH 1/3] Fix for missing Id's on FileService.GetStylesheets() call. This is needed as sytlesheets can only be 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. --- .../Repositories/StylesheetRepository.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs index 9acfff4e8b..f5c780311e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs @@ -53,7 +53,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 +62,17 @@ 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 static int GetStylesheetId(string path) + { + var ss = ApplicationContext.Current.Services.EntityService.GetRootEntities(UmbracoObjectTypes.Stylesheet).SingleOrDefault(s => s.Name == path.TrimEnd(".css").Replace("\\", "/")); + return ss == null ? 0 : ss.Id; } public override IEnumerable GetAll(params string[] ids) From 7cd6882f28296abe0d54f8ca0b9cfd5963cd79da Mon Sep 17 00:00:00 2001 From: Jeremy Pyne Date: Tue, 29 Oct 2013 09:24:05 -0400 Subject: [PATCH 2/3] Removed dependence in Stylesheet repository on Entity Service. --- .../Repositories/StylesheetRepository.cs | 25 +++++++++++++------ .../Persistence/RepositoryFactory.cs | 4 +-- src/Umbraco.Core/Services/FileService.cs | 8 +++--- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs index f5c780311e..bce0e9bcc1 100644 --- a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs @@ -14,14 +14,16 @@ namespace Umbraco.Core.Persistence.Repositories /// internal class StylesheetRepository : FileRepository, 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)) { } @@ -63,16 +65,23 @@ namespace Umbraco.Core.Persistence.Repositories 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 static int GetStylesheetId(string path) + private int GetStylesheetId(string path) { - var ss = ApplicationContext.Current.Services.EntityService.GetRootEntities(UmbracoObjectTypes.Stylesheet).SingleOrDefault(s => s.Name == path.TrimEnd(".css").Replace("\\", "/")); - return ss == null ? 0 : ss.Id; + var sql = new Sql() + .Select("nodeId") + .From("umbracoNode") + .Where("umbracoNode.nodeObjectType = @NodeObjectType && umbracoNode.text = @Alias", + new { NodeObjectType = UmbracoObjectTypes.Stylesheet, Alias = path.TrimEnd(".css").Replace("\\", "/") }); + var nodeDto = _dbwork.Database.FirstOrDefault(sql); + return nodeDto == null ? 0 : nodeDto.NodeId; + + //var ss = ApplicationContext.Current.Services.EntityService.GetRootEntities(UmbracoObjectTypes.Stylesheet).SingleOrDefault(s => s.Name == path.TrimEnd(".css").Replace("\\", "/")); + //return ss == null ? 0 : ss.Id; } public override IEnumerable GetAll(params string[] ids) diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index ab0a5e8e65..db6bc32009 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -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) diff --git a/src/Umbraco.Core/Services/FileService.cs b/src/Umbraco.Core/Services/FileService.cs index 53ac74b3a2..c912793e05 100644 --- a/src/Umbraco.Core/Services/FileService.cs +++ b/src/Umbraco.Core/Services/FileService.cs @@ -39,7 +39,7 @@ namespace Umbraco.Core.Services /// An enumerable list of objects public IEnumerable 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 /// A object 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); From 6451f6ad68f4c4b199e3b93bd7610e4cb469f9cf Mon Sep 17 00:00:00 2001 From: Jeremy Pyne Date: Tue, 29 Oct 2013 10:00:25 -0400 Subject: [PATCH 3/3] Fix sql errors in prev change. --- .../Persistence/Repositories/StylesheetRepository.cs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs index bce0e9bcc1..56148b14a8 100644 --- a/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/StylesheetRepository.cs @@ -73,15 +73,12 @@ namespace Umbraco.Core.Persistence.Repositories private int GetStylesheetId(string path) { var sql = new Sql() - .Select("nodeId") + .Select("id") .From("umbracoNode") - .Where("umbracoNode.nodeObjectType = @NodeObjectType && umbracoNode.text = @Alias", - new { NodeObjectType = UmbracoObjectTypes.Stylesheet, Alias = path.TrimEnd(".css").Replace("\\", "/") }); + .Where("umbracoNode.nodeObjectType = @NodeObjectType AND umbracoNode.text = @Alias", + new { NodeObjectType = UmbracoObjectTypes.Stylesheet.GetGuid(), Alias = path.TrimEnd(".css").Replace("\\", "/") }); var nodeDto = _dbwork.Database.FirstOrDefault(sql); return nodeDto == null ? 0 : nodeDto.NodeId; - - //var ss = ApplicationContext.Current.Services.EntityService.GetRootEntities(UmbracoObjectTypes.Stylesheet).SingleOrDefault(s => s.Name == path.TrimEnd(".css").Replace("\\", "/")); - //return ss == null ? 0 : ss.Id; } public override IEnumerable GetAll(params string[] ids)