gosora/common/widget_search_and_filter.go

45 lines
1.2 KiB
Go

package common
import "errors"
// TODO: Move this into it's own package to make neater and tidier
type filterForum struct {
*Forum
Selected bool
}
type searchAndFilter struct {
*Header
Forums []filterForum
}
func widgetSearchAndFilter(widget *Widget, hvars interface{}) (out string, err error) {
header := hvars.(*Header)
u := header.CurrentUser
var forums []filterForum
var canSee []int
if u.IsSuperAdmin {
canSee, err = Forums.GetAllVisibleIDs()
if err != nil {
return "", err
}
} else {
group, err := Groups.Get(u.Group)
if err != nil {
// TODO: Revisit this
return "", errors.New("Something weird happened")
}
canSee = group.CanSee
}
for _, fid := range canSee {
f := Forums.DirtyGet(fid)
if f.ParentID == 0 && f.Name != "" && f.Active {
forums = append(forums, filterForum{f, (header.Zone == "view_forum" || header.Zone == "topics") && header.ZoneID == f.ID})
}
}
saf := &searchAndFilter{header, forums}
err = saf.Header.Theme.RunTmpl("widget_search_and_filter", saf, saf.Header.Writer)
return "", err
}