From cae7e00b0c31267ab52010d3418d3b9f2c872c8f Mon Sep 17 00:00:00 2001 From: Azareal Date: Wed, 21 Aug 2019 11:31:13 +1000 Subject: [PATCH] Show the users in a convo. --- common/conversations.go | 22 ++++++++++++++++++++++ common/pages.go | 1 + common/template_init.go | 3 ++- routes/convos.go | 28 ++++++++++++++++++++++++---- templates/convo.html | 5 ++++- themes/nox/public/convo.css | 6 ++++++ 6 files changed, 59 insertions(+), 6 deletions(-) diff --git a/common/conversations.go b/common/conversations.go index ad5dc2c8..6ca4c968 100644 --- a/common/conversations.go +++ b/common/conversations.go @@ -25,6 +25,8 @@ type ConvoStmts struct { editPost *sql.Stmt createPost *sql.Stmt deletePost *sql.Stmt + + getUsers *sql.Stmt } func init() { @@ -40,6 +42,8 @@ func init() { editPost: acc.Update("conversations_posts").Set("body = ?, post = ?").Where("pid = ?").Prepare(), createPost: acc.Insert("conversations_posts").Columns("cid, body, post, createdBy").Fields("?,?,?,?").Prepare(), deletePost: acc.Delete("conversations_posts").Where("pid = ?").Prepare(), + + getUsers: acc.Select("conversations_participants").Columns("uid").Where("cid = ?").Prepare(), } return acc.FirstError() }) @@ -84,6 +88,24 @@ func (co *Conversation) PostsCount() (count int) { return count } +func (co *Conversation) Uids() (ids []int, err error) { + rows, err := convoStmts.getUsers.Query(co.ID) + if err != nil { + return nil, err + } + defer rows.Close() + + for rows.Next() { + var id int + err := rows.Scan(&id) + if err != nil { + return nil, err + } + ids = append(ids, id) + } + return ids, rows.Err() +} + func (co *Conversation) Has(uid int) (in bool) { var count int err := convoStmts.has.QueryRow(uid, co.ID).Scan(&count) diff --git a/common/pages.go b/common/pages.go index 271adb7a..d2c8184a 100644 --- a/common/pages.go +++ b/common/pages.go @@ -282,6 +282,7 @@ type ConvoViewPage struct { *Header Convo *Conversation Posts []ConvoViewRow + Users []*User Paginator } diff --git a/common/template_init.go b/common/template_init.go index 0dc5b8e3..ad0801bf 100644 --- a/common/template_init.go +++ b/common/template_init.go @@ -348,9 +348,10 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string accountPage := Account{header, "dashboard", "account_own_edit", inter} tmpls.AddStd("account", "c.Account", accountPage) + parti := []*User{&user} convo := &Conversation{1,user.ID,time.Now(),0,time.Now()} convoItems := []ConvoViewRow{ConvoViewRow{&ConversationPost{1,1,"hey","",user.ID}, &user, "", 4, true}} - convoPage := ConvoViewPage{header, convo, convoItems, Paginator{[]int{1}, 1, 1}} + convoPage := ConvoViewPage{header, convo, convoItems, parti, Paginator{[]int{1}, 1, 1}} tmpls.AddStd("convo", "c.ConvoViewPage", convoPage) basePage := &BasePanelPage{header, PanelStats{}, "dashboard", ReportForumID} diff --git a/routes/convos.go b/routes/convos.go index 92e52855..bcb528d5 100644 --- a/routes/convos.go +++ b/routes/convos.go @@ -5,6 +5,7 @@ import ( "net/http" "strconv" "strings" + "errors" c "github.com/Azareal/Gosora/common" p "github.com/Azareal/Gosora/common/phrases" @@ -61,17 +62,36 @@ func Convo(w http.ResponseWriter, r *http.Request, user c.User, header *c.Header return c.InternalError(err, w, r) } + uids, err := convo.Uids() + if err == sql.ErrNoRows { + return c.NotFound(w, r, header) + } else if err != nil { + return c.InternalError(err, w, r) + } + umap, err := c.Users.BulkGetMap(uids) + if err == sql.ErrNoRows { + return c.NotFound(w, r, header) + } else if err != nil { + return c.InternalError(err, w, r) + } + users := make([]*c.User,len(umap)) + i := 0 + for _, user := range umap { + users[i] = user + i++ + } + pitems := make([]c.ConvoViewRow, len(posts)) for i, post := range posts { - uuser, err := c.Users.Get(post.CreatedBy) - if err != nil { - return c.InternalError(err, w, r) + uuser, ok := umap[post.CreatedBy] + if !ok { + return c.InternalError(errors.New("convo post creator not in umap"), w, r) } canModify := user.ID == post.CreatedBy || user.IsSuperMod pitems[i] = c.ConvoViewRow{post, uuser, "", 4, canModify} } - pi := c.Account{header, "dashboard", "convo", c.ConvoViewPage{header, convo, pitems, c.Paginator{pageList, page, lastPage}}} + pi := c.Account{header, "dashboard", "convo", c.ConvoViewPage{header, convo, pitems, users, c.Paginator{pageList, page, lastPage}}} return renderTemplate("account", w, r, header, pi) } diff --git a/templates/convo.html b/templates/convo.html index 3be914ce..54a39954 100644 --- a/templates/convo.html +++ b/templates/convo.html @@ -4,7 +4,10 @@
-
Participants: Blah, Blah 2, Blah 3
+
+
Participants: 
+ {{range .Users}} {{end}} +
{{template "convo_row.html" .}}
{{if not .CurrentUser.IsBanned}} diff --git a/themes/nox/public/convo.css b/themes/nox/public/convo.css index 310d30cb..4db58d48 100644 --- a/themes/nox/public/convo.css +++ b/themes/nox/public/convo.css @@ -1,6 +1,12 @@ .parti { margin-bottom: 8px; } +.parti .rowitem { + display: flex; +} +.parti_user:not(:last-child):after { + content: ","; +} .rowitem .topRow { display: flex;