/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>List with languages view models</returns> public SearchableGridViewModel <LanguageViewModel> Execute(SearchableGridOptions request) { SearchableGridViewModel <LanguageViewModel> model; request.SetDefaultSortingOptions("Name"); var query = Repository .AsQueryable <Models.Language>(); if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { query = query.Where(language => language.Name.Contains(request.SearchQuery) || language.Code.Contains(request.SearchQuery)); } var languagesFuture = query .Select(language => new LanguageViewModel { Id = language.Id, Version = language.Version, Name = language.Name, Code = language.Code }); var count = query.ToRowCountFutureValue(); languagesFuture = languagesFuture.AddSortingAndPaging(request); var languages = languagesFuture.ToList(); SetLanguageCodes(languages); model = new SearchableGridViewModel <LanguageViewModel>(languages, request, count.Value); return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>List with blog post view models</returns> public SearchableGridViewModel <SubscriberViewModel> Execute(SearchableGridOptions request) { SearchableGridViewModel <SubscriberViewModel> model; request.SetDefaultSortingOptions("Email"); var query = Repository .AsQueryable <Subscriber>(); if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { query = query.Where(a => a.Email.Contains(request.SearchQuery)); } var subscribers = query .Select(subscriber => new SubscriberViewModel { Id = subscriber.Id, Version = subscriber.Version, Email = subscriber.Email }); var count = query.ToRowCountFutureValue(); subscribers = subscribers.AddSortingAndPaging(request); model = new SearchableGridViewModel <SubscriberViewModel>(subscribers.ToList(), request, count.Value); return(model); }
/// <summary> /// Executes this command. /// </summary> /// <param name="request">A filter to search for specific tags.</param> /// <returns>A list of tags.</returns> public SearchableGridViewModel <TagItemViewModel> Execute(SearchableGridOptions request) { SearchableGridViewModel <TagItemViewModel> model; request.SetDefaultSortingOptions("Name"); Root.Models.Tag alias = null; TagItemViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted); if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query.Where(Restrictions.InsensitiveLike(NHibernate.Criterion.Projections.Property(() => alias.Name), searchQuery)); } query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.Name).WithAlias(() => modelAlias.Name) .Select(() => alias.Version).WithAlias(() => modelAlias.Version)) .TransformUsing(Transformers.AliasToBean <TagItemViewModel>()); var count = query.ToRowCountFutureValue(); var tags = query.AddSortingAndPaging(request).Future <TagItemViewModel>(); model = new SearchableGridViewModel <TagItemViewModel>(tags.ToList(), request, count.Value); return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>The list of blog template view models</returns> public SearchableGridViewModel <SettingItemViewModel> Execute(bool request) { // Get current default template var option = optionService.GetDefaultOption(); var response = new SearchableGridViewModel <SettingItemViewModel>() { GridOptions = new SearchableGridOptions() }; var textMode = ContentTextMode.Html; if (option != null) { textMode = option.DefaultContentTextMode; } var defaultEditMode = new SettingItemViewModel { Value = (int)textMode, Name = BlogGlobalization.SiteSettings_BlogSettingsTab_DefaultEditMode_Title, Key = BlogModuleConstants.BlogPostDefaultContentTextModeKey }; var settings = new List <SettingItemViewModel> { defaultEditMode }; response.Items = new CustomPagination <SettingItemViewModel>(settings, settings.Count, 100, settings.Count); return(response); }
/// <summary> /// User list for Site Settings. /// </summary> /// <param name="request">The request.</param> /// <returns>User list view.</returns> public ActionResult Index(SearchableGridOptions request) { var users = GetCommand <GetUsersCommand>().ExecuteCommand(request); var model = new SearchableGridViewModel <UserItemViewModel>(users, new SearchableGridOptions(), users.Count); return(View(model)); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>List with blog post view models</returns> public SearchableGridViewModel <AuthorViewModel> Execute(SearchableGridOptions request) { SearchableGridViewModel <AuthorViewModel> model; request.SetDefaultSortingOptions("Name"); var query = Repository .AsQueryable <Author>(); if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { query = query.Where(a => a.Name.Contains(request.SearchQuery)); } var authors = query .Select(author => new AuthorViewModel { Id = author.Id, Version = author.Version, Name = author.Name, Image = author.Image == null ? null : new ImageSelectorViewModel { ImageId = author.Image.Id, ImageVersion = author.Image.Version, ImageUrl = author.Image.PublicUrl, ThumbnailUrl = author.Image.PublicThumbnailUrl, ImageTooltip = author.Image.Caption } }); var count = query.ToRowCountFutureValue(); authors = authors.AddSortingAndPaging(request); model = new SearchableGridViewModel <AuthorViewModel>(authors.ToList(), request, count.Value); return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="options">The request.</param> /// <returns></returns> /// <exception cref="System.NotImplementedException"></exception> public SearchableGridViewModel <SiteSettingRedirectViewModel> Execute(SearchableGridOptions options) { SearchableGridViewModel <SiteSettingRedirectViewModel> model; options.SetDefaultSortingOptions("PageUrl"); Models.Redirect alias = null; SiteSettingRedirectViewModel modelAlias = null; var query = UnitOfWork.Session.QueryOver(() => alias).Where(() => !alias.IsDeleted); if (!string.IsNullOrWhiteSpace(options.SearchQuery)) { var searchQuery = string.Format("%{0}%", options.SearchQuery); query = query.Where( Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery) || Restrictions.InsensitiveLike(Projections.Property(() => alias.RedirectUrl), searchQuery)); } query = query.SelectList( select => select.Select(() => alias.Id) .WithAlias(() => modelAlias.Id) .Select(() => alias.PageUrl) .WithAlias(() => modelAlias.PageUrl) .Select(() => alias.RedirectUrl) .WithAlias(() => modelAlias.RedirectUrl) .Select(() => alias.Version) .WithAlias(() => modelAlias.Version)).TransformUsing(Transformers.AliasToBean <SiteSettingRedirectViewModel>()); var count = query.ToRowCountFutureValue(); var redirects = query.AddSortingAndPaging(options).Future <SiteSettingRedirectViewModel>(); model = new SearchableGridViewModel <SiteSettingRedirectViewModel>(redirects.ToList(), options, count.Value); return(model); }
/// <summary> /// Executes the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>A list of blog posts</returns> public SearchableGridViewModel <SiteSettingBlogPostViewModel> Execute(SearchableGridOptions request) { SearchableGridViewModel <SiteSettingBlogPostViewModel> model; request.SetDefaultSortingOptions("Title"); BlogPost alias = null; SiteSettingBlogPostViewModel modelAlias = null; var query = UnitOfWork.Session .QueryOver(() => alias) .Where(() => !alias.IsDeleted && alias.Status != PageStatus.Preview); if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query.Where(Restrictions.InsensitiveLike(Projections.Property(() => alias.Title), searchQuery)); } query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.Title).WithAlias(() => modelAlias.Title) .Select(() => alias.CreatedOn).WithAlias(() => modelAlias.CreatedOn) .Select(() => alias.ModifiedOn).WithAlias(() => modelAlias.ModifiedOn) .Select(() => alias.ModifiedByUser).WithAlias(() => modelAlias.ModifiedByUser) .Select(() => alias.Status).WithAlias(() => modelAlias.PageStatus) .Select(() => alias.Version).WithAlias(() => modelAlias.Version) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.PageUrl)) .TransformUsing(Transformers.AliasToBean <SiteSettingBlogPostViewModel>()); var count = query.ToRowCountFutureValue(); var blogPosts = query.AddSortingAndPaging(request).Future <SiteSettingBlogPostViewModel>(); model = new SearchableGridViewModel <SiteSettingBlogPostViewModel>(blogPosts.ToList(), request, count.Value); return(model); }
public static string RenderPager<TEntity>(SearchableGridViewModel<TEntity> model) where TEntity : IEditableGridItem { var pagination = model.Items; var builder = new StringBuilder(); builder.AppendFormat("<div class='{0} clearfix'>", PagerDivClassName); // total pages var totalPages = pagination.TotalPages > 0 ? pagination.TotalPages : 1; var pageNumber = pagination.PageNumber; // lower bound var pagingLowerBound = pageNumber - ActivePagePosition; if (pagingLowerBound < 1) { pagingLowerBound = 1; } // upper bound var pagingUpperBound = pagingLowerBound + TotalPagingLinks; if (pagingUpperBound > totalPages) { pagingUpperBound = totalPages; } // lower bound correction if (pagingUpperBound - pagingLowerBound < TotalPagingLinks) { pagingLowerBound = pagingUpperBound - TotalPagingLinks; if (pagingLowerBound < 1) { pagingLowerBound = 1; } } builder.AppendFormat("<span class=\"{0}\">{1}: </span> ", PagerTextClassName, RootGlobalization.Paging_Page_Title); // Create first link according to lower bound if (pagingLowerBound > 1) { builder.Append(CreatePageLink(1, "1 ")); builder.AppendFormat(pagingLowerBound != 2 ? "<span class=\"{0}\">...</span>" : " ", PagerTextClassName); } // Pages numbers: for (var i = pagingLowerBound; i <= pagingUpperBound; i++) { if (i == pageNumber) { // Current page: builder.Append(CreatePageLink(i, i.ToString(CultureInfo.InvariantCulture) + " ", string.Format("{0} {1}", PageNumberClassName, ActivePageClassName))); } else { builder.Append(CreatePageLink(i, i.ToString(CultureInfo.InvariantCulture) + " ")); if (i == pagingUpperBound && i <= totalPages - 1) { builder.AppendFormat("<span class=\"{0}\">...</span>", PagerTextClassName); } } } // last page according to upper bound if (pagingUpperBound < totalPages) { builder.Append(CreatePageLink(totalPages, string.Format("{0} ", totalPages))); } // previuos button builder.Append(pageNumber == 1 ? string.Format("<a class=\"{0}\">{1}</a> ", PreviousPageClassName, RootGlobalization.Button_Paging_Previous) : string.Format(@"<a data-page-number=""{0}"" class=""{1}"">{2}</a> ", pageNumber - 1, PreviousPageClassName, RootGlobalization.Button_Paging_Previous)); // next button builder.Append(pageNumber == totalPages || pagination.FirstItem > pagination.TotalItems ? string.Format("<a class=\"{0}\">{1}</a> ", NextPageClassName, RootGlobalization.Button_Paging_Next) : string.Format(@"<a data-page-number=""{0}"" class=""{1}"">{2}</a> ", pageNumber + 1, NextPageClassName, RootGlobalization.Button_Paging_Next)); builder.Append("</div>"); return builder.ToString(); }
public void Should_Find_Page_And_Return_ViewModel_Successfully() { // DEBUG START var request = new SearchableGridOptions { SearchQuery = "a", PageNumber = 2, PageSize = 3, Column = "PageUrl", Direction = SortDirection.Descending }; var sessionFactory = this.Container.Resolve <ISessionFactoryProvider>(); // DEBUG END SearchableGridViewModel <SiteSettingRedirectViewModel> model; using (var session = sessionFactory.OpenSession()) { BetterCms.Module.Pages.Models.Redirect alias = null; SiteSettingRedirectViewModel modelAlias = null; IQueryOver <BetterCms.Module.Pages.Models.Redirect, BetterCms.Module.Pages.Models.Redirect> query = session.QueryOver(() => alias); // Filter if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query .Where( Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery) || Restrictions.InsensitiveLike(Projections.Property(() => alias.RedirectUrl), searchQuery)); } // Select fields query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.PageUrl) .Select(() => alias.RedirectUrl).WithAlias(() => modelAlias.RedirectUrl) .Select(() => alias.Version).WithAlias(() => modelAlias.Version)) .TransformUsing(Transformers.AliasToBean <SiteSettingRedirectViewModel>()); // Count var count = query.RowCount(); // Sorting and paging query.AddSortingAndPaging(request); // Get results var redirects = query.List <SiteSettingRedirectViewModel>(); model = new SearchableGridViewModel <SiteSettingRedirectViewModel> { GridOptions = request, Items = new CustomPagination <SiteSettingRedirectViewModel>(redirects, request.PageNumber, request.PageSize, count) }; } // DEBUG START Assert.IsNotNull(model); // DEBUG END }
/// <summary> /// Adds the paging to page. /// </summary> /// <typeparam name="TModel">The type of the model.</typeparam> /// <typeparam name="TGridItem">The type of the grid item.</typeparam> /// <param name="htmlHelper">The HTML helper.</param> /// <param name="model">The model.</param> /// <returns>Generated HTML string with paging</returns> public static IHtmlString RenderPaging <TModel, TGridItem>(this HtmlHelper <TModel> htmlHelper, SearchableGridViewModel <TGridItem> model) where TGridItem : IEditableGridItem { var pages = PagerHelper.RenderPager(model); return(new MvcHtmlString(pages)); }
public void Should_Find_Page_And_Return_ViewModel_Successfully() { // DEBUG START var request = new SearchableGridOptions { SearchQuery = "a", PageNumber = 2, PageSize = 3, Column = "PageUrl", Direction = SortDirection.Descending }; var sessionFactory = this.Container.Resolve<ISessionFactoryProvider>(); // DEBUG END SearchableGridViewModel<SiteSettingRedirectViewModel> model; using (var session = sessionFactory.OpenSession()) { BetterCms.Module.Pages.Models.Redirect alias = null; SiteSettingRedirectViewModel modelAlias = null; IQueryOver<BetterCms.Module.Pages.Models.Redirect, BetterCms.Module.Pages.Models.Redirect> query = session.QueryOver(() => alias); // Filter if (!string.IsNullOrWhiteSpace(request.SearchQuery)) { var searchQuery = string.Format("%{0}%", request.SearchQuery); query = query .Where( Restrictions.InsensitiveLike(Projections.Property(() => alias.PageUrl), searchQuery) || Restrictions.InsensitiveLike(Projections.Property(() => alias.RedirectUrl), searchQuery)); } // Select fields query = query .SelectList(select => select .Select(() => alias.Id).WithAlias(() => modelAlias.Id) .Select(() => alias.PageUrl).WithAlias(() => modelAlias.PageUrl) .Select(() => alias.RedirectUrl).WithAlias(() => modelAlias.RedirectUrl) .Select(() => alias.Version).WithAlias(() => modelAlias.Version)) .TransformUsing(Transformers.AliasToBean<SiteSettingRedirectViewModel>()); // Count var count = query.RowCount(); // Sorting and paging query.AddSortingAndPaging(request); // Get results var redirects = query.List<SiteSettingRedirectViewModel>(); model = new SearchableGridViewModel<SiteSettingRedirectViewModel> { GridOptions = request, Items = new CustomPagination<SiteSettingRedirectViewModel>(redirects, request.PageNumber, request.PageSize, count) }; } // DEBUG START Assert.IsNotNull(model); // DEBUG END }
/// <summary> /// User list for Site Settings. /// </summary> /// <param name="request">The request.</param> /// <returns>User list view.</returns> public ActionResult Index(SearchableGridOptions request) { var users = GetCommand<GetUsersCommand>().ExecuteCommand(request); var model = new SearchableGridViewModel<UserItemViewModel>(users, new SearchableGridOptions(), users.Count); return View(model); }