Adds MediaFactory implementation U4-985
Adds MediaRepository implementation U4-957 Refactoring ContentType and MediaType to have parent id as constructor dependency. Refactoring PropertyFactory to work for both Content and Media. Adding Version property to Media.
This commit is contained in:
@@ -32,8 +32,9 @@ namespace Umbraco.Core.Models
|
||||
private IEnumerable<string> _allowedTemplates;
|
||||
private IEnumerable<int> _allowedContentTypes;
|
||||
|
||||
public ContentType()
|
||||
public ContentType(int parentId)
|
||||
{
|
||||
_parentId = parentId;
|
||||
_allowedTemplates = new List<string>();
|
||||
_allowedContentTypes = new List<int>();
|
||||
_propertyGroups = new PropertyGroupCollection();
|
||||
@@ -394,9 +395,6 @@ namespace Umbraco.Core.Models
|
||||
{
|
||||
base.AddingEntity();
|
||||
Key = Guid.NewGuid();
|
||||
|
||||
if (ParentId == 0)
|
||||
_parentId = -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -16,8 +16,6 @@ namespace Umbraco.Core.Models
|
||||
private Guid _parentId;
|
||||
private string _itemKey;
|
||||
private IEnumerable<DictionaryTranslation> _translations;
|
||||
//NOTE Add this to LocalizationService or Repository
|
||||
//private static Guid _topLevelParent = new Guid("41c7638d-f529-4bff-853e-59a0c2fb1bde");
|
||||
|
||||
public DictionaryItem(Guid parentId, string itemKey)
|
||||
{
|
||||
|
||||
@@ -23,11 +23,6 @@ namespace Umbraco.Core.Models
|
||||
/// </summary>
|
||||
//string Language { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Guid Id of the Content's Version
|
||||
/// </summary>
|
||||
Guid Version { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or Sets the date the Content should be released and thus be published
|
||||
/// </summary>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Serialization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Umbraco.Core.Models.EntityBase;
|
||||
|
||||
namespace Umbraco.Core.Models
|
||||
@@ -56,6 +56,11 @@ namespace Umbraco.Core.Models
|
||||
/// </summary>
|
||||
int ContentTypeId { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Guid Id of the Content's Version
|
||||
/// </summary>
|
||||
Guid Version { get; }
|
||||
|
||||
/// <summary>
|
||||
/// List of properties, which make up all the data available for this Content object
|
||||
/// </summary>
|
||||
|
||||
@@ -51,6 +51,7 @@ namespace Umbraco.Core.Models
|
||||
_contentType = contentType;
|
||||
_properties = properties;
|
||||
_properties.EnsurePropertyTypes(PropertyTypes);
|
||||
Version = Guid.NewGuid();
|
||||
}
|
||||
|
||||
private static readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo<Media, string>(x => x.Name);
|
||||
@@ -194,6 +195,12 @@ namespace Umbraco.Core.Models
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Guid Id of the curent Version
|
||||
/// </summary>
|
||||
[DataMember]
|
||||
public Guid Version { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// List of properties, which make up all the data available for this Media object
|
||||
/// </summary>
|
||||
@@ -319,5 +326,25 @@ namespace Umbraco.Core.Models
|
||||
|
||||
ChangeContentType(contentType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method to call when Entity is being saved
|
||||
/// </summary>
|
||||
/// <remarks>Created date is set and a Unique key is assigned</remarks>
|
||||
internal override void AddingEntity()
|
||||
{
|
||||
base.AddingEntity();
|
||||
Key = Guid.NewGuid();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Method to call when Entity is being updated
|
||||
/// </summary>
|
||||
/// <remarks>Modified Date is set and a new Version guid is set</remarks>
|
||||
internal override void UpdatingEntity()
|
||||
{
|
||||
base.UpdatingEntity();
|
||||
Version = Guid.NewGuid();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,8 +29,9 @@ namespace Umbraco.Core.Models
|
||||
private PropertyGroupCollection _propertyGroups;
|
||||
private IEnumerable<int> _allowedContentTypes;
|
||||
|
||||
public MediaType()
|
||||
public MediaType(int parentId)
|
||||
{
|
||||
_parentId = parentId;
|
||||
_allowedContentTypes = new List<int>();
|
||||
_propertyGroups = new PropertyGroupCollection();
|
||||
}
|
||||
@@ -256,9 +257,6 @@ namespace Umbraco.Core.Models
|
||||
{
|
||||
base.AddingEntity();
|
||||
Key = Guid.NewGuid();
|
||||
|
||||
if (ParentId == 0)
|
||||
_parentId = -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
|
||||
public IContentType BuildEntity(DocumentTypeDto dto)
|
||||
{
|
||||
var contentType = new ContentType
|
||||
var contentType = new ContentType(dto.ContentTypeDto.NodeDto.ParentId)
|
||||
{
|
||||
Id = dto.ContentTypeDto.NodeDto.NodeId,
|
||||
Key =
|
||||
@@ -34,7 +34,6 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
CreateDate = dto.ContentTypeDto.NodeDto.CreateDate,
|
||||
Path = dto.ContentTypeDto.NodeDto.Path,
|
||||
Level = dto.ContentTypeDto.NodeDto.Level,
|
||||
ParentId = dto.ContentTypeDto.NodeDto.ParentId,
|
||||
UserId =
|
||||
dto.ContentTypeDto.NodeDto.UserId.HasValue
|
||||
? dto.ContentTypeDto.NodeDto.UserId.Value
|
||||
|
||||
105
src/Umbraco.Core/Persistence/Factories/MediaFactory.cs
Normal file
105
src/Umbraco.Core/Persistence/Factories/MediaFactory.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Rdbms;
|
||||
|
||||
namespace Umbraco.Core.Persistence.Factories
|
||||
{
|
||||
internal class MediaFactory : IEntityFactory<IMedia, ContentVersionDto>
|
||||
{
|
||||
private readonly IMediaType _contentType;
|
||||
private readonly Guid _nodeObjectTypeId;
|
||||
private readonly int _id;
|
||||
private int _primaryKey;
|
||||
|
||||
public MediaFactory(IMediaType contentType, Guid nodeObjectTypeId, int id)
|
||||
{
|
||||
_contentType = contentType;
|
||||
_nodeObjectTypeId = nodeObjectTypeId;
|
||||
_id = id;
|
||||
}
|
||||
|
||||
#region Implementation of IEntityFactory<IMedia,ContentVersionDto>
|
||||
|
||||
public IMedia BuildEntity(ContentVersionDto dto)
|
||||
{
|
||||
return new Models.Media(dto.ContentDto.NodeDto.ParentId, _contentType)
|
||||
{
|
||||
Id = _id,
|
||||
Key =
|
||||
dto.ContentDto.NodeDto.UniqueId.HasValue
|
||||
? dto.ContentDto.NodeDto.UniqueId.Value
|
||||
: _id.ToGuid(),
|
||||
Name = dto.ContentDto.NodeDto.Text,
|
||||
Path = dto.ContentDto.NodeDto.Path,
|
||||
UserId =
|
||||
dto.ContentDto.NodeDto.UserId.HasValue
|
||||
? dto.ContentDto.NodeDto.UserId.Value
|
||||
: 0,
|
||||
Level = dto.ContentDto.NodeDto.Level,
|
||||
ParentId = dto.ContentDto.NodeDto.ParentId,
|
||||
SortOrder = dto.ContentDto.NodeDto.SortOrder,
|
||||
Trashed = dto.ContentDto.NodeDto.Trashed,
|
||||
CreateDate = dto.ContentDto.NodeDto.CreateDate,
|
||||
UpdateDate = dto.VersionDate,
|
||||
Version = dto.VersionId
|
||||
};
|
||||
}
|
||||
|
||||
public ContentVersionDto BuildDto(IMedia entity)
|
||||
{
|
||||
var dto = new ContentVersionDto
|
||||
{
|
||||
NodeId = entity.Id,
|
||||
VersionDate = entity.UpdateDate,
|
||||
VersionId = entity.Version,
|
||||
ContentDto = BuildContentDto(entity)
|
||||
};
|
||||
return dto;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void SetPrimaryKey(int primaryKey)
|
||||
{
|
||||
_primaryKey = primaryKey;
|
||||
}
|
||||
|
||||
private ContentDto BuildContentDto(IMedia entity)
|
||||
{
|
||||
var contentDto = new ContentDto
|
||||
{
|
||||
NodeId = entity.Id,
|
||||
ContentType = entity.ContentTypeId,
|
||||
NodeDto = BuildNodeDto(entity)
|
||||
};
|
||||
|
||||
if (_primaryKey > 0)
|
||||
{
|
||||
contentDto.PrimaryKey = _primaryKey;
|
||||
}
|
||||
|
||||
return contentDto;
|
||||
}
|
||||
|
||||
private NodeDto BuildNodeDto(IMedia entity)
|
||||
{
|
||||
var nodeDto = new NodeDto
|
||||
{
|
||||
CreateDate = entity.CreateDate,
|
||||
NodeId = entity.Id,
|
||||
Level = short.Parse(entity.Level.ToString(CultureInfo.InvariantCulture)),
|
||||
NodeObjectType = _nodeObjectTypeId,
|
||||
ParentId = entity.ParentId,
|
||||
Path = entity.Path,
|
||||
SortOrder = entity.SortOrder,
|
||||
Text = entity.Name,
|
||||
Trashed = entity.Trashed,
|
||||
UniqueId = entity.Key,
|
||||
UserId = entity.UserId
|
||||
};
|
||||
|
||||
return nodeDto;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
|
||||
public IMediaType BuildEntity(ContentTypeDto dto)
|
||||
{
|
||||
var contentType = new MediaType
|
||||
var contentType = new MediaType(dto.NodeDto.ParentId)
|
||||
{
|
||||
Id = dto.NodeDto.NodeId,
|
||||
Key =
|
||||
@@ -34,7 +34,6 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
CreateDate = dto.NodeDto.CreateDate,
|
||||
Path = dto.NodeDto.Path,
|
||||
Level = dto.NodeDto.Level,
|
||||
ParentId = dto.NodeDto.ParentId,
|
||||
UserId =
|
||||
dto.NodeDto.UserId.HasValue
|
||||
? dto.NodeDto.UserId.Value
|
||||
|
||||
@@ -9,11 +9,10 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
internal class PropertyFactory : IEntityFactory<IEnumerable<Property>, IEnumerable<PropertyDataDto>>
|
||||
{
|
||||
private readonly IContentType _contentType;
|
||||
private readonly IMediaType _mediaType;
|
||||
private readonly Guid _version;
|
||||
private readonly int _id;
|
||||
|
||||
#region Implementation of IEntityFactory<IContent,PropertyDataDto>
|
||||
|
||||
public PropertyFactory(IContentType contentType, Guid version, int id)
|
||||
{
|
||||
_contentType = contentType;
|
||||
@@ -21,13 +20,21 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
_id = id;
|
||||
}
|
||||
|
||||
public PropertyFactory(IMediaType mediaType, Guid version, int id)
|
||||
{
|
||||
_mediaType = mediaType;
|
||||
_version = version;
|
||||
_id = id;
|
||||
}
|
||||
|
||||
#region Implementation of IEntityFactory<IContent,PropertyDataDto>
|
||||
|
||||
public IEnumerable<Property> BuildEntity(IEnumerable<PropertyDataDto> dtos)
|
||||
{
|
||||
var properties = new List<Property>();
|
||||
foreach (var dto in dtos)
|
||||
{
|
||||
var propertyType =
|
||||
_contentType.CompositionPropertyTypes.FirstOrDefault(x => x.Id == dto.PropertyTypeId);
|
||||
var propertyType = _contentType.CompositionPropertyTypes.FirstOrDefault(x => x.Id == dto.PropertyTypeId);
|
||||
properties.Add(propertyType.CreatePropertyFromRawValue(dto.GetValue));
|
||||
}
|
||||
return properties;
|
||||
@@ -71,5 +78,16 @@ namespace Umbraco.Core.Persistence.Factories
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public IEnumerable<Property> BuildMediaEntity(IEnumerable<PropertyDataDto> dtos)
|
||||
{
|
||||
var properties = new List<Property>();
|
||||
foreach (var dto in dtos)
|
||||
{
|
||||
var propertyType = _mediaType.PropertyTypes.FirstOrDefault(x => x.Id == dto.PropertyTypeId);
|
||||
properties.Add(propertyType.CreatePropertyFromRawValue(dto.GetValue));
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,28 +38,17 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
contentSql.Append(GetBaseWhereClause(id));
|
||||
contentSql.OrderBy("[cmsContentVersion].[VersionDate] DESC");
|
||||
|
||||
var documentDto = Database.Query<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(contentSql).FirstOrDefault();
|
||||
var dto = Database.Query<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(contentSql).FirstOrDefault();
|
||||
|
||||
if (documentDto == null)
|
||||
if (dto == null)
|
||||
return null;
|
||||
|
||||
var propertySql = new Sql();
|
||||
propertySql.Select("*");
|
||||
propertySql.From("cmsPropertyData");
|
||||
propertySql.InnerJoin("cmsPropertyType ON ([cmsPropertyData].[propertytypeid] = [cmsPropertyType].[id])");
|
||||
propertySql.Where("[cmsPropertyData].[contentNodeId] = @Id", new { Id = id });
|
||||
propertySql.Where("[cmsPropertyData].[versionId] = @VersionId", new { VersionId = documentDto.ContentVersionDto.VersionId });
|
||||
|
||||
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(propertySql);
|
||||
|
||||
var contentType = _contentTypeRepository.Get(documentDto.ContentVersionDto.ContentDto.ContentType);
|
||||
var contentType = _contentTypeRepository.Get(dto.ContentVersionDto.ContentDto.ContentType);
|
||||
|
||||
var factory = new ContentFactory(contentType, NodeObjectTypeId, id);
|
||||
var content = factory.BuildEntity(documentDto);
|
||||
var content = factory.BuildEntity(dto);
|
||||
|
||||
var propertyFactory = new PropertyFactory(contentType, documentDto.ContentVersionDto.VersionId, id);
|
||||
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
||||
content.Properties = new PropertyCollection(properties);
|
||||
content.Properties = GetPropertyCollection(id, dto.ContentVersionDto.VersionId, contentType);
|
||||
|
||||
((Content)content).ResetDirtyProperties();
|
||||
return content;
|
||||
@@ -90,11 +79,11 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
var translator = new SqlTranslator<IContent>(sqlClause, query);
|
||||
var sql = translator.Translate();
|
||||
|
||||
var documentDtos = Database.Fetch<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(sql);
|
||||
var dtos = Database.Fetch<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(sql);
|
||||
|
||||
foreach (var documentDto in documentDtos)
|
||||
foreach (var dto in dtos)
|
||||
{
|
||||
yield return Get(documentDto.NodeId);
|
||||
yield return Get(dto.NodeId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +106,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
protected override Sql GetBaseWhereClause(object id)
|
||||
{
|
||||
var sql = new Sql();
|
||||
sql.Where("[cmsDocument].[nodeId] = @Id", new { Id = id });
|
||||
sql.Where("[umbracoNode].[id] = @Id", new { Id = id });
|
||||
return sql;
|
||||
}
|
||||
|
||||
@@ -194,7 +183,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
Database.Insert(dto);
|
||||
|
||||
//Create the PropertyData for this version - cmsPropertyData
|
||||
var propertyFactory = new PropertyFactory(null, entity.Version, entity.Id);
|
||||
var propertyFactory = new PropertyFactory(((Content)entity).ContentType, entity.Version, entity.Id);
|
||||
var propertyDataDtos = propertyFactory.BuildDto(entity.Properties);
|
||||
//Add Properties
|
||||
foreach (var propertyDataDto in propertyDataDtos)
|
||||
@@ -247,7 +236,7 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
Database.Insert(dto);
|
||||
|
||||
//Create the PropertyData for this version - cmsPropertyData
|
||||
var propertyFactory = new PropertyFactory(null, entity.Version, entity.Id);
|
||||
var propertyFactory = new PropertyFactory(((Content)entity).ContentType, entity.Version, entity.Id);
|
||||
var propertyDataDtos = propertyFactory.BuildDto(entity.Properties);
|
||||
//Add Properties
|
||||
foreach (var propertyDataDto in propertyDataDtos)
|
||||
@@ -282,33 +271,37 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
contentSql.Where("[cmsContentVersion].[VersionId] = @VersionId", new { VersionId = versionId });
|
||||
contentSql.OrderBy("[cmsContentVersion].[VersionDate] DESC");
|
||||
|
||||
var documentDto = Database.Query<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(contentSql).FirstOrDefault();
|
||||
var dto = Database.Query<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(contentSql).FirstOrDefault();
|
||||
|
||||
if (documentDto == null)
|
||||
if (dto == null)
|
||||
return null;
|
||||
|
||||
var propertySql = new Sql();
|
||||
propertySql.Select("*");
|
||||
propertySql.From("cmsPropertyData");
|
||||
propertySql.InnerJoin("cmsPropertyType ON [cmsPropertyData].[propertytypeid] = [cmsPropertyType].[id]");
|
||||
propertySql.Where("[cmsPropertyData].[contentNodeId] = @Id", new { Id = id });
|
||||
propertySql.Where("[cmsPropertyData].[versionId] = @VersionId", new { VersionId = versionId });
|
||||
|
||||
var propertyDataDtos = Database.Query<PropertyDataDto, PropertyTypeDto>(propertySql);
|
||||
|
||||
var contentType = _contentTypeRepository.Get(documentDto.ContentVersionDto.ContentDto.ContentType);
|
||||
var contentType = _contentTypeRepository.Get(dto.ContentVersionDto.ContentDto.ContentType);
|
||||
|
||||
var factory = new ContentFactory(contentType, NodeObjectTypeId, id);
|
||||
var content = factory.BuildEntity(documentDto);
|
||||
var content = factory.BuildEntity(dto);
|
||||
|
||||
var propertyFactory = new PropertyFactory(contentType, documentDto.ContentVersionDto.VersionId, id);
|
||||
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
||||
content.Properties = new PropertyCollection(properties);
|
||||
content.Properties = GetPropertyCollection(id, versionId, contentType);
|
||||
|
||||
((Content)content).ResetDirtyProperties();
|
||||
return content;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private PropertyCollection GetPropertyCollection(int id, Guid versionId, IContentType contentType)
|
||||
{
|
||||
var propertySql = new Sql();
|
||||
propertySql.Select("*");
|
||||
propertySql.From("cmsPropertyData");
|
||||
propertySql.InnerJoin("cmsPropertyType ON ([cmsPropertyData].[propertytypeid] = [cmsPropertyType].[id])");
|
||||
propertySql.Where("[cmsPropertyData].[contentNodeId] = @Id", new { Id = id });
|
||||
propertySql.Where("[cmsPropertyData].[versionId] = @VersionId", new { VersionId = versionId });
|
||||
|
||||
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(propertySql);
|
||||
var propertyFactory = new PropertyFactory(contentType, versionId, id);
|
||||
var properties = propertyFactory.BuildEntity(propertyDataDtos);
|
||||
return new PropertyCollection(properties);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Rdbms;
|
||||
using Umbraco.Core.Persistence.Caching;
|
||||
using Umbraco.Core.Persistence.Factories;
|
||||
using Umbraco.Core.Persistence.Querying;
|
||||
using Umbraco.Core.Persistence.UnitOfWork;
|
||||
|
||||
@@ -12,29 +16,74 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
/// </summary>
|
||||
internal class MediaRepository : PetaPocoRepositoryBase<int, IMedia>, IMediaRepository
|
||||
{
|
||||
public MediaRepository(IUnitOfWork work) : base(work)
|
||||
private readonly IMediaTypeRepository _mediaTypeRepository;
|
||||
|
||||
public MediaRepository(IUnitOfWork work, IMediaTypeRepository mediaTypeRepository) : base(work)
|
||||
{
|
||||
_mediaTypeRepository = mediaTypeRepository;
|
||||
}
|
||||
|
||||
public MediaRepository(IUnitOfWork work, IRepositoryCacheProvider cache) : base(work, cache)
|
||||
public MediaRepository(IUnitOfWork work, IRepositoryCacheProvider cache, IMediaTypeRepository mediaTypeRepository)
|
||||
: base(work, cache)
|
||||
{
|
||||
_mediaTypeRepository = mediaTypeRepository;
|
||||
}
|
||||
|
||||
#region Overrides of RepositoryBase<int,IMedia>
|
||||
|
||||
protected override IMedia PerformGet(int id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var contentSql = GetBaseQuery(false);
|
||||
contentSql.Append(GetBaseWhereClause(id));
|
||||
contentSql.OrderBy("[cmsContentVersion].[VersionDate] DESC");
|
||||
|
||||
var dto = Database.Query<ContentVersionDto, ContentDto, NodeDto>(contentSql).FirstOrDefault();
|
||||
|
||||
if (dto == null)
|
||||
return null;
|
||||
|
||||
var contentType = _mediaTypeRepository.Get(dto.ContentDto.ContentType);
|
||||
|
||||
var factory = new MediaFactory(contentType, NodeObjectTypeId, id);
|
||||
var content = factory.BuildEntity(dto);
|
||||
|
||||
content.Properties = GetPropertyCollection(id, dto.VersionId, contentType);
|
||||
|
||||
((Models.Media)content).ResetDirtyProperties();
|
||||
return content;
|
||||
}
|
||||
|
||||
protected override IEnumerable<IMedia> PerformGetAll(params int[] ids)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
if (ids.Any())
|
||||
{
|
||||
foreach (var id in ids)
|
||||
{
|
||||
yield return Get(id);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var nodeDtos = Database.Fetch<NodeDto>("WHERE nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId });
|
||||
foreach (var nodeDto in nodeDtos)
|
||||
{
|
||||
yield return Get(nodeDto.NodeId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override IEnumerable<IMedia> PerformGetByQuery(IQuery<IMedia> query)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var sqlClause = GetBaseQuery(false);
|
||||
var translator = new SqlTranslator<IMedia>(sqlClause, query);
|
||||
var sql = translator.Translate();
|
||||
|
||||
var dtos = Database.Fetch<ContentVersionDto, ContentDto, NodeDto>(sql);
|
||||
|
||||
foreach (var dto in dtos)
|
||||
{
|
||||
yield return Get(dto.ContentDto.NodeDto.NodeId);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -43,22 +92,41 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
|
||||
protected override Sql GetBaseQuery(bool isCount)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var sql = new Sql();
|
||||
sql.Select(isCount ? "COUNT(*)" : "*");
|
||||
sql.From("cmsContentVersion");
|
||||
sql.InnerJoin("cmsContent ON ([cmsContentVersion].[ContentId] = [cmsContent].[nodeId])");
|
||||
sql.InnerJoin("umbracoNode ON ([cmsContent].[nodeId] = [umbracoNode].[id])");
|
||||
sql.Where("[umbracoNode].[nodeObjectType] = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId });
|
||||
return sql;
|
||||
}
|
||||
|
||||
protected override Sql GetBaseWhereClause(object id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var sql = new Sql();
|
||||
sql.Where("[umbracoNode].[id] = @Id", new { Id = id });
|
||||
return sql;
|
||||
}
|
||||
|
||||
protected override IEnumerable<string> GetDeleteClauses()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var list = new List<string>
|
||||
{
|
||||
string.Format("DELETE FROM umbracoUser2NodeNotify WHERE nodeId = @Id"),
|
||||
string.Format("DELETE FROM umbracoUser2NodePermission WHERE nodeId = @Id"),
|
||||
string.Format("DELETE FROM cmsTagRelationship WHERE nodeId = @Id"),
|
||||
string.Format("DELETE FROM cmsDocument WHERE NodeId = @Id"),
|
||||
string.Format("DELETE FROM cmsPropertyData WHERE contentNodeId = @Id"),
|
||||
string.Format("DELETE FROM cmsContentVersion WHERE ContentId = @Id"),
|
||||
string.Format("DELETE FROM cmsContent WHERE NodeId = @Id"),
|
||||
string.Format("DELETE FROM umbracoNode WHERE id = @Id")
|
||||
};
|
||||
return list;
|
||||
}
|
||||
|
||||
protected override Guid NodeObjectTypeId
|
||||
{
|
||||
get { throw new NotImplementedException(); }
|
||||
get { return new Guid("B796F64C-1F99-4FFB-B886-4BF4BC011A9C"); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -67,14 +135,110 @@ namespace Umbraco.Core.Persistence.Repositories
|
||||
|
||||
protected override void PersistNewItem(IMedia entity)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
((Models.Media)entity).AddingEntity();
|
||||
|
||||
var factory = new MediaFactory(null, NodeObjectTypeId, entity.Id);
|
||||
var dto = factory.BuildDto(entity);
|
||||
|
||||
//NOTE Should the logic below have some kind of fallback for empty parent ids ?
|
||||
//Logic for setting Path, Level and SortOrder
|
||||
var parent = Database.First<NodeDto>("WHERE id = @ParentId", new { ParentId = entity.ParentId });
|
||||
int level = parent.Level + 1;
|
||||
int sortOrder =
|
||||
Database.ExecuteScalar<int>("SELECT COUNT(*) FROM umbracoNode WHERE parentID = @ParentId AND nodeObjectType = @NodeObjectType",
|
||||
new { ParentId = entity.ParentId, NodeObjectType = NodeObjectTypeId });
|
||||
|
||||
//Create the (base) node data - umbracoNode
|
||||
var nodeDto = dto.ContentDto.NodeDto;
|
||||
nodeDto.Path = parent.Path;
|
||||
nodeDto.Level = short.Parse(level.ToString(CultureInfo.InvariantCulture));
|
||||
nodeDto.SortOrder = sortOrder;
|
||||
var o = Database.IsNew(nodeDto) ? Convert.ToInt32(Database.Insert(nodeDto)) : Database.Update(nodeDto);
|
||||
|
||||
//Update with new correct path
|
||||
nodeDto.Path = string.Concat(parent.Path, ",", nodeDto.NodeId);
|
||||
Database.Update(nodeDto);
|
||||
|
||||
//Update entity with correct values
|
||||
entity.Id = nodeDto.NodeId; //Set Id on entity to ensure an Id is set
|
||||
entity.Path = nodeDto.Path;
|
||||
entity.SortOrder = sortOrder;
|
||||
entity.Level = level;
|
||||
|
||||
//Create the Content specific data - cmsContent
|
||||
var contentDto = dto.ContentDto;
|
||||
Database.Insert(contentDto);
|
||||
|
||||
//Create the first version - cmsContentVersion
|
||||
//Assumes a new Version guid and Version date (modified date) has been set
|
||||
Database.Insert(dto);
|
||||
|
||||
//Create the PropertyData for this version - cmsPropertyData
|
||||
var propertyFactory = new PropertyFactory(((Models.Media)entity).ContentType, entity.Version, entity.Id);
|
||||
var propertyDataDtos = propertyFactory.BuildDto(entity.Properties);
|
||||
//Add Properties
|
||||
foreach (var propertyDataDto in propertyDataDtos)
|
||||
{
|
||||
Database.Insert(propertyDataDto);
|
||||
}
|
||||
|
||||
((Models.Media)entity).ResetDirtyProperties();
|
||||
}
|
||||
|
||||
protected override void PersistUpdatedItem(IMedia entity)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//Updates Modified date and Version Guid
|
||||
((Models.Media)entity).UpdatingEntity();
|
||||
|
||||
var factory = new MediaFactory(null, NodeObjectTypeId, entity.Id);
|
||||
//Look up Content entry to get Primary for updating the DTO
|
||||
var contentDto = Database.SingleOrDefault<ContentDto>("WHERE nodeId = @Id", new { Id = entity.Id });
|
||||
factory.SetPrimaryKey(contentDto.PrimaryKey);
|
||||
var dto = factory.BuildDto(entity);
|
||||
|
||||
//Updates the (base) node data - umbracoNode
|
||||
var nodeDto = dto.ContentDto.NodeDto;
|
||||
var o = Database.Update(nodeDto);
|
||||
|
||||
//Only update this DTO if the contentType has actually changed
|
||||
if (contentDto.ContentType != entity.ContentTypeId)
|
||||
{
|
||||
//Create the Content specific data - cmsContent
|
||||
var newContentDto = dto.ContentDto;
|
||||
Database.Update(newContentDto);
|
||||
}
|
||||
|
||||
//Create a new version - cmsContentVersion
|
||||
//Assumes a new Version guid and Version date (modified date) has been set
|
||||
Database.Insert(dto);
|
||||
|
||||
//Create the PropertyData for this version - cmsPropertyData
|
||||
var propertyFactory = new PropertyFactory(((Models.Media)entity).ContentType, entity.Version, entity.Id);
|
||||
var propertyDataDtos = propertyFactory.BuildDto(entity.Properties);
|
||||
//Add Properties
|
||||
foreach (var propertyDataDto in propertyDataDtos)
|
||||
{
|
||||
Database.Insert(propertyDataDto);
|
||||
}
|
||||
|
||||
((Models.Media)entity).ResetDirtyProperties();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private PropertyCollection GetPropertyCollection(int id, Guid versionId, IMediaType contentType)
|
||||
{
|
||||
var propertySql = new Sql();
|
||||
propertySql.Select("*");
|
||||
propertySql.From("cmsPropertyData");
|
||||
propertySql.InnerJoin("cmsPropertyType ON ([cmsPropertyData].[propertytypeid] = [cmsPropertyType].[id])");
|
||||
propertySql.Where("[cmsPropertyData].[contentNodeId] = @Id", new { Id = id });
|
||||
propertySql.Where("[cmsPropertyData].[versionId] = @VersionId", new { VersionId = versionId });
|
||||
|
||||
var propertyDataDtos = Database.Fetch<PropertyDataDto, PropertyTypeDto>(propertySql);
|
||||
var propertyFactory = new PropertyFactory(contentType, versionId, id);
|
||||
var properties = propertyFactory.BuildMediaEntity(propertyDataDtos);
|
||||
return new PropertyCollection(properties);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,6 +108,7 @@
|
||||
<Compile Include="Persistence\Factories\DictionaryTranslationFactory.cs" />
|
||||
<Compile Include="Persistence\Factories\IEntityFactory.cs" />
|
||||
<Compile Include="Persistence\Factories\LanguageFactory.cs" />
|
||||
<Compile Include="Persistence\Factories\MediaFactory.cs" />
|
||||
<Compile Include="Persistence\Factories\MediaTypeFactory.cs" />
|
||||
<Compile Include="Persistence\Factories\PropertyFactory.cs" />
|
||||
<Compile Include="Persistence\Factories\PropertyGroupFactory.cs" />
|
||||
|
||||
Reference in New Issue
Block a user