Code snippet to get Available Page Types for a specific page type
Couple of days back, I have to write some code to produce an excel sheet listing all the page types and the corresponding page types that are allowed to be created under the page type.
for each page type in the solution,
produce a list of page types that are allowed to be created under this page type.
This excel sheet will then be used by QA guys, as a starting point, to write some test scripts for an EPiServer 6 R2 and composer based solution to EPiServer 8 migration/upgrade project.
To start with, you need to find all the page types in the solution.
Below is simple function to list all the page types
private IEnumerable<PageType> GetAllPageTypes()
{
var contentTypeRepository = ServiceLocator.Current.GetInstance<IContentTypeRepository>();
return contentTypeRepository.List().OfType<PageType>();
}
The following snippet (self explanatory I think) will help you identify all the avaialable page types for a particular page type
void GetAvailableContentTypes(ContentType contentType)
{
var contentTypeAvailablilityService = ServiceLocator.Current.GetInstance<ContentTypeAvailabilityService>();
// Get Available settings
AvailableSetting setting = contentTypeAvailablilityService.GetSetting(contentType.Name);
bool allAvailable = setting.Availability == Availability.All ||
setting.Availability == Availability.Undefined &&
!setting.AllowedContentTypeNames.Any();
var availableList = new List<PageType>();
if (!allAvailable)
{
foreach (PageType pageType in this.GetAllPageTypes())
{
foreach (string str in setting.AllowedContentTypeNames)
{
if (str.Equals(pageType.Name))
{
availableList.Add(pageType);
}
}
}
}
if (allAvailable)
{
// All the page types are allowed
}
else
{
// Allowed page types are in the availableList
}
}
Hope this will be useful :)
Comments