本文整理汇总了Golang中github.com/qor/qor/resource.Resourcer类的典型用法代码示例。如果您正苦于以下问题:Golang Resourcer类的具体用法?Golang Resourcer怎么用?Golang Resourcer使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Resourcer类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: ConfigureQorResource
func (transition *Transition) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
if res.GetMeta("State") == nil {
res.Meta(&admin.Meta{Name: "State", Permission: roles.Allow(roles.Update, "nobody")})
}
}
}
开发者ID:8legd,项目名称:qor-qor,代码行数:7,代码来源:transition.go
示例2: ConfigureQorResourceBeforeInitialize
// ConfigureQorResourceBeforeInitialize configure qor resource when initialize qor admin
func (publish *Publish) ConfigureQorResourceBeforeInitialize(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
res.GetAdmin().RegisterViewPath("github.com/qor/publish/views")
res.UseTheme("publish")
if event := res.GetAdmin().GetResource("PublishEvent"); event == nil {
eventResource := res.GetAdmin().AddResource(&PublishEvent{}, &admin.Config{Invisible: true})
eventResource.IndexAttrs("Name", "Description", "CreatedAt")
}
}
}
开发者ID:qor,项目名称:publish,代码行数:12,代码来源:controller.go
示例3: ConfigureQorResource
func (MediaLibrary) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
res.UseTheme("grid")
res.UseTheme("media_library")
res.IndexAttrs("File")
}
}
开发者ID:qor,项目名称:media_library,代码行数:7,代码来源:media_library.go
示例4: ConfigureQorResourceBeforeInitialize
// ConfigureQorResourceBeforeInitialize a method used to config Worker for qor admin
func (worker *Worker) ConfigureQorResourceBeforeInitialize(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
res.GetAdmin().RegisterViewPath("github.com/qor/worker/views")
res.UseTheme("worker")
worker.Admin = res.GetAdmin()
worker.JobResource = worker.Admin.NewResource(worker.Config.Job)
worker.JobResource.UseTheme("worker")
worker.JobResource.Meta(&admin.Meta{Name: "Name", Valuer: func(record interface{}, context *qor.Context) interface{} {
return record.(QorJobInterface).GetJobName()
}})
worker.JobResource.IndexAttrs("ID", "Name", "Status", "CreatedAt")
worker.JobResource.Name = res.Name
for _, status := range []string{JobStatusScheduled, JobStatusNew, JobStatusRunning, JobStatusDone, JobStatusException} {
var status = status
worker.JobResource.Scope(&admin.Scope{Name: status, Handle: func(db *gorm.DB, ctx *qor.Context) *gorm.DB {
return db.Where("status = ?", status)
}})
}
// default scope
worker.JobResource.Scope(&admin.Scope{
Handle: func(db *gorm.DB, ctx *qor.Context) *gorm.DB {
if jobName := ctx.Request.URL.Query().Get("job"); jobName != "" {
return db.Where("kind = ?", jobName)
}
if groupName := ctx.Request.URL.Query().Get("group"); groupName != "" {
var jobNames []string
for _, job := range worker.Jobs {
if groupName == job.Group {
jobNames = append(jobNames, job.Name)
}
}
if len(jobNames) > 0 {
return db.Where("kind IN (?)", jobNames)
}
return db.Where("kind IS NULL")
}
return db
},
Default: true,
})
// Auto Migration
worker.Admin.Config.DB.AutoMigrate(worker.Config.Job)
// Configure jobs
for _, job := range worker.Jobs {
if job.Resource == nil {
job.Resource = worker.Admin.NewResource(worker.JobResource.Value)
}
}
}
}
开发者ID:qor,项目名称:worker,代码行数:58,代码来源:worker.go
示例5: ConfigureQorResource
// ConfigureQorResource configure qor locale for Qor Admin
func (*AssetManager) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
router := res.GetAdmin().GetRouter()
router.Post(fmt.Sprintf("/%v/upload", res.ToParam()), func(context *admin.Context) {
result := AssetManager{}
result.File.Scan(context.Request.MultipartForm.File["file"])
context.GetDB().Save(&result)
bytes, _ := json.Marshal(map[string]string{"filelink": result.File.URL(), "filename": result.File.GetFileName()})
context.Writer.Write(bytes)
})
assetURL := regexp.MustCompile(`^/system/assets/(\d+)/`)
router.Post(fmt.Sprintf("/%v/crop", res.ToParam()), func(context *admin.Context) {
defer context.Request.Body.Close()
var (
err error
url struct{ URL string }
buf bytes.Buffer
)
io.Copy(&buf, context.Request.Body)
if err = json.Unmarshal(buf.Bytes(), &url); err == nil {
if matches := assetURL.FindStringSubmatch(url.URL); len(matches) > 1 {
result := &AssetManager{}
if err = context.GetDB().Find(result, matches[1]).Error; err == nil {
if err = result.File.Scan(buf.Bytes()); err == nil {
if err = context.GetDB().Save(result).Error; err == nil {
bytes, _ := json.Marshal(map[string]string{"url": result.File.URL(), "filename": result.File.GetFileName()})
context.Writer.Write(bytes)
return
}
}
}
}
}
bytes, _ := json.Marshal(map[string]string{"err": err.Error()})
context.Writer.Write(bytes)
})
}
}
开发者ID:qor,项目名称:media_library,代码行数:42,代码来源:asset_manager.go
示例6: ConfigureQorResource
// ConfigureQorResource configure qor resource for qor admin
func (i18n *I18n) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
i18n.Resource = res
res.UseTheme("i18n")
res.GetAdmin().I18n = i18n
res.SearchAttrs("value") // generate search handler for i18n
var getPrimaryLocale = func(context *admin.Context) string {
if locale := context.Request.Form.Get("primary_locale"); locale != "" {
return locale
}
if availableLocales := getAvailableLocales(context.Request, context.CurrentUser); len(availableLocales) > 0 {
return availableLocales[0]
}
return ""
}
var getEditingLocale = func(context *admin.Context) string {
if locale := context.Request.Form.Get("to_locale"); locale != "" {
return locale
}
return getLocaleFromContext(context.Context)
}
type matchedTranslation struct {
Key string
PrimaryLocale string
PrimaryValue string
EditingLocale string
EditingValue string
}
res.GetAdmin().RegisterFuncMap("i18n_available_translations", func(context *admin.Context) (results []matchedTranslation) {
var (
translationsMap = i18n.LoadTranslations()
matchedTranslations = map[string]matchedTranslation{}
keys = []string{}
keyword = strings.ToLower(context.Request.URL.Query().Get("keyword"))
primaryLocale = getPrimaryLocale(context)
editingLocale = getEditingLocale(context)
)
var filterTranslations = func(translations map[string]*Translation, isPrimary bool) {
if translations != nil {
for key, translation := range translations {
if (keyword == "") || (strings.Index(strings.ToLower(translation.Key), keyword) != -1 ||
strings.Index(strings.ToLower(translation.Value), keyword) != -1) {
if _, ok := matchedTranslations[key]; !ok {
var t = matchedTranslation{
Key: key,
PrimaryLocale: primaryLocale,
EditingLocale: editingLocale,
EditingValue: translation.Value,
}
if localeTranslations, ok := translationsMap[primaryLocale]; ok {
if v, ok := localeTranslations[key]; ok {
t.PrimaryValue = v.Value
}
}
matchedTranslations[key] = t
keys = append(keys, key)
}
}
}
}
}
filterTranslations(translationsMap[getEditingLocale(context)], false)
if primaryLocale != editingLocale {
filterTranslations(translationsMap[getPrimaryLocale(context)], true)
}
sort.Strings(keys)
pagination := context.Searcher.Pagination
pagination.Total = len(keys)
pagination.PerPage = 25
pagination.CurrentPage, _ = strconv.Atoi(context.Request.URL.Query().Get("page"))
if pagination.CurrentPage == 0 {
pagination.CurrentPage = 1
}
if pagination.CurrentPage > 0 {
pagination.Pages = pagination.Total / pagination.PerPage
}
context.Searcher.Pagination = pagination
var paginationKeys []string
if pagination.CurrentPage == -1 {
paginationKeys = keys
} else {
lastIndex := pagination.CurrentPage * pagination.PerPage
if pagination.Total < lastIndex {
lastIndex = pagination.Total
}
startIndex := (pagination.CurrentPage - 1) * pagination.PerPage
if lastIndex >= startIndex {
//.........这里部分代码省略.........
开发者ID:qor,项目名称:i18n,代码行数:101,代码来源:i18n.go
示例7: ConfigureQorResource
// ConfigureQorResource used to configure transition for qor admin
func (transition *Transition) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
if res.GetMeta("State") == nil {
res.Meta(&admin.Meta{Name: "State", Permission: roles.Deny(roles.Update, roles.Anyone).Deny(roles.Create, roles.Anyone)})
}
res.IndexAttrs(res.IndexAttrs(), "-StateChangeLogs")
res.ShowAttrs(res.ShowAttrs(), "-StateChangeLogs", false)
res.NewAttrs(res.NewAttrs(), "-StateChangeLogs")
res.EditAttrs(res.EditAttrs(), "-StateChangeLogs")
}
}
开发者ID:qor,项目名称:transition,代码行数:13,代码来源:transition.go
示例8: ConfigureQorResource
func (s Status) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
if res.GetMeta("PublishStatus") == nil {
res.IndexAttrs(res.IndexAttrs(), "-PublishStatus")
res.NewAttrs(res.NewAttrs(), "-PublishStatus")
res.EditAttrs(res.EditAttrs(), "-PublishStatus")
res.ShowAttrs(res.ShowAttrs(), "-PublishStatus", false)
}
}
}
开发者ID:8legd,项目名称:qor-qor,代码行数:10,代码来源:publish.go
示例9: ConfigureQorResource
func (i18n *I18n) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
res.UseTheme("i18n")
res.GetAdmin().I18n = i18n
res.SearchAttrs("value") // generate search handler for i18n
res.GetAdmin().RegisterFuncMap("lt", func(locale, key string, withDefault bool) string {
if translations := i18n.Translations[locale]; translations != nil {
if t := translations[key]; t != nil && t.Value != "" {
return t.Value
}
}
if withDefault {
if translations := i18n.Translations[Default]; translations != nil {
if t := translations[key]; t != nil {
return t.Value
}
}
}
return ""
})
res.GetAdmin().RegisterFuncMap("i18n_available_keys", func(context *admin.Context) (keys []string) {
translations := i18n.Translations[Default]
if translations == nil {
for _, values := range i18n.Translations {
translations = values
break
}
}
keyword := context.Request.URL.Query().Get("keyword")
for key, translation := range translations {
if (keyword == "") || (strings.Index(strings.ToLower(translation.Key), strings.ToLower(keyword)) != -1 ||
strings.Index(strings.ToLower(translation.Value), keyword) != -1) {
keys = append(keys, key)
}
}
sort.Strings(keys)
pagination := context.Searcher.Pagination
pagination.Total = len(keys)
pagination.PrePage = 25
pagination.CurrentPage, _ = strconv.Atoi(context.Request.URL.Query().Get("page"))
if pagination.CurrentPage == 0 {
pagination.CurrentPage = 1
}
if pagination.CurrentPage > 0 {
pagination.Pages = pagination.Total / pagination.PrePage
}
context.Searcher.Pagination = pagination
if pagination.CurrentPage == -1 {
return keys
}
lastIndex := pagination.CurrentPage * pagination.PrePage
if pagination.Total < lastIndex {
lastIndex = pagination.Total
}
return keys[(pagination.CurrentPage-1)*pagination.PrePage : lastIndex]
})
res.GetAdmin().RegisterFuncMap("i18n_primary_locale", func(context admin.Context) string {
if locale := context.Request.Form.Get("primary_locale"); locale != "" {
return locale
}
if availableLocales := getAvailableLocales(context.Request, context.CurrentUser); len(availableLocales) > 0 {
return availableLocales[0]
}
return ""
})
res.GetAdmin().RegisterFuncMap("i18n_editing_locale", func(context admin.Context) string {
if locale := context.Request.Form.Get("to_locale"); locale != "" {
return locale
}
return getLocaleFromContext(context.Context)
})
res.GetAdmin().RegisterFuncMap("i18n_viewable_locales", func(context admin.Context) []string {
return getAvailableLocales(context.Request, context.CurrentUser)
})
res.GetAdmin().RegisterFuncMap("i18n_editable_locales", func(context admin.Context) []string {
return getEditableLocales(context.Request, context.CurrentUser)
})
controller := i18nController{i18n}
router := res.GetAdmin().GetRouter()
router.Get(res.ToParam(), controller.Index)
router.Post(res.ToParam(), controller.Update)
router.Put(res.ToParam(), controller.Update)
for _, gopath := range strings.Split(os.Getenv("GOPATH"), ":") {
//.........这里部分代码省略.........
开发者ID:8legd,项目名称:qor-qor,代码行数:101,代码来源:i18n.go
示例10: ConfigureQorResource
func (publish *Publish) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
for _, gopath := range strings.Split(os.Getenv("GOPATH"), ":") {
admin.RegisterViewPath(path.Join(gopath, "src/github.com/qor/qor/publish/views"))
}
res.UseTheme("publish")
if event := res.GetAdmin().GetResource("PublishEvent"); event == nil {
eventResource := res.GetAdmin().AddResource(&PublishEvent{}, &admin.Config{Invisible: true})
eventResource.IndexAttrs("Name", "Description", "CreatedAt")
}
controller := publishController{publish}
router := res.GetAdmin().GetRouter()
router.Get(fmt.Sprintf("/%v/diff/:publish_unique_key", res.ToParam()), controller.Diff)
router.Get(res.ToParam(), controller.Preview)
router.Post(res.ToParam(), controller.PublishOrDiscard)
res.GetAdmin().RegisterFuncMap("publish_unique_key", func(res *admin.Resource, record interface{}, context *admin.Context) string {
return fmt.Sprintf("%s__%v", res.ToParam(), context.GetDB().NewScope(record).PrimaryKeyValue())
})
res.GetAdmin().RegisterFuncMap("is_publish_event_resource", func(res *admin.Resource) bool {
return IsPublishEvent(res.Value)
})
}
}
开发者ID:8legd,项目名称:qor-qor,代码行数:27,代码来源:controller.go
示例11: ConfigureQorResourceBeforeInitialize
func (serialize *SerializableMeta) ConfigureQorResourceBeforeInitialize(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
for _, gopath := range strings.Split(os.Getenv("GOPATH"), ":") {
admin.RegisterViewPath(path.Join(gopath, "src/github.com/qor/serializable_meta/views"))
}
if _, ok := res.Value.(SerializableMetaInterface); ok {
if res.GetMeta("Kind") == nil {
res.Meta(&admin.Meta{
Name: "Kind",
Type: "hidden",
Valuer: func(value interface{}, context *qor.Context) interface{} {
if context.GetDB().NewScope(value).PrimaryKeyZero() {
return nil
} else {
return value.(SerializableMetaInterface).GetSerializableArgumentKind()
}
},
})
}
if res.GetMeta("SerializableMeta") == nil {
res.Meta(&admin.Meta{
Name: "SerializableMeta",
Type: "serializable_meta",
Valuer: func(value interface{}, context *qor.Context) interface{} {
if serializeArgument, ok := value.(SerializableMetaInterface); ok {
return struct {
Value interface{}
Resource *admin.Resource
}{
Value: serializeArgument.GetSerializableArgument(serializeArgument),
Resource: serializeArgument.GetSerializableArgumentResource(),
}
}
return nil
},
Setter: func(result interface{}, metaValue *resource.MetaValue, context *qor.Context) {
if serializeArgument, ok := result.(SerializableMetaInterface); ok {
serializeArgumentResource := serializeArgument.GetSerializableArgumentResource()
value := serializeArgumentResource.NewStruct()
for _, meta := range serializeArgumentResource.GetMetas([]string{}) {
for _, metaValue := range metaValue.MetaValues.Values {
if meta.GetName() == metaValue.Name {
if setter := meta.GetSetter(); setter != nil {
setter(value, metaValue, context)
}
}
}
}
serializeArgument.SetSerializableArgumentValue(value)
}
},
})
}
res.NewAttrs("Kind", "SerializableMeta")
res.EditAttrs("ID", "Kind", "SerializableMeta")
}
}
}
开发者ID:8legd,项目名称:qor-serializable_meta,代码行数:63,代码来源:serializable_meta.go
示例12: ConfigureQorResource
// ConfigureQorResource a method used to config Worker for qor admin
func (worker *Worker) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
// Parse job
cmdLine := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
qorJobID := cmdLine.String("qor-job", "", "Qor Job ID")
runAnother := cmdLine.Bool("run-another", false, "Run another qor job")
cmdLine.Parse(os.Args[1:])
if *qorJobID != "" {
if *runAnother == true {
if newJob := worker.saveAnotherJob(*qorJobID); newJob != nil {
newJobID := newJob.GetJobID()
qorJobID = &newJobID
} else {
fmt.Println("failed to clone job " + *qorJobID)
os.Exit(1)
}
}
if err := worker.RunJob(*qorJobID); err == nil {
os.Exit(0)
} else {
fmt.Println(err)
os.Exit(1)
}
}
// register view funcmaps
worker.Admin.RegisterFuncMap("get_grouped_jobs", func(context *admin.Context) map[string][]*Job {
var groupedJobs = map[string][]*Job{}
var groupName = context.Request.URL.Query().Get("group")
var jobName = context.Request.URL.Query().Get("job")
for _, job := range worker.Jobs {
if !(job.HasPermission(roles.Read, context.Context) && job.HasPermission(roles.Create, context.Context)) {
continue
}
if (groupName == "" || groupName == job.Group) && (jobName == "" || jobName == job.Name) {
groupedJobs[job.Group] = append(groupedJobs[job.Group], job)
}
}
return groupedJobs
})
// configure routes
router := worker.Admin.GetRouter()
controller := workerController{Worker: worker}
jobParamIDName := worker.JobResource.ParamIDName()
router.Get(res.ToParam(), controller.Index)
router.Get(res.ToParam()+"/new", controller.New)
router.Get(fmt.Sprintf("%v/%v", res.ToParam(), jobParamIDName), controller.Show)
router.Get(fmt.Sprintf("%v/%v/edit", res.ToParam(), jobParamIDName), controller.Show)
router.Post(fmt.Sprintf("%v/%v/run", res.ToParam(), jobParamIDName), controller.RunJob)
router.Post(res.ToParam(), controller.AddJob)
router.Put(fmt.Sprintf("%v/%v", res.ToParam(), jobParamIDName), controller.Update)
router.Delete(fmt.Sprintf("%v/%v", res.ToParam(), jobParamIDName), controller.KillJob)
}
}
开发者ID:qor,项目名称:worker,代码行数:59,代码来源:worker.go
示例13: ConfigureQorResource
// ConfigureQorResource configure sorting for qor admin
func (s *Sorting) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
Admin := res.GetAdmin()
res.UseTheme("sorting")
if res.Config.Permission == nil {
res.Config.Permission = roles.NewPermission()
}
for _, gopath := range strings.Split(os.Getenv("GOPATH"), ":") {
admin.RegisterViewPath(path.Join(gopath, "src/github.com/qor/sorting/views"))
}
role := res.Config.Permission.Role
if _, ok := role.Get("sorting_mode"); !ok {
role.Register("sorting_mode", func(req *http.Request, currentUser interface{}) bool {
return req.URL.Query().Get("sorting") != ""
})
}
if res.GetMeta("Position") == nil {
res.Meta(&admin.Meta{
Name: "Position",
Valuer: func(value interface{}, ctx *qor.Context) interface{} {
db := ctx.GetDB()
var count int
var pos = value.(sortingInterface).GetPosition()
if _, ok := modelValue(value).(sortingDescInterface); ok {
if total, ok := db.Get("sorting_total_count"); ok {
count = total.(int)
} else {
var result = res.NewStruct()
db.New().Order("position DESC", true).First(result)
count = result.(sortingInterface).GetPosition()
db.InstantSet("sorting_total_count", count)
}
pos = count - pos + 1
}
primaryKey := ctx.GetDB().NewScope(value).PrimaryKeyValue()
url := path.Join(ctx.Request.URL.Path, fmt.Sprintf("%v", primaryKey), "sorting/update_position")
return template.HTML(fmt.Sprintf("<input type=\"number\" class=\"qor-sorting__position\" value=\"%v\" data-sorting-url=\"%v\" data-position=\"%v\">", pos, url, pos))
},
Permission: roles.Allow(roles.Read, "sorting_mode"),
})
}
attrs := res.ConvertSectionToStrings(res.IndexAttrs())
for _, attr := range attrs {
if attr != "Position" {
attrs = append(attrs, attr)
}
}
res.IndexAttrs(res.IndexAttrs(), "Position")
res.NewAttrs(res.NewAttrs(), "-Position")
res.EditAttrs(res.EditAttrs(), "-Position")
res.ShowAttrs(res.ShowAttrs(), "-Position", false)
router := Admin.GetRouter()
router.Post(fmt.Sprintf("/%v/%v/sorting/update_position", res.ToParam(), res.ParamIDName()), updatePosition)
}
}
开发者ID:8legd,项目名称:qor-sorting,代码行数:64,代码来源:controller.go
示例14: ConfigureQorResourceBeforeInitialize
// ConfigureQorResourceBeforeInitialize configure qor resource for qor admin
func (serialize *SerializableMeta) ConfigureQorResourceBeforeInitialize(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
res.GetAdmin().RegisterViewPath("github.com/qor/serializable_meta/views")
if _, ok := res.Value.(SerializableMetaInterface); ok {
if res.GetMeta("Kind") == nil {
res.Meta(&admin.Meta{
Name: "Kind",
Type: "hidden",
Valuer: func(value interface{}, context *qor.Context) interface{} {
defer func() {
if r := recover(); r != nil {
utils.ExitWithMsg("SerializableMeta: Can't Get Kind")
}
}()
return value.(SerializableMetaInterface).GetSerializableArgumentKind()
},
Setter: func(value interface{}, metaValue *resource.MetaValue, context *qor.Context) {
value.(SerializableMetaInterface).SetSerializableArgumentKind(utils.ToString(metaValue.Value))
},
})
}
if res.GetMeta("SerializableMeta") == nil {
res.Meta(&admin.Meta{
Name: "SerializableMeta",
Type: "serializable_meta",
Valuer: func(value interface{}, context *qor.Context) interface{} {
if serializeArgument, ok := value.(SerializableMetaInterface); ok {
return struct {
Value interface{}
Resource *admin.Resource
}{
Value: serializeArgument.GetSerializableArgument(serializeArgument),
Resource: serializeArgument.GetSerializableArgumentResource(),
}
}
return nil
},
FormattedValuer: func(value interface{}, context *qor.Context) interface{} {
if serializeArgument, ok := value.(SerializableMetaInterface); ok {
return serializeArgument.GetSerializableArgument(serializeArgument)
}
return nil
},
Setter: func(result interface{}, metaValue *resource.MetaValue, context *qor.Context) {
if serializeArgument, ok := result.(SerializableMetaInterface); ok {
if serializeArgumentResource := serializeArgument.GetSerializableArgumentResource(); serializeArgumentResource != nil {
var clearUpRecord, fillUpRecord func(record interface{}, metaors []resource.Metaor, metaValues []*resource.MetaValue)
// Keep original value, so if user don't have permission to update some fields, we won't lost the data
value := serializeArgument.GetSerializableArgument(serializeArgument)
for _, fc := range serializeArgumentResource.Validators {
context.AddError(fc(value, metaValue.MetaValues, context))
}
// Clear all nested slices if has related form data
clearUpRecord = func(record interface{}, metaors []resource.Metaor, metaValues []*resource.MetaValue) {
for _, meta := range metaors {
for _, metaValue := range metaValues {
if meta.GetName() == metaValue.Name {
if metaResource, ok := meta.GetResource().(*admin.Resource); ok && metaResource != nil && metaValue.MetaValues != nil {
nestedFieldValue := reflect.Indirect(reflect.ValueOf(record)).FieldByName(meta.GetFieldName())
if nestedFieldValue.Kind() == reflect.Struct {
clearUpRecord(nestedFieldValue.Addr().Interface(), metaResource.GetMetas([]string{}), metaValue.MetaValues.Values)
} else if nestedFieldValue.Kind() == reflect.Slice {
nestedFieldValue.Set(reflect.Zero(nestedFieldValue.Type()))
}
}
}
}
}
}
clearUpRecord(value, serializeArgumentResource.GetMetas([]string{}), metaValue.MetaValues.Values)
fillUpRecord = func(record interface{}, metaors []resource.Metaor, metaValues []*resource.MetaValue) {
for _, meta := range metaors {
for _, metaValue := range metaValues {
if meta.GetName() == metaValue.Name {
if metaResource, ok := meta.GetResource().(*admin.Resource); ok && metaResource != nil && metaValue.MetaValues != nil {
nestedFieldValue := reflect.Indirect(reflect.ValueOf(record)).FieldByName(meta.GetFieldName())
if nestedFieldValue.Kind() == reflect.Struct {
nestedValue := nestedFieldValue.Addr().Interface()
for _, fc := range metaResource.Validators {
context.AddError(fc(nestedValue, metaValue.MetaValues, context))
}
fillUpRecord(nestedValue, metaResource.GetMetas([]string{}), metaValue.MetaValues.Values)
for _, fc := range metaResource.Processors {
context.AddError(fc(nestedValue, metaValue.MetaValues, context))
}
}
if nestedFieldValue.Kind() == reflect.Slice {
nestedValue := reflect.New(nestedFieldValue.Type().Elem())
//.........这里部分代码省略.........
开发者ID:qor,项目名称:serializable_meta,代码行数:101,代码来源:serializable_meta.go
示例15: ConfigureQorResource
// ConfigureQorResource configure qor resource for qor admin
func (publish *Publish) ConfigureQorResource(res resource.Resourcer) {
if res, ok := res.(*admin.Resource); ok {
controller := publishController{publish}
router := res.GetAdmin().GetRouter()
router.Get(fmt.Sprintf("/%v/diff/:publish_unique_key", res.ToParam()), controller.Diff)
router.Get(res.ToParam(), controller.Preview)
router.Post(res.ToParam(), controller.PublishOrDiscard)
res.GetAdmin().RegisterFuncMap("publish_unique_key", func(res *admin.Resource, record interface{}, context *admin.Context) string {
var publishKeys = []string{res.ToParam()}
var scope = publish.DB.NewScope(record)
for _, primaryField := range scope.PrimaryFields() {
publishKeys = append(publishKeys, fmt.Sprint(primaryField.Field.Interface()))
}
return strings.Join(publishKeys, "__")
})
res.GetAdmin().RegisterFuncMap("is_publish_event_resource", func(res *admin.Resource) bool {
return IsPublishEvent(res.Value)
})
}
}
开发者ID:qor,项目名称:publish,代码行数:23,代码来源:controller.go
注:本文中的github.com/qor/qor/resource.Resourcer类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论