mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* PLT-3647 Added config settings for email batching * PLT-3647 Refactored generation of email notification * PLT-3647 Added serverside code for email batching * PLT-3647 Updated settings UI to enable email batching * PLT-3647 Removed debug code * PLT-3647 Fixed 0-padding of minutes in batched notification * PLT-3647 Updated clientside UI for when email batching is disabled * Go fmt * PLT-3647 Changed email batching to be disabled by default * Updated batched email message * Added email batching toggle to system console * Changed Email Notifications > Immediate setting to a 30 second batch interval * Go fmt * Fixed link to Mattermost icon in batched email notification * Updated users to use 30 second email batching by default * Fully disabled email batching when clustering is enabled * Fixed email batching setting in the system console * Fixed casing of 'Send Email notifications' -> 'Send email notifications' * Updating UI Improvements for email batching (#3736) * Updated text for notification settings and SiteURL. * Prevented enabling email batching when SiteURL isn't set in the system console * Re-added a couple debug messages * Added warning text when clustering is enabled
121 lines
2.9 KiB
Go
121 lines
2.9 KiB
Go
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"html/template"
|
|
"net/http"
|
|
|
|
l4g "github.com/alecthomas/log4go"
|
|
"github.com/nicksnyder/go-i18n/i18n"
|
|
"gopkg.in/fsnotify.v1"
|
|
)
|
|
|
|
// Global storage for templates
|
|
var htmlTemplates *template.Template
|
|
|
|
type HTMLTemplate struct {
|
|
TemplateName string
|
|
Props map[string]interface{}
|
|
Html map[string]template.HTML
|
|
Locale string
|
|
}
|
|
|
|
func InitHTML() {
|
|
InitHTMLWithDir("templates")
|
|
}
|
|
|
|
func InitHTMLWithDir(dir string) {
|
|
|
|
if htmlTemplates != nil {
|
|
return
|
|
}
|
|
|
|
templatesDir := FindDir(dir)
|
|
l4g.Debug(T("api.api.init.parsing_templates.debug"), templatesDir)
|
|
var err error
|
|
if htmlTemplates, err = template.ParseGlob(templatesDir + "*.html"); err != nil {
|
|
l4g.Error(T("api.api.init.parsing_templates.error"), err)
|
|
}
|
|
|
|
// Watch the templates folder for changes.
|
|
watcher, err := fsnotify.NewWatcher()
|
|
if err != nil {
|
|
l4g.Error(T("web.create_dir.error"), err)
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case event := <-watcher.Events:
|
|
if event.Op&fsnotify.Write == fsnotify.Write {
|
|
l4g.Info(T("web.reparse_templates.info"), event.Name)
|
|
if htmlTemplates, err = template.ParseGlob(templatesDir + "*.html"); err != nil {
|
|
l4g.Error(T("web.parsing_templates.error"), err)
|
|
}
|
|
}
|
|
case err := <-watcher.Errors:
|
|
l4g.Error(T("web.dir_fail.error"), err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
err = watcher.Add(templatesDir)
|
|
if err != nil {
|
|
l4g.Error(T("web.watcher_fail.error"), err)
|
|
}
|
|
}
|
|
|
|
func NewHTMLTemplate(templateName string, locale string) *HTMLTemplate {
|
|
return &HTMLTemplate{
|
|
TemplateName: templateName,
|
|
Props: make(map[string]interface{}),
|
|
Html: make(map[string]template.HTML),
|
|
Locale: locale,
|
|
}
|
|
}
|
|
|
|
func (t *HTMLTemplate) addDefaultProps() {
|
|
var localT i18n.TranslateFunc
|
|
if len(t.Locale) > 0 {
|
|
localT = GetUserTranslations(t.Locale)
|
|
} else {
|
|
localT = T
|
|
}
|
|
|
|
t.Props["Footer"] = localT("api.templates.email_footer")
|
|
|
|
if *Cfg.EmailSettings.FeedbackOrganization != "" {
|
|
t.Props["Organization"] = localT("api.templates.email_organization") + *Cfg.EmailSettings.FeedbackOrganization
|
|
} else {
|
|
t.Props["Organization"] = ""
|
|
}
|
|
|
|
t.Html["EmailInfo"] = template.HTML(localT("api.templates.email_info",
|
|
map[string]interface{}{"SupportEmail": Cfg.SupportSettings.SupportEmail, "SiteName": Cfg.TeamSettings.SiteName}))
|
|
}
|
|
|
|
func (t *HTMLTemplate) Render() string {
|
|
t.addDefaultProps()
|
|
|
|
var text bytes.Buffer
|
|
|
|
if err := htmlTemplates.ExecuteTemplate(&text, t.TemplateName, t); err != nil {
|
|
l4g.Error(T("api.api.render.error"), t.TemplateName, err)
|
|
}
|
|
|
|
return text.String()
|
|
}
|
|
|
|
func (t *HTMLTemplate) RenderToWriter(w http.ResponseWriter) error {
|
|
t.addDefaultProps()
|
|
|
|
if err := htmlTemplates.ExecuteTemplate(w, t.TemplateName, t); err != nil {
|
|
l4g.Error(T("api.api.render.error"), t.TemplateName, err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|