Core is more or less building (i think)

This commit is contained in:
Shannon
2015-12-18 14:24:17 +01:00
parent 5c5a5d12cc
commit 6f43230a9b
16 changed files with 143 additions and 203 deletions

View File

@@ -9,6 +9,8 @@ namespace Umbraco.Core.Persistence.Repositories
{
public interface IMediaRepository : IRepositoryVersionable<int, IMedia>, IRecycleBinRepository<IMedia>, IDeleteMediaFilesRepository
{
IMedia GetMediaByPath(string mediaPath);
/// <summary>
/// Used to add/update published xml for the media item
/// </summary>

View File

@@ -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<string, Sql> createSql = url => new Sql().Select("*")
.From<PropertyDataDto>(SqlSyntax)
.InnerJoin<PropertyTypeDto>(SqlSyntax)
.On<PropertyDataDto, PropertyTypeDto>(SqlSyntax, left => left.PropertyTypeId, right => right.Id)
.Where<PropertyTypeDto>(SqlSyntax, x => x.Alias == "umbracoFile")
.Where<PropertyDataDto>(SqlSyntax, x => x.VarChar == url);
var sql = createSql(umbracoFileValue);
var propertyDataDto = Database.Fetch<PropertyDataDto, PropertyTypeDto>(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<PropertyDataDto, PropertyTypeDto>(sql).FirstOrDefault();
}
return propertyDataDto == null ? null : Get(propertyDataDto.NodeId);
}
public void AddOrUpdateContentXml(IMedia content, Func<IMedia, XElement> xml)
{
_contentXmlRepository.AddOrUpdate(new ContentXmlEntity<IMedia>(content, xml));

View File

@@ -119,7 +119,7 @@ namespace Umbraco.Core.Services
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
{
return repository.GetByQuery(QueryFactory.Create<IDataTypeDefinition>().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<IDataTypeDefinition>().Where(x => x.Key == id);
var query = repository.Query.Where(x => x.Key == id);
var definitions = repository.GetByQuery(query);
return definitions.FirstOrDefault();
}
}
/// <summary>
/// Gets a <see cref="IDataTypeDefinition"/> by its control Id
/// </summary>
/// <param name="id">Id of the DataType control</param>
/// <returns>Collection of <see cref="IDataTypeDefinition"/> objects with a matching contorl id</returns>
[Obsolete("Property editor's are defined by a string alias from version 7 onwards, use the overload GetDataTypeDefinitionByPropertyEditorAlias instead")]
public IEnumerable<IDataTypeDefinition> GetDataTypeDefinitionByControlId(Guid id)
{
var alias = LegacyPropertyEditorIdToAliasConverter.GetAliasFromLegacyId(id, true);
return GetDataTypeDefinitionByPropertyEditorAlias(alias);
}
/// <summary>
/// Gets a <see cref="IDataTypeDefinition"/> by its control Id
/// </summary>
@@ -172,7 +160,7 @@ namespace Umbraco.Core.Services
{
using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork()))
{
var query = QueryFactory.Create<IDataTypeDefinition>().Where(x => x.PropertyEditorAlias == propertyEditorAlias);
var query = repository.Query.Where(x => x.PropertyEditorAlias == propertyEditorAlias);
var definitions = repository.GetByQuery(query);
return definitions;
}

View File

@@ -77,14 +77,6 @@ namespace Umbraco.Core.Services
/// <param name="userId">Id of the user issueing the deletion</param>
void Delete(IDataTypeDefinition dataTypeDefinition, int userId = 0);
/// <summary>
/// Gets a <see cref="IDataTypeDefinition"/> by its control Id
/// </summary>
/// <param name="id">Id of the DataType control</param>
/// <returns><see cref="IDataTypeDefinition"/></returns>
[Obsolete("Property editor's are defined by a string alias from version 7 onwards, use the overload GetDataTypeDefinitionByPropertyEditorAlias instead")]
IEnumerable<IDataTypeDefinition> GetDataTypeDefinitionByControlId(Guid id);
/// <summary>
/// Gets a <see cref="IDataTypeDefinition"/> by its control Id
/// </summary>

View File

@@ -176,7 +176,7 @@ namespace Umbraco.Core.Services
{
using (var repository = RepositoryFactory.CreateDictionaryRepository(UowProvider.GetUnitOfWork()))
{
var query = QueryFactory.Create<IDictionaryItem>().Where(x => x.ParentId == null);
var query = repository.Query.Create<IDictionaryItem>().Where(x => x.ParentId == null);
var items = repository.GetByQuery(query);
return items;

View File

@@ -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<IUrlSegmentProvider> _urlSegmentProviders;
public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IDataTypeService dataTypeService, IUserService userService, IEnumerable<IUrlSegmentProvider> 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;
}
/// <summary>
@@ -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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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<IMedia>.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
/// <returns><see cref="IMedia"/></returns>
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<string, Sql> createSql = url => new Sql().Select("*")
.From<PropertyDataDto>()
.InnerJoin<PropertyTypeDto>()
.On<PropertyDataDto, PropertyTypeDto>(left => left.PropertyTypeId, right => right.Id)
.Where<PropertyTypeDto>(x => x.Alias == "umbracoFile")
.Where<PropertyDataDto>(x => x.VarChar == url);
var sql = createSql(umbracoFileValue);
using (var uow = UowProvider.GetUnitOfWork())
{
var propertyDataDto = uow.Database.Fetch<PropertyDataDto, PropertyTypeDto>(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<PropertyDataDto, PropertyTypeDto>(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<IMedia>.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<IMedia>.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<IMedia>(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<IMedia>.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<IMediaType>.Builder.Where(x => x.Alias == mediaTypeAlias);
var query = repository.QueryFactory.Create<IMediaType>().Where(x => x.Alias == mediaTypeAlias);
var mediaTypes = repository.GetByQuery(query);
if (mediaTypes.Any() == false)

View File

@@ -151,7 +151,7 @@ namespace Umbraco.Core.Services
{
using (var repository = RepositoryFactory.CreateMemberRepository(UowProvider.GetUnitOfWork()))
{
var query = Query<IMember>.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<IMember>.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<IMember>.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<IMember>.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<IMember>(members), this))
@@ -266,7 +266,7 @@ namespace Umbraco.Core.Services
var uow = UowProvider.GetUnitOfWork();
using (var repository = RepositoryFactory.CreateMemberRepository(uow))
{
var query = new Query<IMember>();
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<IMember>();
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<IMember>();
var query = repository.Query;
switch (matchType)
{
@@ -412,7 +412,7 @@ namespace Umbraco.Core.Services
{
case StringPropertyMatchType.Exact:
query =
Query<IMember>.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<IMember>.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<IMember>.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<IMember>.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<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue == value);
break;
case ValuePropertyMatchType.GreaterThan:
query =
Query<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue > value);
break;
case ValuePropertyMatchType.LessThan:
query =
Query<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue < value);
break;
case ValuePropertyMatchType.GreaterThanOrEqualTo:
query =
Query<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).IntegerPropertyValue >= value);
break;
case ValuePropertyMatchType.LessThanOrEqualTo:
query =
Query<IMember>.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<IMember>.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<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue == value);
break;
case ValuePropertyMatchType.GreaterThan:
query =
Query<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue > value);
break;
case ValuePropertyMatchType.LessThan:
query =
Query<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue < value);
break;
case ValuePropertyMatchType.GreaterThanOrEqualTo:
query =
Query<IMember>.Builder.Where(
repository.Query.Where(
x =>
((Member)x).PropertyTypeAlias == propertyTypeAlias &&
((Member)x).DateTimePropertyValue >= value);
break;
case ValuePropertyMatchType.LessThanOrEqualTo:
query =
Query<IMember>.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<IMember>();
query = repository.Query;
return repository.Count(query);
case MemberCountType.Online:
var fromDate = DateTime.Now.AddMinutes(-Membership.UserIsOnlineTimeWindow);
query =
Query<IMember>.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<IMember>.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<IMember>.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<IMember>().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<IMember>.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<IMember>.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<IMemberGroup>().Where(g => g.Name == roleName);
var qry = repository.QueryFactory.Create<IMemberGroup>().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<IMemberType>.Builder.Where(x => x.Alias == memberTypeAlias);
var query = repository.QueryFactory.Create<IMemberType>().Where(x => x.Alias == memberTypeAlias);
var types = repository.GetByQuery(query);
if (types.Any() == false)

View File

@@ -70,7 +70,7 @@ namespace Umbraco.Core.Services
var uow = UowProvider.GetUnitOfWork();
using (var repo = RepositoryFactory.CreateMigrationEntryRepository(uow))
{
var query = Query<IMigrationEntry>.Builder
var query = repo.Query
.Where(x => x.MigrationName.ToUpper() == migrationName.ToUpper());
return repo.GetByQuery(query);
}

View File

@@ -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<IUrlSegmentProvider> _urlSegmentProviders;
private Dictionary<string, IContentType> _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<IUrlSegmentProvider> 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<string, IContentType>();
}
@@ -79,7 +83,7 @@ namespace Umbraco.Core.Services
/// <returns><see cref="XElement"/> containing the xml representation of the Content object</returns>
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<IContent>(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<IContentType>.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<DataTypeDatabaseType>(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
/// <returns><see cref="XElement"/> containing the xml representation of the Media object</returns>
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<IMedia>(media, xml, false), this);

View File

@@ -256,7 +256,7 @@ namespace Umbraco.Core.Services
if (_notificationService == null)
_notificationService = new Lazy<INotificationService>(() => new NotificationService(provider, _userService.Value, _contentService.Value, logger));
_notificationService = new Lazy<INotificationService>(() => new NotificationService(provider, _userService.Value, _contentService.Value, repositoryFactory, logger));
if (_serverRegistrationService == null)
_serverRegistrationService = new Lazy<IServerRegistrationService>(() => new ServerRegistrationService(provider, repositoryFactory, logger, eventMessagesFactory));
@@ -268,10 +268,10 @@ namespace Umbraco.Core.Services
_memberService = new Lazy<IMemberService>(() => new MemberService(provider, repositoryFactory, logger, eventMessagesFactory, _memberGroupService.Value, _dataTypeService.Value));
if (_contentService == null)
_contentService = new Lazy<IContentService>(() => new ContentService(provider, repositoryFactory, logger, eventMessagesFactory, publishingStrategy, _dataTypeService.Value, _userService.Value));
_contentService = new Lazy<IContentService>(() => new ContentService(provider, repositoryFactory, logger, eventMessagesFactory, publishingStrategy, _dataTypeService.Value, _userService.Value, urlSegmentProviders));
if (_mediaService == null)
_mediaService = new Lazy<IMediaService>(() => new MediaService(provider, repositoryFactory, logger, eventMessagesFactory, _dataTypeService.Value, _userService.Value));
_mediaService = new Lazy<IMediaService>(() => new MediaService(provider, repositoryFactory, logger, eventMessagesFactory, _dataTypeService.Value, _userService.Value, urlSegmentProviders));
if (_contentTypeService == null)
_contentTypeService = new Lazy<IContentTypeService>(() => new ContentTypeService(provider, repositoryFactory, logger, eventMessagesFactory, _contentService.Value, _mediaService.Value));
@@ -286,7 +286,7 @@ namespace Umbraco.Core.Services
_localizationService = new Lazy<ILocalizationService>(() => new LocalizationService(provider, repositoryFactory, logger, eventMessagesFactory));
if (_packagingService == null)
_packagingService = new Lazy<IPackagingService>(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _userService.Value, repositoryFactory, provider));
_packagingService = new Lazy<IPackagingService>(() => 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<IEntityService>(() => new EntityService(

View File

@@ -221,8 +221,8 @@ namespace Umbraco.Core.Sync
var sql = new Sql().Select("*")
.From<CacheInstructionDto>(_appContext.DatabaseContext.SqlSyntax)
.Where<CacheInstructionDto>(dto => dto.Id > _lastId)
.OrderBy<CacheInstructionDto>(dto => dto.Id, _appContext.DatabaseContext.SqlSyntax);
.Where<CacheInstructionDto>(_appContext.DatabaseContext.SqlSyntax, dto => dto.Id > _lastId)
.OrderBy<CacheInstructionDto>(_appContext.DatabaseContext.SqlSyntax, dto => dto.Id);
var dtos = _appContext.DatabaseContext.Database.Fetch<CacheInstructionDto>(sql);
if (dtos.Count <= 0) return;
@@ -295,7 +295,7 @@ namespace Umbraco.Core.Sync
{
var sql = new Sql().Select("*")
.From<CacheInstructionDto>(_appContext.DatabaseContext.SqlSyntax)
.Where<CacheInstructionDto>(dto => dto.Id == _lastId);
.Where<CacheInstructionDto>(_appContext.DatabaseContext.SqlSyntax, dto => dto.Id == _lastId);
var dtos = _appContext.DatabaseContext.Database.Fetch<CacheInstructionDto>(sql);
if (dtos.Count == 0)

View File

@@ -378,7 +378,6 @@ namespace Umbraco.Tests.Mvc
ServiceContext GetServiceContext()
{
return MockHelper.GetMockedServiceContext();
new TransientMessagesFactory(),
}
ViewContext GetViewContext()

View File

@@ -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;
}
/// <summary>
/// Creates and returns the service context for the app
/// </summary>
/// <param name="dbContext"></param>
/// <param name="dbFactory"></param>
/// <returns></returns>
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);
}
/// <summary>
/// Initialize objects before anything during the boot cycle happens
/// </summary>
@@ -174,6 +152,8 @@ namespace Umbraco.Web
protected override IProfiler CreateProfiler()
{
return new WebProfiler();
}
/// Ensure that the OnApplicationStarted methods of the IApplicationEvents are called
/// </summary>
/// <param name="afterComplete"></param>

View File

@@ -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()));
/// <summary>
/// Deletes the current Content object, must be overridden in the child class.

View File

@@ -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<CMSPreviewNode> GetNodesForPreview(bool childrenOnly)
{

View File

@@ -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