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:
Morten@Thinkpad-X220
2012-10-09 11:53:22 -02:00
parent 0d9bb02a9c
commit a9939ac183
13 changed files with 374 additions and 74 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -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();
}
}
}

View File

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

View File

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

View 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;
}
}
}

View File

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

View File

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

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

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