125 lines
4.9 KiB
Go
125 lines
4.9 KiB
Go
package webui
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
// webmailSignaturesPage lists a mailbox's saved signatures — add/edit happens in a
|
|
// popup (webmail_settings_chrome.html's signature modal), not on this page itself.
|
|
func (a *App) webmailSignaturesPage(w http.ResponseWriter, r *http.Request) {
|
|
mbox := mailboxFromContext(r)
|
|
signatures, err := a.DB.ListSignatures(mbox.ID)
|
|
if err != nil {
|
|
setFlash(w, "error", "Error loading signatures")
|
|
}
|
|
aliasDefaults, err := a.DB.ListSignatureAliasDefaults(mbox.ID)
|
|
if err != nil {
|
|
setFlash(w, "error", "Error loading alias defaults")
|
|
}
|
|
|
|
a.render(w, r, "webmail_signatures.html", M{
|
|
"mailbox": mbox, "signatures": signatures, "send_as_options": a.sendAsAddresses(mbox),
|
|
"alias_defaults": aliasDefaults,
|
|
"flashes": popFlashes(w, r), "active_section": "signatures",
|
|
})
|
|
}
|
|
|
|
// webmailSignatureSave creates a new signature, or updates one when id (a hidden
|
|
// form field, not a path segment — this is a single form reused for add and edit) is
|
|
// set. default_for_email/default_new/default_reply (all optional) additionally set
|
|
// this signature as a specific send-as alias's default — see
|
|
// db.SetSignatureAliasDefault. The mailbox's own primary-address default is set
|
|
// separately, via the existing per-row "Use for new"/"Use for reply/forward" buttons
|
|
// (webmailSignatureSetDefault) — deliberately not folded into this form, since that
|
|
// control already works and scoping it here would just be two ways to do the same
|
|
// thing for that one address.
|
|
func (a *App) webmailSignatureSave(w http.ResponseWriter, r *http.Request) {
|
|
mbox := mailboxFromContext(r)
|
|
if err := r.ParseForm(); err != nil {
|
|
setFlash(w, "error", "Invalid form data")
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
return
|
|
}
|
|
name := strings.TrimSpace(r.FormValue("name"))
|
|
contentHTML := r.FormValue("content_html")
|
|
if name == "" {
|
|
setFlash(w, "error", "Give the signature a name")
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
return
|
|
}
|
|
|
|
id := int64(atoi(r.FormValue("id")))
|
|
var err error
|
|
if id != 0 {
|
|
err = a.DB.UpdateSignature(mbox.ID, id, name, contentHTML)
|
|
} else {
|
|
id, err = a.DB.CreateSignature(mbox.ID, name, contentHTML)
|
|
}
|
|
if err != nil {
|
|
a.Logger.Error("save signature for mailbox %d: %v", mbox.ID, err)
|
|
setFlash(w, "error", "Could not save the signature")
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
return
|
|
}
|
|
|
|
if forEmail := strings.TrimSpace(r.FormValue("default_for_email")); forEmail != "" {
|
|
if r.FormValue("default_new") != "" {
|
|
a.DB.SetSignatureAliasDefault(mbox.ID, id, forEmail, false)
|
|
}
|
|
if r.FormValue("default_reply") != "" {
|
|
a.DB.SetSignatureAliasDefault(mbox.ID, id, forEmail, true)
|
|
}
|
|
}
|
|
|
|
setFlash(w, "success", "Signature saved")
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
}
|
|
|
|
func (a *App) webmailSignatureDelete(w http.ResponseWriter, r *http.Request) {
|
|
mbox := mailboxFromContext(r)
|
|
id := int64(atoi(r.PathValue("id")))
|
|
if err := a.DB.DeleteSignature(mbox.ID, id); err != nil {
|
|
setFlash(w, "error", "Could not delete the signature")
|
|
} else {
|
|
setFlash(w, "success", "Signature deleted")
|
|
}
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
}
|
|
|
|
// webmailSignatureSetDefault marks a signature (or, when id=0, clears the flag
|
|
// entirely) as the mailbox's default for new messages or for reply/forward, per the
|
|
// "which" form field ("new" or "reply"). This is the mailbox's own primary-address
|
|
// default — see webmailSignatureSetAliasDefault for a specific send-as alias's.
|
|
func (a *App) webmailSignatureSetDefault(w http.ResponseWriter, r *http.Request) {
|
|
mbox := mailboxFromContext(r)
|
|
id := int64(atoi(r.PathValue("id")))
|
|
forReply := r.URL.Query().Get("which") == "reply"
|
|
if err := a.DB.SetDefaultSignature(mbox.ID, id, forReply); err != nil {
|
|
setFlash(w, "error", "Could not update the default signature")
|
|
} else {
|
|
setFlash(w, "success", "Default signature updated")
|
|
}
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
}
|
|
|
|
// webmailSignatureRemoveAliasDefault clears one alias's default-for-new or
|
|
// default-for-reply override (the little x on a signature's alias-scoped badge),
|
|
// falling back to the mailbox's own primary default for that alias again.
|
|
func (a *App) webmailSignatureRemoveAliasDefault(w http.ResponseWriter, r *http.Request) {
|
|
mbox := mailboxFromContext(r)
|
|
if err := r.ParseForm(); err != nil {
|
|
setFlash(w, "error", "Invalid form data")
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
return
|
|
}
|
|
forEmail := strings.TrimSpace(r.FormValue("for_email"))
|
|
forReply := r.FormValue("for_reply") != ""
|
|
if err := a.DB.ClearSignatureAliasDefault(mbox.ID, forEmail, forReply); err != nil {
|
|
setFlash(w, "error", "Could not remove the alias default")
|
|
} else {
|
|
setFlash(w, "success", "Alias default removed")
|
|
}
|
|
http.Redirect(w, r, MailboxPrefix+"/signatures", http.StatusFound)
|
|
}
|