carry over the recipient when creating a convo via profile
hide the convo reply form when we don't have permission to create a reply
This commit is contained in:
parent
84cdc097e7
commit
ae2a4809ba
|
@ -303,6 +303,7 @@ type ConvoViewPage struct {
|
|||
Convo *Conversation
|
||||
Posts []ConvoViewRow
|
||||
Users []*User
|
||||
CanReply bool
|
||||
Paginator
|
||||
}
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ func tmplInitUsers() (User, User, User) {
|
|||
return user, user2, user3
|
||||
}
|
||||
|
||||
func tmplInitHeaders(user User, user2 User, user3 User) (*Header, *Header, *Header) {
|
||||
func tmplInitHeaders(user, user2, user3 User) (*Header, *Header, *Header) {
|
||||
header := &Header{
|
||||
Site: Site,
|
||||
Settings: SettingBox.Load().(SettingMap),
|
||||
|
@ -147,11 +147,11 @@ type TItem struct {
|
|||
|
||||
type TItemHold map[string]TItem
|
||||
|
||||
func (h TItemHold) Add(name string, expects string, expectsInt interface{}) {
|
||||
func (h TItemHold) Add(name, expects string, expectsInt interface{}) {
|
||||
h[name] = TItem{expects, expectsInt, true}
|
||||
}
|
||||
|
||||
func (h TItemHold) AddStd(name string, expects string, expectsInt interface{}) {
|
||||
func (h TItemHold) AddStd(name, expects string, expectsInt interface{}) {
|
||||
h[name] = TItem{expects, expectsInt, false}
|
||||
}
|
||||
|
||||
|
@ -208,7 +208,7 @@ func CompileTemplates() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func compileCommons(c *tmpl.CTemplateSet, head *Header, head2 *Header, forumList []Forum, o TItemHold) error {
|
||||
func compileCommons(c *tmpl.CTemplateSet, head, head2 *Header, forumList []Forum, o TItemHold) error {
|
||||
// TODO: Add support for interface{}s
|
||||
_, user2, user3 := tmplInitUsers()
|
||||
now := time.Now()
|
||||
|
@ -352,7 +352,7 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
|||
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, parti, Paginator{[]int{1}, 1, 1}}
|
||||
convoPage := ConvoViewPage{header, convo, convoItems, parti, true, Paginator{[]int{1}, 1, 1}}
|
||||
t.AddStd("convo", "c.ConvoViewPage", convoPage)
|
||||
|
||||
convos := []*ConversationExtra{&ConversationExtra{&Conversation{}, []*User{&user}}}
|
||||
|
@ -377,7 +377,7 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
|||
|
||||
writeTemplate := func(name string, content interface{}) {
|
||||
log.Print("Writing template '" + name + "'")
|
||||
writeTmpl := func(name string, content string) {
|
||||
writeTmpl := func(name, content string) {
|
||||
if content == "" {
|
||||
return //log.Fatal("No content body for " + name)
|
||||
}
|
||||
|
@ -559,13 +559,13 @@ func compileJSTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName stri
|
|||
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, parti, Paginator{[]int{1}, 1, 1}}
|
||||
convoPage := ConvoViewPage{header, convo, convoItems, parti, true, Paginator{[]int{1}, 1, 1}}
|
||||
t.AddStd("convo", "c.ConvoViewPage", convoPage)
|
||||
|
||||
t.AddStd("notice", "string", "nonono")
|
||||
|
||||
dirPrefix := "./tmpl_client/"
|
||||
writeTemplate := func(name string, content string) {
|
||||
writeTemplate := func(name, content string) {
|
||||
log.Print("Writing template '" + name + "'")
|
||||
if content == "" {
|
||||
return //log.Fatal("No content body")
|
||||
|
@ -695,29 +695,29 @@ func arithToInt64(in interface{}) (out int64) {
|
|||
return out
|
||||
}
|
||||
|
||||
func arithDuoToInt64(left interface{}, right interface{}) (leftInt int64, rightInt int64) {
|
||||
func arithDuoToInt64(left, right interface{}) (leftInt, rightInt int64) {
|
||||
return arithToInt64(left), arithToInt64(right)
|
||||
}
|
||||
|
||||
func initDefaultTmplFuncMap() {
|
||||
// TODO: Add support for floats
|
||||
fmap := make(map[string]interface{})
|
||||
fmap["add"] = func(left interface{}, right interface{}) interface{} {
|
||||
fmap["add"] = func(left, right interface{}) interface{} {
|
||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||
return leftInt + rightInt
|
||||
}
|
||||
|
||||
fmap["subtract"] = func(left interface{}, right interface{}) interface{} {
|
||||
fmap["subtract"] = func(left, right interface{}) interface{} {
|
||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||
return leftInt - rightInt
|
||||
}
|
||||
|
||||
fmap["multiply"] = func(left interface{}, right interface{}) interface{} {
|
||||
fmap["multiply"] = func(left, right interface{}) interface{} {
|
||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||
return leftInt * rightInt
|
||||
}
|
||||
|
||||
fmap["divide"] = func(left interface{}, right interface{}) interface{} {
|
||||
fmap["divide"] = func(left, right interface{}) interface{} {
|
||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||
if leftInt == 0 || rightInt == 0 {
|
||||
return 0
|
||||
|
@ -725,11 +725,11 @@ func initDefaultTmplFuncMap() {
|
|||
return leftInt / rightInt
|
||||
}
|
||||
|
||||
fmap["dock"] = func(dock interface{}, headerInt interface{}) interface{} {
|
||||
fmap["dock"] = func(dock, headerInt interface{}) interface{} {
|
||||
return template.HTML(BuildWidget(dock.(string), headerInt.(*Header)))
|
||||
}
|
||||
|
||||
fmap["hasWidgets"] = func(dock interface{}, headerInt interface{}) interface{} {
|
||||
fmap["hasWidgets"] = func(dock, headerInt interface{}) interface{} {
|
||||
return HasWidgets(dock.(string), headerInt.(*Header))
|
||||
}
|
||||
|
||||
|
@ -803,7 +803,7 @@ func initDefaultTmplFuncMap() {
|
|||
return ""
|
||||
}
|
||||
|
||||
fmap["dyntmpl"] = func(nameInt interface{}, pageInt interface{}, headerInt interface{}) interface{} {
|
||||
fmap["dyntmpl"] = func(nameInt, pageInt, headerInt interface{}) interface{} {
|
||||
header := headerInt.(*Header)
|
||||
err := header.Theme.RunTmpl(nameInt.(string), pageInt, header.Writer)
|
||||
if err != nil {
|
||||
|
|
|
@ -3,6 +3,7 @@ package routes
|
|||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"html"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -94,7 +95,18 @@ func Convo(w http.ResponseWriter, r *http.Request, user c.User, header *c.Header
|
|||
pitems[i] = c.ConvoViewRow{post, uuser, "", 4, canModify}
|
||||
}
|
||||
|
||||
pi := c.Account{header, "dashboard", "convo", c.ConvoViewPage{header, convo, pitems, users, c.Paginator{pageList, page, lastPage}}}
|
||||
canReply := user.Perms.UseConvos || user.Perms.UseConvosOnlyWithMod
|
||||
if !user.Perms.UseConvos && user.Perms.UseConvosOnlyWithMod {
|
||||
u, err := c.Users.Get(convo.CreatedBy)
|
||||
if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
}
|
||||
if !u.IsSuperMod {
|
||||
canReply = false
|
||||
}
|
||||
}
|
||||
|
||||
pi := c.Account{header, "dashboard", "convo", c.ConvoViewPage{header, convo, pitems, users, canReply, c.Paginator{pageList, page, lastPage}}}
|
||||
return renderTemplate("account", w, r, header, pi)
|
||||
}
|
||||
|
||||
|
@ -104,8 +116,16 @@ func ConvosCreate(w http.ResponseWriter, r *http.Request, user c.User, h *c.Head
|
|||
return c.NoPermissions(w, r, user)
|
||||
}
|
||||
h.AddNotice("convo_dev")
|
||||
recpName := ""
|
||||
pi := c.Account{h, "dashboard", "create_convo", c.ConvoCreatePage{h, recpName}}
|
||||
uid, err := strconv.Atoi(r.FormValue("with"))
|
||||
if err != nil {
|
||||
return c.LocalError("invalid integer in parameter with", w, r, user)
|
||||
}
|
||||
u, err := c.Users.Get(uid)
|
||||
if err != nil {
|
||||
return c.LocalError("Unable to fetch user", w, r, user)
|
||||
}
|
||||
// TODO: Avoid potential double escape?
|
||||
pi := c.Account{h, "dashboard", "create_convo", c.ConvoCreatePage{h, html.EscapeString(u.Name)}}
|
||||
return renderTemplate("account", w, r, h, pi)
|
||||
}
|
||||
|
||||
|
@ -206,6 +226,7 @@ func ConvosCreateReplySubmit(w http.ResponseWriter, r *http.Request, user c.User
|
|||
if !convo.Has(user.ID) {
|
||||
return c.LocalError("You are not in this conversation.", w, r, user)
|
||||
}
|
||||
// TODO: Let the user reply if they're the convo creator in a convo with a mod
|
||||
if !user.Perms.UseConvos && user.Perms.UseConvosOnlyWithMod {
|
||||
u, err := c.Users.Get(convo.CreatedBy)
|
||||
if err != nil {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="colstack_item convo_row_box">{{template "convo_row.html" .}}</div>
|
||||
{{if not .CurrentUser.IsBanned}}
|
||||
{{if .CanReply}}
|
||||
<form action="/user/convo/create/submit/{{.Convo.ID}}?s={{.CurrentUser.Session}}" method="post">
|
||||
<div class="colstack_item topic_reply_form" style="border-top:none;">
|
||||
<div class="formrow">
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<a class="profile_menu_item">{{lang "profile.login_for_options"}}</a>
|
||||
</div>{{else}}
|
||||
{{if .CanMessage}}<div class="rowitem passive">
|
||||
<a href="/user/convos/create/" class="profile_menu_item">{{lang "profile.send_message"}}</a>
|
||||
<a href="/user/convos/create/?with={{.ProfileOwner.ID}}" class="profile_menu_item">{{lang "profile.send_message"}}</a>
|
||||
</div>{{end}}
|
||||
<!--<div class="rowitem passive">
|
||||
<a class="profile_menu_item">{{lang "profile.add_friend"}}</a>
|
||||
|
|
Loading…
Reference in New Issue