package feedback import ( "embed" "io/fs" "git.golem15.com/golem15/sm-feedback-plugin/controllers" "git.golem15.com/golem15/sm-feedback-plugin/models" "git.golem15.com/golem15/summercms/modules/pact" ) //go:embed controllers/submissions/config_list.yaml models/submission/columns.yaml models/settings/fields.yaml var adminFS embed.FS var ( _ pact.AdminAssets = (*Plugin)(nil) _ pact.HasAdminControllers = (*Plugin)(nil) _ pact.HasPermissions = (*Plugin)(nil) _ pact.HasNavigation = (*Plugin)(nil) _ pact.HasSettings = (*Plugin)(nil) ) // AdminFS is the admin YAML: the settings form and the submissions list. func (p *Plugin) AdminFS() fs.FS { return adminFS } // AdminControllers is the submissions list. func (p *Plugin) AdminControllers() []pact.AdminController { return controllers.AdminControllers() } // Permissions is registerPermissions: golem15.feedback.manage_settings for // the developer role. func (*Plugin) Permissions() []pact.Permission { return []pact.Permission{{ Code: controllers.PermissionManageSettings, Tab: "golem15.feedback::lang.plugin.tab", Label: "golem15.feedback::lang.settings.manage_settings", Roles: []string{"developer"}, }} } // Navigation is the Feedback menu with its submissions entry. func (*Plugin) Navigation() []pact.NavigationItem { return []pact.NavigationItem{{ Code: "feedback", Label: "golem15.feedback::lang.plugin.menu_label", Icon: "message-square", Permissions: []string{"golem15.feedback.*"}, Order: 600, Controller: "golem15.feedback.submissions", SideMenu: []pact.NavigationItem{{ Code: "submissions", Label: "golem15.feedback::lang.submissions.menu_label", Icon: "inbox", Permissions: []string{controllers.PermissionManageSettings}, Controller: "golem15.feedback.submissions", }}, }} } // SettingsCode is the settings screen's code. WinterCMS keys the screen // by plugin and code ("settings"); cabana keys it by code alone across all // plugins, so the plugin's own name keeps it apart from other plugins'. const SettingsCode = "feedback" // Settings is registerSettings: the widget settings singleton // (golem15_feedback_settings) on cabana's settings screen. func (*Plugin) Settings() []pact.SettingsItem { return []pact.SettingsItem{{ Code: SettingsCode, Label: "golem15.feedback::lang.settings.menu_label", Description: "golem15.feedback::lang.settings.settings_description", Category: "golem15.feedback::lang.plugin.tab", Icon: "message-square", Model: `Golem15\Feedback\Models\Settings`, Order: 500, Keywords: []string{"feedback", "widget", "g15office"}, Permissions: []string{controllers.PermissionManageSettings}, Form: "models/settings/fields.yaml", NewModel: func() any { return &models.Settings{} }, }} }