package main import ( "fmt" "html/template" "io" "io/ioutil" "log" "net/http" "os" "strings" ) func spaEditProfile(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": lead, found := getLeadFromRequest(r) if !found { response404Handler(w) // w.WriteHeader(http.StatusUnauthorized) // fmt.Fprintf(w, "User not found ") return } spaEditProfilePopulateLeadInfo(w, lead) case "POST": spaEditProfileSaveLead(w, r) default: w.WriteHeader(http.StatusUnauthorized) fmt.Fprintf(w, "Unsupported Method %s", r.Method) } //http.ServeFile(w, r, "spa/edit.html") //lead, _ := crmGetLead("595a323d4d639d84d") //spaEditProfilePopulateLeadInfo(w, lead) } func getLeadFromRequest(r *http.Request) (lead crmdLead, found bool) { id, found := getLeadIDFromCookie(r) if !found { return } lead, err := crmGetLead(id) if err != nil { found = false log.Printf("WARNING: valid cookie lead id %s, not found in EntityCRM", id) return } found = true return } func spaEditProfilePopulateLeadInfo(w http.ResponseWriter, lead crmdLead) { tTest := template.New("spaEditProfile") str, err := ioutil.ReadFile("spa/edit.html") if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Formating information not available.") return } tTest, err = tTest.Parse(string(str)) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Formating instruction invalid") return } err = tTest.Execute(w, lead) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Monkey runs into our computer room...") log.Println("ERROR: Template execution on spa/Edit, failed \n" + err.Error()) } } func spaEditProfileSaveLead(w http.ResponseWriter, r *http.Request) { original, found := getLeadFromRequest(r) if !found { w.WriteHeader(http.StatusUnauthorized) fmt.Fprintf(w, "You are not authorized to change data...") log.Println("ERROR: trying to spa/edit lead, but not found") return } err := r.ParseMultipartForm(32 << 20) if err == nil { for k, v := range r.Form { fmt.Println("key:", k) fmt.Println("val:", strings.Join(v, "")) } lastname, lok := r.Form["lastname"] email, eok := r.Form["email"] phone, pok := r.Form["phone"] description, dok := r.Form["description"] lead := crmdLead{} //create a patch info, we cannot reuse original, as it as emailAdressData, phoneNumberData array. it will prevent us from updating email address and phone number, unless we modify them as well. lead.ID = original.ID if lok && eok && pok && dok { lead.LastName = lastname[0] lead.EmailAddress = email[0] lead.PhoneNumber = phone[0] lead.Description = description[0] //check to see if there is file file, handler, err := r.FormFile("avatar") if err == nil { defer file.Close() log.Printf("%v", handler.Header) log.Println(handler.Filename) f, err := ioutil.TempFile(os.TempDir(), "wechat_hitxy_spa_edit_lead") //os.OpenFile("/tmp/wechat_hitxy_avatar_upload.jpg", os.O_WRONLY|os.O_CREATE, 0666) if err == nil { defer f.Close() io.Copy(f, file) attch, err := crmCreateAttachment(f.Name()) if err == nil { lead.AvatarID = attch.ID os.Remove(f.Name()) } } } } updatedLead, err := lead.Save() log.Println(updatedLead.PhoneNumber) log.Println(updatedLead.EmailAddress) log.Println(updatedLead.ID) if err == nil { spaEditProfilePopulateLeadInfo(w, updatedLead) //fmt.Fprintf(w, `{"status": "succes"}`) return } } fmt.Fprintf(w, `{"status": "error"}`) }