Member Search: Order by certified at

This commit is contained in:
Noah Petherbridge 2024-08-23 23:09:27 -07:00
parent 81719218e2
commit 36e48f6ce0
4 changed files with 26 additions and 9 deletions

View File

@ -23,6 +23,7 @@ func Search() http.HandlerFunc {
var sortWhitelist = []string{ var sortWhitelist = []string{
"last_login_at desc", "last_login_at desc",
"created_at desc", "created_at desc",
"certified_at desc",
"username", "username",
"username desc", "username desc",
"lower(name)", "lower(name)",
@ -126,6 +127,11 @@ func Search() http.HandlerFunc {
sort = "last_login_at desc" sort = "last_login_at desc"
} }
// Real name for certified_at
if sort == "certified_at desc" {
sort = "certification_photos.updated_at desc"
}
// Default // Default
if isCertified == "" { if isCertified == "" {
isCertified = "true" isCertified = "true"

View File

@ -193,12 +193,20 @@ func Profile() http.HandlerFunc {
var photoCount = models.CountPublicPhotos(currentUser.ID) var photoCount = models.CountPublicPhotos(currentUser.ID)
// Member Since date.
var memberSinceDate = currentUser.CreatedAt
if currentUser.Certified {
if dt, err := currentUser.CertifiedSince(); err == nil {
memberSinceDate = dt
}
}
var resp = Response{ var resp = Response{
OK: true, OK: true,
ProfileFields: []ProfileField{ ProfileFields: []ProfileField{
{ {
Name: "Member Since", Name: "Certified since",
Value: fmt.Sprintf("%s ago", utility.FormatDurationCoarse(time.Since(currentUser.CreatedAt))), Value: fmt.Sprintf("%s ago", utility.FormatDurationCoarse(time.Since(memberSinceDate))),
}, },
{ {
Name: "📸 Gallery", Name: "📸 Gallery",

View File

@ -430,27 +430,27 @@ func SearchUsers(user *User, search *UserSearch, pager *Pagination) ([]*User, er
// Non-admin user only ever sees active accounts. // Non-admin user only ever sees active accounts.
if user.IsAdmin && len(statuses) > 0 { if user.IsAdmin && len(statuses) > 0 {
wheres = append(wheres, "status IN ?") wheres = append(wheres, "users.status IN ?")
placeholders = append(placeholders, statuses) placeholders = append(placeholders, statuses)
} else { } else {
wheres = append(wheres, "status = ?") wheres = append(wheres, "users.status = ?")
placeholders = append(placeholders, UserStatusActive) placeholders = append(placeholders, UserStatusActive)
} }
// Certified filter (including if Shy Accounts are asked for) // Certified filter (including if Shy Accounts are asked for)
if search.Certified { if search.Certified {
wheres = append(wheres, "certified = ?") wheres = append(wheres, "users.certified = ?")
placeholders = append(placeholders, search.Certified) placeholders = append(placeholders, search.Certified)
} }
// Expressly Not Certified filtering // Expressly Not Certified filtering
if search.NotCertified { if search.NotCertified {
wheres = append(wheres, "certified = ?") wheres = append(wheres, "users.certified = ?")
placeholders = append(placeholders, false) placeholders = append(placeholders, false)
} }
if search.IsAdmin { if search.IsAdmin {
wheres = append(wheres, "is_admin = true") wheres = append(wheres, "users.is_admin = true")
} }
if search.ShyAccounts { if search.ShyAccounts {
@ -516,7 +516,9 @@ func SearchUsers(user *User, search *UserSearch, pager *Pagination) ([]*User, er
placeholders = append(placeholders, date) placeholders = append(placeholders, date)
} }
query = (&User{}).Preload() query = (&User{}).Preload().Joins(
"JOIN certification_photos ON (certification_photos.user_id = users.id)",
)
if joins != "" { if joins != "" {
query = query.Joins(joins) query = query.Joins(joins)
} }

View File

@ -305,6 +305,7 @@
<select id="sort" name="sort"> <select id="sort" name="sort">
<option value="last_login_at desc"{{if eq .Sort "last_login_at desc"}} selected{{end}}>Last login</option> <option value="last_login_at desc"{{if eq .Sort "last_login_at desc"}} selected{{end}}>Last login</option>
<option value="created_at desc"{{if eq .Sort "created_at desc"}} selected{{end}}>Signup date</option> <option value="created_at desc"{{if eq .Sort "created_at desc"}} selected{{end}}>Signup date</option>
<option value="certified_at desc"{{if eq .Sort "certification_photos.updated_at desc"}} selected{{end}}>Certified date</option>
<option value="username"{{if eq .Sort "username"}} selected{{end}}>Username (a-z)</option> <option value="username"{{if eq .Sort "username"}} selected{{end}}>Username (a-z)</option>
<option value="username desc"{{if eq .Sort "username desc"}} selected{{end}}>Username (z-a)</option> <option value="username desc"{{if eq .Sort "username desc"}} selected{{end}}>Username (z-a)</option>
<option value="lower(name)"{{if eq .Sort "lower(name)"}} selected{{end}}>Name (a-z)</option> <option value="lower(name)"{{if eq .Sort "lower(name)"}} selected{{end}}>Name (a-z)</option>
@ -452,7 +453,7 @@
</div> </div>
{{end}} {{end}}
{{if eq $Root.Sort "created_at desc"}} {{if or (eq $Root.Sort "created_at desc") (eq $Root.Sort "certification_photos.updated_at desc")}}
<div> <div>
<small> <small>
Member since: Member since: