#16797: Adding setting for global paging. Fixing issue with query string specified pagesize being the same as default size.

--HG--
branch : dev
This commit is contained in:
Andre Rodrigues
2010-12-09 16:39:06 -08:00
parent c88c13c2e1
commit 2c16581106
19 changed files with 171 additions and 34 deletions

View File

@@ -11,20 +11,29 @@ using Orchard.Themes;
using Orchard.UI.Navigation;
namespace Orchard.Core.Containers.Controllers {
using Orchard.Settings;
public class ItemController : Controller {
private readonly IContentManager _contentManager;
private readonly IContainersPathConstraint _containersPathConstraint;
private readonly ISiteService _siteService;
public ItemController(
IContentManager contentManager,
IContainersPathConstraint containersPathConstraint,
IShapeFactory shapeFactory,
ISiteService siteService) {
public ItemController(IContentManager contentManager, IContainersPathConstraint containersPathConstraint, IShapeFactory shapeFactory) {
_contentManager = contentManager;
_containersPathConstraint = containersPathConstraint;
_siteService = siteService;
Shape = shapeFactory;
}
dynamic Shape { get; set; }
[Themed]
public ActionResult Display(string path, Pager pager) {
public ActionResult Display(string path, PagerParameters pagerParameters) {
var matchedPath = _containersPathConstraint.FindPath(path);
if (string.IsNullOrEmpty(matchedPath)) {
throw new ApplicationException("404 - should not have passed path constraint");
@@ -51,7 +60,8 @@ namespace Orchard.Core.Containers.Controllers {
var descendingOrder = container.As<ContainerPart>().Record.OrderByDirection == (int) OrderByDirection.Descending;
query = query.OrderBy(container.As<ContainerPart>().Record.OrderByProperty, descendingOrder);
pager.PageSize = pager.PageSize != Pager.PageSizeDefault && container.As<ContainerPart>().Record.Paginated
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
pager.PageSize = pagerParameters.PageSize != null && container.As<ContainerPart>().Record.Paginated
? pager.PageSize
: container.As<ContainerPart>().Record.PageSize;
var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count());

View File

@@ -17,6 +17,7 @@ using Orchard.Localization;
using Orchard.Logging;
using Orchard.UI.Navigation;
using Orchard.UI.Notify;
using Orchard.Settings;
namespace Orchard.Core.Contents.Controllers {
[ValidateInput(false)]
@@ -24,17 +25,20 @@ namespace Orchard.Core.Contents.Controllers {
private readonly IContentManager _contentManager;
private readonly IContentDefinitionManager _contentDefinitionManager;
private readonly ITransactionManager _transactionManager;
private readonly ISiteService _siteService;
public AdminController(
IOrchardServices orchardServices,
IContentManager contentManager,
IContentDefinitionManager contentDefinitionManager,
ITransactionManager transactionManager,
ISiteService siteService,
IShapeFactory shapeFactory) {
Services = orchardServices;
_contentManager = contentManager;
_contentDefinitionManager = contentDefinitionManager;
_transactionManager = transactionManager;
_siteService = siteService;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
Shape = shapeFactory;
@@ -45,7 +49,8 @@ namespace Orchard.Core.Contents.Controllers {
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ActionResult List(ListContentsViewModel model, Pager pager) {
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) {
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
if (model.ContainerId != null && _contentManager.GetLatest((int)model.ContainerId) == null)
return HttpNotFound();

View File

@@ -90,6 +90,7 @@ namespace Orchard.Core.Settings {
.Column<string>("HomePage")
.Column<string>("SiteCulture")
.Column<string>("ResourceDebugMode", c => c.WithDefault("FromAppSetting"))
.Column<int>("PageSize")
);
return 1;

View File

@@ -8,28 +8,39 @@ namespace Orchard.Core.Settings.Models {
get { return Record.PageTitleSeparator; }
set { Record.PageTitleSeparator = value; }
}
public string SiteName {
get { return Record.SiteName; }
set { Record.SiteName = value; }
}
public string SiteSalt {
get { return Record.SiteSalt; }
}
public string SuperUser {
get { return Record.SuperUser; }
set { Record.SuperUser = value; }
}
public string HomePage {
get { return Record.HomePage; }
set { Record.HomePage = value; }
}
public string SiteCulture {
get { return Record.SiteCulture; }
set { Record.SiteCulture = value; }
}
public ResourceDebugMode ResourceDebugMode {
get { return Record.ResourceDebugMode; }
set { Record.ResourceDebugMode = value; }
}
public int PageSize {
get { return Record.PageSize; }
set { Record.PageSize = value; }
}
}
}

View File

@@ -3,12 +3,26 @@ using Orchard.Settings;
namespace Orchard.Core.Settings.Models {
public class SiteSettingsPartRecord : ContentPartRecord {
public const int DefaultPageSize = 10;
public SiteSettingsPartRecord() {
PageSize = DefaultPageSize;
}
public virtual string SiteSalt { get; set; }
public virtual string SiteName { get; set; }
public virtual string SuperUser { get; set; }
public virtual string PageTitleSeparator { get; set; }
public virtual string HomePage { get; set; }
public virtual string SiteCulture { get; set; }
public virtual ResourceDebugMode ResourceDebugMode { get; set; }
public virtual int PageSize { get; set; }
}
}

View File

@@ -15,8 +15,7 @@ namespace Orchard.Core.Settings.ViewModels {
get { return Site.ContentItem.Id; }
}
public string PageTitleSeparator
{
public string PageTitleSeparator {
get { return Site.Record.PageTitleSeparator; }
set { Site.Record.PageTitleSeparator = value; }
}
@@ -40,5 +39,10 @@ namespace Orchard.Core.Settings.ViewModels {
get { return Site.As<SiteSettingsPart>().ResourceDebugMode; }
set { Site.As<SiteSettingsPart>().ResourceDebugMode = value; }
}
public int PageSize {
get { return Site.As<SiteSettingsPart>().PageSize; }
set { Site.As<SiteSettingsPart>().PageSize = value; }
}
}
}

View File

@@ -36,4 +36,9 @@
@Html.DropDownList("ResourceDebugMode", resourceDebugMode)
<span class="hint">@T("Determines whether scripts and stylesheets load in their debuggable or minified form.")</span>
</div>
<div>
<label for="DefaultPageSize">@T("Default number of items per page")</label>
@Html.TextBoxFor(m => m.PageSize, new { @class = "textMedium" })
<span class="hint">@T("Determines the default number of items that are shown per page.")</span>
</div>
</fieldset>

View File

@@ -15,6 +15,8 @@ using Orchard.UI.Navigation;
using Orchard.UI.Notify;
namespace Orchard.Blogs.Controllers {
using Orchard.Settings;
[ValidateInput(false), Admin]
public class BlogAdminController : Controller, IUpdateModel {
private readonly IBlogService _blogService;
@@ -22,6 +24,7 @@ namespace Orchard.Blogs.Controllers {
private readonly IContentManager _contentManager;
private readonly ITransactionManager _transactionManager;
private readonly IBlogSlugConstraint _blogSlugConstraint;
private readonly ISiteService _siteService;
public BlogAdminController(
IOrchardServices services,
@@ -30,6 +33,7 @@ namespace Orchard.Blogs.Controllers {
IContentManager contentManager,
ITransactionManager transactionManager,
IBlogSlugConstraint blogSlugConstraint,
ISiteService siteService,
IShapeFactory shapeFactory) {
Services = services;
_blogService = blogService;
@@ -37,6 +41,7 @@ namespace Orchard.Blogs.Controllers {
_contentManager = contentManager;
_transactionManager = transactionManager;
_blogSlugConstraint = blogSlugConstraint;
_siteService = siteService;
T = NullLocalizer.Instance;
Shape = shapeFactory;
}
@@ -147,7 +152,8 @@ namespace Orchard.Blogs.Controllers {
return View((object)viewModel);
}
public ActionResult Item(int blogId, Pager pager) {
public ActionResult Item(int blogId, PagerParameters pagerParameters) {
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
BlogPart blogPart = _blogService.Get(blogId, VersionOptions.Latest).As<BlogPart>();
if (blogPart == null)

View File

@@ -13,6 +13,8 @@ using Orchard.Themes;
using Orchard.UI.Navigation;
namespace Orchard.Blogs.Controllers {
using Orchard.Settings;
[Themed]
public class BlogController : Controller {
private readonly IOrchardServices _services;
@@ -22,6 +24,7 @@ namespace Orchard.Blogs.Controllers {
private readonly IFeedManager _feedManager;
private readonly IWorkContextAccessor _workContextAccessor;
private readonly IHomePageProvider _routableHomePageProvider;
private readonly ISiteService _siteService;
public BlogController(
IOrchardServices services,
@@ -31,13 +34,15 @@ namespace Orchard.Blogs.Controllers {
IFeedManager feedManager,
IShapeFactory shapeFactory,
IWorkContextAccessor workContextAccessor,
IEnumerable<IHomePageProvider> homePageProviders) {
IEnumerable<IHomePageProvider> homePageProviders,
ISiteService siteService) {
_services = services;
_blogService = blogService;
_blogPostService = blogPostService;
_blogSlugConstraint = blogSlugConstraint;
_feedManager = feedManager;
_workContextAccessor = workContextAccessor;
_siteService = siteService;
_routableHomePageProvider = homePageProviders.SingleOrDefault(p => p.GetProviderName() == RoutableHomePageProvider.Name);
Logger = NullLogger.Instance;
Shape = shapeFactory;
@@ -59,7 +64,8 @@ namespace Orchard.Blogs.Controllers {
return View((object)viewModel);
}
public ActionResult Item(string blogSlug, Pager pager) {
public ActionResult Item(string blogSlug, PagerParameters pagerParameters) {
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
var correctedSlug = _blogSlugConstraint.FindSlug(blogSlug);
if (correctedSlug == null)
return HttpNotFound();

View File

@@ -5,7 +5,7 @@ namespace Orchard.Blogs {
public class Migrations : DataMigrationImpl {
public int Create() {
SchemaBuilder.CreateTable("BlogPartArchiveRecord",
SchemaBuilder.CreateTable("BlogPartArchiveRecord",
table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column<int>("Year")
@@ -14,21 +14,21 @@ namespace Orchard.Blogs {
.Column<int>("BlogPart_id")
);
SchemaBuilder.CreateTable("BlogPartRecord",
SchemaBuilder.CreateTable("BlogPartRecord",
table => table
.ContentPartRecord()
.Column<string>("Description", c => c.Unlimited())
.Column<int>("PostCount")
);
SchemaBuilder.CreateTable("RecentBlogPostsPartRecord",
SchemaBuilder.CreateTable("RecentBlogPostsPartRecord",
table => table
.ContentPartRecord()
.Column<string>("BlogSlug")
.Column<int>("Count")
);
SchemaBuilder.CreateTable("BlogArchivesPartRecord",
SchemaBuilder.CreateTable("BlogArchivesPartRecord",
table => table
.ContentPartRecord()
.Column<string>("BlogSlug", c => c.WithLength(255))

View File

@@ -14,12 +14,20 @@ using Orchard.Comments.ViewModels;
using Orchard.Comments.Services;
namespace Orchard.Comments.Controllers {
using Orchard.Settings;
[ValidateInput(false)]
public class AdminController : Controller {
private readonly ICommentService _commentService;
private readonly ISiteService _siteService;
public AdminController(IOrchardServices services, ICommentService commentService, IShapeFactory shapeFactory) {
public AdminController(
IOrchardServices services,
ICommentService commentService,
ISiteService siteService,
IShapeFactory shapeFactory) {
_commentService = commentService;
_siteService = siteService;
Services = services;
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
@@ -31,7 +39,9 @@ namespace Orchard.Comments.Controllers {
public Localizer T { get; set; }
dynamic Shape { get; set; }
public ActionResult Index(CommentIndexOptions options, Pager pager) {
public ActionResult Index(CommentIndexOptions options, PagerParameters pagerParameters) {
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
// Default options
if (options == null)
options = new CommentIndexOptions();

View File

@@ -15,19 +15,24 @@ using Orchard.Collections;
using Orchard.Themes;
namespace Orchard.Search.Controllers {
using Orchard.Settings;
[ValidateInput(false), Themed]
public class SearchController : Controller {
private readonly ISearchService _searchService;
private readonly IContentManager _contentManager;
private readonly ISiteService _siteService;
public SearchController(
IOrchardServices services,
ISearchService searchService,
IContentManager contentManager,
ISearchService searchService,
IContentManager contentManager,
ISiteService siteService,
IShapeFactory shapeFactory) {
Services = services;
_searchService = searchService;
_contentManager = contentManager;
_siteService = siteService;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
@@ -39,7 +44,8 @@ namespace Orchard.Search.Controllers {
public ILogger Logger { get; set; }
dynamic Shape { get; set; }
public ActionResult Index(Pager pager, string q = "") {
public ActionResult Index(PagerParameters pagerParameters, string q = "") {
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
var searchFields = Services.WorkContext.CurrentSite.As<SearchSettingsPart>().SearchedFields;
IPageOfItems<ISearchHit> searchHits = new PageOfItems<ISearchHit>(new ISearchHit[] { });

View File

@@ -8,6 +8,7 @@ using Orchard.Commands.Builtin;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.Core.Settings.Models;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Providers;
using Orchard.Data.Migration;
@@ -172,6 +173,11 @@ namespace Orchard.Setup {
get { return ResourceDebugMode.FromAppSetting; }
set { throw new NotImplementedException(); }
}
public int PageSize {
get { return SiteSettingsPartRecord.DefaultPageSize; }
set { throw new NotImplementedException(); }
}
}
}
}

View File

@@ -4,6 +4,7 @@ using Orchard.ContentManagement;
using Orchard.DisplayManagement;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Settings;
using Orchard.Tags.Services;
using Orchard.Tags.ViewModels;
using Orchard.Themes;
@@ -14,14 +15,17 @@ namespace Orchard.Tags.Controllers {
public class HomeController : Controller {
private readonly ITagService _tagService;
private readonly IContentManager _contentManager;
private readonly ISiteService _siteService;
private readonly dynamic _shapeFactory;
public HomeController(
ITagService tagService,
IContentManager contentManager,
ITagService tagService,
IContentManager contentManager,
ISiteService siteService,
IShapeFactory shapeFactory) {
_tagService = tagService;
_contentManager = contentManager;
_siteService = siteService;
_shapeFactory = shapeFactory;
T = NullLocalizer.Instance;
}
@@ -35,7 +39,9 @@ namespace Orchard.Tags.Controllers {
return View(model);
}
public ActionResult Search(string tagName, Pager pager) {
public ActionResult Search(string tagName, PagerParameters pagerParameters) {
Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
var tag = _tagService.GetTagByName(tagName);
if (tag == null) {