public PagesGridViewModel<SiteSettingPageViewModel> GetFilteredPagesList(PagesFilter request)
{
request.SetDefaultSortingOptions("CreatedOn", true);
PageProperties alias = null;
PagesView viewAlias = null;
PageProperties modelAlias = null;
var query = unitOfWork.Session
.QueryOver(() => viewAlias)
.Inner.JoinAlias(() => viewAlias.Page, () => alias)
.Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview);
var hasnotSeoDisjunction =
Restrictions.Disjunction()
.Add(Restrictions.Eq(Projections.Property(() => viewAlias.IsInSitemap), false))
.Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaTitle)))
.Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaKeywords)))
.Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaDescription)));
var hasSeoProjection = Projections.Conditional(hasnotSeoDisjunction,
Projections.Constant(false, NHibernateUtil.Boolean),
Projections.Constant(true, NHibernateUtil.Boolean));
query = FilterQuery(query, request, hasnotSeoDisjunction);
query = query
.SelectList(select => select
.Select(() => alias.Id).WithAlias(() => modelAlias.Id)
.Select(() => alias.Version).WithAlias(() => modelAlias.Version)
.Select(() => alias.Title).WithAlias(() => modelAlias.Title)
.Select(() => alias.Status).WithAlias(() => modelAlias.Status)
// .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO)
.Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn)
.Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn)
.Select(() => alias.PageUrl).WithAlias(() => modelAlias.PageUrl)
.Select(() => alias.Language).WithAlias(() => modelAlias.Language)
.Select(() => alias.IsMasterPage).WithAlias(() => modelAlias.IsMasterPage))
.TransformUsing(Transformers.AliasToBean<PageProperties>());
if (configuration.Security.AccessControlEnabled)
{
IEnumerable<Guid> deniedPages = accessControlService.GetDeniedObjects<PageProperties>();
foreach (var deniedPageId in deniedPages)
{
var id = deniedPageId;
query = query.Where(f => f.Id != id);
}
}
var count = query.ToRowCountFutureValue();
IEnumerable<LookupKeyValue> languagesFuture = configuration.EnableMultilanguage ? languageService.GetLanguagesLookupValues() : null;
var pages = query.AddSortingAndPaging(request).Future<PageProperties>();
var layouts = layoutService
.GetAvailableLayouts()
.Select(l => new LookupKeyValue(
string.Format("{0}-{1}", l.IsMasterPage ? "m" : "l", l.TemplateId),
l.Title))
.ToList();
var categoriesLookupList = categoryService.GetCategoriesLookupList(PageProperties.CategorizableItemKeyForPages);
var model = CreateModel(pages, request, count, layouts, categoriesLookupList);
if (languagesFuture != null)
{
model.Languages = languagesFuture.ToList();
model.Languages.Insert(0, languageService.GetInvariantLanguageModel());
}
return model;
}