Created new field in cmsContentType and related models for storing the configuration for a container doc type; implemented configurable page size

This commit is contained in:
AndyButland
2014-07-27 08:53:32 +02:00
parent c2816e759b
commit 599872a310
20 changed files with 191 additions and 22 deletions

View File

@@ -29,6 +29,7 @@ namespace Umbraco.Core.Models
private int _creatorId;
private bool _allowedAsRoot;
private bool _isContainer;
private string _containerConfig;
private bool _trashed;
private PropertyGroupCollection _propertyGroups;
private PropertyTypeCollection _propertyTypes;
@@ -72,6 +73,7 @@ namespace Umbraco.Core.Models
private static readonly PropertyInfo CreatorIdSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, int>(x => x.CreatorId);
private static readonly PropertyInfo AllowedAsRootSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, bool>(x => x.AllowedAsRoot);
private static readonly PropertyInfo IsContainerSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, bool>(x => x.IsContainer);
private static readonly PropertyInfo ContainerConfigSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, string>(x => x.ContainerConfig);
private static readonly PropertyInfo TrashedSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, bool>(x => x.Trashed);
private static readonly PropertyInfo AllowedContentTypesSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, IEnumerable<ContentTypeSort>>(x => x.AllowedContentTypes);
private static readonly PropertyInfo PropertyGroupCollectionSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, PropertyGroupCollection>(x => x.PropertyGroups);
@@ -303,6 +305,23 @@ namespace Umbraco.Core.Models
}
}
/// <summary>
/// Gets or Sets a JSON string defining the configuration for this ContentType if set as a container
/// </summary>
[DataMember]
public virtual string ContainerConfig
{
get { return _containerConfig; }
set
{
SetPropertyValueAndDetectChanges(o =>
{
_containerConfig = value;
return _containerConfig;
}, _containerConfig, ContainerConfigSelector);
}
}
/// <summary>
/// Boolean indicating whether this ContentType is Trashed or not.
/// If ContentType is Trashed it will be located in the Recyclebin.

View File

@@ -43,6 +43,11 @@ namespace Umbraco.Core.Models
/// </remarks>
bool IsContainer { get; set; }
/// <summary>
/// Gets or Sets a JSON string defining the configuration for this ContentType if set as a container
/// </summary>
string ContainerConfig { get; set; }
/// <summary>
/// Gets or Sets a list of integer Ids of the ContentTypes allowed under the ContentType
/// </summary>

View File

@@ -39,6 +39,10 @@ namespace Umbraco.Core.Models.Rdbms
[Constraint(Default = "0")]
public bool IsContainer { get; set; }
[Column("containerConfig")]
[NullSetting(NullSetting = NullSettings.Null)]
public string ContainerConfig { get; set; }
[Column("allowAtRoot")]
[Constraint(Default = "0")]
public bool AllowAtRoot { get; set; }

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.DatabaseAnnotations;
namespace Umbraco.Core.Models.Rdbms
{
@@ -62,6 +63,10 @@ namespace Umbraco.Core.Models.Rdbms
[Column("isContainer")]
public bool IsContainer { get; set; }
[Column("containerConfig")]
[NullSetting(NullSetting = NullSettings.Null)]
public string ContainerConfig { get; set; }
[Column("allowAtRoot")]
public bool AllowAtRoot { get; set; }

View File

@@ -38,6 +38,7 @@ namespace Umbraco.Core.Persistence.Factories
CreatorId = dto.ContentTypeDto.NodeDto.UserId.Value,
AllowedAsRoot = dto.ContentTypeDto.AllowAtRoot,
IsContainer = dto.ContentTypeDto.IsContainer,
ContainerConfig = dto.ContentTypeDto.ContainerConfig,
Trashed = dto.ContentTypeDto.NodeDto.Trashed,
DefaultTemplateId = dto.TemplateNodeId
};
@@ -74,6 +75,7 @@ namespace Umbraco.Core.Persistence.Factories
NodeId = entity.Id,
AllowAtRoot = entity.AllowedAsRoot,
IsContainer = entity.IsContainer,
ContainerConfig = entity.ContainerConfig,
NodeDto = BuildNodeDto(entity)
};
return contentTypeDto;

View File

@@ -37,6 +37,7 @@ namespace Umbraco.Core.Persistence.Factories
CreatorId = dto.NodeDto.UserId.Value,
AllowedAsRoot = dto.AllowAtRoot,
IsContainer = dto.IsContainer,
ContainerConfig = dto.ContainerConfig,
Trashed = dto.NodeDto.Trashed
};
//on initial construction we don't want to have dirty properties tracked
@@ -56,6 +57,7 @@ namespace Umbraco.Core.Persistence.Factories
NodeId = entity.Id,
AllowAtRoot = entity.AllowedAsRoot,
IsContainer = entity.IsContainer,
ContainerConfig = entity.ContainerConfig,
NodeDto = BuildNodeDto(entity)
};
return contentTypeDto;

View File

@@ -32,6 +32,7 @@ namespace Umbraco.Core.Persistence.Factories
NodeId = entity.Id,
AllowAtRoot = entity.AllowedAsRoot,
IsContainer = entity.IsContainer,
ContainerConfig = entity.ContainerConfig,
NodeDto = BuildNodeDto(entity)
};
return contentTypeDto;

View File

@@ -23,6 +23,7 @@ namespace Umbraco.Core.Persistence.Factories
Icon = dto.Icon,
Id = dto.NodeId,
IsContainer = dto.IsContainer,
ContainerConfig = dto.ContainerConfig,
Key = dto.UniqueId.Value,
Level = dto.Level,
Name = dto.Text,

View File

@@ -47,6 +47,7 @@ namespace Umbraco.Core.Persistence.Mappers
CacheMap<ContentType, ContentTypeDto>(src => src.Description, dto => dto.Description);
CacheMap<ContentType, ContentTypeDto>(src => src.Icon, dto => dto.Icon);
CacheMap<ContentType, ContentTypeDto>(src => src.IsContainer, dto => dto.IsContainer);
CacheMap<ContentType, ContentTypeDto>(src => src.ContainerConfig, dto => dto.ContainerConfig);
CacheMap<ContentType, ContentTypeDto>(src => src.Thumbnail, dto => dto.Thumbnail);
}
}

View File

@@ -47,6 +47,7 @@ namespace Umbraco.Core.Persistence.Mappers
CacheMap<MediaType, ContentTypeDto>(src => src.Description, dto => dto.Description);
CacheMap<MediaType, ContentTypeDto>(src => src.Icon, dto => dto.Icon);
CacheMap<MediaType, ContentTypeDto>(src => src.IsContainer, dto => dto.IsContainer);
CacheMap<MediaType, ContentTypeDto>(src => src.ContainerConfig, dto => dto.ContainerConfig);
CacheMap<MediaType, ContentTypeDto>(src => src.Thumbnail, dto => dto.Thumbnail);
}
}

View File

@@ -48,6 +48,7 @@ namespace Umbraco.Core.Persistence.Mappers
CacheMap<MemberType, ContentTypeDto>(src => src.Description, dto => dto.Description);
CacheMap<MemberType, ContentTypeDto>(src => src.Icon, dto => dto.Icon);
CacheMap<MemberType, ContentTypeDto>(src => src.IsContainer, dto => dto.IsContainer);
CacheMap<MemberType, ContentTypeDto>(src => src.ContainerConfig, dto => dto.ContainerConfig);
CacheMap<MemberType, ContentTypeDto>(src => src.Thumbnail, dto => dto.Thumbnail);
}
}

View File

@@ -305,7 +305,8 @@ namespace Umbraco.Core.Services
new XElement("Thumbnail", contentType.Thumbnail),
new XElement("Description", contentType.Description),
new XElement("AllowAtRoot", contentType.AllowedAsRoot.ToString()),
new XElement("IsListView", contentType.IsContainer.ToString()));
new XElement("IsListView", contentType.IsContainer.ToString()),
new XElement("ContainerConfig", contentType.ContainerConfig.ToString()));
var masterContentType = contentType.CompositionAliases().FirstOrDefault();
if (masterContentType != null)

View File

@@ -423,8 +423,17 @@ namespace Umbraco.Core.Services
//NOTE IsListView is a new property in the package xml so we need to verify it exists before using it.
var isListView = infoElement.Element("IsListView");
if (isListView != null)
{
contentType.IsContainer = isListView.Value.InvariantEquals("true");
//NOTE ContainerConfig is a new property in the package xml so we need to verify it exists before using it.
var containerConfig = infoElement.Element("ContainerConfig");
if (containerConfig != null)
{
contentType.ContainerConfig = containerConfig.Value;
}
}
UpdateContentTypesAllowedTemplates(contentType, infoElement.Element("AllowedTemplates"), defaultTemplateElement);
UpdateContentTypesTabs(contentType, documentType.Element("Tabs"));
UpdateContentTypesProperties(contentType, documentType.Element("GenericProperties"));