6bae378db0
Refactored the code to use the new builder syntax. Fixed the DbInit logic. Made sure the prepared statements are cleaned up. Added the AdminOnly middleware and added it to the routes. Added the Query method to the selectBuilder.
125 lines
2.2 KiB
Go
125 lines
2.2 KiB
Go
/* Copyright Azareal 2017 - 2018 */
|
|
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"database/sql"
|
|
"encoding/json"
|
|
"log"
|
|
"sync"
|
|
|
|
"../query_gen/lib"
|
|
)
|
|
|
|
var Docks WidgetDocks
|
|
var widgetUpdateMutex sync.RWMutex
|
|
|
|
type WidgetDocks struct {
|
|
LeftSidebar []Widget
|
|
RightSidebar []Widget
|
|
//PanelLeft []Menus
|
|
}
|
|
|
|
type Widget struct {
|
|
Enabled bool
|
|
Location string // Coming Soon: overview, topics, topic / topic_view, forums, forum, global
|
|
Position int
|
|
Body string
|
|
}
|
|
|
|
type WidgetMenu struct {
|
|
Name string
|
|
MenuList []WidgetMenuItem
|
|
}
|
|
|
|
type WidgetMenuItem struct {
|
|
Text string
|
|
Location string
|
|
Compact bool
|
|
}
|
|
|
|
type NameTextPair struct {
|
|
Name string
|
|
Text string
|
|
}
|
|
|
|
type WidgetStmts struct {
|
|
getWidgets *sql.Stmt
|
|
}
|
|
|
|
var widgetStmts WidgetStmts
|
|
|
|
func init() {
|
|
DbInits.Add(func() error {
|
|
acc := qgen.Builder.Accumulator()
|
|
widgetStmts = WidgetStmts{
|
|
getWidgets: acc.Select("widgets").Columns("position, side, type, active, location, data").Orderby("position ASC").Prepare(),
|
|
}
|
|
return acc.FirstError()
|
|
})
|
|
}
|
|
|
|
// TODO: Make a store for this?
|
|
func InitWidgets() error {
|
|
rows, err := widgetStmts.getWidgets.Query()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var sbytes []byte
|
|
var side, wtype, data string
|
|
|
|
var leftWidgets []Widget
|
|
var rightWidgets []Widget
|
|
|
|
for rows.Next() {
|
|
var widget Widget
|
|
err = rows.Scan(&widget.Position, &side, &wtype, &widget.Enabled, &widget.Location, &data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
sbytes = []byte(data)
|
|
switch wtype {
|
|
case "simple":
|
|
var tmp NameTextPair
|
|
err = json.Unmarshal(sbytes, &tmp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var b bytes.Buffer
|
|
err = Templates.ExecuteTemplate(&b, "widget_simple.html", tmp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
widget.Body = string(b.Bytes())
|
|
default:
|
|
widget.Body = data
|
|
}
|
|
|
|
if side == "left" {
|
|
leftWidgets = append(leftWidgets, widget)
|
|
} else if side == "right" {
|
|
rightWidgets = append(rightWidgets, widget)
|
|
}
|
|
}
|
|
err = rows.Err()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
widgetUpdateMutex.Lock()
|
|
Docks.LeftSidebar = leftWidgets
|
|
Docks.RightSidebar = rightWidgets
|
|
widgetUpdateMutex.Unlock()
|
|
|
|
if Dev.SuperDebug {
|
|
log.Print("Docks.LeftSidebar", Docks.LeftSidebar)
|
|
log.Print("Docks.RightSidebar", Docks.RightSidebar)
|
|
}
|
|
|
|
return nil
|
|
}
|