|
- package main
-
- import (
- "fmt"
- "html/template"
- "io"
- "io/ioutil"
- "log"
- "net/http"
- "net/url"
- "os"
- "strings"
- "time"
- )
-
- func spaEditMeetingHandler(w http.ResponseWriter, r *http.Request) {
- lead, found := getLeadFromRequest(r)
- if !found {
- response403Handler(w)
- // w.WriteHeader(http.StatusUnauthorized)
- // fmt.Fprintf(w, "User not found ")
- return
- }
-
- meeting, found := getMeetingFromRequest(r)
-
- switch r.Method {
- case "GET":
- if !found {
- //empty meeting
- meeting.showEdit(w)
- return
- }
- if lead.ID != meeting.ParentID { //is the meeting belongs to this user?
- response403Handler(w)
- return
- }
- //editing existing meeting
- meeting.showEdit(w)
- case "POST":
- if found && (lead.ID != meeting.ParentID) { //is the meeting belongs to this user?
- response403Handler(w)
- return
- }
- meeting.saveFromWeb(w, r)
- default:
- w.WriteHeader(http.StatusUnauthorized)
- fmt.Fprintf(w, "Unsupported Method %s", r.Method)
- }
-
- // e, err := crmGetEntity("Meeting", "595d064a6e372fc1f")
- // log.Println(err)
- // meeting, ok := e.(crmdMeeting)
- // log.Println(ok)
- // spaEditMeetingPopulateMeetingInfo(w, meeting)
- }
-
- func (m crmdMeeting) showEdit(w http.ResponseWriter) {
- tTest := template.New("spaEditMeeting")
- str, err := ioutil.ReadFile("spa/editmeeting.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, m)
- 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 getMeetingFromRequest(r *http.Request) (meeting crmdMeeting, found bool) {
- q, err := url.ParseQuery(r.URL.RawQuery)
- if err != nil {
- return
- }
-
- id, ok := q["mid"] //meetingid
- if !ok {
- return
- }
- meeting, err = crmGetMeeting(id[0])
-
- if err != nil {
- found = false
- log.Printf("WARNING: cannot find meeting with id [%s]", id[0])
- return
- }
- found = true
- return
- }
-
- func (m crmdMeeting) saveFromWeb(w http.ResponseWriter, r *http.Request) {
-
- meeting := crmdMeeting{}
- err := r.ParseMultipartForm(32 << 20)
- if err != nil {
- response400Handler(w)
- return
- }
-
- //if !checkCSRF(r.Form["csrf"])
- //csrf, ook := r.Form["csrf"]
- ok := meeting.validateFormInput(r.Form)
- if !ok {
- meeting.showEdit(w)
- return
- }
-
- //check to see if there is file, cover picture
- meeting.validateFormFile(r)
-
- meeting.ID = m.ID
- updatedMeeting, err := meeting.save()
- if err == nil {
- updatedMeeting.showEdit(w)
- return
- }
-
- response500Handler(w)
- }
-
- func (m *crmdMeeting) validateFormInput(form url.Values) bool {
-
- val, ok := form["meetingname"]
- if ok {
- m.Name = val[0]
- } else {
- m.addSpaErr("活动主题/标题不能为空")
- }
-
- val, ok = form["description"]
- if ok {
- m.Description = val[0]
- } else {
- m.addSpaErr("清添加描述活动本身")
- }
-
- startdate, sok := form["startdate"]
- starthour, hok := form["starthour"]
- duration, rok := form["duration"]
- if sok && hok && rok {
- m.buildStartDate(startdate[0], starthour[0])
- m.buildDuration(duration[0])
- } else {
- m.addSpaErr("活动日期,开始时间,持续时间 不能为空")
- }
-
- val, ok = form["venue"]
- if ok {
- m.Venue = val[0]
- } else {
- m.addSpaErr("请添加活动地点/集合地点")
- }
-
- return !m.hasError()
- }
-
- func (m *crmdMeeting) validateFormFile(r *http.Request) (ok bool) {
- file, _, err := r.FormFile("cover")
- if err == nil {
- defer file.Close()
- f, err := ioutil.TempFile(os.TempDir(), "wechat_hitxy_spa_edit_meeting")
- if err == nil {
- defer f.Close()
- io.Copy(f, file)
- attch, err := crmCreateAttachment(f.Name())
- if err == nil {
- m.CoverID = attch.ID
- os.Remove(f.Name())
- return true
- }
- }
- }
- return false
- }
-
- func (m *crmdMeeting) buildStartDate(date, hour string) {
- layout := "2 January, 2006 15:04"
- value := strings.TrimSpace(date) + " " + strings.TrimSpace(hour)
- t, err := time.Parse(layout, value)
- if err != nil {
- m.addSpaErr("开始日期,时间,无法识别")
- return
- }
- m.DateStart = t.Format(getCrmTimeLayout())
- log.Println(m.DateStart)
- }
-
- func (m *crmdMeeting) buildDuration(duration string) {
- var hour, minute int
- cnt, err := fmt.Sscanf(duration, "%d:%d", &hour, &minute)
- if cnt != 2 && err != nil {
- m.addSpaErr("持续时间不正确")
- return
- }
- m.Duration = (hour * 3600) + (minute * 60)
- }
|