forked from ungerik/go-start
/
contactform.go
35 lines (32 loc) · 1.28 KB
/
contactform.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package view
import (
"fmt"
"github.com/ungerik/go-mail"
"github.com/ungerik/go-start/model"
)
// ContactFormModel is a default form model for contact forms.
type ContactFormModel struct {
Name model.String `view:"label=Your name" model:"maxlen=40"`
Email model.Email `view:"label=Your email address" model:"required|maxlen=40"`
Subject model.String `view:"label=Subject" model:"maxlen=40"`
Message model.Text `view:"label=Your message|cols=40|rows=10" model:"required"`
}
// NewContactForm creates a new contact form that sends submitted data to recipientEmail.
func NewContactForm(recipientEmail, subjectPrefix, formClass, buttonClass, formID string) *Form {
return &Form{
Class: formClass,
SubmitButtonClass: buttonClass,
SubmitButtonText: "Send",
SuccessMessage: "Message sent",
FormID: formID,
GetModel: func(form *Form, ctx *Context) (interface{}, error) {
return &ContactFormModel{}, nil
},
OnSubmit: func(form *Form, formModel interface{}, ctx *Context) (string, URL, error) {
model := formModel.(*ContactFormModel)
subject := fmt.Sprintf("%sFrom %s <%s>: %s", subjectPrefix, model.Name, model.Email, model.Subject)
err := email.NewBriefMessage(subject, model.Message.Get(), recipientEmail).Send()
return "", nil, err
},
}
}