Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }