diff options
author | Steve Manuel <nilslice@gmail.com> | 2016-12-17 03:17:44 -0800 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2016-12-17 03:17:44 -0800 |
commit | 755c1d95d5b164952deeb0fadd96f3e3c5888e33 (patch) | |
tree | d45d9e66bbeeef0d60de72d7bd645b9843383c5e | |
parent | 01c856d7d7fbb10998e7e07f75958cf28f3f32d6 (diff) |
testing fix for import cycle issue
-rw-r--r-- | management/reference/reference.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/management/reference/reference.go b/management/reference/reference.go new file mode 100644 index 0000000..48446d5 --- /dev/null +++ b/management/reference/reference.go @@ -0,0 +1,53 @@ +package reference + +import ( + "encoding/json" + "fmt" + "log" + + "github.com/bosssauce/ponzu/content" + "github.com/bosssauce/ponzu/management/editor" + "github.com/bosssauce/ponzu/system/db" +) + +// Select returns the []byte of a <select> HTML element plus internal <options> with a label. +// IMPORTANT: +// The `fieldName` argument will cause a panic if it is not exactly the string +// form of the struct field that this editor input is representing +func Select(fieldName string, p interface{}, attrs map[string]string, contentType string) []byte { + ct, ok := content.Types[contentType] + if !ok { + log.Println("Cannot reference an invalid content type:", contentType) + return nil + } + + // get a handle to the underlying interface type for decoding + t := ct() + + fmt.Println(t) + + // decode all content type from db into options map + // map["?type=<contentType>&id=<id>"]t.String() + options := make(map[string]string) + jj := db.ContentAll(contentType + "__sorted") + + for i := range jj { + err := json.Unmarshal(jj[i], t) + if err != nil { + log.Println("Error decoding into reference handle:", contentType, err) + } + + // make sure it is an Identifiable + item, ok := t.(content.Identifiable) + if !ok { + log.Println("Cannot use type", contentType, "as a reference since it does not implement content.Identifiable") + return nil + } + + k := fmt.Sprintf("?type=%s&id=%d", contentType, item.ItemID()) + v := item.String() + options[k] = v + } + + return editor.Select(fieldName, p, attrs, options) +} |