diff --git a/controllers/members.go b/controllers/members.go index cdc9828..302cb84 100644 --- a/controllers/members.go +++ b/controllers/members.go @@ -58,8 +58,43 @@ func Members(c *fiber.Ctx) error { return err } + var count int64 + db.Model(&models.Person{}).Where( + "is_member = ? AND section_id IN ?", + true, allowedSections, + ).Count(&count) + + pageQuery := c.Query("p") + page, _ := strconv.Atoi(pageQuery) + if page <= 0 { + page = 1 + } + + pageSize := 50 + offset := (page - 1) * pageSize + + maxPages := 1 + if count > int64(pageSize) { + maxPages = int(count) / pageSize + } + + var pages []int + for i := 1; i <= maxPages; i++ { + if i == page { + pages = append(pages, i) + } else if i >= (page-2) && i < page { + pages = append(pages, i) + } else if i <= (page+2) && i > page { + pages = append(pages, i) + } else if page <= 2 && i <= 5 { + pages = append(pages, i) + } else if page >= (maxPages-2) && i >= (maxPages-5) { + pages = append(pages, i) + } + } + var people []models.Person - result := db.Order( + result := db.Offset(offset).Limit(pageSize).Order( "last_name collate nocase asc, first_name collate nocase asc", ).Preload("Section").Find( &people, "is_member = ? AND section_id IN ?", true, allowedSections, @@ -73,6 +108,9 @@ func Members(c *fiber.Ctx) error { "PageTitle": "Membres", "MembersPage": true, "People": people, + "Page": page, + "Pages": pages, + "MaxPages": maxPages, "PermShow": permShow, "PermShowArchived": permShowArchived, }) diff --git a/views/people.html b/views/people.html index b47cb0e..b2e52ca 100644 --- a/views/people.html +++ b/views/people.html @@ -18,7 +18,6 @@
- {% if People %}
@@ -55,15 +54,75 @@
- {% else %} -
- {% if MembersPage %} - Pas de membre pour le moment - {% else %} - Pas de contact pour le moment - {% endif %} -
- {% endif %} + +
{% if MembersPage %}