| @@ -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"}`) | |||
| } | |||