diff --git a/Project-Unite/Controllers/ForumController.cs b/Project-Unite/Controllers/ForumController.cs index b65ed3e..5b36f20 100644 --- a/Project-Unite/Controllers/ForumController.cs +++ b/Project-Unite/Controllers/ForumController.cs @@ -318,9 +318,13 @@ public ActionResult MarkRead(string id) return RedirectToAction("ViewUnread"); } + + [Authorize] - public ActionResult ViewTopic(string id, bool triedtolikeowntopic = false) + public ActionResult ViewTopic(string id, bool triedtolikeowntopic = false, int page = 1) { + int realpage = page - 1; + int pageSize = 10; if (triedtolikeowntopic) ViewBag.Error = "You cannot like or dislike your own topic!"; var db = new ApplicationDbContext(); @@ -329,8 +333,31 @@ public ActionResult ViewTopic(string id, bool triedtolikeowntopic = false) return new HttpStatusCodeResult(404); if (!ACL.CanSee(User.Identity.Name, topic.Parent)) return new HttpStatusCodeResult(403); + int pages = topic.Posts.GetPageCount(pageSize); + ViewBag.Page = realpage; + ViewBag.PageCount = pages; + ViewBag.PageSize = pageSize; return View(topic); } } + + public static class PaginationExtensions + { + public static int GetPageCount(this IEnumerable collection, int pageSize) + { + return (collection.Count() + pageSize - 1) / pageSize; + } + + public static IEnumerable GetItemsOnPage(this IEnumerable collection, int page, int pageSize) + { + var lst = collection.ToList(); + + for(int i = pageSize * page; i < pageSize + (pageSize * page) && i < lst.Count(); i++) + { + yield return lst[i]; + } + + } + } } \ No newline at end of file diff --git a/Project-Unite/Views/Forum/ViewTopic.cshtml b/Project-Unite/Views/Forum/ViewTopic.cshtml index a9272b6..704566f 100644 --- a/Project-Unite/Views/Forum/ViewTopic.cshtml +++ b/Project-Unite/Views/Forum/ViewTopic.cshtml @@ -1,4 +1,5 @@ -@model Project_Unite.Models.ForumTopic +@using Project_Unite.Controllers; +@model Project_Unite.Models.ForumTopic @using Microsoft.AspNet.Identity @{ ViewBag.Title = Model.Subject; @@ -30,7 +31,7 @@ Html.RenderPartial("~/Views/Shared/_ModeratorBar.cshtml", Model); } -@foreach (var post in Model.Posts.OrderBy(x => x.PostedAt)) +@foreach (var post in Model.Posts.OrderBy(x => x.PostedAt).GetItemsOnPage(ViewBag.Page, ViewBag.PageSize)) { if (Request.IsAuthenticated) { @@ -75,3 +76,17 @@ @{ Html.RenderPartial("~/Views/Shared/_ModeratorBar.cshtml", Model); } + +
    + @for(int i = 1; i <= ViewBag.PageCount; i++) + { + if (i == ViewBag.Page - 1) + { +
  • @Html.ActionLink(i.ToString(), "ViewTopic", "Forum", null, new { id = Model.Discriminator, page = i })
  • + } + else + { +
  • @Html.ActionLink(i.ToString(), "ViewTopic", "Forum", null, new { id = Model.Discriminator, page = i })
  • + } + } +
\ No newline at end of file