// IsFieldExcluded returns weather a field will be excluded from the form. // Fields will be excluded, if their selector matches one in Form.ExcludedFields // or if a matching Authenticator from Form.ModelFieldAuth returns false. // A field is also excluded when its parent field is excluded. // This function is not restricted to model.Value, it works with all struct fields. // This way a whole sub struct an be excluded by adding its selector to Form.ExcludedFields. func (self *Form) IsFieldExcluded(field *model.MetaData, ctx *Context) bool { if field.Parent == nil { return false // can't exclude root } if self.IsFieldExcluded(field.Parent, ctx) || field.SelectorsMatch(self.ExcludedFields) { return true } if len(self.ModelFieldAuth) > 0 { auth, hasAuth := self.ModelFieldAuth[field.Selector()] if !hasAuth { auth, hasAuth = self.ModelFieldAuth[field.WildcardSelector()] } if hasAuth { ok, err := auth.Authenticate(ctx) if err != nil { fmt.Println("Error in view.Form.IsFieldExcluded(): " + err.Error()) } if !ok { return true } } } if len(Config.NamedAuthenticators) > 0 { if authAttrib, ok := field.Attrib(StructTagKey, "auth"); ok { for _, name := range strings.Split(authAttrib, ",") { // if multi := strings.Split(name, "+"); len(multi) > 1 { // // Needs to pass all sub-Authenticators // for _, name := range multi { // if auth, ok := NamedAuthenticator(name); ok { // ok, err := auth.Authenticate(response) // if err != nil { // fmt.Println("Error in view.Form.IsFieldExcluded(): " + err.Error()) // } // if !ok { // return true // } // } // } // } else { if auth, ok := NamedAuthenticator(name); ok { ok, err := auth.Authenticate(ctx) if ok { // Only needs to pass one Authenticator return false } if err != nil { log.Println("Error in view.Form.IsFieldExcluded(): " + err.Error()) } } // } } // No Authenticators passed, thus exclude return true } } return false }
// IsFieldExcluded returns weather a field will be excluded. // Fields will be excluded, if their selector matches one in LabeledModelView.ExcludedFields. // A field is also excluded when its parent field is excluded. // This function is not restricted to model.Value, it works with all struct fields. // This way a whole sub struct an be excluded by adding its selector to LabeledModelView.ExcludedFields. func (self *LabeledModelView) IsFieldExcluded(field *model.MetaData) bool { if field.Parent == nil { return false // can't exclude root } if self.IsFieldExcluded(field.Parent) || field.SelectorsMatch(self.ExcludedFields) { return true } return false }
// IsFieldHidden returns if a hidden input element will be created for a form field. // Hidden fields are not validated. func (self *Form) IsFieldHidden(field *model.MetaData) bool { return field.BoolAttrib(StructTagKey, "hidden") || field.SelectorsMatch(self.HiddenFields) }
func (self *Form) IsFieldDisabled(field *model.MetaData) bool { return field.BoolAttrib(StructTagKey, "disabled") || field.SelectorsMatch(self.DisabledFields) }
func (self *Form) IsFieldRequired(field *model.MetaData) bool { if val, ok := field.ModelValue(); ok && val.Required(field) { return true } return field.SelectorsMatch(self.RequiredFields) }