From 6f43230a9be0197f1d9558cdd1dba5aa1c58378d Mon Sep 17 00:00:00 2001 From: Shannon Date: Fri, 18 Dec 2015 14:24:17 +0100 Subject: [PATCH] Core is more or less building (i think) --- .../Interfaces/IMediaRepository.cs | 2 + .../Repositories/MediaRepository.cs | 37 ++++++++ src/Umbraco.Core/Services/DataTypeService.cs | 18 +--- src/Umbraco.Core/Services/IDataTypeService.cs | 8 -- .../Services/LocalizationService.cs | 2 +- src/Umbraco.Core/Services/MediaService.cs | 94 +++++++------------ src/Umbraco.Core/Services/MemberService.cs | 62 ++++++------ .../Services/MigrationEntryService.cs | 2 +- src/Umbraco.Core/Services/PackagingService.cs | 65 ++++--------- src/Umbraco.Core/Services/ServiceContext.cs | 8 +- .../Sync/DatabaseServerMessenger.cs | 6 +- src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs | 1 - src/Umbraco.Web/WebBootManager.cs | 28 +----- src/umbraco.cms/businesslogic/Content.cs | 5 +- src/umbraco.cms/businesslogic/web/Document.cs | 4 +- src/umbraco.sln | 4 +- 16 files changed, 143 insertions(+), 203 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMediaRepository.cs index 11a4e3566f..b712622e63 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IMediaRepository.cs @@ -9,6 +9,8 @@ namespace Umbraco.Core.Persistence.Repositories { public interface IMediaRepository : IRepositoryVersionable, IRecycleBinRepository, IDeleteMediaFilesRepository { + IMedia GetMediaByPath(string mediaPath); + /// /// Used to add/update published xml for the media item /// diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs index 528e80088f..2d1098164f 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Xml.Linq; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; @@ -247,6 +248,42 @@ namespace Umbraco.Core.Persistence.Repositories } while (processed < total); } + public IMedia GetMediaByPath(string mediaPath) + { + var umbracoFileValue = mediaPath; + const string Pattern = ".*[_][0-9]+[x][0-9]+[.].*"; + var isResized = Regex.IsMatch(mediaPath, Pattern); + + // If the image has been resized we strip the "_403x328" of the original "/media/1024/koala_403x328.jpg" url. + if (isResized) + { + var underscoreIndex = mediaPath.LastIndexOf('_'); + var dotIndex = mediaPath.LastIndexOf('.'); + umbracoFileValue = string.Concat(mediaPath.Substring(0, underscoreIndex), mediaPath.Substring(dotIndex)); + } + + Func createSql = url => new Sql().Select("*") + .From(SqlSyntax) + .InnerJoin(SqlSyntax) + .On(SqlSyntax, left => left.PropertyTypeId, right => right.Id) + .Where(SqlSyntax, x => x.Alias == "umbracoFile") + .Where(SqlSyntax, x => x.VarChar == url); + + var sql = createSql(umbracoFileValue); + + var propertyDataDto = Database.Fetch(sql).FirstOrDefault(); + + // If the stripped-down url returns null, we try again with the original url. + // Previously, the function would fail on e.g. "my_x_image.jpg" + if (propertyDataDto == null) + { + sql = createSql(mediaPath); + propertyDataDto = Database.Fetch(sql).FirstOrDefault(); + } + + return propertyDataDto == null ? null : Get(propertyDataDto.NodeId); + } + public void AddOrUpdateContentXml(IMedia content, Func xml) { _contentXmlRepository.AddOrUpdate(new ContentXmlEntity(content, xml)); diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index 5453c4f51a..22fd686310 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -119,7 +119,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) { - return repository.GetByQuery(QueryFactory.Create().Where(x => x.Name == name)).FirstOrDefault(); + return repository.GetByQuery(repository.Query.Where(x => x.Name == name)).FirstOrDefault(); } } @@ -145,24 +145,12 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) { - var query = QueryFactory.Create().Where(x => x.Key == id); + var query = repository.Query.Where(x => x.Key == id); var definitions = repository.GetByQuery(query); return definitions.FirstOrDefault(); } } - /// - /// Gets a by its control Id - /// - /// Id of the DataType control - /// Collection of objects with a matching contorl id - [Obsolete("Property editor's are defined by a string alias from version 7 onwards, use the overload GetDataTypeDefinitionByPropertyEditorAlias instead")] - public IEnumerable GetDataTypeDefinitionByControlId(Guid id) - { - var alias = LegacyPropertyEditorIdToAliasConverter.GetAliasFromLegacyId(id, true); - return GetDataTypeDefinitionByPropertyEditorAlias(alias); - } - /// /// Gets a by its control Id /// @@ -172,7 +160,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) { - var query = QueryFactory.Create().Where(x => x.PropertyEditorAlias == propertyEditorAlias); + var query = repository.Query.Where(x => x.PropertyEditorAlias == propertyEditorAlias); var definitions = repository.GetByQuery(query); return definitions; } diff --git a/src/Umbraco.Core/Services/IDataTypeService.cs b/src/Umbraco.Core/Services/IDataTypeService.cs index d5839d3b92..eac8b5ee5a 100644 --- a/src/Umbraco.Core/Services/IDataTypeService.cs +++ b/src/Umbraco.Core/Services/IDataTypeService.cs @@ -77,14 +77,6 @@ namespace Umbraco.Core.Services /// Id of the user issueing the deletion void Delete(IDataTypeDefinition dataTypeDefinition, int userId = 0); - /// - /// Gets a by its control Id - /// - /// Id of the DataType control - /// - [Obsolete("Property editor's are defined by a string alias from version 7 onwards, use the overload GetDataTypeDefinitionByPropertyEditorAlias instead")] - IEnumerable GetDataTypeDefinitionByControlId(Guid id); - /// /// Gets a by its control Id /// diff --git a/src/Umbraco.Core/Services/LocalizationService.cs b/src/Umbraco.Core/Services/LocalizationService.cs index 73de5d6153..be0ba6f9bb 100644 --- a/src/Umbraco.Core/Services/LocalizationService.cs +++ b/src/Umbraco.Core/Services/LocalizationService.cs @@ -176,7 +176,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateDictionaryRepository(UowProvider.GetUnitOfWork())) { - var query = QueryFactory.Create().Where(x => x.ParentId == null); + var query = repository.Query.Create().Where(x => x.ParentId == null); var items = repository.GetByQuery(query); return items; diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 0416101728..3122cb0a6e 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -19,6 +19,7 @@ using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; +using Umbraco.Core.Strings; namespace Umbraco.Core.Services { @@ -35,14 +36,16 @@ namespace Umbraco.Core.Services private readonly EntityXmlSerializer _entitySerializer = new EntityXmlSerializer(); private readonly IDataTypeService _dataTypeService; private readonly IUserService _userService; - - public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IDataTypeService dataTypeService, IUserService userService) + private readonly IEnumerable _urlSegmentProviders; + + public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IDataTypeService dataTypeService, IUserService userService, IEnumerable urlSegmentProviders) : base(provider, repositoryFactory, logger, eventMessagesFactory) { if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); if (userService == null) throw new ArgumentNullException("userService"); _dataTypeService = dataTypeService; _userService = userService; + _urlSegmentProviders = urlSegmentProviders; } /// @@ -156,11 +159,11 @@ namespace Umbraco.Core.Services media.CreatorId = userId; repository.AddOrUpdate(media); - repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); // generate preview for blame history? if (UmbracoConfig.For.UmbracoSettings().Content.GlobalPreviewStorageEnabled) { - repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); } uow.Commit(); @@ -214,11 +217,11 @@ namespace Umbraco.Core.Services { media.CreatorId = userId; repository.AddOrUpdate(media); - repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); // generate preview for blame history? if (UmbracoConfig.For.UmbracoSettings().Content.GlobalPreviewStorageEnabled) { - repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); } uow.Commit(); @@ -298,7 +301,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Key == key); + var query = repository.Query.Where(x => x.Key == key); var contents = repository.GetByQuery(query); return contents.SingleOrDefault(); } @@ -313,7 +316,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Level == level && !x.Path.StartsWith("-21")); + var query = repository.Query.Where(x => x.Level == level && !x.Path.StartsWith("-21")); var contents = repository.GetByQuery(query); return contents; @@ -385,7 +388,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMediaRepository(uow)) { - var query = Query.Builder.Where(x => x.ParentId == id); + var query = repository.Query.Where(x => x.ParentId == id); var medias = repository.GetByQuery(query); return medias; @@ -401,7 +404,7 @@ namespace Umbraco.Core.Services Mandate.ParameterCondition(pageSize > 0, "pageSize"); using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder; + var query = repository.Query; query.Where(x => x.ParentId == id); long total; @@ -430,7 +433,7 @@ namespace Umbraco.Core.Services Mandate.ParameterCondition(pageSize > 0, "pageSize"); using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder; + var query = repository.Query; query.Where(x => x.ParentId == id); var medias = repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, filter); @@ -448,7 +451,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder; + var query = repository.Query; //if the id is -1, then just get all if (id != -1) { @@ -479,7 +482,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder; + var query = repository.Query; //if the id is -1, then just get all if (id != -1) { @@ -517,7 +520,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMediaRepository(uow)) { var pathMatch = media.Path + ","; - var query = Query.Builder.Where(x => x.Path.StartsWith(pathMatch) && x.Id != media.Id); + var query = repository.Query.Where(x => x.Path.StartsWith(pathMatch) && x.Id != media.Id); var medias = repository.GetByQuery(query); return medias; @@ -558,7 +561,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMediaRepository(uow)) { - var query = Query.Builder.Where(x => x.ContentTypeId == id); + var query = repository.Query.Where(x => x.ContentTypeId == id); var medias = repository.GetByQuery(query); return medias; @@ -574,7 +577,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMediaRepository(uow)) { - var query = Query.Builder.Where(x => x.ParentId == -1); + var query = repository.Query.Where(x => x.ParentId == -1); var medias = repository.GetByQuery(query); return medias; @@ -590,7 +593,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMediaRepository(uow)) { - var query = Query.Builder.Where(x => x.Path.Contains("-21")); + var query = repository.Query.Where(x => x.Path.Contains("-21")); var medias = repository.GetByQuery(query); return medias; @@ -604,40 +607,9 @@ namespace Umbraco.Core.Services /// public IMedia GetMediaByPath(string mediaPath) { - var umbracoFileValue = mediaPath; - const string Pattern = ".*[_][0-9]+[x][0-9]+[.].*"; - var isResized = Regex.IsMatch(mediaPath, Pattern); - - // If the image has been resized we strip the "_403x328" of the original "/media/1024/koala_403x328.jpg" url. - if (isResized) + using (var repo = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var underscoreIndex = mediaPath.LastIndexOf('_'); - var dotIndex = mediaPath.LastIndexOf('.'); - umbracoFileValue = string.Concat(mediaPath.Substring(0, underscoreIndex), mediaPath.Substring(dotIndex)); - } - - Func createSql = url => new Sql().Select("*") - .From() - .InnerJoin() - .On(left => left.PropertyTypeId, right => right.Id) - .Where(x => x.Alias == "umbracoFile") - .Where(x => x.VarChar == url); - - var sql = createSql(umbracoFileValue); - - using (var uow = UowProvider.GetUnitOfWork()) - { - var propertyDataDto = uow.Database.Fetch(sql).FirstOrDefault(); - - // If the stripped-down url returns null, we try again with the original url. - // Previously, the function would fail on e.g. "my_x_image.jpg" - if (propertyDataDto == null) - { - sql = createSql(mediaPath); - propertyDataDto = uow.Database.Fetch(sql).FirstOrDefault(); - } - - return propertyDataDto == null ? null : GetById(propertyDataDto.NodeId); + return repo.GetMediaByPath(mediaPath); } } @@ -650,7 +622,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMediaRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.ParentId == id); + var query = repository.Query.Where(x => x.ParentId == id); int count = repository.Count(query); return count > 0; } @@ -801,11 +773,11 @@ namespace Umbraco.Core.Services { media.CreatorId = userId; repository.AddOrUpdate(media); - repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); // generate preview for blame history? if (UmbracoConfig.For.UmbracoSettings().Content.GlobalPreviewStorageEnabled) { - repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); } uow.Commit(); @@ -847,11 +819,11 @@ namespace Umbraco.Core.Services { media.CreatorId = userId; repository.AddOrUpdate(media); - repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); // generate preview for blame history? if (UmbracoConfig.For.UmbracoSettings().Content.GlobalPreviewStorageEnabled) { - repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); } } @@ -922,7 +894,7 @@ namespace Umbraco.Core.Services //NOTE What about media that has the contenttype as part of its composition? //The ContentType has to be removed from the composition somehow as it would otherwise break //Dbl.check+test that the ContentType's Id is removed from the ContentType2ContentType table - var query = Query.Builder.Where(x => x.ContentTypeId == mediaTypeId); + var query = repository.Query.Where(x => x.ContentTypeId == mediaTypeId); var contents = repository.GetByQuery(query).ToArray(); if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(contents), this)) @@ -932,7 +904,7 @@ namespace Umbraco.Core.Services { //Look for children of current content and move that to trash before the current content is deleted var c = content; - var childQuery = Query.Builder.Where(x => x.Path.StartsWith(c.Path)); + var childQuery = repository.Query.Where(x => x.Path.StartsWith(c.Path)); var children = repository.GetByQuery(childQuery); foreach (var child in children) @@ -1141,11 +1113,11 @@ namespace Umbraco.Core.Services i++; repository.AddOrUpdate(media); - repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdateContentXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); // generate preview for blame history? if (UmbracoConfig.For.UmbracoSettings().Content.GlobalPreviewStorageEnabled) { - repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, m)); + repository.AddOrUpdatePreviewXml(media, m => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, m)); } } @@ -1173,7 +1145,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMediaRepository(uow)) { repository.RebuildXmlStructures( - media => _entitySerializer.Serialize(this, _dataTypeService, _userService, media), + media => _entitySerializer.Serialize(this, _dataTypeService, _userService, _urlSegmentProviders, media), contentTypeIds: contentTypeIds.Length == 0 ? null : contentTypeIds); } @@ -1229,7 +1201,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMediaTypeRepository(uow)) { - var query = Query.Builder.Where(x => x.Alias == mediaTypeAlias); + var query = repository.QueryFactory.Create().Where(x => x.Alias == mediaTypeAlias); var mediaTypes = repository.GetByQuery(query); if (mediaTypes.Any() == false) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index fdfe401ca9..bb2b5fdd49 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -151,7 +151,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMemberRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Key == id); + var query = repository.Query.Where(x => x.Key == id); var member = repository.GetByQuery(query).FirstOrDefault(); return member; } @@ -166,7 +166,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMemberRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.ContentTypeAlias == memberTypeAlias); + var query = repository.Query.Where(x => x.ContentTypeAlias == memberTypeAlias); var members = repository.GetByQuery(query); return members; } @@ -182,7 +182,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberRepository(UowProvider.GetUnitOfWork())) { repository.Get(memberTypeId); - var query = Query.Builder.Where(x => x.ContentTypeId == memberTypeId); + var query = repository.Query.Where(x => x.ContentTypeId == memberTypeId); var members = repository.GetByQuery(query); return members; } @@ -227,7 +227,7 @@ namespace Umbraco.Core.Services { var repository = RepositoryFactory.CreateMemberRepository(uow); //TODO: What about content that has the contenttype as part of its composition? - var query = Query.Builder.Where(x => x.ContentTypeId == memberTypeId); + var query = repository.Query.Where(x => x.ContentTypeId == memberTypeId); var members = repository.GetByQuery(query).ToArray(); if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(members), this)) @@ -266,7 +266,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { - var query = new Query(); + var query = repository.Query; switch (matchType) { @@ -317,7 +317,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { - var query = new Query(); + var query = repository.Query; switch (matchType) { @@ -368,7 +368,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { - var query = new Query(); + var query = repository.Query; switch (matchType) { @@ -412,7 +412,7 @@ namespace Umbraco.Core.Services { case StringPropertyMatchType.Exact: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlEquals(value, TextColumnType.NText) || @@ -420,7 +420,7 @@ namespace Umbraco.Core.Services break; case StringPropertyMatchType.Contains: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlContains(value, TextColumnType.NText) || @@ -428,7 +428,7 @@ namespace Umbraco.Core.Services break; case StringPropertyMatchType.StartsWith: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlStartsWith(value, TextColumnType.NText) || @@ -436,7 +436,7 @@ namespace Umbraco.Core.Services break; case StringPropertyMatchType.EndsWith: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlEndsWith(value, TextColumnType.NText) || @@ -468,35 +468,35 @@ namespace Umbraco.Core.Services { case ValuePropertyMatchType.Exact: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue == value); break; case ValuePropertyMatchType.GreaterThan: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue > value); break; case ValuePropertyMatchType.LessThan: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue < value); break; case ValuePropertyMatchType.GreaterThanOrEqualTo: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue >= value); break; case ValuePropertyMatchType.LessThanOrEqualTo: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue <= value); @@ -521,7 +521,7 @@ namespace Umbraco.Core.Services using (var repository = RepositoryFactory.CreateMemberRepository(UowProvider.GetUnitOfWork())) { var query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).BoolPropertyValue == value); @@ -548,35 +548,35 @@ namespace Umbraco.Core.Services { case ValuePropertyMatchType.Exact: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue == value); break; case ValuePropertyMatchType.GreaterThan: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue > value); break; case ValuePropertyMatchType.LessThan: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue < value); break; case ValuePropertyMatchType.GreaterThanOrEqualTo: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue >= value); break; case ValuePropertyMatchType.LessThanOrEqualTo: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue <= value); @@ -635,26 +635,26 @@ namespace Umbraco.Core.Services switch (countType) { case MemberCountType.All: - query = new Query(); + query = repository.Query; return repository.Count(query); case MemberCountType.Online: var fromDate = DateTime.Now.AddMinutes(-Membership.UserIsOnlineTimeWindow); query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.LastLoginDate && ((Member)x).DateTimePropertyValue > fromDate); return repository.GetCountByQuery(query); case MemberCountType.LockedOut: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsLockedOut && ((Member)x).BoolPropertyValue == true); return repository.GetCountByQuery(query); case MemberCountType.Approved: query = - Query.Builder.Where( + repository.Query.Where( x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsApproved && ((Member)x).BoolPropertyValue == true); @@ -713,7 +713,7 @@ namespace Umbraco.Core.Services { return repository.GetPagedResultsByQuery(null, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filter); } - var query = new Query().Where(x => x.ContentTypeAlias == memberTypeAlias); + var query = repository.Query.Where(x => x.ContentTypeAlias == memberTypeAlias); return repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, filter); } } @@ -905,7 +905,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { - var query = Query.Builder.Where(x => x.Email.Equals(email)); + var query = repository.Query.Where(x => x.Email.Equals(email)); var member = repository.GetByQuery(query).FirstOrDefault(); return member; @@ -926,7 +926,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberRepository(uow)) { - var query = Query.Builder.Where(x => x.Username.Equals(username)); + var query = repository.Query.Where(x => x.Username.Equals(username)); var member = repository.GetByQuery(query).FirstOrDefault(); return member; @@ -1107,7 +1107,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateMemberGroupRepository(uow)) { - var qry = new Query().Where(g => g.Name == roleName); + var qry = repository.QueryFactory.Create().Where(g => g.Name == roleName); var found = repository.GetByQuery(qry).ToArray(); foreach (var memberGroup in found) @@ -1182,7 +1182,7 @@ namespace Umbraco.Core.Services { using (var repository = RepositoryFactory.CreateMemberTypeRepository(UowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Alias == memberTypeAlias); + var query = repository.QueryFactory.Create().Where(x => x.Alias == memberTypeAlias); var types = repository.GetByQuery(query); if (types.Any() == false) diff --git a/src/Umbraco.Core/Services/MigrationEntryService.cs b/src/Umbraco.Core/Services/MigrationEntryService.cs index 2bd463c6d0..607c17c798 100644 --- a/src/Umbraco.Core/Services/MigrationEntryService.cs +++ b/src/Umbraco.Core/Services/MigrationEntryService.cs @@ -70,7 +70,7 @@ namespace Umbraco.Core.Services var uow = UowProvider.GetUnitOfWork(); using (var repo = RepositoryFactory.CreateMigrationEntryRepository(uow)) { - var query = Query.Builder + var query = repo.Query .Where(x => x.MigrationName.ToUpper() == migrationName.ToUpper()); return repo.GetByQuery(query); } diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 8ca9d3e3da..2d7445ee5e 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -17,6 +17,7 @@ using Umbraco.Core.Packaging.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Core.Strings; namespace Umbraco.Core.Services { @@ -36,6 +37,7 @@ namespace Umbraco.Core.Services private readonly ILocalizationService _localizationService; private readonly RepositoryFactory _repositoryFactory; private readonly IDatabaseUnitOfWorkProvider _uowProvider; + private readonly IEnumerable _urlSegmentProviders; private Dictionary _importedContentTypes; private IPackageInstallation _packageInstallation; private readonly IUserService _userService; @@ -52,7 +54,8 @@ namespace Umbraco.Core.Services ILocalizationService localizationService, IUserService userService, RepositoryFactory repositoryFactory, - IDatabaseUnitOfWorkProvider uowProvider) + IDatabaseUnitOfWorkProvider uowProvider, + IEnumerable urlSegmentProviders) { _logger = logger; _contentService = contentService; @@ -64,6 +67,7 @@ namespace Umbraco.Core.Services _localizationService = localizationService; _repositoryFactory = repositoryFactory; _uowProvider = uowProvider; + _urlSegmentProviders = urlSegmentProviders; _userService = userService; _importedContentTypes = new Dictionary(); } @@ -79,7 +83,7 @@ namespace Umbraco.Core.Services /// containing the xml representation of the Content object public XElement Export(IContent content, bool deep = false, bool raiseEvents = true) { - var nodeName = UmbracoConfig.For.UmbracoSettings().Content.UseLegacyXmlSchema ? "node" : content.ContentType.Alias.ToSafeAliasWithForcingCheck(); + var nodeName = content.ContentType.Alias.ToSafeAliasWithForcingCheck(); if (raiseEvents) { @@ -88,7 +92,7 @@ namespace Umbraco.Core.Services } var exporter = new EntityXmlSerializer(); - var xml = exporter.Serialize(_contentService, _dataTypeService, _userService, content, deep); + var xml = exporter.Serialize(_contentService, _dataTypeService, _userService, _urlSegmentProviders, content, deep); if (raiseEvents) ExportedContent.RaiseEvent(new ExportEventArgs(content, xml, false), this); @@ -600,9 +604,7 @@ namespace Umbraco.Core.Services //If no DataTypeDefinition with the guid from the xml wasn't found OR the ControlId on the DataTypeDefinition didn't match the DataType Id //We look up a DataTypeDefinition that matches - //we'll check if it is a GUID (legacy id for a property editor) - var legacyPropertyEditorId = Guid.Empty; - Guid.TryParse(property.Element("Type").Value, out legacyPropertyEditorId); + //get the alias as a string for use below var propertyEditorAlias = property.Element("Type").Value.Trim(); @@ -611,17 +613,7 @@ namespace Umbraco.Core.Services if (dataTypeDefinition == null) { - var dataTypeDefinitions = legacyPropertyEditorId != Guid.Empty - ? _dataTypeService.GetDataTypeDefinitionByControlId(legacyPropertyEditorId) - : _dataTypeService.GetDataTypeDefinitionByPropertyEditorAlias(propertyEditorAlias); - if (dataTypeDefinitions != null && dataTypeDefinitions.Any()) - { - dataTypeDefinition = dataTypeDefinitions.First(); - } - } - else if (legacyPropertyEditorId != Guid.Empty && dataTypeDefinition.ControlId != legacyPropertyEditorId) - { - var dataTypeDefinitions = _dataTypeService.GetDataTypeDefinitionByControlId(legacyPropertyEditorId); + var dataTypeDefinitions = _dataTypeService.GetDataTypeDefinitionByPropertyEditorAlias(propertyEditorAlias); if (dataTypeDefinitions != null && dataTypeDefinitions.Any()) { dataTypeDefinition = dataTypeDefinitions.First(); @@ -709,7 +701,7 @@ namespace Umbraco.Core.Services { using (var repository = _repositoryFactory.CreateContentTypeRepository(_uowProvider.GetUnitOfWork())) { - var query = Query.Builder.Where(x => x.Alias == contentTypeAlias); + var query = repository.Query.Where(x => x.Alias == contentTypeAlias); var types = repository.GetByQuery(query); if (!types.Any()) @@ -799,10 +791,7 @@ namespace Umbraco.Core.Services foreach (var dataTypeElement in dataTypeElements) { var dataTypeDefinitionName = dataTypeElement.Attribute("Name").Value; - - var legacyPropertyEditorId = Guid.Empty; - Guid.TryParse(dataTypeElement.Attribute("Id").Value, out legacyPropertyEditorId); - + var dataTypeDefinitionId = new Guid(dataTypeElement.Attribute("Definition").Value); var databaseTypeAttribute = dataTypeElement.Attribute("DatabaseType"); @@ -814,28 +803,14 @@ namespace Umbraco.Core.Services ? databaseTypeAttribute.Value.EnumParse(true) : DataTypeDatabaseType.Ntext; - //check if the Id was a GUID, that means it is referenced using the legacy property editor GUID id - if (legacyPropertyEditorId != Guid.Empty) + //the Id field is actually the string property editor Alias + var dataTypeDefinition = new DataTypeDefinition(dataTypeElement.Attribute("Id").Value.Trim()) { - var dataTypeDefinition = new DataTypeDefinition(-1, legacyPropertyEditorId) - { - Key = dataTypeDefinitionId, - Name = dataTypeDefinitionName, - DatabaseType = databaseType - }; - dataTypes.Add(dataTypeDefinitionName, dataTypeDefinition); - } - else - { - //the Id field is actually the string property editor Alias - var dataTypeDefinition = new DataTypeDefinition(dataTypeElement.Attribute("Id").Value.Trim()) - { - Key = dataTypeDefinitionId, - Name = dataTypeDefinitionName, - DatabaseType = databaseType - }; - dataTypes.Add(dataTypeDefinitionName, dataTypeDefinition); - } + Key = dataTypeDefinitionId, + Name = dataTypeDefinitionName, + DatabaseType = databaseType + }; + dataTypes.Add(dataTypeDefinitionName, dataTypeDefinition); } } @@ -1294,7 +1269,7 @@ namespace Umbraco.Core.Services /// containing the xml representation of the Media object public XElement Export(IMedia media, bool deep = false, bool raiseEvents = true) { - var nodeName = UmbracoConfig.For.UmbracoSettings().Content.UseLegacyXmlSchema ? "node" : media.ContentType.Alias.ToSafeAliasWithForcingCheck(); + var nodeName = media.ContentType.Alias.ToSafeAliasWithForcingCheck(); if (raiseEvents) { @@ -1303,7 +1278,7 @@ namespace Umbraco.Core.Services } var exporter = new EntityXmlSerializer(); - var xml = exporter.Serialize(_mediaService, _dataTypeService, _userService, media, deep); + var xml = exporter.Serialize(_mediaService, _dataTypeService, _userService, _urlSegmentProviders, media, deep); if (raiseEvents) ExportedMedia.RaiseEvent(new ExportEventArgs(media, xml, false), this); diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index d137c24939..8a834194d3 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -256,7 +256,7 @@ namespace Umbraco.Core.Services if (_notificationService == null) - _notificationService = new Lazy(() => new NotificationService(provider, _userService.Value, _contentService.Value, logger)); + _notificationService = new Lazy(() => new NotificationService(provider, _userService.Value, _contentService.Value, repositoryFactory, logger)); if (_serverRegistrationService == null) _serverRegistrationService = new Lazy(() => new ServerRegistrationService(provider, repositoryFactory, logger, eventMessagesFactory)); @@ -268,10 +268,10 @@ namespace Umbraco.Core.Services _memberService = new Lazy(() => new MemberService(provider, repositoryFactory, logger, eventMessagesFactory, _memberGroupService.Value, _dataTypeService.Value)); if (_contentService == null) - _contentService = new Lazy(() => new ContentService(provider, repositoryFactory, logger, eventMessagesFactory, publishingStrategy, _dataTypeService.Value, _userService.Value)); + _contentService = new Lazy(() => new ContentService(provider, repositoryFactory, logger, eventMessagesFactory, publishingStrategy, _dataTypeService.Value, _userService.Value, urlSegmentProviders)); if (_mediaService == null) - _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory, logger, eventMessagesFactory, _dataTypeService.Value, _userService.Value)); + _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory, logger, eventMessagesFactory, _dataTypeService.Value, _userService.Value, urlSegmentProviders)); if (_contentTypeService == null) _contentTypeService = new Lazy(() => new ContentTypeService(provider, repositoryFactory, logger, eventMessagesFactory, _contentService.Value, _mediaService.Value)); @@ -286,7 +286,7 @@ namespace Umbraco.Core.Services _localizationService = new Lazy(() => new LocalizationService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_packagingService == null) - _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _userService.Value, repositoryFactory, provider)); + _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _userService.Value, repositoryFactory, provider, urlSegmentProviders)); if (_entityService == null) _entityService = new Lazy(() => new EntityService( diff --git a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs index e38464f5df..d79af4998a 100644 --- a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs +++ b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs @@ -221,8 +221,8 @@ namespace Umbraco.Core.Sync var sql = new Sql().Select("*") .From(_appContext.DatabaseContext.SqlSyntax) - .Where(dto => dto.Id > _lastId) - .OrderBy(dto => dto.Id, _appContext.DatabaseContext.SqlSyntax); + .Where(_appContext.DatabaseContext.SqlSyntax, dto => dto.Id > _lastId) + .OrderBy(_appContext.DatabaseContext.SqlSyntax, dto => dto.Id); var dtos = _appContext.DatabaseContext.Database.Fetch(sql); if (dtos.Count <= 0) return; @@ -295,7 +295,7 @@ namespace Umbraco.Core.Sync { var sql = new Sql().Select("*") .From(_appContext.DatabaseContext.SqlSyntax) - .Where(dto => dto.Id == _lastId); + .Where(_appContext.DatabaseContext.SqlSyntax, dto => dto.Id == _lastId); var dtos = _appContext.DatabaseContext.Database.Fetch(sql); if (dtos.Count == 0) diff --git a/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs index c0ec463da3..9c2eb5bc1e 100644 --- a/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs +++ b/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs @@ -378,7 +378,6 @@ namespace Umbraco.Tests.Mvc ServiceContext GetServiceContext() { return MockHelper.GetMockedServiceContext(); - new TransientMessagesFactory(), } ViewContext GetViewContext() diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index 3ad1eba2a1..5f2c63b815 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -8,11 +8,9 @@ using System.Web; using System.Web.Configuration; using System.Web.Http; using System.Web.Http.Dispatcher; -using System.Web.Mvc; + using System.Web.Routing; -using ClientDependency.Core.Config; -using Examine; -using Examine.Config; + using umbraco; using Umbraco.Core; using Umbraco.Core.Configuration; @@ -82,26 +80,6 @@ namespace Umbraco.Web _isForTesting = isForTesting; } - /// - /// Creates and returns the service context for the app - /// - /// - /// - /// - protected override ServiceContext CreateServiceContext(DatabaseContext dbContext, IDatabaseFactory dbFactory) - { - //use a request based messaging factory - var evtMsgs = new RequestLifespanMessagesFactory(new SingletonUmbracoContextAccessor()); - return new ServiceContext( - new RepositoryFactory(ApplicationCache, ProfilingLogger.Logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()), - new PetaPocoUnitOfWorkProvider(dbFactory), - new FileUnitOfWorkProvider(), - new PublishingStrategy(evtMsgs, ProfilingLogger.Logger), - ApplicationCache, - ProfilingLogger.Logger, - evtMsgs); - } - /// /// Initialize objects before anything during the boot cycle happens /// @@ -174,6 +152,8 @@ namespace Umbraco.Web protected override IProfiler CreateProfiler() { return new WebProfiler(); + } + /// Ensure that the OnApplicationStarted methods of the IApplicationEvents are called /// /// diff --git a/src/umbraco.cms/businesslogic/Content.cs b/src/umbraco.cms/businesslogic/Content.cs index 0b1e030c7c..d30b4f7bc5 100644 --- a/src/umbraco.cms/businesslogic/Content.cs +++ b/src/umbraco.cms/businesslogic/Content.cs @@ -265,10 +265,7 @@ namespace umbraco.cms.businesslogic { SqlHelper.ExecuteNonQuery("delete from cmsContentXml where nodeId = @nodeId", SqlHelper.CreateParameter("@nodeId", this.Id)); } - - - - x.Attributes.Append(XmlHelper.AddAttribute(xd, "key", this.UniqueId.ToString())); + /// /// Deletes the current Content object, must be overridden in the child class. diff --git a/src/umbraco.cms/businesslogic/web/Document.cs b/src/umbraco.cms/businesslogic/web/Document.cs index 7942b43132..77a76c7617 100644 --- a/src/umbraco.cms/businesslogic/web/Document.cs +++ b/src/umbraco.cms/businesslogic/web/Document.cs @@ -916,9 +916,7 @@ namespace umbraco.cms.businesslogic.web : ApplicationContext.Current.Services.ContentService.GetDescendants(ContentEntity); return descendants.Select(x => new Document(x.Id, true)); - } - - x.Attributes.Append(addAttribute(xd, "key", UniqueId.ToString())); + } public override List GetNodesForPreview(bool childrenOnly) { diff --git a/src/umbraco.sln b/src/umbraco.sln index 84652d4201..69812c4a31 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Web.UI", "Umbraco.Web.UI\Umbraco.Web.UI.csproj", "{4C4C194C-B5E4-4991-8F87-4373E24CC19F}" EndProject