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
|
@ -300,9 +300,10 @@ type ConvoViewRow struct {
|
||||||
|
|
||||||
type ConvoViewPage struct {
|
type ConvoViewPage struct {
|
||||||
*Header
|
*Header
|
||||||
Convo *Conversation
|
Convo *Conversation
|
||||||
Posts []ConvoViewRow
|
Posts []ConvoViewRow
|
||||||
Users []*User
|
Users []*User
|
||||||
|
CanReply bool
|
||||||
Paginator
|
Paginator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ var Template_account_handle = genIntTmpl("account")
|
||||||
|
|
||||||
func tmplInitUsers() (User, User, User) {
|
func tmplInitUsers() (User, User, User) {
|
||||||
avatar, microAvatar := BuildAvatar(62, "")
|
avatar, microAvatar := BuildAvatar(62, "")
|
||||||
user := User{62, BuildProfileURL("fake-user", 62), "Fake User", "compiler@localhost", 0, false, false, false, false, false, false, GuestPerms, make(map[string]bool), "", false, "", avatar, microAvatar, "", "", 0, 0, 0, 0, StartTime,"0.0.0.0.0", "", 0, nil}
|
user := User{62, BuildProfileURL("fake-user", 62), "Fake User", "compiler@localhost", 0, false, false, false, false, false, false, GuestPerms, make(map[string]bool), "", false, "", avatar, microAvatar, "", "", 0, 0, 0, 0, StartTime, "0.0.0.0.0", "", 0, nil}
|
||||||
|
|
||||||
// TODO: Do a more accurate level calculation for this?
|
// TODO: Do a more accurate level calculation for this?
|
||||||
avatar, microAvatar = BuildAvatar(1, "")
|
avatar, microAvatar = BuildAvatar(1, "")
|
||||||
|
@ -104,7 +104,7 @@ func tmplInitUsers() (User, User, User) {
|
||||||
return user, user2, user3
|
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{
|
header := &Header{
|
||||||
Site: Site,
|
Site: Site,
|
||||||
Settings: SettingBox.Load().(SettingMap),
|
Settings: SettingBox.Load().(SettingMap),
|
||||||
|
@ -147,11 +147,11 @@ type TItem struct {
|
||||||
|
|
||||||
type TItemHold map[string]TItem
|
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}
|
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}
|
h[name] = TItem{expects, expectsInt, false}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ func CompileTemplates() error {
|
||||||
return nil
|
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
|
// TODO: Add support for interface{}s
|
||||||
_, user2, user3 := tmplInitUsers()
|
_, user2, user3 := tmplInitUsers()
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
@ -352,7 +352,7 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
||||||
parti := []*User{&user}
|
parti := []*User{&user}
|
||||||
convo := &Conversation{1, user.ID, time.Now(), 0, time.Now()}
|
convo := &Conversation{1, user.ID, time.Now(), 0, time.Now()}
|
||||||
convoItems := []ConvoViewRow{ConvoViewRow{&ConversationPost{1, 1, "hey", "", user.ID}, &user, "", 4, true}}
|
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("convo", "c.ConvoViewPage", convoPage)
|
||||||
|
|
||||||
convos := []*ConversationExtra{&ConversationExtra{&Conversation{}, []*User{&user}}}
|
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{}) {
|
writeTemplate := func(name string, content interface{}) {
|
||||||
log.Print("Writing template '" + name + "'")
|
log.Print("Writing template '" + name + "'")
|
||||||
writeTmpl := func(name string, content string) {
|
writeTmpl := func(name, content string) {
|
||||||
if content == "" {
|
if content == "" {
|
||||||
return //log.Fatal("No content body for " + name)
|
return //log.Fatal("No content body for " + name)
|
||||||
}
|
}
|
||||||
|
@ -531,7 +531,7 @@ func compileJSTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName stri
|
||||||
}, VoteCount: 7}
|
}, VoteCount: 7}
|
||||||
avatar, microAvatar := BuildAvatar(62, "")
|
avatar, microAvatar := BuildAvatar(62, "")
|
||||||
miniAttach := []*MiniAttachment{&MiniAttachment{Path: "/"}}
|
miniAttach := []*MiniAttachment{&MiniAttachment{Path: "/"}}
|
||||||
topic := TopicUser{1, "blah", "Blah", "Hey there!", 62, false, false, now, now, 1, 1, 0, "", "127.0.0.1", 1, 0, 1, 0, "classname", poll.ID, "weird-data", BuildProfileURL("fake-user", 62), "Fake User", Config.DefaultGroup, avatar, microAvatar, 0, "","","", 58, false, miniAttach, nil, false}
|
topic := TopicUser{1, "blah", "Blah", "Hey there!", 62, false, false, now, now, 1, 1, 0, "", "127.0.0.1", 1, 0, 1, 0, "classname", poll.ID, "weird-data", BuildProfileURL("fake-user", 62), "Fake User", Config.DefaultGroup, avatar, microAvatar, 0, "", "", "", 58, false, miniAttach, nil, false}
|
||||||
var replyList []*ReplyUser
|
var replyList []*ReplyUser
|
||||||
// TODO: Do we really want the UID here to be zero?
|
// TODO: Do we really want the UID here to be zero?
|
||||||
avatar, microAvatar = BuildAvatar(0, "")
|
avatar, microAvatar = BuildAvatar(0, "")
|
||||||
|
@ -559,13 +559,13 @@ func compileJSTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName stri
|
||||||
parti := []*User{&user}
|
parti := []*User{&user}
|
||||||
convo := &Conversation{1, user.ID, time.Now(), 0, time.Now()}
|
convo := &Conversation{1, user.ID, time.Now(), 0, time.Now()}
|
||||||
convoItems := []ConvoViewRow{ConvoViewRow{&ConversationPost{1, 1, "hey", "", user.ID}, &user, "", 4, true}}
|
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("convo", "c.ConvoViewPage", convoPage)
|
||||||
|
|
||||||
t.AddStd("notice", "string", "nonono")
|
t.AddStd("notice", "string", "nonono")
|
||||||
|
|
||||||
dirPrefix := "./tmpl_client/"
|
dirPrefix := "./tmpl_client/"
|
||||||
writeTemplate := func(name string, content string) {
|
writeTemplate := func(name, content string) {
|
||||||
log.Print("Writing template '" + name + "'")
|
log.Print("Writing template '" + name + "'")
|
||||||
if content == "" {
|
if content == "" {
|
||||||
return //log.Fatal("No content body")
|
return //log.Fatal("No content body")
|
||||||
|
@ -695,29 +695,29 @@ func arithToInt64(in interface{}) (out int64) {
|
||||||
return out
|
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)
|
return arithToInt64(left), arithToInt64(right)
|
||||||
}
|
}
|
||||||
|
|
||||||
func initDefaultTmplFuncMap() {
|
func initDefaultTmplFuncMap() {
|
||||||
// TODO: Add support for floats
|
// TODO: Add support for floats
|
||||||
fmap := make(map[string]interface{})
|
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)
|
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||||
return leftInt + rightInt
|
return leftInt + rightInt
|
||||||
}
|
}
|
||||||
|
|
||||||
fmap["subtract"] = func(left interface{}, right interface{}) interface{} {
|
fmap["subtract"] = func(left, right interface{}) interface{} {
|
||||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||||
return leftInt - rightInt
|
return leftInt - rightInt
|
||||||
}
|
}
|
||||||
|
|
||||||
fmap["multiply"] = func(left interface{}, right interface{}) interface{} {
|
fmap["multiply"] = func(left, right interface{}) interface{} {
|
||||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||||
return leftInt * rightInt
|
return leftInt * rightInt
|
||||||
}
|
}
|
||||||
|
|
||||||
fmap["divide"] = func(left interface{}, right interface{}) interface{} {
|
fmap["divide"] = func(left, right interface{}) interface{} {
|
||||||
leftInt, rightInt := arithDuoToInt64(left, right)
|
leftInt, rightInt := arithDuoToInt64(left, right)
|
||||||
if leftInt == 0 || rightInt == 0 {
|
if leftInt == 0 || rightInt == 0 {
|
||||||
return 0
|
return 0
|
||||||
|
@ -725,11 +725,11 @@ func initDefaultTmplFuncMap() {
|
||||||
return leftInt / rightInt
|
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)))
|
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))
|
return HasWidgets(dock.(string), headerInt.(*Header))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -803,7 +803,7 @@ func initDefaultTmplFuncMap() {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
fmap["dyntmpl"] = func(nameInt interface{}, pageInt interface{}, headerInt interface{}) interface{} {
|
fmap["dyntmpl"] = func(nameInt, pageInt, headerInt interface{}) interface{} {
|
||||||
header := headerInt.(*Header)
|
header := headerInt.(*Header)
|
||||||
err := header.Theme.RunTmpl(nameInt.(string), pageInt, header.Writer)
|
err := header.Theme.RunTmpl(nameInt.(string), pageInt, header.Writer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package routes
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
|
"html"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"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}
|
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)
|
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)
|
return c.NoPermissions(w, r, user)
|
||||||
}
|
}
|
||||||
h.AddNotice("convo_dev")
|
h.AddNotice("convo_dev")
|
||||||
recpName := ""
|
uid, err := strconv.Atoi(r.FormValue("with"))
|
||||||
pi := c.Account{h, "dashboard", "create_convo", c.ConvoCreatePage{h, recpName}}
|
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)
|
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) {
|
if !convo.Has(user.ID) {
|
||||||
return c.LocalError("You are not in this conversation.", w, r, user)
|
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 {
|
if !user.Perms.UseConvos && user.Perms.UseConvosOnlyWithMod {
|
||||||
u, err := c.Users.Get(convo.CreatedBy)
|
u, err := c.Users.Get(convo.CreatedBy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="colstack_item convo_row_box">{{template "convo_row.html" .}}</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">
|
<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="colstack_item topic_reply_form" style="border-top:none;">
|
||||||
<div class="formrow">
|
<div class="formrow">
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<a class="profile_menu_item">{{lang "profile.login_for_options"}}</a>
|
<a class="profile_menu_item">{{lang "profile.login_for_options"}}</a>
|
||||||
</div>{{else}}
|
</div>{{else}}
|
||||||
{{if .CanMessage}}<div class="rowitem passive">
|
{{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>{{end}}
|
||||||
<!--<div class="rowitem passive">
|
<!--<div class="rowitem passive">
|
||||||
<a class="profile_menu_item">{{lang "profile.add_friend"}}</a>
|
<a class="profile_menu_item">{{lang "profile.add_friend"}}</a>
|
||||||
|
|
Loading…
Reference in New Issue