// Controller to handle content editor submission. func ContentEditorSubmit(w *wrapper.Wrapper) { elementid := w.APIParams[0] e, err := elements.LoadContentElement(elementid, w) post := make(map[string]interface{}) err = form.GetValidFormData(w, &post) if err != nil { return } e.ContentValues.Content = post delete(e.ContentValues.Content, "mongolartype") delete(e.ContentValues.Content, "mongolarid") delete(e.ContentValues.Content, "form_id") err = e.Save(w) if err != nil { errmessage := fmt.Sprintf("Element not saved %s by %s", w.APIParams[0], w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to save element.", "Error", w) w.Serve() return } services.AddMessage("Element content saved.", "Success", w) dynamic := services.Dynamic{ Target: elementid, Id: elementid, Controller: "admin/element", Template: "admin/element.html", } services.SetDynamic(dynamic, w) w.Serve() return }
func SlugUrlEditorForm(w *wrapper.Wrapper) { slugid := w.APIParams[0] e, err := elements.LoadSlugElement(slugid, w) if err != nil { errmessage := fmt.Sprintf("Element not found to edit for %s by %s", slugid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to load slug parent", "Error", w) w.Serve() return } f := form.NewForm() data := make(map[string]string) for slug, id := range e.Slugs { data[id] = slug e := elements.NewElement() err = elements.GetById(id, &e, w) if err != nil { errmessage := fmt.Sprintf("Content not found %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("There was a problem loading some slug elements.", "Error", w) w.Serve() return } f.AddText(id, "text").AddLabel(e.Title).Required() } f.FormData = data f.Register(w) w.SetTemplate("admin/form.html") w.SetPayload("form", f) w.Serve() return }
// Controller to handle submission for content type change form. func ContentTypeEditorSubmit(w *wrapper.Wrapper) { elementid := w.APIParams[0] e, err := elements.LoadContentElement(elementid, w) if err != nil { errmessage := fmt.Sprintf("Element not found to edit for %s by %s", elementid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("This element was not found", "Error", w) w.Serve() return } type Post struct { Type string `json:"type"` } var post Post err = form.GetValidFormData(w, &post) if err != nil { return } e.ContentValues.Type = post.Type err = e.Save(w) if err != nil { errmessage := fmt.Sprintf("Element not saved %s by %s", w.APIParams[0], w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to save element.", "Error", w) } else { services.AddMessage("Element content type saved.", "Success", w) } w.Serve() return }
// Controller to delete an element and all references to the element func DeleteElement(w *wrapper.Wrapper) { id := w.APIParams[0] err := elements.Delete(id, w) if err != nil { errmessage := fmt.Sprintf("Unable to delete %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to delete element.", "Error", w) } err = elements.WrapperDeleteAllChild(id, w) if err != nil { errmessage := fmt.Sprintf("Unable to delete reference to element %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to delete all references to your element.", "Error", w) } err = elements.SlugDeleteAllChild(id, w) if err != nil { errmessage := fmt.Sprintf("Unable to delete reference to element %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to delete all references to your element.", "Error", w) } err = paths.DeleteAllChild(id, w) if err != nil { errmessage := fmt.Sprintf("Unable to delete reference to %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to delete all references to your element.", "Error", w) } dynamic := services.Dynamic{ Target: id, Template: "default.html", } services.SetDynamic(dynamic, w) services.AddMessage("Successfully deleted element", "Success", w) w.Serve() return }
// Controller for path sort form. func SortPathForm(w *wrapper.Wrapper) { var parentid string if len(w.APIParams) > 0 { parentid = w.APIParams[0] } else { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } p, err := paths.LoadPath(parentid, w) if err != nil { errmessage := fmt.Sprintf("Path not found to sort for %s by %s.", parentid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("This element was not found", "Error", w) w.Serve() return } else { if len(p.Elements) > 0 { w.SetPayload("elements", p.Elements) } else { services.AddMessage("This has no elements assigned yet.", "Error", w) } w.SetTemplate("admin/element_sorter.html") w.Serve() return } }
// The controller function for Values found directly in the controller values of the element func WrapperValues(w *wrapper.Wrapper) { var wrapid string if len(w.APIParams) > 0 { wrapid = w.APIParams[0] } else { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } e, err := elements.LoadWrapperElement(wrapid, w) if err != nil { errmessage := fmt.Sprintf("Content not found %s : %s", wrapid, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("There was a problem loading some content on your page.", "Error", w) w.Serve() return } var v []elements.Element for _, id := range e.Elements { e := elements.NewElement() err = elements.GetById(id, &e, w) if err != nil { errmessage := fmt.Sprintf("Content not found %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) } else { v = append(v, e) } } w.SetDynamicId(e.DynamicId) w.SetContent(v) w.Serve() }
func (l *LoginMap) Login(w *wrapper.Wrapper) { if controller, ok := l.Controllers[w.APIParams[0]]; ok { w.Shift() controller(w) return } http.Error(w.Writer, "Forbidden", 403) return }
// Controller to list all paths func AdminPaths(w *wrapper.Wrapper) { pl, err := paths.PathList(w) if err != nil { services.AddMessage("There was an error retrieving your site paths", "Error", w) errmessage := fmt.Sprintf("Error getting path list: %s", err.Error()) w.SiteConfig.Logger.Error(errmessage) } else { w.SetContent(pl) } w.Serve() }
func (lo *LoginMap) Callback(w *wrapper.Wrapper) { oauthlogins := make(map[string]map[string]string) w.SiteConfig.RawConfig.MarshalKey("OAuthLogins", &oauthlogins) loginurls := make(map[string]string) w.SiteConfig.RawConfig.MarshalKey("LoginURLs", &loginurls) if _, ok := oauthlogins[w.APIParams[0]]; ok { if _, ok := lo.Logins[w.APIParams[0]]; ok { s := w.Request.FormValue("state") sc := oauthlogins[w.APIParams[0]] login := lo.Logins[w.APIParams[0]] if lo.State != s { errmessage := fmt.Sprintf("Invalid oauth state, expected %s, got %s", lo.State, s) w.SiteConfig.Logger.Error(errmessage) http.Redirect(w.Writer, w.Request, loginurls["failure"], 301) return } login.SetConfig(sc, "", "") code := w.Request.FormValue("code") token, err := login.GetToken(code) if err != nil { errmessage := fmt.Sprintf("Exchange() failed with %s", err.Error()) w.SiteConfig.Logger.Error(errmessage) http.Redirect(w.Writer, w.Request, loginurls["failure"], 301) return } u := login.GetUser() err = u.Set(w) if err != nil { errmessage := fmt.Sprintf("Unable to set user: %s", err.Error()) w.SiteConfig.Logger.Error(errmessage) http.Redirect(w.Writer, w.Request, loginurls["failure"], 301) return } err = w.SetSessionValue("user_id", u.MongoId) if err != nil { errmessage := fmt.Sprintf("Unable to set user id on session: %s", err.Error()) w.SiteConfig.Logger.Error(errmessage) http.Redirect(w.Writer, w.Request, loginurls["failure"], 301) return } err = w.SetSessionValue("token", token) if err != nil { errmessage := fmt.Sprintf("Unable to set token on session: %s", err.Error()) w.SiteConfig.Logger.Error(errmessage) http.Redirect(w.Writer, w.Request, loginurls["failure"], 301) return } http.Redirect(w.Writer, w.Request, loginurls["success"], 301) return } } http.Error(w.Writer, "Forbidden", 403) return }
//Main controller for all admin functions func (a AdminMap) Admin(w *wrapper.Wrapper) { if c, ok := a[w.APIParams[0]]; ok { if validateAdmin(w) { w.Shift() c(w) } return } else { http.Error(w.Writer, "Forbidden", 403) return } }
func EditContentType(w *wrapper.Wrapper) { if len(w.APIParams) < 1 { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } if w.Request.Method != "POST" { EditContentTypeForm(w) return } EditContentTypeSubmit(w) return }
// Controller for editing paths func PathEditor(w *wrapper.Wrapper) { if len(w.APIParams) == 0 { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } if w.Request.Method != "POST" { PathEditorForm(w) return } PathEditorSubmit(w) return }
// Controller to present path editor form func PathEditorForm(w *wrapper.Wrapper) { pathid := w.APIParams[0] f := form.NewForm() f.AddText("title", "text").AddLabel("Title").Required() f.AddText("path", "text").AddLabel("Path").Required() f.AddText("template", "text").AddLabel("Template").Required() f.AddCheckBox("wildcard").AddLabel("Wildcard") ops := []map[string]string{ map[string]string{"name": "published", "value": "published"}, map[string]string{"name": "unpublished", "value": "unpublished"}, } f.AddRadio("status", ops).AddLabel("Status").Required() f.AddText("id", "text").Hidden() var p paths.Path var err error if pathid != "new" { p, err = paths.LoadPath(pathid, w) if err != nil { errmessage := fmt.Sprintf("Could not retrieve path %s by %s: %s", w.APIParams[0], w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Error retrieving path information.", "Error", w) w.Serve() return } } else { p = paths.NewPath() } f.FormData = p f.Register(w) w.SetTemplate("admin/form.html") w.SetPayload("form", f) w.Serve() return }
//Main controller for all admin functions func (a AdminMap) Admin(w *wrapper.Wrapper) { w.Writer.Header().Add("Cache-Control", "no-cache, no-store, must-revalidate") w.Writer.Header().Add("Pragma", "no-cache") w.Writer.Header().Add("Expires", "0") if c, ok := a[w.APIParams[0]]; ok { if validateAdmin(w) { w.Shift() c(w) } return } else { http.Error(w.Writer, "Forbidden", 403) return } }
func GetValidFormData(w *wrapper.Wrapper, post interface{}) error { p := make([]byte, w.Request.ContentLength) _, err := w.Request.Body.Read(p) if err != nil { errmessage := fmt.Sprintf("Error processing post values %s: %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("There was an issue processing your form.", "Error", w) w.Serve() return errors.New("Could not marshall Post values") } data := make(map[string]interface{}) err = json.Unmarshal(p, &data) if err != nil { errmessage := fmt.Sprintf("Error processing post values %s: %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("There was an issue processing your form.", "Error", w) w.Serve() return errors.New("Could not marshall Post values") } register, reg_err := GetFormRegister(data["form_id"].(string), w) if reg_err != nil { errmessage := fmt.Sprintf("Invalid or expired form %s: %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Your form was expired, please try again.", "Error", w) w.Serve() return errors.New("Inalid or expired form") } err = json.Unmarshal(p, post) if err != nil { errmessage := fmt.Sprintf("Error processing post values %s: %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("There was an issue processing your form.", "Error", w) w.Serve() return errors.New("Could not marshall Post values") } missing := register.ValidateRequired(data) if len(missing) > 0 { for _, label := range missing { message := fmt.Sprintf("%s is required.", label) services.AddMessage(message, "Error", w) } w.Serve() return errors.New("missing fields") } return nil }
func (u *User) Get(w *wrapper.Wrapper) error { c := w.DbSession.DB("").C("users") var id bson.M w.GetSessionValue("user_id", &id) if id == nil { err := errors.New("User not found") return err } if user_id, ok := id["user_id"]; ok { err := c.Find(bson.M{"_id": user_id}).One(u) return err } else { err := errors.New("User not found") return err } }
func (lo *LoginMap) LoginUrls(w *wrapper.Wrapper) { us := make(map[string]map[string]string) oauthlogins := make(map[string]map[string]string) w.SiteConfig.RawConfig.MarshalKey("OAuthLogins", &oauthlogins) for k, l := range oauthlogins { c := "http://" + w.Request.Host + "/" + w.SiteConfig.APIEndPoint + "/login/callback/" + k login := lo.Logins[k] login.SetConfig(l, c, lo.State) u := login.GetUrl() m := map[string]string{"url": u, "login_text": l["login_text"]} us[k] = m } w.SetPayload("login_links", us) w.Serve() return }
// Controller for wrapper sort submission. func SortWrapperSubmit(w *wrapper.Wrapper) { var parentid string if len(w.APIParams) > 0 { parentid = w.APIParams[0] } else { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } wes := elements.NewWrapperElements() err := json.NewDecoder(w.Request.Body).Decode(&wes) if err != nil { errmessage := fmt.Sprintf("Unable to marshall elements %s by %s: %s", parentid, w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to save elements.", "Error", w) w.Serve() return } we, err := elements.LoadWrapperElement(parentid, w) if err != nil { errmessage := fmt.Sprintf("Element not found to sort for %s by %s.", parentid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("This element was not found", "Error", w) w.Serve() return } we.WrapperElements = wes we.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to save wrapper element %s by %s : %s", parentid, w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not save parent element.", "Error", w) w.Serve() return } dynamic := services.Dynamic{ Target: parentid, Controller: "admin/element", Template: "admin/element.html", Id: parentid, } services.SetDynamic(dynamic, w) services.AddMessage("You elements have been updated.", "Success", w) w.Serve() return }
// Controller for path sort submission. func SortPathSubmit(w *wrapper.Wrapper) { var parentid string if len(w.APIParams) > 0 { parentid = w.APIParams[0] } else { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } pes := paths.NewPathElements() err := json.NewDecoder(w.Request.Body).Decode(&pes) if err != nil { errmessage := fmt.Sprintf("Unable to marshall elements %s by %s: %s", parentid, w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to save elements.", "Error", w) w.Serve() return } pe, err := paths.LoadPath(parentid, w) if err != nil { errmessage := fmt.Sprintf("Path not found to sort for %s by %s.", parentid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("This path was not found", "Error", w) w.Serve() return } pe.PathElements = pes err = pe.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to save path %s by %s : %s", parentid, w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not save path.", "Error", w) w.Serve() return } dynamic := services.Dynamic{ Target: "centereditor", Controller: "admin/path_elements", Template: "admin/path_elements.html", Id: w.APIParams[1], } services.SetDynamic(dynamic, w) services.AddMessage("You elements have been updated.", "Success", w) w.Serve() return }
// Controller to delete a path func DeletePath(w *wrapper.Wrapper) { id := w.APIParams[0] err := paths.Delete(id, w) if err != nil { errmessage := fmt.Sprintf("Unable to delete path %s : %s", id, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to delete.", "Error", w) w.Serve() return } dynamic := services.Dynamic{ Target: "pathbar", Controller: "admin/paths", Template: "admin/path_list.html", } services.SetDynamic(dynamic, w) services.AddMessage("Successfully deleted path", "Success", w) w.Serve() return }
// Validate admin has admin role. func validateAdmin(w *wrapper.Wrapper) bool { user := new(user.User) err := user.Get(w) loginurls := make(map[string]string) w.SiteConfig.RawConfig.MarshalKey("LoginURLs", &loginurls) if err != nil { services.Redirect(loginurls["login"], w) w.Serve() return false } if user.Roles != nil { for _, r := range user.Roles { if r == "admin" { return true } } } services.Redirect(loginurls["access_denied"], w) w.Serve() return false }
func SlugUrlEditorSubmit(w *wrapper.Wrapper) { slugid := w.APIParams[0] post := make(map[string]string) err := form.GetValidFormData(w, &post) if err != nil { return } vals := make(map[string]string) for id, slug := range post { if bson.IsObjectIdHex(id) { vals[slug] = id } } var e elements.SlugElement e, err = elements.LoadSlugElement(slugid, w) if err != nil { errmessage := fmt.Sprintf("Element not found to edit for %s by %s", slugid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to load parent slug", "Error", w) w.Serve() return } e.Slugs = vals err = e.Save(w) if err != nil { errmessage := fmt.Sprintf("Slugs not saved %s by %s", w.APIParams[0], w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to save slug values.", "Error", w) w.Serve() return } services.AddMessage("Slug values updated.", "Success", w) w.Serve() return }
// Controller for adding existing element to wrapper element or path. func AddExistingChild(w *wrapper.Wrapper) { var parenttype string if len(w.APIParams) > 1 { parenttype = w.APIParams[0] } else { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } if w.Request.Method != "POST" { AddExistingChildForm(w) return } w.Shift() switch parenttype { case "wrapper": AddExistingWrapperSubmit(w) return case "paths": AddExistingPathSubmit(w) return default: http.Error(w.Writer, "Forbidden", 403) w.Serve() } return }
// Controller for adding existing element to path form submission. func AddExistingPathSubmit(w *wrapper.Wrapper) { parentid := w.APIParams[0] var post map[string]string err := form.GetValidFormData(w, &post) if err != nil { return } var parent paths.Path parent, err = paths.LoadPath(parentid, w) if err != nil { errmessage := fmt.Sprintf("Unable to loap parent element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not load parent element.", "Error", w) w.Serve() return } parent.Elements = append(parent.Elements, post["element"]) err = parent.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to save parent element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not save parent element.", "Error", w) w.Serve() return } dynamic := services.Dynamic{ Target: "centereditor", Controller: "admin/path_elements", Template: "admin/path_elements.html", Id: parentid, } services.SetDynamic(dynamic, w) services.AddMessage("You have added an existing element.", "Success", w) w.Serve() }
func EditContentTypeForm(w *wrapper.Wrapper) { f := form.NewForm() ct := new(ContentType) if w.APIParams[0] != "new" { c := w.DbSession.DB("").C("content_types") i := bson.M{"_id": bson.ObjectIdHex(w.APIParams[0])} err := c.Find(i).One(ct) if err != nil { errmessage := fmt.Sprintf("Content Type not found %s : %s", w.APIParams[0], err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Your content types was not found ", "Error", w) w.Serve() return } var elements []map[string]interface{} for _, field := range ct.Form { element := make(map[string]interface{}) element["type"] = field.Type element["key"] = field.Key element["label"] = field.TemplateOptions.Label element["placeholder"] = field.TemplateOptions.Placeholder element["rows"] = field.TemplateOptions.Rows element["cols"] = field.TemplateOptions.Cols element["options"] = "" for _, opt := range field.TemplateOptions.Options { element["options"] = fmt.Sprintf("%s%s|%s\n", element["options"], opt["name"], opt["value"]) } elements = append(elements, element) } data := make(map[string]interface{}) data["elements"] = elements data["content_type"] = ct.Type f.FormData = data } else { data := make(map[string]interface{}) fd := make([]map[string]string, 0) data["elements"] = fd data["content_type"] = "" f.FormData = data } f.AddText("content_type", "text").AddLabel("Content Type Name") f.AddRepeatSection("elements", "Add another field", FieldFormGroup()) f.Register(w) w.SetPayload("form", f) w.SetTemplate("admin/form.html") w.Serve() return }
// Controller to ddisplay form to change content type for conteent element func ContentTypeEditorForm(w *wrapper.Wrapper) { elementid := w.APIParams[0] e, err := elements.LoadContentElement(elementid, w) if err != nil { errmessage := fmt.Sprintf("Element not found to edit for %s by %s", elementid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("This element was not found", "Error", w) w.Serve() return } cts := make([]contenttypes.ContentType, 0) cts, err = contenttypes.AllContentTypes(w) if err != nil { errmessage := fmt.Sprintf("Unable to query all Content Types: %s", err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Unable to retrieve content types.", "Error", w) w.Serve() return } opts := make([]map[string]string, 0) for _, ct := range cts { opt := map[string]string{ "name": ct.Type, "value": ct.Type, } opts = append(opts, opt) } f := form.NewForm() f.AddSelect("type", opts) data := map[string]string{"type": e.ContentValues.Type} f.FormData = data f.Register(w) w.SetTemplate("admin/form.html") w.SetPayload("form", f) w.Serve() return }
func AddSlugChild(w *wrapper.Wrapper) { parentid := w.APIParams[0] e := elements.NewElement() e.Title = "New Element" e.Controller = "content" err := e.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to create new element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not create a new element.", "Error", w) w.Serve() return } var parent elements.SlugElement parent, err = elements.LoadSlugElement(parentid, w) if err != nil { errmessage := fmt.Sprintf("Unable to loap parent element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not load parent element.", "Error", w) w.Serve() return } if parent.Slugs == nil { slug := map[string]string{e.MongoId.Hex(): e.MongoId.Hex()} parent.Slugs = slug } else { parent.Slugs[e.MongoId.Hex()] = e.MongoId.Hex() } err = parent.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to save parent element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not save parent element.", "Error", w) w.Serve() return } dynamic := services.Dynamic{ Target: parentid, Controller: "admin/element", Template: "admin/element.html", Id: parentid, } services.SetDynamic(dynamic, w) services.AddMessage("You have added a new element.", "Success", w) w.Serve() }
// Controller for adding children to wrapper element. func AddWrapperChild(w *wrapper.Wrapper) { parentid := w.APIParams[0] e := elements.NewElement() e.Title = "New Element" err := e.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to create new element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not create a new element.", "Error", w) w.Serve() return } var parent elements.WrapperElement parent, err = elements.LoadWrapperElement(parentid, w) if err != nil { errmessage := fmt.Sprintf("Unable to loap parent element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not load parent element.", "Error", w) w.Serve() return } parent.Elements = append(parent.Elements, e.MongoId.Hex()) err = parent.Save(w) if err != nil { errmessage := fmt.Sprintf("Unable to loap parent element by %s : %s", w.Request.Host, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("Could not load parent element.", "Error", w) w.Serve() return } dynamic := services.Dynamic{ Target: parentid, Controller: "admin/element", Template: "admin/element.html", Id: parentid, } services.SetDynamic(dynamic, w) services.AddMessage("You have added a new element.", "Success", w) w.Serve() return }
// The controller function for Values found directly in the controller values of the element func ContentValues(w *wrapper.Wrapper) { var contentid string if len(w.APIParams) > 0 { contentid = w.APIParams[0] } else { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } e, err := elements.LoadContentElement(contentid, w) if err != nil { errmessage := fmt.Sprintf("Content not found %s : %s", contentid, err.Error()) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("There was a problem loading some content on your page.", "Error", w) w.Serve() return } w.SetContent(e.ContentValues.Content) w.Serve() return }
// Retrieve a list of elements in a path for content editor. func PathElements(w *wrapper.Wrapper) { if len(w.APIParams) == 0 { http.Error(w.Writer, "Forbidden", 403) w.Serve() return } pathid := w.APIParams[0] p, err := paths.LoadPath(pathid, w) if err != nil { errmessage := fmt.Sprintf("Path not found to edit for %s by %s ", pathid, w.Request.Host) w.SiteConfig.Logger.Error(errmessage) services.AddMessage("This path was not found", "Error", w) w.Serve() } else { w.SetPayload("path", p) if len(p.Elements) == 0 { services.AddMessage("This path has no elements.", "Info", w) } w.Serve() } }