45 lines
1.1 KiB
Go
45 lines
1.1 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)
|
|
user := header.CurrentUser
|
|
var forums []filterForum
|
|
var canSee []int
|
|
if user.IsSuperAdmin {
|
|
canSee, err = Forums.GetAllVisibleIDs()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
} else {
|
|
group, err := Groups.Get(user.Group)
|
|
if err != nil {
|
|
// TODO: Revisit this
|
|
return "", errors.New("Something weird happened")
|
|
}
|
|
canSee = group.CanSee
|
|
}
|
|
|
|
for _, fid := range canSee {
|
|
forum := Forums.DirtyGet(fid)
|
|
if forum.ParentID == 0 && forum.Name != "" && forum.Active {
|
|
forums = append(forums, filterForum{forum, (header.Zone == "view_forum" || header.Zone == "topics") && header.ZoneID == forum.ID})
|
|
}
|
|
}
|
|
|
|
saf := &searchAndFilter{header, forums}
|
|
err = saf.Header.Theme.RunTmpl("widget_search_and_filter", saf, saf.Header.Writer)
|
|
return "", err
|
|
}
|