/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Result model.</returns> public virtual PagesGridViewModel <SiteSettingPageViewModel> Execute(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; SiteSettingPageViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); query = FilterQuery(query, request); var nodesSubQuery = QueryOver.Of <SitemapNode>() .Where(x => x.Page.Id == alias.Id || x.UrlHash == alias.PageUrlHash) .Select(s => 1) .Take(1); IProjection hasSeoProjection = Projections.Conditional( Restrictions.Disjunction() .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaTitle))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaKeywords))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaDescription))) .Add(Restrictions.IsNull(Projections.SubQuery(nodesSubQuery))), Projections.Constant(false, NHibernateUtil.Boolean), Projections.Constant(true, NHibernateUtil.Boolean)); 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.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url) .Select(() => alias.Language.Id).WithAlias(() => modelAlias.LanguageId)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); if (configuration.Security.AccessControlEnabled) { IEnumerable <Guid> deniedPages = pageService.GetDeniedPages(); foreach (var deniedPageId in deniedPages) { var id = deniedPageId; query = query.Where(f => f.Id != id); } } var count = query.ToRowCountFutureValue(); var categoriesFuture = categoryService.GetCategories(); IEnumerable <LookupKeyValue> languagesFuture = configuration.EnableMultilanguage ? languageService.GetLanguages() : null; var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); var model = CreateModel(pages, request, count, categoriesFuture); if (languagesFuture != null) { model.Languages = languagesFuture.ToList(); model.Languages.Insert(0, languageService.GetInvariantLanguageModel()); } return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Result model.</returns> public PagesGridViewModel <SiteSettingPageViewModel> Execute(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; SiteSettingPageViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); if (!request.IncludeArchived) { query = query.Where(() => !alias.IsArchived); } if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query.Where(Restrictions.Disjunction() .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.Title), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaTitle), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaDescription), searchQuery)) .Add(Restrictions.InsensitiveLike(Projections.Property(() => alias.MetaKeywords), searchQuery))); } if (request.CategoryId.HasValue) { query = query.Where(Restrictions.Eq(Projections.Property(() => alias.Category.Id), request.CategoryId.Value)); } if (request.Tags != null) { foreach (var tagKeyValue in request.Tags) { var id = tagKeyValue.Key.ToGuidOrDefault(); query = query.WithSubquery.WhereExists(QueryOver.Of <PageTag>().Where(tag => tag.Tag.Id == id && tag.Page.Id == alias.Id).Select(tag => 1)); } } IProjection hasSeoProjection = Projections.Conditional( Restrictions.Disjunction() .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaTitle))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaKeywords))) .Add(RestrictionsExtensions.IsNullOrWhiteSpace(Projections.Property(() => alias.MetaDescription))), Projections.Constant(false, NHibernateUtil.Boolean), Projections.Constant(true, NHibernateUtil.Boolean)); 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.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); var count = query.ToRowCountFutureValue(); var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); return(new PagesGridViewModel <SiteSettingPageViewModel>(pages.ToList(), request, count.Value, categoryService.GetCategories())); }
public PagesGridViewModel <SiteSettingPageViewModel> GetFilteredPagesList(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; PagesView viewAlias = null; SiteSettingPageViewModel 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.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url) .Select(() => alias.Language.Id).WithAlias(() => modelAlias.LanguageId) .Select(() => alias.IsMasterPage).WithAlias(() => modelAlias.IsMasterPage)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); 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(); var categoriesFuture = categoryService.GetCategories(); IEnumerable <LookupKeyValue> languagesFuture = configuration.EnableMultilanguage ? languageService.GetLanguagesLookupValues() : null; var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); var layouts = layoutService .GetAvailableLayouts() .Select(l => new LookupKeyValue( string.Format("{0}-{1}", l.IsMasterPage ? "m" : "l", l.TemplateId), l.Title)) .ToList(); var model = CreateModel(pages, request, count, categoriesFuture, layouts); if (languagesFuture != null) { model.Languages = languagesFuture.ToList(); model.Languages.Insert(0, languageService.GetInvariantLanguageModel()); } return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>Result model.</returns> public virtual PagesGridViewModel <SiteSettingPageViewModel> Execute(PagesFilter request) { request.SetDefaultSortingOptions("Title"); PageProperties alias = null; SiteSettingPageViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); // NOTE: below does not work - need to find out how to rewrite it. // var nodesSubQuery = QueryOver.Of<SitemapNode>() // .Where(x => x.Page.Id == alias.Id || x.UrlHash == alias.PageUrlHash) // .Select(s => 1) // .Take(1); var hasSeoDisjunction = Restrictions.Disjunction() .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(hasSeoDisjunction, //.Add(Restrictions.IsNull(Projections.SubQuery(nodesSubQuery))), Projections.Constant(false, NHibernateUtil.Boolean), Projections.Constant(true, NHibernateUtil.Boolean)); query = FilterQuery(query, request, hasSeoDisjunction); var sitemapNodesFuture = Repository .AsQueryable <SitemapNode>() .Where(n => !n.IsDeleted && !n.Sitemap.IsDeleted).ToFuture(); 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.PageStatus) .Select(hasSeoProjection).WithAlias(() => modelAlias.HasSEO) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.Url) .Select(() => alias.Language.Id).WithAlias(() => modelAlias.LanguageId)) .TransformUsing(Transformers.AliasToBean <SiteSettingPageViewModel>()); 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(); var categoriesFuture = categoryService.GetCategories(); IEnumerable <LookupKeyValue> languagesFuture = configuration.EnableMultilanguage ? languageService.GetLanguages() : null; var pages = query.AddSortingAndPaging(request).Future <SiteSettingPageViewModel>(); var layouts = layoutService .GetAvailableLayouts() .Select(l => new LookupKeyValue( string.Format("{0}-{1}", l.IsMasterPage ? "m" : "l", l.TemplateId), l.Title)) .ToList(); var model = CreateModel(pages, request, count, categoriesFuture, layouts); if (languagesFuture != null) { model.Languages = languagesFuture.ToList(); model.Languages.Insert(0, languageService.GetInvariantLanguageModel()); } // NOTE: Query over with subquery in CASE statement and paging des not work. if (sitemapNodesFuture != null) { var nodes = sitemapNodesFuture.ToList(); foreach (var pageViewModel in model.Items) { var hash = pageViewModel.Url.UrlHash(); pageViewModel.HasSEO = pageViewModel.HasSEO && nodes.Any(n => n.UrlHash == hash || (n.Page != null && n.Page.Id == pageViewModel.Id)); } } return(model); }