log errors properly in ForumsOrderSubmit
fix tiff extensions in canResize check reduce boilerplate
This commit is contained in:
parent
1c5967ad7e
commit
74193223ee
|
@ -238,7 +238,7 @@ func (s *DefaultConversationStore) GetUserExtra(uid, offset int) (cos []*Convers
|
||||||
users[i] = user
|
users[i] = user
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
return []*ConversationExtra{&ConversationExtra{raw[0], users}}, nil
|
return []*ConversationExtra{{raw[0], users}}, nil
|
||||||
}
|
}
|
||||||
//log.Println("1")
|
//log.Println("1")
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ type DefaultPerfCounter struct {
|
||||||
func NewDefaultPerfCounter(acc *qgen.Accumulator) (*DefaultPerfCounter, error) {
|
func NewDefaultPerfCounter(acc *qgen.Accumulator) (*DefaultPerfCounter, error) {
|
||||||
co := &DefaultPerfCounter{
|
co := &DefaultPerfCounter{
|
||||||
buckets: []*PerfCounterBucket{
|
buckets: []*PerfCounterBucket{
|
||||||
&PerfCounterBucket{
|
{
|
||||||
low: &MutexCounter64Bucket{counter: math.MaxInt64},
|
low: &MutexCounter64Bucket{counter: math.MaxInt64},
|
||||||
high: &MutexCounter64Bucket{counter: 0},
|
high: &MutexCounter64Bucket{counter: 0},
|
||||||
avg: &MutexCounter64Bucket{counter: 0},
|
avg: &MutexCounter64Bucket{counter: 0},
|
||||||
|
|
|
@ -163,15 +163,15 @@ func PreparseMessage(msg string) string {
|
||||||
// TODO: We can maybe reduce the size of this by using an offset?
|
// TODO: We can maybe reduce the size of this by using an offset?
|
||||||
// TODO: Move some of these closures out of this function to make things a little more efficient
|
// TODO: Move some of these closures out of this function to make things a little more efficient
|
||||||
allowedTags := [][]string{
|
allowedTags := [][]string{
|
||||||
'e': []string{"m"},
|
'e': {"m"},
|
||||||
's': []string{"", "trong", "poiler", "pan"},
|
's': {"", "trong", "poiler", "pan"},
|
||||||
'd': []string{"el"},
|
'd': {"el"},
|
||||||
'u': []string{""},
|
'u': {""},
|
||||||
'b': []string{"", "lockquote"},
|
'b': {"", "lockquote"},
|
||||||
'i': []string{""},
|
'i': {""},
|
||||||
'h': []string{"1", "2", "3"},
|
'h': {"1", "2", "3"},
|
||||||
//'p': []string{""},
|
//'p': {""},
|
||||||
'g': []string{""}, // Quick and dirty fix for Grammarly
|
'g': {""}, // Quick and dirty fix for Grammarly
|
||||||
}
|
}
|
||||||
buildLitMatch := func(tag string) func(*TagToAction, bool, int, []rune) (int, string) {
|
buildLitMatch := func(tag string) func(*TagToAction, bool, int, []rune) (int, string) {
|
||||||
return func(action *TagToAction, open bool, _ int, _ []rune) (int, string) {
|
return func(action *TagToAction, open bool, _ int, _ []rune) (int, string) {
|
||||||
|
@ -187,13 +187,13 @@ func PreparseMessage(msg string) string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tagToAction := [][]*TagToAction{
|
tagToAction := [][]*TagToAction{
|
||||||
'e': []*TagToAction{&TagToAction{"m", buildLitMatch("em"), 0, false}},
|
'e': {{"m", buildLitMatch("em"), 0, false}},
|
||||||
's': []*TagToAction{
|
's': {
|
||||||
&TagToAction{"", buildLitMatch("del"), 0, false},
|
{"", buildLitMatch("del"), 0, false},
|
||||||
&TagToAction{"trong", buildLitMatch("strong"), 0, false},
|
{"trong", buildLitMatch("strong"), 0, false},
|
||||||
&TagToAction{"poiler", buildLitMatch("spoiler"), 0, false},
|
{"poiler", buildLitMatch("spoiler"), 0, false},
|
||||||
// Hides the span tags Trumbowyg loves blasting out randomly
|
// Hides the span tags Trumbowyg loves blasting out randomly
|
||||||
&TagToAction{"pan", func(act *TagToAction, open bool, i int, runes []rune) (int, string) {
|
{"pan", func(act *TagToAction, open bool, i int, runes []rune) (int, string) {
|
||||||
if open {
|
if open {
|
||||||
act.Depth++
|
act.Depth++
|
||||||
//fmt.Println("skipping attributes")
|
//fmt.Println("skipping attributes")
|
||||||
|
@ -212,21 +212,21 @@ func PreparseMessage(msg string) string {
|
||||||
return -1, " "
|
return -1, " "
|
||||||
}, 0, true},
|
}, 0, true},
|
||||||
},
|
},
|
||||||
'd': []*TagToAction{&TagToAction{"el", buildLitMatch("del"), 0, false}},
|
'd': {{"el", buildLitMatch("del"), 0, false}},
|
||||||
'u': []*TagToAction{&TagToAction{"", buildLitMatch("u"), 0, false}},
|
'u': {{"", buildLitMatch("u"), 0, false}},
|
||||||
'b': []*TagToAction{
|
'b': {
|
||||||
&TagToAction{"", buildLitMatch("strong"), 0, false},
|
{"", buildLitMatch("strong"), 0, false},
|
||||||
&TagToAction{"lockquote", buildLitMatch("blockquote"), 0, false},
|
{"lockquote", buildLitMatch("blockquote"), 0, false},
|
||||||
},
|
},
|
||||||
'i': []*TagToAction{&TagToAction{"", buildLitMatch("em"), 0, false}},
|
'i': {{"", buildLitMatch("em"), 0, false}},
|
||||||
'h': []*TagToAction{
|
'h': {
|
||||||
&TagToAction{"1", buildLitMatch("h2"), 0, false},
|
{"1", buildLitMatch("h2"), 0, false},
|
||||||
&TagToAction{"2", buildLitMatch("h3"), 0, false},
|
{"2", buildLitMatch("h3"), 0, false},
|
||||||
&TagToAction{"3", buildLitMatch("h4"), 0, false},
|
{"3", buildLitMatch("h4"), 0, false},
|
||||||
},
|
},
|
||||||
//'p': []*TagToAction{&TagToAction{"", buildLitMatch2("\n\n", ""), 0, false}},
|
//'p': {{"", buildLitMatch2("\n\n", ""), 0, false}},
|
||||||
'g': []*TagToAction{
|
'g': {
|
||||||
&TagToAction{"", func(act *TagToAction, open bool, i int, runes []rune) (int, string) {
|
{"", func(act *TagToAction, open bool, i int, runes []rune) (int, string) {
|
||||||
if open {
|
if open {
|
||||||
act.Depth++
|
act.Depth++
|
||||||
//fmt.Println("skipping attributes")
|
//fmt.Println("skipping attributes")
|
||||||
|
@ -482,9 +482,11 @@ func ParseMessage(msg string, sectionID int, sectionType string, settings *Parse
|
||||||
msg, _ = ParseMessage2(msg, sectionID, sectionType, settings, user)
|
msg, _ = ParseMessage2(msg, sectionID, sectionType, settings, user)
|
||||||
return msg
|
return msg
|
||||||
}
|
}
|
||||||
var litRepPrefix = []byte{':',';'}
|
|
||||||
//var litRep = [][]byte{':':[]byte{')','(','D','O','o','P','p'},';':[]byte{')'}}
|
var litRepPrefix = []byte{':', ';'}
|
||||||
var litRep = [][]string{':':[]string{')':"😀",'(':"😞",'D':"😃",'O':"😲",'o':"😲",'P':"😛",'p':"😛"},';':[]string{')':"😉"}}
|
|
||||||
|
//var litRep = [][]byte{':':{')','(','D','O','o','P','p'},';':{')'}}
|
||||||
|
var litRep = [][]string{':': {')': "😀", '(': "😞", 'D': "😃", 'O': "😲", 'o': "😲", 'P': "😛", 'p': "😛"}, ';': {')': "😉"}}
|
||||||
|
|
||||||
// TODO: Write a test for this
|
// TODO: Write a test for this
|
||||||
// TODO: We need a lot more hooks here. E.g. To add custom media types and handlers.
|
// TODO: We need a lot more hooks here. E.g. To add custom media types and handlers.
|
||||||
|
|
|
@ -79,7 +79,7 @@ type DefaultRateLimiter struct {
|
||||||
|
|
||||||
func NewDefaultRateLimiter() *DefaultRateLimiter {
|
func NewDefaultRateLimiter() *DefaultRateLimiter {
|
||||||
return &DefaultRateLimiter{map[string]*RateLimit{
|
return &DefaultRateLimiter{map[string]*RateLimit{
|
||||||
"register": NewRateLimit([]RateFence{RateFence{int(time.Hour / 2), 1}}),
|
"register": NewRateLimit([]RateFence{{int(time.Hour / 2), 1}}),
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,10 +114,10 @@ func tmplInitHeaders(u, u2, u3 *User) (*Header, *Header, *Header) {
|
||||||
Theme: Themes[DefaultThemeBox.Load().(string)],
|
Theme: Themes[DefaultThemeBox.Load().(string)],
|
||||||
CurrentUser: u,
|
CurrentUser: u,
|
||||||
NoticeList: []string{"test"},
|
NoticeList: []string{"test"},
|
||||||
Stylesheets: []HScript{HScript{"panel.css", ""}},
|
Stylesheets: []HScript{{"panel.css", ""}},
|
||||||
Scripts: []HScript{HScript{"whatever.js", ""}},
|
Scripts: []HScript{{"whatever.js", ""}},
|
||||||
PreScriptsAsync: []HScript{HScript{"whatever.js", ""}},
|
PreScriptsAsync: []HScript{{"whatever.js", ""}},
|
||||||
ScriptsAsync: []HScript{HScript{"whatever.js", ""}},
|
ScriptsAsync: []HScript{{"whatever.js", ""}},
|
||||||
Widgets: PageWidgets{
|
Widgets: PageWidgets{
|
||||||
LeftSidebar: template.HTML("lalala"),
|
LeftSidebar: template.HTML("lalala"),
|
||||||
},
|
},
|
||||||
|
@ -239,11 +239,11 @@ func compileCommons(c *tmpl.CTemplateSet, head, head2 *Header, forumList []Forum
|
||||||
o.Add("forums", "c.ForumsPage", ForumsPage{htitle("Forum List"), forumList})
|
o.Add("forums", "c.ForumsPage", ForumsPage{htitle("Forum List"), forumList})
|
||||||
|
|
||||||
poll := Poll{ID: 1, Type: 0, Options: map[int]string{0: "Nothing", 1: "Something"}, Results: map[int]int{0: 5, 1: 2}, QuickOptions: []PollOption{
|
poll := Poll{ID: 1, Type: 0, Options: map[int]string{0: "Nothing", 1: "Something"}, Results: map[int]int{0: 5, 1: 2}, QuickOptions: []PollOption{
|
||||||
PollOption{0, "Nothing"},
|
{0, "Nothing"},
|
||||||
PollOption{1, "Something"},
|
{1, "Something"},
|
||||||
}, VoteCount: 7}
|
}, VoteCount: 7}
|
||||||
avatar, microAvatar := BuildAvatar(62, "")
|
avatar, microAvatar := BuildAvatar(62, "")
|
||||||
miniAttach := []*MiniAttachment{&MiniAttachment{Path: "/"}}
|
miniAttach := []*MiniAttachment{{Path: "/"}}
|
||||||
tu := TopicUser{1, "blah", "Blah", "Hey there!", 0, 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}
|
tu := TopicUser{1, "blah", "Blah", "Hey there!", 0, 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
|
||||||
|
@ -272,7 +272,7 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
||||||
PollOption{1, "Something"},
|
PollOption{1, "Something"},
|
||||||
}, VoteCount: 7}*/
|
}, VoteCount: 7}*/
|
||||||
//avatar, microAvatar := BuildAvatar(62, "")
|
//avatar, microAvatar := BuildAvatar(62, "")
|
||||||
miniAttach := []*MiniAttachment{&MiniAttachment{Path: "/"}}
|
miniAttach := []*MiniAttachment{{Path: "/"}}
|
||||||
var replyList []*ReplyUser
|
var replyList []*ReplyUser
|
||||||
//topic := TopicUser{1, "blah", "Blah", "Hey there!", 0, 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}
|
//topic := TopicUser{1, "blah", "Blah", "Hey there!", 0, 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}
|
||||||
// TODO: Do we want the UID on this to be 0?
|
// TODO: Do we want the UID on this to be 0?
|
||||||
|
@ -351,7 +351,7 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
||||||
}
|
}
|
||||||
|
|
||||||
t.AddStd("login", "c.Page", Page{htitle("Login Page"), tList, nil})
|
t.AddStd("login", "c.Page", Page{htitle("Login Page"), tList, nil})
|
||||||
t.AddStd("register", "c.RegisterPage", RegisterPage{htitle("Registration Page"), false, "", []RegisterVerify{RegisterVerify{true, &RegisterVerifyImageGrid{"What?", []RegisterVerifyImageGridImage{RegisterVerifyImageGridImage{"something.png"}}}}}})
|
t.AddStd("register", "c.RegisterPage", RegisterPage{htitle("Registration Page"), false, "", []RegisterVerify{{true, &RegisterVerifyImageGrid{"What?", []RegisterVerifyImageGridImage{{"something.png"}}}}}})
|
||||||
t.AddStd("error", "c.ErrorPage", ErrorPage{htitle("Error"), "A problem has occurred in the system."})
|
t.AddStd("error", "c.ErrorPage", ErrorPage{htitle("Error"), "A problem has occurred in the system."})
|
||||||
|
|
||||||
ipSearchPage := IPSearchPage{htitle("IP Search"), map[int]*User{1: user2}, "::1"}
|
ipSearchPage := IPSearchPage{htitle("IP Search"), map[int]*User{1: user2}, "::1"}
|
||||||
|
@ -363,11 +363,11 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
||||||
|
|
||||||
parti := []*User{user}
|
parti := []*User{user}
|
||||||
convo := &Conversation{1, BuildConvoURL(1), user.ID, time.Now(), 0, time.Now()}
|
convo := &Conversation{1, BuildConvoURL(1), user.ID, time.Now(), 0, time.Now()}
|
||||||
convoItems := []ConvoViewRow{ConvoViewRow{&ConversationPost{1, 1, "hey", "", user.ID}, user, "", 4, true}}
|
convoItems := []ConvoViewRow{{&ConversationPost{1, 1, "hey", "", user.ID}, user, "", 4, true}}
|
||||||
convoPage := ConvoViewPage{header, convo, convoItems, parti, true, 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{{&Conversation{}, []*User{user}}}
|
||||||
var cRows []ConvoListRow
|
var cRows []ConvoListRow
|
||||||
for _, convo := range convos {
|
for _, convo := range convos {
|
||||||
cRows = append(cRows, ConvoListRow{convo, convo.Users, false})
|
cRows = append(cRows, ConvoListRow{convo, convo.Users, false})
|
||||||
|
@ -377,7 +377,7 @@ func compileTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName string
|
||||||
|
|
||||||
basePage := &BasePanelPage{header, PanelStats{}, "dashboard", ReportForumID, true}
|
basePage := &BasePanelPage{header, PanelStats{}, "dashboard", ReportForumID, true}
|
||||||
t.AddStd("panel", "c.Panel", Panel{basePage, "panel_dashboard_right", "", "panel_dashboard", inter})
|
t.AddStd("panel", "c.Panel", Panel{basePage, "panel_dashboard_right", "", "panel_dashboard", inter})
|
||||||
ges := []GridElement{GridElement{"", "", "", 1, "grid_istat", "", "", ""}}
|
ges := []GridElement{{"", "", "", 1, "grid_istat", "", "", ""}}
|
||||||
t.AddStd("panel_dashboard", "c.DashGrids", DashGrids{ges, ges})
|
t.AddStd("panel_dashboard", "c.DashGrids", DashGrids{ges, ges})
|
||||||
|
|
||||||
goVersion := runtime.Version()
|
goVersion := runtime.Version()
|
||||||
|
@ -545,11 +545,11 @@ func compileJSTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName stri
|
||||||
t.AddStd("topics_topic", "c.TopicsRowMut", topicsRow)
|
t.AddStd("topics_topic", "c.TopicsRowMut", topicsRow)
|
||||||
|
|
||||||
poll := Poll{ID: 1, Type: 0, Options: map[int]string{0: "Nothing", 1: "Something"}, Results: map[int]int{0: 5, 1: 2}, QuickOptions: []PollOption{
|
poll := Poll{ID: 1, Type: 0, Options: map[int]string{0: "Nothing", 1: "Something"}, Results: map[int]int{0: 5, 1: 2}, QuickOptions: []PollOption{
|
||||||
PollOption{0, "Nothing"},
|
{0, "Nothing"},
|
||||||
PollOption{1, "Something"},
|
{1, "Something"},
|
||||||
}, VoteCount: 7}
|
}, VoteCount: 7}
|
||||||
avatar, microAvatar := BuildAvatar(62, "")
|
avatar, microAvatar := BuildAvatar(62, "")
|
||||||
miniAttach := []*MiniAttachment{&MiniAttachment{Path: "/"}}
|
miniAttach := []*MiniAttachment{{Path: "/"}}
|
||||||
tu := TopicUser{1, "blah", "Blah", "Hey there!", 62, false, false, now, now, 1, 1, 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}
|
tu := TopicUser{1, "blah", "Blah", "Hey there!", 62, false, false, now, now, 1, 1, 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?
|
||||||
|
@ -577,7 +577,7 @@ func compileJSTemplates(wg *sync.WaitGroup, c *tmpl.CTemplateSet, themeName stri
|
||||||
|
|
||||||
parti := []*User{user}
|
parti := []*User{user}
|
||||||
convo := &Conversation{1, BuildConvoURL(1), user.ID, time.Now(), 0, time.Now()}
|
convo := &Conversation{1, BuildConvoURL(1), user.ID, time.Now(), 0, time.Now()}
|
||||||
convoItems := []ConvoViewRow{ConvoViewRow{&ConversationPost{1, 1, "hey", "", user.ID}, user, "", 4, true}}
|
convoItems := []ConvoViewRow{{&ConversationPost{1, 1, "hey", "", user.ID}, user, "", 4, true}}
|
||||||
convoPage := ConvoViewPage{header, convo, convoItems, parti, true, 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)
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,11 @@ func ThumbTask(thumbChan chan bool) {
|
||||||
/*if user.RawAvatar == ".gif" {
|
/*if user.RawAvatar == ".gif" {
|
||||||
return nil
|
return nil
|
||||||
}*/
|
}*/
|
||||||
if u.RawAvatar != ".png" && u.RawAvatar != ".jpg" && u.RawAvatar != ".jpe" && u.RawAvatar != ".jpeg" && u.RawAvatar != ".jif" && u.RawAvatar != ".jfi" && u.RawAvatar != ".jfif" && u.RawAvatar != ".gif" && u.RawAvatar != "tiff" && u.RawAvatar != "tif" {
|
canResize := func(ext string) bool {
|
||||||
|
// TODO: Fix tif and tiff extensions?
|
||||||
|
return ext == ".png" && ext == ".jpg" && ext == ".jpe" && ext == ".jpeg" && ext == ".jif" && ext == ".jfi" && ext == ".jfif" && ext == ".gif" && ext == ".tiff" && ext == ".tif"
|
||||||
|
}
|
||||||
|
if !canResize(u.RawAvatar) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -138,8 +138,8 @@ func (tList *DefaultTopicList) Tick() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
canSeeHolders[name] = [2]*TopicListHolder{
|
canSeeHolders[name] = [2]*TopicListHolder{
|
||||||
&TopicListHolder{topicList, forumList, pagi},
|
{topicList, forumList, pagi},
|
||||||
&TopicListHolder{topicList2, forumList2, pagi2},
|
{topicList2, forumList2, pagi2},
|
||||||
}
|
}
|
||||||
if len(canSee) > 1 {
|
if len(canSee) > 1 {
|
||||||
forumCounts[len(canSee)] += 1
|
forumCounts[len(canSee)] += 1
|
||||||
|
|
|
@ -441,7 +441,7 @@ func (h *WsHubImpl) AddConn(user *User, conn *websocket.Conn) (*WSUser, error) {
|
||||||
if !ok {
|
if !ok {
|
||||||
wsUser = new(WSUser)
|
wsUser = new(WSUser)
|
||||||
wsUser.User = userptr
|
wsUser.User = userptr
|
||||||
wsUser.Sockets = []*WSUserSocket{&WSUserSocket{conn, ""}}
|
wsUser.Sockets = []*WSUserSocket{{conn, ""}}
|
||||||
theMap[user.ID] = wsUser
|
theMap[user.ID] = wsUser
|
||||||
mutex.Unlock()
|
mutex.Unlock()
|
||||||
return wsUser, nil
|
return wsUser, nil
|
||||||
|
|
|
@ -68,10 +68,10 @@ func ccol(col string, size int, sdefault string) qgen.DBTableColumn {
|
||||||
func patch0(scanner *bufio.Scanner) (err error) {
|
func patch0(scanner *bufio.Scanner) (err error) {
|
||||||
err = createTable("menus", "", "",
|
err = createTable("menus", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"mid", "int", 0, false, true, ""},
|
{"mid", "int", 0, false, true, ""},
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"mid", "primary", "", false},
|
{"mid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -80,8 +80,8 @@ func patch0(scanner *bufio.Scanner) (err error) {
|
||||||
|
|
||||||
err = createTable("menu_items", "", "",
|
err = createTable("menu_items", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"miid", "int", 0, false, true, ""},
|
{"miid", "int", 0, false, true, ""},
|
||||||
tC{"mid", "int", 0, false, false, ""},
|
{"mid", "int", 0, false, false, ""},
|
||||||
ccol("name", 200, ""),
|
ccol("name", 200, ""),
|
||||||
ccol("htmlID", 200, "''"),
|
ccol("htmlID", 200, "''"),
|
||||||
ccol("cssClass", 200, "''"),
|
ccol("cssClass", 200, "''"),
|
||||||
|
@ -90,7 +90,7 @@ func patch0(scanner *bufio.Scanner) (err error) {
|
||||||
ccol("aria", 200, "''"),
|
ccol("aria", 200, "''"),
|
||||||
ccol("tooltip", 200, "''"),
|
ccol("tooltip", 200, "''"),
|
||||||
ccol("tmplName", 200, "''"),
|
ccol("tmplName", 200, "''"),
|
||||||
tC{"order", "int", 0, false, false, "0"},
|
{"order", "int", 0, false, false, "0"},
|
||||||
|
|
||||||
bcol("guestOnly", false),
|
bcol("guestOnly", false),
|
||||||
bcol("memberOnly", false),
|
bcol("memberOnly", false),
|
||||||
|
@ -98,7 +98,7 @@ func patch0(scanner *bufio.Scanner) (err error) {
|
||||||
bcol("adminOnly", false),
|
bcol("adminOnly", false),
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"miid", "primary", "", false},
|
{"miid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -196,16 +196,16 @@ func patch2(scanner *bufio.Scanner) error {
|
||||||
func patch3(scanner *bufio.Scanner) error {
|
func patch3(scanner *bufio.Scanner) error {
|
||||||
return createTable("registration_logs", "", "",
|
return createTable("registration_logs", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"rlid", "int", 0, false, true, ""},
|
{"rlid", "int", 0, false, true, ""},
|
||||||
ccol("username", 100, ""),
|
ccol("username", 100, ""),
|
||||||
ccol("email", 100, ""),
|
ccol("email", 100, ""),
|
||||||
ccol("failureReason", 100, ""),
|
ccol("failureReason", 100, ""),
|
||||||
bcol("success", false), // Did this attempt succeed?
|
bcol("success", false), // Did this attempt succeed?
|
||||||
ccol("ipaddress", 200, ""),
|
ccol("ipaddress", 200, ""),
|
||||||
tC{"doneAt", "createdAt", 0, false, false, ""},
|
{"doneAt", "createdAt", 0, false, false, ""},
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"rlid", "primary", "", false},
|
{"rlid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -258,24 +258,19 @@ func patch4(scanner *bufio.Scanner) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = createTable("pages", "utf8mb4", "utf8mb4_general_ci",
|
return createTable("pages", "utf8mb4", "utf8mb4_general_ci",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"pid", "int", 0, false, true, ""},
|
{"pid", "int", 0, false, true, ""},
|
||||||
ccol("name", 200, ""),
|
ccol("name", 200, ""),
|
||||||
ccol("title", 200, ""),
|
ccol("title", 200, ""),
|
||||||
tC{"body", "text", 0, false, false, ""},
|
{"body", "text", 0, false, false, ""},
|
||||||
tC{"allowedGroups", "text", 0, false, false, ""},
|
{"allowedGroups", "text", 0, false, false, ""},
|
||||||
tC{"menuID", "int", 0, false, false, "-1"},
|
{"menuID", "int", 0, false, false, "-1"},
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"pid", "primary", "", false},
|
{"pid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func patch5(scanner *bufio.Scanner) error {
|
func patch5(scanner *bufio.Scanner) error {
|
||||||
|
@ -298,7 +293,7 @@ func patch5(scanner *bufio.Scanner) error {
|
||||||
|
|
||||||
return createTable("users_2fa_keys", "utf8mb4", "utf8mb4_general_ci",
|
return createTable("users_2fa_keys", "utf8mb4", "utf8mb4_general_ci",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"uid", "int", 0, false, false, ""},
|
{"uid", "int", 0, false, false, ""},
|
||||||
ccol("secret", 100, ""),
|
ccol("secret", 100, ""),
|
||||||
ccol("scratch1", 50, ""),
|
ccol("scratch1", 50, ""),
|
||||||
ccol("scratch2", 50, ""),
|
ccol("scratch2", 50, ""),
|
||||||
|
@ -308,10 +303,10 @@ func patch5(scanner *bufio.Scanner) error {
|
||||||
ccol("scratch6", 50, ""),
|
ccol("scratch6", 50, ""),
|
||||||
ccol("scratch7", 50, ""),
|
ccol("scratch7", 50, ""),
|
||||||
ccol("scratch8", 50, ""),
|
ccol("scratch8", 50, ""),
|
||||||
tC{"createdAt", "createdAt", 0, false, false, ""},
|
{"createdAt", "createdAt", 0, false, false, ""},
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"uid", "primary", "", false},
|
{"uid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -323,10 +318,10 @@ func patch6(scanner *bufio.Scanner) error {
|
||||||
func patch7(scanner *bufio.Scanner) error {
|
func patch7(scanner *bufio.Scanner) error {
|
||||||
return createTable("users_avatar_queue", "", "",
|
return createTable("users_avatar_queue", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"uid", "int", 0, false, false, ""}, // TODO: Make this a foreign key
|
{"uid", "int", 0, false, false, ""}, // TODO: Make this a foreign key
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"uid", "primary", "", false},
|
{"uid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -382,7 +377,7 @@ func patch8(scanner *bufio.Scanner) error {
|
||||||
|
|
||||||
return createTable("updates", "", "",
|
return createTable("updates", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"dbVersion", "int", 0, false, false, "0"},
|
{"dbVersion", "int", 0, false, false, "0"},
|
||||||
}, nil,
|
}, nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -396,14 +391,14 @@ func patch9(scanner *bufio.Scanner) error {
|
||||||
|
|
||||||
return createTable("login_logs", "", "",
|
return createTable("login_logs", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"lid", "int", 0, false, true, ""},
|
{"lid", "int", 0, false, true, ""},
|
||||||
tC{"uid", "int", 0, false, false, ""},
|
{"uid", "int", 0, false, false, ""},
|
||||||
bcol("success", false), // Did this attempt succeed?
|
bcol("success", false), // Did this attempt succeed?
|
||||||
ccol("ipaddress", 200, ""),
|
ccol("ipaddress", 200, ""),
|
||||||
tC{"doneAt", "createdAt", 0, false, false, ""},
|
{"doneAt", "createdAt", 0, false, false, ""},
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"lid", "primary", "", false},
|
{"lid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -536,10 +531,10 @@ func patch16(scanner *bufio.Scanner) error {
|
||||||
return createTable("password_resets", "", "",
|
return createTable("password_resets", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
ccol("email", 200, ""),
|
ccol("email", 200, ""),
|
||||||
tC{"uid", "int", 0, false, false, ""}, // TODO: Make this a foreign key
|
{"uid", "int", 0, false, false, ""}, // TODO: Make this a foreign key
|
||||||
ccol("validated", 200, ""), // Token given once the one-use token is consumed, used to prevent multiple people consuming the same one-use token
|
ccol("validated", 200, ""), // Token given once the one-use token is consumed, used to prevent multiple people consuming the same one-use token
|
||||||
ccol("token", 200, ""),
|
ccol("token", 200, ""),
|
||||||
tC{"createdAt", "createdAt", 0, false, false, ""},
|
{"createdAt", "createdAt", 0, false, false, ""},
|
||||||
}, nil,
|
}, nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -585,8 +580,8 @@ func patch18(scanner *bufio.Scanner) error {
|
||||||
func patch19(scanner *bufio.Scanner) error {
|
func patch19(scanner *bufio.Scanner) error {
|
||||||
return createTable("memchunks", "", "",
|
return createTable("memchunks", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"count", "int", 0, false, false, "0"},
|
{"count", "int", 0, false, false, "0"},
|
||||||
tC{"createdAt", "datetime", 0, false, false, ""},
|
{"createdAt", "datetime", 0, false, false, ""},
|
||||||
}, nil,
|
}, nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -642,14 +637,14 @@ func patch22(scanner *bufio.Scanner) error {
|
||||||
func patch23(scanner *bufio.Scanner) error {
|
func patch23(scanner *bufio.Scanner) error {
|
||||||
err := createTable("conversations", "", "",
|
err := createTable("conversations", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"cid", "int", 0, false, true, ""},
|
{"cid", "int", 0, false, true, ""},
|
||||||
tC{"createdBy", "int", 0, false, false, ""}, // TODO: Make this a foreign key
|
{"createdBy", "int", 0, false, false, ""}, // TODO: Make this a foreign key
|
||||||
tC{"createdAt", "createdAt", 0, false, false, ""},
|
{"createdAt", "createdAt", 0, false, false, ""},
|
||||||
tC{"lastReplyAt", "datetime", 0, false, false, ""},
|
{"lastReplyAt", "datetime", 0, false, false, ""},
|
||||||
tC{"lastReplyBy", "int", 0, false, false, ""},
|
{"lastReplyBy", "int", 0, false, false, ""},
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"cid", "primary", "", false},
|
{"cid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -658,14 +653,14 @@ func patch23(scanner *bufio.Scanner) error {
|
||||||
|
|
||||||
err = createTable("conversations_posts", "", "",
|
err = createTable("conversations_posts", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"pid", "int", 0, false, true, ""},
|
{"pid", "int", 0, false, true, ""},
|
||||||
tC{"cid", "int", 0, false, false, ""},
|
{"cid", "int", 0, false, false, ""},
|
||||||
tC{"createdBy", "int", 0, false, false, ""},
|
{"createdBy", "int", 0, false, false, ""},
|
||||||
ccol("body", 50, ""),
|
ccol("body", 50, ""),
|
||||||
ccol("post", 50, "''"),
|
ccol("post", 50, "''"),
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"pid", "primary", "", false},
|
{"pid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -674,8 +669,8 @@ func patch23(scanner *bufio.Scanner) error {
|
||||||
|
|
||||||
return createTable("conversations_participants", "", "",
|
return createTable("conversations_participants", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"uid", "int", 0, false, false, ""},
|
{"uid", "int", 0, false, false, ""},
|
||||||
tC{"cid", "int", 0, false, false, ""},
|
{"cid", "int", 0, false, false, ""},
|
||||||
}, nil,
|
}, nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -683,17 +678,17 @@ func patch23(scanner *bufio.Scanner) error {
|
||||||
func patch24(scanner *bufio.Scanner) error {
|
func patch24(scanner *bufio.Scanner) error {
|
||||||
return createTable("users_groups_promotions", "", "",
|
return createTable("users_groups_promotions", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"pid", "int", 0, false, true, ""},
|
{"pid", "int", 0, false, true, ""},
|
||||||
tC{"from_gid", "int", 0, false, false, ""},
|
{"from_gid", "int", 0, false, false, ""},
|
||||||
tC{"to_gid", "int", 0, false, false, ""},
|
{"to_gid", "int", 0, false, false, ""},
|
||||||
bcol("two_way", false), // If a user no longer meets the requirements for this promotion then they will be demoted if this flag is set
|
bcol("two_way", false), // If a user no longer meets the requirements for this promotion then they will be demoted if this flag is set
|
||||||
|
|
||||||
// Requirements
|
// Requirements
|
||||||
tC{"level", "int", 0, false, false, ""},
|
{"level", "int", 0, false, false, ""},
|
||||||
tC{"minTime", "int", 0, false, false, ""}, // How long someone needs to have been in their current group before being promoted
|
{"minTime", "int", 0, false, false, ""}, // How long someone needs to have been in their current group before being promoted
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"pid", "primary", "", false},
|
{"pid", "primary", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -705,8 +700,8 @@ func patch25(scanner *bufio.Scanner) error {
|
||||||
func patch26(scanner *bufio.Scanner) error {
|
func patch26(scanner *bufio.Scanner) error {
|
||||||
return createTable("users_blocks", "", "",
|
return createTable("users_blocks", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"blocker", "int", 0, false, false, ""},
|
{"blocker", "int", 0, false, false, ""},
|
||||||
tC{"blockedUser", "int", 0, false, false, ""},
|
{"blockedUser", "int", 0, false, false, ""},
|
||||||
}, nil,
|
}, nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -854,10 +849,10 @@ func createTable(tbl, charset, collation string, cols []tC, keys []tK) error {
|
||||||
func patch32(scanner *bufio.Scanner) error {
|
func patch32(scanner *bufio.Scanner) error {
|
||||||
return createTable("perfchunks", "", "",
|
return createTable("perfchunks", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"low", "int", 0, false, false, "0"},
|
{"low", "int", 0, false, false, "0"},
|
||||||
tC{"high", "int", 0, false, false, "0"},
|
{"high", "int", 0, false, false, "0"},
|
||||||
tC{"avg", "int", 0, false, false, "0"},
|
{"avg", "int", 0, false, false, "0"},
|
||||||
tC{"createdAt", "datetime", 0, false, false, ""},
|
{"createdAt", "datetime", 0, false, false, ""},
|
||||||
}, nil,
|
}, nil,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -869,12 +864,12 @@ func patch33(scanner *bufio.Scanner) error {
|
||||||
func patch34(scanner *bufio.Scanner) error {
|
func patch34(scanner *bufio.Scanner) error {
|
||||||
/*err := createTable("tables", "", "",
|
/*err := createTable("tables", "", "",
|
||||||
[]tC{
|
[]tC{
|
||||||
tC{"id", "int", 0, false, true, ""},
|
{"id", "int", 0, false, true, ""},
|
||||||
ccol("name", 200, ""),
|
ccol("name", 200, ""),
|
||||||
},
|
},
|
||||||
[]tK{
|
[]tK{
|
||||||
tK{"id", "primary", "", false},
|
{"id", "primary", "", false},
|
||||||
tK{"name", "unique", "", false},
|
{"name", "unique", "", false},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
function memStuff(window, document, Chartist) {
|
function memStuff(window,document,Chartist) {
|
||||||
'use strict';
|
'use strict';
|
||||||
Chartist.plugins = Chartist.plugins || {};
|
Chartist.plugins = Chartist.plugins || {};
|
||||||
Chartist.plugins.byteUnits = function(options) {
|
Chartist.plugins.byteUnits = function(options) {
|
||||||
options = Chartist.extend({}, {}, options);
|
options = Chartist.extend({},{},options);
|
||||||
|
|
||||||
return function byteUnits(chart) {
|
return function byteUnits(chart) {
|
||||||
if(!chart instanceof Chartist.Line) return;
|
if(!chart instanceof Chartist.Line) return;
|
||||||
|
@ -13,7 +13,7 @@ function memStuff(window, document, Chartist) {
|
||||||
if(vbits==null) return;
|
if(vbits==null) return;
|
||||||
|
|
||||||
let tbits = [];
|
let tbits = [];
|
||||||
for(let i = 0; i < vbits.length; i++) {
|
for(let i=0; i<vbits.length; i++) {
|
||||||
tbits[i] = vbits[i].innerHTML;
|
tbits[i] = vbits[i].innerHTML;
|
||||||
}
|
}
|
||||||
log("tbits",tbits);
|
log("tbits",tbits);
|
||||||
|
@ -23,12 +23,11 @@ function memStuff(window, document, Chartist) {
|
||||||
|
|
||||||
const matcher = vbits[0].innerHTML;
|
const matcher = vbits[0].innerHTML;
|
||||||
let allMatch = true;
|
let allMatch = true;
|
||||||
for(let i = 0; i < tbits.length; i++) {
|
for(let i=0; i<tbits.length; i++) {
|
||||||
let val = convertByteUnit(tbits[i], places);
|
let val = convertByteUnit(tbits[i], places);
|
||||||
if(val!=matcher) allMatch = false;
|
if(val!=matcher) allMatch = false;
|
||||||
vbits[i].innerHTML = val;
|
vbits[i].innerHTML = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(allMatch) calc(places + 1);
|
if(allMatch) calc(places + 1);
|
||||||
}
|
}
|
||||||
calc(0);
|
calc(0);
|
||||||
|
@ -37,11 +36,11 @@ function memStuff(window, document, Chartist) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function perfStuff(window, document, Chartist) {
|
function perfStuff(window,document,Chartist) {
|
||||||
'use strict';
|
'use strict';
|
||||||
Chartist.plugins = Chartist.plugins || {};
|
Chartist.plugins = Chartist.plugins || {};
|
||||||
Chartist.plugins.perfUnits = function(options) {
|
Chartist.plugins.perfUnits = function(options) {
|
||||||
options = Chartist.extend({}, {}, options);
|
options = Chartist.extend({},{},options);
|
||||||
|
|
||||||
return function perfUnits(chart) {
|
return function perfUnits(chart) {
|
||||||
if(!chart instanceof Chartist.Line) return;
|
if(!chart instanceof Chartist.Line) return;
|
||||||
|
@ -52,7 +51,7 @@ function perfStuff(window, document, Chartist) {
|
||||||
if(vbits==null) return;
|
if(vbits==null) return;
|
||||||
|
|
||||||
let tbits = [];
|
let tbits = [];
|
||||||
for(let i = 0; i < vbits.length; i++) {
|
for(let i=0; i<vbits.length; i++) {
|
||||||
tbits[i] = vbits[i].innerHTML;
|
tbits[i] = vbits[i].innerHTML;
|
||||||
}
|
}
|
||||||
log("tbits:",tbits);
|
log("tbits:",tbits);
|
||||||
|
@ -62,12 +61,11 @@ function perfStuff(window, document, Chartist) {
|
||||||
|
|
||||||
const matcher = vbits[0].innerHTML;
|
const matcher = vbits[0].innerHTML;
|
||||||
let allMatch = true;
|
let allMatch = true;
|
||||||
for(let i = 0; i < tbits.length; i++) {
|
for(let i=0; i<tbits.length; i++) {
|
||||||
let val = convertPerfUnit(tbits[i], places);
|
let val = convertPerfUnit(tbits[i], places);
|
||||||
if(val!=matcher) allMatch = false;
|
if(val!=matcher) allMatch = false;
|
||||||
vbits[i].innerHTML = val;
|
vbits[i].innerHTML = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(allMatch) calc(places + 1);
|
if(allMatch) calc(places + 1);
|
||||||
}
|
}
|
||||||
calc(0);
|
calc(0);
|
||||||
|
|
|
@ -68,7 +68,7 @@ var sitemapRoutes = map[string]func(http.ResponseWriter, *http.Request) c.RouteE
|
||||||
|
|
||||||
// TODO: Use a router capable of parsing this rather than hard-coding the logic in
|
// TODO: Use a router capable of parsing this rather than hard-coding the logic in
|
||||||
var fuzzySitemapRoutes = map[string]FuzzyRoute{
|
var fuzzySitemapRoutes = map[string]FuzzyRoute{
|
||||||
"topics_page_": FuzzyRoute{"topics_page_(%d).xml", SitemapTopic},
|
"topics_page_": {"topics_page_(%d).xml", SitemapTopic},
|
||||||
}
|
}
|
||||||
|
|
||||||
func sitemapSwitch(w http.ResponseWriter, r *http.Request) c.RouteError {
|
func sitemapSwitch(w http.ResponseWriter, r *http.Request) c.RouteError {
|
||||||
|
|
|
@ -159,9 +159,12 @@ func ForumsOrderSubmit(w http.ResponseWriter, r *http.Request, u *c.User) c.Rout
|
||||||
}
|
}
|
||||||
updateMap[fid] = index
|
updateMap[fid] = index
|
||||||
}
|
}
|
||||||
c.Forums.UpdateOrder(updateMap)
|
err := c.Forums.UpdateOrder(updateMap)
|
||||||
|
if err != nil {
|
||||||
|
return c.InternalErrorJSQ(err, w, r, js)
|
||||||
|
}
|
||||||
|
|
||||||
err := c.AdminLogs.Create("reorder", 0, "forum", u.GetIP(), u.ID)
|
err = c.AdminLogs.Create("reorder", 0, "forum", u.GetIP(), u.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.InternalErrorJSQ(err, w, r, js)
|
return c.InternalErrorJSQ(err, w, r, js)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue