/// <summary> /// Gets the future query for the list of layout view models. /// </summary> /// <param name="currentPageId">The current page identifier.</param> /// <param name="currentPageMasterPageId">The current page master page identifier.</param> /// <returns> /// The future query for the list of layout view models /// </returns> public IList <TemplateViewModel> GetAvailableLayouts(Guid?currentPageId = null, Guid?currentPageMasterPageId = null) { // Load layouts var templatesFuture = repository .AsQueryable <Layout>() .OrderBy(t => t.Name) .Select(t => new TemplateViewModel { Title = t.Name, TemplateId = t.Id, PreviewUrl = t.PreviewUrl }).ToFuture(); // Load master pages var masterPagesQuery = repository .AsQueryable <PageProperties>() .Where(p => p.IsMasterPage); if (configuration.Security.AccessControlEnabled) { var deniedPages = accessControlService.GetDeniedObjects <PageProperties>(); foreach (var deniedPageId in deniedPages) { var id = deniedPageId; if (id == currentPageMasterPageId) { continue; } masterPagesQuery = masterPagesQuery.Where(f => f.Id != id); } } var masterPagesFuture = masterPagesQuery .OrderBy(t => t.Title) .Select(t => new TemplateViewModel { Title = t.Title, TemplateId = t.Id, PreviewUrl = t.Image != null ? t.Image.PublicUrl : t.FeaturedImage != null ? t.FeaturedImage.PublicUrl : t.SecondaryImage != null ? t.SecondaryImage.PublicUrl : null, PreviewThumbnailUrl = t.Image != null ? t.Image.PublicUrl : t.FeaturedImage != null ? t.FeaturedImage.PublicUrl : t.SecondaryImage != null ? t.SecondaryImage.PublicUrl : null, IsMasterPage = true, MasterUrlHash = t.PageUrlHash, IsCircularToCurrent = currentPageId.HasValue && !currentPageId.Value.HasDefaultValue() && (t.Id == currentPageId || t.MasterPages.Any(cp => cp.Master.Id == currentPageId)) }).ToFuture(); var templates = templatesFuture.ToList().Concat(masterPagesFuture.ToList()).ToList(); return(templates); }
/// <summary> /// Executes this command. /// </summary> /// <param name="model">The model.</param> /// <returns> /// A list of pages. /// </returns> public List <PageLookupKeyValue> Execute(PageSuggestionViewModel model) { var query = Repository.AsQueryable <PageProperties>() .Where(page => page.Title.Contains(model.Query) || page.PageUrl.Contains(model.Query)); if (model.ExistingItemsArray.Length > 0) { var ids = new List <Guid>(); foreach (string idValue in model.ExistingItemsArray) { var guid = idValue.ToGuidOrDefault(); if (!guid.HasDefaultValue()) { ids.Add(guid); } } if (ids.Any()) { query = query.Where(page => !ids.Contains(page.Id)); } } if (model.ExcludedLanguageId.HasValue) { var languageProxy = Repository.AsProxy <Root.Models.Language>(model.ExcludedLanguageId.Value); query = query.Where(q => (q.Language != languageProxy || q.Language == null)); } if (!model.IncludeMasterPages) { query = query.Where(q => !q.IsMasterPage); } var predicateBuilder = PredicateBuilder.False <PageProperties>(); if (model.OnlyUntranslatedPages) { predicateBuilder = predicateBuilder.Or(page => page.LanguageGroupIdentifier == null); } var includeIds = model.ExcplicitlyIncludedPagesArray; if (includeIds.Any()) { predicateBuilder = predicateBuilder.Or(page => includeIds.Contains(page.Id)); } query = query.Where(predicateBuilder); if (configuration.Security.AccessControlEnabled) { IEnumerable <Guid> deniedPages = accessControlService.GetDeniedObjects <PageProperties>(); foreach (var deniedPageId in deniedPages) { query = query.Where(f => f.Id != deniedPageId); } } return(query.OrderBy(page => page.Title) .Select(page => new PageLookupKeyValue { Key = page.Id.ToString().ToLowerInvariant(), Value = page.Title, LanguageId = page.Language != null ? page.Language.Id : (Guid?)null, PageUrl = page.PageUrl }) .ToList()); }
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); }