|
1 | 1 | package plugin |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "goblog/blog" |
5 | 4 | "log" |
6 | 5 | "sync" |
7 | 6 | "time" |
@@ -64,15 +63,16 @@ func (r *Registry) Init() error { |
64 | 63 | if r.db == nil { |
65 | 64 | return nil |
66 | 65 | } |
| 66 | + // Create the plugin_settings table if it doesn't exist |
| 67 | + r.db.AutoMigrate(&PluginSetting{}) |
67 | 68 | for _, p := range r.plugins { |
68 | 69 | for _, s := range p.Settings() { |
69 | | - fullKey := p.Name() + "." + s.Key |
70 | | - setting := blog.Setting{ |
71 | | - Key: fullKey, |
72 | | - Type: s.Type, |
73 | | - Value: s.DefaultValue, |
| 70 | + setting := PluginSetting{ |
| 71 | + PluginName: p.Name(), |
| 72 | + Key: s.Key, |
| 73 | + Value: s.DefaultValue, |
74 | 74 | } |
75 | | - r.db.Where("key = ?", fullKey).FirstOrCreate(&setting) |
| 75 | + r.db.Where("plugin_name = ? AND key = ?", p.Name(), s.Key).FirstOrCreate(&setting) |
76 | 76 | } |
77 | 77 | if err := p.OnInit(r.db); err != nil { |
78 | 78 | log.Printf("Plugin %s init error: %v", p.Name(), err) |
@@ -112,15 +112,13 @@ func (r *Registry) Stop() { |
112 | 112 | close(r.stopCh) |
113 | 113 | } |
114 | 114 |
|
115 | | -// getPluginSettings returns a plugin's settings as a map with the |
116 | | -// namespace prefix stripped (e.g. "analytics.tracking_id" -> "tracking_id"). |
| 115 | +// getPluginSettings returns a plugin's settings as a simple key→value map. |
117 | 116 | func (r *Registry) getPluginSettings(pluginName string) map[string]string { |
118 | | - var settings []blog.Setting |
119 | | - prefix := pluginName + "." |
120 | | - r.db.Where("key LIKE ?", prefix+"%").Find(&settings) |
| 117 | + var settings []PluginSetting |
| 118 | + r.db.Where("plugin_name = ?", pluginName).Find(&settings) |
121 | 119 | result := make(map[string]string) |
122 | 120 | for _, s := range settings { |
123 | | - result[s.Key[len(prefix):]] = s.Value |
| 121 | + result[s.Key] = s.Value |
124 | 122 | } |
125 | 123 | return result |
126 | 124 | } |
@@ -178,6 +176,13 @@ func (r *Registry) GetAllSettings() []PluginSettingsGroup { |
178 | 176 | return groups |
179 | 177 | } |
180 | 178 |
|
| 179 | +// UpdateSetting saves a single plugin setting. |
| 180 | +func (r *Registry) UpdateSetting(pluginName, key, value string) { |
| 181 | + r.db.Where("plugin_name = ? AND key = ?", pluginName, key). |
| 182 | + Assign(PluginSetting{Value: value}). |
| 183 | + FirstOrCreate(&PluginSetting{PluginName: pluginName, Key: key, Value: value}) |
| 184 | +} |
| 185 | + |
181 | 186 | // Middleware returns a Gin middleware that stores the registry on the context. |
182 | 187 | func Middleware(registry *Registry) gin.HandlerFunc { |
183 | 188 | return func(c *gin.Context) { |
|
0 commit comments