From adfa2ed016a746bbe89eb28199565035da403373 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Wed, 12 Apr 2017 02:10:02 +0200 Subject: [PATCH] blog index --- Yavsc/Controllers/BlogspotController.cs | 23 +++--- Yavsc/ViewModels/Blogspot/BlogIndexKey.cs | 31 ++++++++ Yavsc/Views/Blogspot/Index.cshtml | 94 +++++++++++++++++------ Yavsc/Views/_ViewImports.cshtml | 2 + 4 files changed, 114 insertions(+), 36 deletions(-) create mode 100644 Yavsc/ViewModels/Blogspot/BlogIndexKey.cs diff --git a/Yavsc/Controllers/BlogspotController.cs b/Yavsc/Controllers/BlogspotController.cs index f0778b9f..1901ffc6 100644 --- a/Yavsc/Controllers/BlogspotController.cs +++ b/Yavsc/Controllers/BlogspotController.cs @@ -11,6 +11,7 @@ using Microsoft.Extensions.OptionsModel; using Yavsc.Models; using Yavsc.ViewModels.Auth; using Microsoft.AspNet.Mvc.Rendering; +using Yavsc.ViewModels.Blogspot; // For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 @@ -47,23 +48,19 @@ namespace Yavsc.Controllers .Select(c=>c.Id).ToArray(); IQueryable posts ; if (usercircles != null) { - posts = _context.Blogspot.Include( - b => b.Author - ).Include(p=>p.ACL).Where(p=> p.AuthorId == uid || p.Visible && (p.ACL.Count == 0 || p.ACL.Any(a=> usercircles.Contains(a.CircleId)))); - /* posts = _context.Blogspot.Include( - b => b.Author - ).Include(p=>p.ACL).Where(p=>p.Visible || p.ACL.Any(a => usercircles.Contains(a.Allowed) - )); */ + posts = _context.Blogspot.Include(b => b.Author) + .Include(p=>p.ACL) + .Where(p=> p.AuthorId == uid || p.Visible && + (p.ACL.Count == 0 || p.ACL.Any(a=> usercircles.Contains(a.CircleId)))) + ; } else { - posts = _context.Blogspot.Include( - b => b.Author - ).Include(p=>p.ACL).Where(p=>p.AuthorId == uid || p.Visible && p.ACL.Count == 0); + posts = _context.Blogspot.Include(b => b.Author) + .Include(p=>p.ACL).Where(p=>p.AuthorId == uid || p.Visible && p.ACL.Count == 0); } - return View(posts - .OrderByDescending(p => p.DateCreated) - .Skip(skip).Take(maxLen).GroupBy(p=>p.Title)); + return View(posts.OrderByDescending( p=> p.DateModified) + .GroupBy(p=> new BlogIndexKey { Title = p.Title, AuthorId = p.AuthorId } ).Skip(skip).Take(maxLen)); } [Route("/Title/{id?}")] diff --git a/Yavsc/ViewModels/Blogspot/BlogIndexKey.cs b/Yavsc/ViewModels/Blogspot/BlogIndexKey.cs new file mode 100644 index 00000000..ecf630c9 --- /dev/null +++ b/Yavsc/ViewModels/Blogspot/BlogIndexKey.cs @@ -0,0 +1,31 @@ +namespace Yavsc.ViewModels.Blogspot +{ + public class BlogIndexKey + { + public string AuthorId { get; set; } + public string Title { get; set; } + // override object.Equals + public override bool Equals (object obj) + { + // + // See the full list of guidelines at + // http://go.microsoft.com/fwlink/?LinkID=85237 + // and also the guidance for operator== at + // http://go.microsoft.com/fwlink/?LinkId=85238 + // + + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + var blogindexkey = (BlogIndexKey)obj; + return Title == blogindexkey.Title && AuthorId == blogindexkey.AuthorId; + } + + // override object.GetHashCode + public override int GetHashCode() + { + return Title.GetHashCode() * AuthorId.GetHashCode(); + } + } +} diff --git a/Yavsc/Views/Blogspot/Index.cshtml b/Yavsc/Views/Blogspot/Index.cshtml index 87266c86..7ea306a3 100644 --- a/Yavsc/Views/Blogspot/Index.cshtml +++ b/Yavsc/Views/Blogspot/Index.cshtml @@ -1,8 +1,37 @@ -@model IEnumerable> +@model IEnumerable> @{ ViewData["Title"] = "Blogs, l'index"; + // Regroup!?! + @foreach (var group in Model) { + } +} +@section header { + +} +@section scripts { + } -

@ViewData["Title"]

@ViewData["StatusMessage"]

@if (User.IsSignedIn()) { @@ -23,49 +52,68 @@ } - + - + @foreach (var group in Model) { - var title = group.Key; -@foreach (var item in group) { - var trclass = (item.Visible)?"visiblepost":"hiddenpost"; - - + } -}
+ @SR["Title"] + apperçu +
- - - @item.Title + var title = group.Key.Title; + string secondclass=""; + var first = group.First(); + string trclass = (first.Visible) ? "visiblepost" : "hiddenpost"; +
+ + + @first.Title - @((item.Content?.Length > 120) ? item.Content.Substring(0, 120) + " ..." : item.Content) - (@item.Author.UserName , + @((first.Content?.Length > 120) ? first.Content.Substring(0, 120) + " ..." : first.Content) + (@first.Author.UserName , - posté le @item.DateCreated.ToString("dddd d MMM yyyy à H:mm") - @if ((item.DateModified - item.DateCreated).Minutes > 0){  - @:- Modifié le @item.DateModified.ToString("dddd d MMM yyyy à H:mm") + posté le @first.DateCreated.ToString("dddd d MMM yyyy à H:mm") + @if ((first.DateModified - first.DateCreated).Minutes > 0){  + @:- Modifié le @first.DateModified.ToString("dddd d MMM yyyy à H:mm") }) + + @if (group.Count()>1) { +
+ Au même titre: + + + @foreach (var item in group.Skip(1)) { + trclass = ((item.Visible)?"visiblepost":"hiddenpost"); + + + + + }
le @item.DateModified.ToString("dddd d MMM yyyy à H:mm")@((item.Content?.Length > 120) ? item.Content.Substring(0, 120) + " ..." : item.Content) + Details +
+ }
    - @if (await AuthorizationService.AuthorizeAsync(User, item, new ViewRequirement())) { + @if (await AuthorizationService.AuthorizeAsync(User, first, new ViewRequirement())) {
  • - Details + Details
  • } - @if (await AuthorizationService.AuthorizeAsync(User, item, new EditRequirement())) { -
  • @SR["Edit"] + @if (await AuthorizationService.AuthorizeAsync(User, first, new EditRequirement())) { +
  • @SR["Edit"]
  • -
  • @SR["Delete"] +
  • @SR["Delete"]
  • }
diff --git a/Yavsc/Views/_ViewImports.cshtml b/Yavsc/Views/_ViewImports.cshtml index c2b8be1a..e0b6bbcc 100755 --- a/Yavsc/Views/_ViewImports.cshtml +++ b/Yavsc/Views/_ViewImports.cshtml @@ -30,10 +30,12 @@ @using Yavsc.ViewModels.Administration; @using Yavsc.ViewModels.Relationship; @using Yavsc.ViewModels.Workflow; +@using Yavsc.ViewModels.Blogspot; @inject IViewLocalizer LocString @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers" @addTagHelper "*, Yavsc" + @inject IStringLocalizer SR @inject IAuthorizationService AuthorizationService @inject IOptions GoogleSettings