| package main | package main | ||||
| import ( | import ( | ||||
| "fmt" | |||||
| "html/template" | "html/template" | ||||
| "io" | |||||
| "io/ioutil" | "io/ioutil" | ||||
| "log" | "log" | ||||
| "net/http" | "net/http" | ||||
| "os" | |||||
| "strings" | |||||
| ) | ) | ||||
| func spaEditProfile(w http.ResponseWriter, r *http.Request) { | 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") | tTest := template.New("spaEditProfile") | ||||
| str, err := ioutil.ReadFile("spa/edit.html") | 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)) | 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) | 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"}`) | |||||
| } | } |