diff --git a/spaEdit.go b/spaEdit.go index 0ffa191..2d93469 100644 --- a/spaEdit.go +++ b/spaEdit.go @@ -1,25 +1,133 @@ 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 { + 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") - log.Println(string(str)) - log.Println(err) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, "Formating information not available.") + return + } tTest, err = tTest.Parse(string(str)) - log.Println(err) - id := "595a323d4d639d84d" - lead, err := crmGetLead(id) - log.Println(err) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(w, "Formating instruction invalid") + return + } err = tTest.Execute(w, lead) - log.Println(err) - //http.ServeFile(w, r, "spa/edit.html") + 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"}`) }