65 Star 395 Fork 128

admpub/nging

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
settings_helper.go 3.75 KB
一键复制 编辑 原始数据 按行查看 历史
admpub 提交于 2019-10-04 20:27 . update
/*
Nging is a toolbox for webmasters
Copyright (C) 2018-present Wenhui Shen <swh@admpub.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package manager
import (
"github.com/admpub/nging/application/dbschema"
"github.com/admpub/nging/application/model"
"github.com/admpub/nging/application/registry/settings"
"github.com/webx-top/db"
"github.com/webx-top/echo"
)
func configPost(c echo.Context, groups ...string) error {
m := model.NewConfig(c)
formValues := c.Forms()
mapx := echo.NewMapx(formValues)
var configList map[string]map[string]*dbschema.Config
if len(groups) > 0 {
configList = map[string]map[string]*dbschema.Config{}
defaults := settings.ConfigDefaults()
for _, group := range groups {
conf, ok := defaults[group]
if !ok {
continue
}
configList[group] = conf
}
} else {
configList = settings.ConfigDefaults()
}
for group, configs := range configList {
_, err := m.ListByGroup(group)
if err != nil {
if err == db.ErrNoMoreRows {
for _, cfg := range configs {
_, err := cfg.Add()
if err != nil {
return err
}
}
continue
}
return err
}
encoder := settings.GetEncoder(group)
gm := mapx.Get(group)
if gm == nil {
continue
}
added := map[string]int{}
for k, v := range m.Objects() {
added[v.Key] = k
setting := gm.Get(v.Key)
if setting == nil {
continue
}
disabled := setting.Value(`disabled`)
_v := setting.Get(`value`)
if _v == nil {
continue
}
value, err := settings.EncodeConfigValue(_v, v, encoder)
if err != nil {
return err
}
var n int64
condition := db.And(
db.Cond{`key`: v.Key},
db.Cond{`group`: group},
)
n, err = m.Count(nil, condition)
if err != nil {
return err
}
if n < 1 {
err = settings.InsertBy(c, configs, v.Key, value, disabled)
if err != nil {
return err
}
}
set := echo.H{}
if value != m.Value {
set[`value`] = value
}
if _v.IsMap() {
if m.Type != `json` {
set[`type`] = `json`
}
} else if _v.IsSlice() {
if m.Type != `list` {
set[`type`] = `list`
}
} else {
cfg, ok := configs[v.Key]
if ok && cfg != nil && m.Type != cfg.Type {
set[`type`] = cfg.Type
}
//set[`type`] = `text`
}
if len(disabled) > 0 && m.Disabled != disabled {
set[`disabled`] = disabled
}
if len(set) > 0 {
err = m.SetFields(nil, set, condition)
if err != nil {
return err
}
}
}
err = settings.InsertMissing(c, gm, added, configs, encoder)
if err != nil {
return err
}
}
return nil
}
func configGet(c echo.Context, groups ...string) error {
m := model.NewConfig(c)
if len(groups) > 0 {
for _, group := range groups {
cfg, err := m.ListMapByGroup(group)
if err != nil {
return err
}
c.Set(group, cfg) //Stored.base.siteName
}
return nil
}
_, err := m.ListByOffset(nil, func(r db.Result) db.Result {
return r.Group(`group`)
}, 0, -1)
if err != nil {
return err
}
for _, setting := range m.Objects() {
group := setting.Group
cfg, err := m.ListMapByGroup(group)
if err != nil {
return err
}
c.Set(group, cfg) //Stored.base.siteName
}
return nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/admpub/nging.git
git@gitee.com:admpub/nging.git
admpub
nging
nging
v2.0.6

搜索帮助