Merge pull request #188 from taigaio/us/1680/email-redesign
Us/1680/email redesignremotes/origin/enhancement/email-actions
commit
fd0c4faf7b
|
@ -27,6 +27,7 @@ Unidecode==0.04.16
|
|||
raven==5.1.1
|
||||
bleach==1.4
|
||||
django-ipware==0.1.0
|
||||
premailer==2.8.1
|
||||
|
||||
# Comment it if you are using python >= 3.4
|
||||
enum34==1.0
|
||||
|
|
|
@ -29,7 +29,7 @@ from django.db import transaction as tx
|
|||
from django.db import IntegrityError
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from djmail.template_mail import MagicMailBuilder
|
||||
from djmail.template_mail import MagicMailBuilder, InlineCSSTemplateMail
|
||||
|
||||
from taiga.base import exceptions as exc
|
||||
from taiga.users.serializers import UserSerializer
|
||||
|
@ -46,7 +46,7 @@ def send_register_email(user) -> bool:
|
|||
"""
|
||||
cancel_token = get_token_for_user(user, "cancel_account")
|
||||
context = {"user": user, "cancel_token": cancel_token}
|
||||
mbuilder = MagicMailBuilder()
|
||||
mbuilder = MagicMailBuilder(template_mail_cls=InlineCSSTemplateMail)
|
||||
email = mbuilder.registered_user(user.email, context)
|
||||
return bool(email.send())
|
||||
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
|
||||
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
|
||||
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
from djmail.template_mail import MagicMailBuilder, InlineCSSTemplateMail
|
||||
|
||||
from taiga.projects.models import Project, Membership
|
||||
from taiga.projects.history.models import HistoryEntry
|
||||
from taiga.users.models import User
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
args = '<email>'
|
||||
help = 'Send an example of all emails'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
if len(args) != 1:
|
||||
print("Usage: ./manage.py test_emails <email-address>")
|
||||
return
|
||||
|
||||
test_email = args[0]
|
||||
|
||||
mbuilder = MagicMailBuilder(template_mail_cls=InlineCSSTemplateMail)
|
||||
|
||||
# Register email
|
||||
context = {"user": User.objects.all().order_by("?").first(), "cancel_token": "cancel-token"}
|
||||
email = mbuilder.registered_user(test_email, context)
|
||||
email.send()
|
||||
|
||||
# Membership invitation
|
||||
context = {"membership": Membership.objects.order_by("?").filter(user__isnull=True).first()}
|
||||
email = mbuilder.membership_invitation(test_email, context)
|
||||
email.send()
|
||||
|
||||
# Membership notification
|
||||
context = {"membership": Membership.objects.order_by("?").filter(user__isnull=False).first()}
|
||||
email = mbuilder.membership_notification(test_email, context)
|
||||
email.send()
|
||||
|
||||
# Feedback
|
||||
context = {
|
||||
"feedback_entry": {
|
||||
"full_name": "Test full name",
|
||||
"email": "test@email.com",
|
||||
"comment": "Test comment",
|
||||
},
|
||||
"extra": {
|
||||
"key1": "value1",
|
||||
"key2": "value2",
|
||||
},
|
||||
}
|
||||
email = mbuilder.feedback_notification(test_email, context)
|
||||
email.send()
|
||||
|
||||
# Password recovery
|
||||
context = {"user": User.objects.all().order_by("?").first()}
|
||||
email = mbuilder.password_recovery(test_email, context)
|
||||
email.send()
|
||||
|
||||
# Change email
|
||||
context = {"user": User.objects.all().order_by("?").first()}
|
||||
email = mbuilder.change_email(test_email, context)
|
||||
email.send()
|
||||
|
||||
# Notification emails
|
||||
notification_emails = [
|
||||
"issues/issue-change",
|
||||
"issues/issue-create",
|
||||
"issues/issue-delete",
|
||||
"milestones/milestone-change",
|
||||
"milestones/milestone-create",
|
||||
"milestones/milestone-delete",
|
||||
"projects/project-change",
|
||||
"projects/project-create",
|
||||
"projects/project-delete",
|
||||
"tasks/task-change",
|
||||
"tasks/task-create",
|
||||
"tasks/task-delete",
|
||||
"userstories/userstory-change",
|
||||
"userstories/userstory-create",
|
||||
"userstories/userstory-delete",
|
||||
"wiki/wikipage-change",
|
||||
"wiki/wikipage-create",
|
||||
"wiki/wikipage-delete",
|
||||
]
|
||||
|
||||
context = {
|
||||
"snapshot": HistoryEntry.objects.filter(is_snapshot=True).order_by("?")[0].snapshot,
|
||||
"project": Project.objects.all().order_by("?").first(),
|
||||
"changer": User.objects.all().order_by("?").first(),
|
||||
"history_entries": HistoryEntry.objects.all().order_by("?")[0:5],
|
||||
"user": User.objects.all().order_by("?").first(),
|
||||
}
|
||||
|
||||
for notification_email in notification_emails:
|
||||
cls = type("InlineCSSTemplateMail", (InlineCSSTemplateMail,), {"name": notification_email})
|
||||
email = cls()
|
||||
email.send(test_email, context)
|
|
@ -1,159 +1,431 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
{% set home_url = resolve_front_url("home") %}
|
||||
{% set home_url_name = "Taiga" %}
|
||||
|
||||
<html lang="en">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<!-- So that mobile webkit will display zoomed in -->
|
||||
<meta name="viewport" content="initial-scale=1.0">
|
||||
<!-- disable auto telephone linking in iOS -->
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<title>Taiga</title>
|
||||
<style type="text/css">
|
||||
/* /\/\/\/\/\/\/\/\/ CLIENT-SPECIFIC STYLES /\/\/\/\/\/\/\/\/ */
|
||||
#outlook a{padding:0;} /* Force Outlook to provide a "view in browser" message */
|
||||
.ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail to display emails at full width */
|
||||
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;} /* Prevent WebKit and Windows mobile changing default text sizes */
|
||||
table, td{mso-table-lspace:0pt; mso-table-rspace:0pt;} /* Remove spacing between tables in Outlook 2007 and up */
|
||||
img{-ms-interpolation-mode:bicubic;} /* Allow smoother rendering of resized image in Internet Explorer */
|
||||
|
||||
/* Resets: see reset.css for details */
|
||||
body {-webkit-text-size-adjust:none; -ms-text-size-adjust:none;}
|
||||
/* /\/\/\/\/\/\/\/\/ RESET STYLES /\/\/\/\/\/\/\/\/ */
|
||||
body{margin:0; padding:0;}
|
||||
table {border-spacing:0;}
|
||||
table td {border-collapse:collapse;}
|
||||
img{border:0; height:auto; line-height:100%; outline:none; text-decoration:none;}
|
||||
table{border-collapse:collapse !important;}
|
||||
body, #bodyTable, #bodyCell{height:100% !important; margin:0; padding:0; width:100% !important;}
|
||||
|
||||
/* Constrain email width for small screens */
|
||||
@media screen and (max-width: 600px) {
|
||||
table[class="container"] {
|
||||
width: 95% !important;
|
||||
}
|
||||
/* /\/\/\/\/\/\/\/\/ TEMPLATE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
#bodyCell{padding:20px;}
|
||||
#templateContainer{width:600px;}
|
||||
|
||||
/* ========== Page Styles ========== */
|
||||
|
||||
body, #bodyTable{
|
||||
background-color:#f5f5f5;
|
||||
}
|
||||
|
||||
/* Give content more room on mobile */
|
||||
@media screen and (max-width: 480px) {
|
||||
td[class="container-padding"] {
|
||||
padding-left: 12px !important;
|
||||
padding-right: 12px !important;
|
||||
}
|
||||
/**
|
||||
* @section email border
|
||||
*/
|
||||
#templateContainer{
|
||||
background-color:#FFF;
|
||||
border:1px solid #CDCDCD;
|
||||
}
|
||||
|
||||
|
||||
/* Styles for forcing columns to rows */
|
||||
@media only screen and (max-width : 600px) {
|
||||
|
||||
/* force container columns to (horizontal) blocks */
|
||||
td[class="force-col"] {
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
color: #6e6e6e !important;
|
||||
display:block;
|
||||
padding-right: 0 !important;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:25px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
table[class="col-3"] {
|
||||
/* unset table align="left/right" */
|
||||
float: none !important;
|
||||
|
||||
/**
|
||||
* @style heading 2
|
||||
*/
|
||||
h2{
|
||||
color: #6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:20px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Page
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
color:#6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
font-weight:normal;
|
||||
line-height:100%;
|
||||
font-weight:bold;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Page
|
||||
* @section heading 4
|
||||
*/
|
||||
h4{
|
||||
color:#808080 !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========== Header Styles ========== */
|
||||
|
||||
.headerContent {
|
||||
text-align: center;
|
||||
color:#b8b8b8 !important;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
margin-bottom:16px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#headerImage{
|
||||
height:auto;
|
||||
width:80px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
/* ========== Body Styles ========== */
|
||||
|
||||
/**
|
||||
* @tab Body
|
||||
* @section body style
|
||||
* @tip Set the background color and borders for your email's body area.
|
||||
*/
|
||||
#templateBody{
|
||||
background-color:#FFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
color:#505050;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
line-height:150%;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
padding-top:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link
|
||||
*/
|
||||
.bodyContent a:link, .bodyContent a:visited, /* Yahoo! Mail Override */ .bodyContent a .yshortcuts /* Yahoo! Mail Override */{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
a.button {
|
||||
background: #699b05;
|
||||
color: #fff;
|
||||
display: block;
|
||||
width: 50%;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
margin: 0 auto 16px;
|
||||
text-transform: uppercase;
|
||||
padding: .8rem 3rem;
|
||||
}
|
||||
|
||||
a.button:hover {
|
||||
background: #aad400;
|
||||
}
|
||||
|
||||
.bodyContent img{
|
||||
display:inline;
|
||||
height:auto;
|
||||
max-width:560px;
|
||||
}
|
||||
|
||||
.update-row h1,
|
||||
.update-row h2,
|
||||
.update-row h3 {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.update-row tr {
|
||||
border-bottom: 1px solid #cdcdcd;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.update-row tr:first-child,
|
||||
.update-row tr:last-child {
|
||||
border-bottom: 3px solid #cdcdcd;
|
||||
}
|
||||
|
||||
.update-row td {
|
||||
padding: 15px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.update-row td.update-row-name {
|
||||
width: 40%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.update-row td.update-row-from {
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:13px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.social-links a:link, .social-links a:visited{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
text-align: center;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
/* ========== Footer Styles ========== */
|
||||
|
||||
/**
|
||||
* @section footer style
|
||||
*/
|
||||
#templateFooter{
|
||||
background-color:#555555;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
color:#f5f5f5;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:10px;
|
||||
line-height:150%;
|
||||
padding-top:20px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Footer
|
||||
* @section footer link
|
||||
* @tip Set the styling for your email's footer links. Choose a color that helps them stand out from your text.
|
||||
*/
|
||||
.footerContent a:link, .footerContent a:visited, /* Yahoo! Mail Override */ .footerContent a .yshortcuts, .footerContent a span /* Yahoo! Mail Override */{
|
||||
/*@editable*/ color:#699b05;
|
||||
/*@editable*/ font-weight:normal;
|
||||
/*@editable*/ text-decoration:underline;
|
||||
}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ MOBILE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
@media only screen and (max-width: 480px){
|
||||
/* /\/\/\/\/\/\/ CLIENT-SPECIFIC MOBILE STYLES /\/\/\/\/\/\/ */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:none !important;} /* Prevent Webkit platforms from changing default text sizes */
|
||||
body{width:100% !important; min-width:100% !important;} /* Prevent iOS Mail from adding padding to the body */
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE RESET STYLES /\/\/\/\/\/\/ */
|
||||
#bodyCell{padding:10px !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE TEMPLATE STYLES /\/\/\/\/\/\/ */
|
||||
|
||||
/* ======== Page Styles ======== */
|
||||
|
||||
/**
|
||||
* @section template width
|
||||
*/
|
||||
#templateContainer{
|
||||
max-width:600px !important;
|
||||
width:100% !important;
|
||||
|
||||
/* change left/right padding and margins to top/bottom ones */
|
||||
margin-bottom: 12px;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
/* remove bottom border for last column/row */
|
||||
table[id="last-col-3"] {
|
||||
border-bottom: none !important;
|
||||
margin-bottom: 0;
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
font-size:18px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/* align images right and shrink them a bit */
|
||||
img[class="col-3-img"] {
|
||||
float: right;
|
||||
margin-left: 6px;
|
||||
max-width: 130px;
|
||||
}
|
||||
/**
|
||||
* @section heading 2
|
||||
*/
|
||||
h2{
|
||||
font-size:16px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
font-size:14px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
|
||||
/* ======== Header Styles ======== */
|
||||
|
||||
#templatePreheader{display:none !important;} /* Hide the template preheader to save space */
|
||||
|
||||
/**
|
||||
* @section header image
|
||||
*/
|
||||
#headerImage{
|
||||
height:auto !important;
|
||||
max-width:600px !important;
|
||||
width:20% !important;
|
||||
}
|
||||
|
||||
/* ======== Body Styles ======== */
|
||||
|
||||
/**
|
||||
* @tab Mobile Styles
|
||||
* @section body image
|
||||
* @tip Make the main body image fluid for portrait or landscape view adaptability, and set the image's original width as the max-width. If a fluid setting doesn't work, set the image width to half its original size instead.
|
||||
*/
|
||||
#bodyImage{
|
||||
height:auto !important;
|
||||
max-width:560px !important;
|
||||
width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
font-size:16px !important;
|
||||
line-height:125% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
.bodyContent a.button {
|
||||
font-size:14px !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* ======== Footer Styles ======== */
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
font-size:14px !important;
|
||||
line-height:115% !important;
|
||||
}
|
||||
|
||||
.footerContent a{display:block !important;} /* Place footer social and utility links on their own lines, for easier access */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body style="margin:20px auto; padding:10px 0;" bgcolor="#eee" leftmargin="0" topmargin="0"
|
||||
marginwidth="0" marginheight="0">
|
||||
<!-- background -->
|
||||
<table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0" bgcolor="#eee">
|
||||
<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
|
||||
<center>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="bodyTable">
|
||||
<tr>
|
||||
<td align="center" valign="top" bgcolor="#eee" style="background-color: #eee;">
|
||||
|
||||
<!-- container -->
|
||||
<table border="0" width="600" cellpadding="0" cellspacing="0" class="container"
|
||||
bgcolor="#f1f1f1">
|
||||
<thead>
|
||||
<td align="center" valign="top" id="bodyCell">
|
||||
<!-- BEGIN TEMPLATE // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" id="templateContainer">
|
||||
<tr>
|
||||
<th border="0" class="container-padding" bgcolor="#669933"
|
||||
style="background-color: #669900; margin-top: 20px;
|
||||
padding: 20px; font-size: 13px; line-height: 20px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
color: #FFF; border-bottom: 5px solid #333;" align="left">
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0"
|
||||
class="table-header">
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN HEADER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateHeader">
|
||||
<tr>
|
||||
<td>
|
||||
<td valign="top" class="headerContent">
|
||||
<img src="{{ static("emails/top-bg-update.png") }}" />
|
||||
<a href="{{ home_url }}"
|
||||
title="{{ home_url_name }}">
|
||||
<img src="{{ static("emails/email-logo.png") }}" alt="Taiga" height="32" />
|
||||
<img src="{{ static("emails/logo-color.png") }}" id="headerImage" alt="Taiga logo" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td border="0" style="background: #FFFFFF; padding: 20px;
|
||||
font-size: 14px; line-height: 20px;
|
||||
margin-bottom: 180px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
color: #6c6c6c;" align="left">
|
||||
<!-- BODY -->
|
||||
{% block body %}{% endblock %}
|
||||
{#
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0"
|
||||
class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>{{ project_name }}</h1>
|
||||
<h2>{{ type }}: {{ subject }}</h2>
|
||||
<p>Updated fields by <b>{{ user.get_full_name() }}</b></p>
|
||||
{% block body_changes %}
|
||||
<ul>
|
||||
<li><b>severity</b>: from "10" to "project 2 - Normal".</li>
|
||||
</ul>
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
#}
|
||||
<!-- // END HEADER -->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td border="0" style="background-color: #fff; padding: 0 20px;
|
||||
font-size: 14px; line-height: 20px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
color: #CCC;" align="left">
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN FOOTER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateFooter">
|
||||
<tr>
|
||||
<td valign="top" class="footerContent">
|
||||
{% block footer %}
|
||||
{#
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at:
|
||||
<a href="{{ final_url }}" style="color: #666;">
|
||||
{{ final_url_name }}
|
||||
</a>
|
||||
</p>
|
||||
#}
|
||||
{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<!-- // END FOOTER -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END TEMPLATE -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,409 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
{% set home_url = resolve_front_url("home") %}
|
||||
{% set home_url_name = "Taiga" %}
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<title>You have been Taigatized</title>
|
||||
<style type="text/css">
|
||||
/* /\/\/\/\/\/\/\/\/ CLIENT-SPECIFIC STYLES /\/\/\/\/\/\/\/\/ */
|
||||
#outlook a{padding:0;} /* Force Outlook to provide a "view in browser" message */
|
||||
.ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail to display emails at full width */
|
||||
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;} /* Prevent WebKit and Windows mobile changing default text sizes */
|
||||
table, td{mso-table-lspace:0pt; mso-table-rspace:0pt;} /* Remove spacing between tables in Outlook 2007 and up */
|
||||
img{-ms-interpolation-mode:bicubic;} /* Allow smoother rendering of resized image in Internet Explorer */
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ RESET STYLES /\/\/\/\/\/\/\/\/ */
|
||||
body{margin:0; padding:0;}
|
||||
img{border:0; height:auto; line-height:100%; outline:none; text-decoration:none;}
|
||||
table{border-collapse:collapse !important;}
|
||||
body, #bodyTable, #bodyCell{height:100% !important; margin:0; padding:0; width:100% !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ TEMPLATE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
#bodyCell{padding:20px;}
|
||||
#templateContainer{width:600px;}
|
||||
|
||||
/* ========== Page Styles ========== */
|
||||
|
||||
body, #bodyTable{
|
||||
background-color:#f5f5f5;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section email border
|
||||
*/
|
||||
#templateContainer{
|
||||
border:1px solid #CDCDCD;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
color: #fff !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:25px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @style heading 2
|
||||
*/
|
||||
h2{
|
||||
color: #b8b8b8 !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:20px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
color:#6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
font-weight:normal;
|
||||
line-height:100%;
|
||||
font-weight:bold;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 4
|
||||
*/
|
||||
h4{
|
||||
color:#808080 !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========== Header Styles ========== */
|
||||
|
||||
.headerContent {
|
||||
text-align: center;
|
||||
color:#fff !important;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
margin-bottom:16px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#headerImage{
|
||||
height:auto;
|
||||
width:80px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
/* ========== Body Styles ========== */
|
||||
|
||||
/**
|
||||
* @section body style
|
||||
*/
|
||||
#templateBody{
|
||||
background-color:#FFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
color:#505050;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
line-height:150%;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
padding-top:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link
|
||||
*/
|
||||
.bodyContent a:link, .bodyContent a:visited, /* Yahoo! Mail Override */ .bodyContent a .yshortcuts /* Yahoo! Mail Override */{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
.bodyContent a.button {
|
||||
background: #699b05;
|
||||
color: #fff;
|
||||
display: block;
|
||||
width: 50%;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
margin: 0 auto 16px;
|
||||
text-transform: uppercase;
|
||||
padding: .8rem 3rem;
|
||||
}
|
||||
|
||||
.bodyContent a.button:hover {
|
||||
background: #aad400;
|
||||
}
|
||||
|
||||
.bodyContent img{
|
||||
display:inline;
|
||||
height:auto;
|
||||
max-width:560px;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:13px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.social-links a:link, .social-links a:visited{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
text-align: center;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
/* ========== Footer Styles ========== */
|
||||
|
||||
/**
|
||||
* @section footer style
|
||||
*/
|
||||
#templateFooter{
|
||||
background-color:#555555;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
color:#f5f5f5;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:10px;
|
||||
line-height:150%;
|
||||
padding-top:20px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section footer link
|
||||
*/
|
||||
.footerContent a:link, .footerContent a:visited, /* Yahoo! Mail Override */ .footerContent a .yshortcuts, .footerContent a span /* Yahoo! Mail Override */{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ MOBILE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
@media only screen and (max-width: 480px){
|
||||
/* /\/\/\/\/\/\/ CLIENT-SPECIFIC MOBILE STYLES /\/\/\/\/\/\/ */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:none !important;} /* Prevent Webkit platforms from changing default text sizes */
|
||||
body{width:100% !important; min-width:100% !important;} /* Prevent iOS Mail from adding padding to the body */
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE RESET STYLES /\/\/\/\/\/\/ */
|
||||
#bodyCell{padding:10px !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE TEMPLATE STYLES /\/\/\/\/\/\/ */
|
||||
|
||||
/* ======== Page Styles ======== */
|
||||
|
||||
/**
|
||||
* @section template width
|
||||
*/
|
||||
#templateContainer{
|
||||
max-width:600px !important;
|
||||
/*@editable*/ width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
font-size:18px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 2
|
||||
*/
|
||||
h2{
|
||||
font-size:16px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
font-size:14px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
|
||||
/* ======== Header Styles ======== */
|
||||
|
||||
#templatePreheader{display:none !important;} /* Hide the template preheader to save space */
|
||||
|
||||
/**
|
||||
* @section header image
|
||||
*/
|
||||
#headerImage{
|
||||
height:auto !important;
|
||||
max-width:600px !important;
|
||||
width:20% !important;
|
||||
}
|
||||
|
||||
/* ======== Body Styles ======== */
|
||||
|
||||
/**
|
||||
* @section body image
|
||||
*/
|
||||
#bodyImage{
|
||||
height:auto !important;
|
||||
max-width:560px !important;
|
||||
width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
font-size:16px !important;
|
||||
line-height:125% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
.bodyContent a.button {
|
||||
font-size:14px !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* ======== Footer Styles ======== */
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
font-size:14px !important;
|
||||
line-height:115% !important;
|
||||
}
|
||||
|
||||
.footerContent a{display:block !important;} /* Place footer social and utility links on their own lines, for easier access */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
|
||||
<center>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="bodyTable">
|
||||
<tr>
|
||||
<td align="center" valign="top" id="bodyCell">
|
||||
<!-- BEGIN TEMPLATE // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" id="templateContainer">
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN HEADER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateHeader">
|
||||
<tr>
|
||||
<td valign="top" class="headerContent" background="{{ static("emails/top-bg-hero.png") }}" style="background-position: center center">
|
||||
<a href="{{ home_url }}" title="{{ home_url_name }}">
|
||||
<img src="{{ static("emails/logo.png") }}" alt="Taiga" id="headerImage" />
|
||||
</a>
|
||||
<h1>You have been Taigatized!</h1>
|
||||
<p>Welcome to Taiga, an Open Source, Agile Project Management Tool</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END HEADER -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateBody">
|
||||
<tr>
|
||||
<td valign="top" class="bodyContent">
|
||||
{% block body %}{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" class="social-links">
|
||||
<a href="https://twitter.com/taigaio" title="Follow us on Twitter">Twitter</a>
|
||||
<a href="https://github.com/taigaio" title="Get the code on Github">Github</a>
|
||||
<a href="https://taiga.io/" title="Visit our website">Taiga.io</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN FOOTER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateFooter">
|
||||
|
||||
<tr>
|
||||
<td valign="top" class="footerContent">
|
||||
{% block footer %}
|
||||
{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END FOOTER -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END TEMPLATE -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,454 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
{% set home_url = resolve_front_url("home") %}
|
||||
{% set home_url_name = "Taiga" %}
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<title>[Taiga] Jesús Espino updated the US #1680 "Rediseño de emails"</title>
|
||||
<style type="text/css">
|
||||
/* /\/\/\/\/\/\/\/\/ CLIENT-SPECIFIC STYLES /\/\/\/\/\/\/\/\/ */
|
||||
#outlook a{padding:0;} /* Force Outlook to provide a "view in browser" message */
|
||||
.ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail to display emails at full width */
|
||||
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;} /* Prevent WebKit and Windows mobile changing default text sizes */
|
||||
table, td{mso-table-lspace:0pt; mso-table-rspace:0pt;} /* Remove spacing between tables in Outlook 2007 and up */
|
||||
img{-ms-interpolation-mode:bicubic;} /* Allow smoother rendering of resized image in Internet Explorer */
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ RESET STYLES /\/\/\/\/\/\/\/\/ */
|
||||
body{margin:0; padding:0;}
|
||||
img{border:0; height:auto; line-height:100%; outline:none; text-decoration:none;}
|
||||
table{border-collapse:collapse !important;}
|
||||
body, #bodyTable, #bodyCell{height:100% !important; margin:0; padding:0; width:100% !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ TEMPLATE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
#bodyCell{padding:20px;}
|
||||
#templateContainer{width:600px;}
|
||||
|
||||
/* ========== Page Styles ========== */
|
||||
|
||||
body, #bodyTable{
|
||||
background-color:#f5f5f5;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section email border
|
||||
*/
|
||||
#templateContainer{
|
||||
background-color:#FFF;
|
||||
border:1px solid #CDCDCD;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
color: #6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:25px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @style heading 2
|
||||
*/
|
||||
h2{
|
||||
color: #6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:20px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Page
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
color:#6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
font-weight:normal;
|
||||
line-height:100%;
|
||||
font-weight:bold;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Page
|
||||
* @section heading 4
|
||||
*/
|
||||
h4{
|
||||
color:#808080 !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========== Header Styles ========== */
|
||||
|
||||
.headerContent {
|
||||
text-align: center;
|
||||
color:#b8b8b8 !important;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
margin-bottom:16px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#headerImage{
|
||||
height:auto;
|
||||
width:80px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
/* ========== Body Styles ========== */
|
||||
|
||||
/**
|
||||
* @tab Body
|
||||
* @section body style
|
||||
* @tip Set the background color and borders for your email's body area.
|
||||
*/
|
||||
#templateBody{
|
||||
background-color:#FFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
color:#505050;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
line-height:150%;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
padding-top:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link
|
||||
*/
|
||||
.bodyContent a:link, .bodyContent a:visited, /* Yahoo! Mail Override */ .bodyContent a .yshortcuts /* Yahoo! Mail Override */{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
a.button {
|
||||
background: #699b05;
|
||||
color: #fff;
|
||||
display: block;
|
||||
width: 50%;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
margin: 0 auto 16px;
|
||||
text-transform: uppercase;
|
||||
padding: .8rem 3rem;
|
||||
}
|
||||
|
||||
a.button:hover {
|
||||
background: #aad400;
|
||||
}
|
||||
|
||||
.bodyContent img{
|
||||
display:inline;
|
||||
height:auto;
|
||||
max-width:560px;
|
||||
}
|
||||
|
||||
.update-row h1,
|
||||
.update-row h2,
|
||||
.update-row h3 {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.update-row tr {
|
||||
border-bottom: 1px solid #cdcdcd;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.update-row tr:first-child,
|
||||
.update-row tr:last-child {
|
||||
border-bottom: 3px solid #cdcdcd;
|
||||
}
|
||||
|
||||
.update-row td {
|
||||
padding: 15px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.update-row td.update-row-name {
|
||||
width: 40%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.update-row td.update-row-from {
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:13px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.social-links a:link, .social-links a:visited{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
text-align: center;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
/* ========== Footer Styles ========== */
|
||||
|
||||
/**
|
||||
* @section footer style
|
||||
*/
|
||||
#templateFooter{
|
||||
background-color:#555555;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
color:#f5f5f5;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:10px;
|
||||
line-height:150%;
|
||||
padding-top:20px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Footer
|
||||
* @section footer link
|
||||
* @tip Set the styling for your email's footer links. Choose a color that helps them stand out from your text.
|
||||
*/
|
||||
.footerContent a:link, .footerContent a:visited, /* Yahoo! Mail Override */ .footerContent a .yshortcuts, .footerContent a span /* Yahoo! Mail Override */{
|
||||
/*@editable*/ color:#699b05;
|
||||
/*@editable*/ font-weight:normal;
|
||||
/*@editable*/ text-decoration:underline;
|
||||
}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ MOBILE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
@media only screen and (max-width: 480px){
|
||||
/* /\/\/\/\/\/\/ CLIENT-SPECIFIC MOBILE STYLES /\/\/\/\/\/\/ */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:none !important;} /* Prevent Webkit platforms from changing default text sizes */
|
||||
body{width:100% !important; min-width:100% !important;} /* Prevent iOS Mail from adding padding to the body */
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE RESET STYLES /\/\/\/\/\/\/ */
|
||||
#bodyCell{padding:10px !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE TEMPLATE STYLES /\/\/\/\/\/\/ */
|
||||
|
||||
/* ======== Page Styles ======== */
|
||||
|
||||
/**
|
||||
* @section template width
|
||||
*/
|
||||
#templateContainer{
|
||||
max-width:600px !important;
|
||||
width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
font-size:18px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 2
|
||||
*/
|
||||
h2{
|
||||
font-size:16px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
font-size:14px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
|
||||
/* ======== Header Styles ======== */
|
||||
|
||||
#templatePreheader{display:none !important;} /* Hide the template preheader to save space */
|
||||
|
||||
/**
|
||||
* @section header image
|
||||
*/
|
||||
#headerImage{
|
||||
height:auto !important;
|
||||
max-width:600px !important;
|
||||
width:20% !important;
|
||||
}
|
||||
|
||||
/* ======== Body Styles ======== */
|
||||
|
||||
/**
|
||||
* @tab Mobile Styles
|
||||
* @section body image
|
||||
* @tip Make the main body image fluid for portrait or landscape view adaptability, and set the image's original width as the max-width. If a fluid setting doesn't work, set the image width to half its original size instead.
|
||||
*/
|
||||
#bodyImage{
|
||||
height:auto !important;
|
||||
max-width:560px !important;
|
||||
width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
font-size:16px !important;
|
||||
line-height:125% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
.bodyContent a.button {
|
||||
font-size:14px !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* ======== Footer Styles ======== */
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
font-size:14px !important;
|
||||
line-height:115% !important;
|
||||
}
|
||||
|
||||
.footerContent a{display:block !important;} /* Place footer social and utility links on their own lines, for easier access */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
|
||||
<center>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="bodyTable">
|
||||
<tr>
|
||||
<td align="center" valign="top" id="bodyCell">
|
||||
<!-- BEGIN TEMPLATE // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" id="templateContainer">
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN HEADER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateHeader">
|
||||
<tr>
|
||||
<td valign="top" class="headerContent">
|
||||
<img src="{{ static("emails/top-bg-update.png") }}" />
|
||||
<a href="{{ home_url }}"
|
||||
title="{{ home_url_name }}">
|
||||
<img src="{{ static("emails/logo-color.png") }}" id="headerImage" alt="Taiga logo" />
|
||||
</a>
|
||||
{% block head %}
|
||||
{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END HEADER -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN BODY // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateBody">
|
||||
<tr>
|
||||
<td valign="top" class="bodyContent">
|
||||
<table class="update-row" border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" class="social-links">
|
||||
<a href="https://twitter.com/taigaio" title="Follow us on Twitter">Twitter</a>
|
||||
<a href="https://github.com/taigaio" title="Get the code on Github">Github</a>
|
||||
<a href="https://taiga.io/" title="Visit our website">Taiga.io</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END BODY -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN FOOTER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateFooter">
|
||||
<tr>
|
||||
<td valign="top" class="footerContent">
|
||||
{% block footer %}
|
||||
{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END FOOTER -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END TEMPLATE -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
|
@ -16,14 +16,14 @@
|
|||
|
||||
from django.conf import settings
|
||||
|
||||
from djmail.template_mail import MagicMailBuilder
|
||||
from djmail.template_mail import MagicMailBuilder, InlineCSSTemplateMail
|
||||
|
||||
|
||||
def send_feedback(feedback_entry, extra):
|
||||
support_email = settings.FEEDBACK_EMAIL
|
||||
|
||||
if support_email:
|
||||
mbuilder = MagicMailBuilder()
|
||||
mbuilder = MagicMailBuilder(template_mail_cls=InlineCSSTemplateMail)
|
||||
email = mbuilder.feedback_notification(support_email, {"feedback_entry": feedback_entry,
|
||||
"extra": extra})
|
||||
email.send()
|
||||
|
|
|
@ -1,29 +1,414 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<title>Taiga</title>
|
||||
<style type="text/css">
|
||||
/* /\/\/\/\/\/\/\/\/ CLIENT-SPECIFIC STYLES /\/\/\/\/\/\/\/\/ */
|
||||
#outlook a{padding:0;} /* Force Outlook to provide a "view in browser" message */
|
||||
.ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail to display emails at full width */
|
||||
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;} /* Prevent WebKit and Windows mobile changing default text sizes */
|
||||
table, td{mso-table-lspace:0pt; mso-table-rspace:0pt;} /* Remove spacing between tables in Outlook 2007 and up */
|
||||
img{-ms-interpolation-mode:bicubic;} /* Allow smoother rendering of resized image in Internet Explorer */
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="4" cellspacing="10" class="table-body" style="border-collapse: collapse;">
|
||||
/* /\/\/\/\/\/\/\/\/ RESET STYLES /\/\/\/\/\/\/\/\/ */
|
||||
body{margin:0; padding:0;}
|
||||
img{border:0; height:auto; line-height:100%; outline:none; text-decoration:none;}
|
||||
table{border-collapse:collapse !important;}
|
||||
body, #bodyTable, #bodyCell{height:100% !important; margin:0; padding:0; width:100% !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ TEMPLATE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
#bodyCell{padding:20px;}
|
||||
#templateContainer{width:600px;}
|
||||
|
||||
/* ========== Page Styles ========== */
|
||||
|
||||
body, #bodyTable{
|
||||
background-color:#f5f5f5;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section email border
|
||||
*/
|
||||
#templateContainer{
|
||||
background-color:#FFF;
|
||||
border:1px solid #CDCDCD;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
color: #6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:25px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @style heading 2
|
||||
*/
|
||||
h2{
|
||||
color: #6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial;
|
||||
font-size:20px;
|
||||
font-style:normal;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Page
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
color:#6e6e6e !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
font-weight:normal;
|
||||
line-height:100%;
|
||||
font-weight:bold;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Page
|
||||
* @section heading 4
|
||||
*/
|
||||
h4{
|
||||
color:#808080 !important;
|
||||
display:block;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
line-height:100%;
|
||||
letter-spacing:normal;
|
||||
margin-top:0;
|
||||
margin-right:0;
|
||||
margin-bottom:16px;
|
||||
margin-left:0;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========== Header Styles ========== */
|
||||
|
||||
.headerContent {
|
||||
text-align: center;
|
||||
color:#b8b8b8 !important;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:14px;
|
||||
margin-bottom:16px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
#headerImage{
|
||||
height:auto;
|
||||
width:80px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
|
||||
/* ========== Body Styles ========== */
|
||||
|
||||
/**
|
||||
* @tab Body
|
||||
* @section body style
|
||||
* @tip Set the background color and borders for your email's body area.
|
||||
*/
|
||||
#templateBody{
|
||||
background-color:#FFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
color:#505050;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:16px;
|
||||
line-height:150%;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
padding-top:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link
|
||||
*/
|
||||
.bodyContent a:link, .bodyContent a:visited, /* Yahoo! Mail Override */ .bodyContent a .yshortcuts /* Yahoo! Mail Override */{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
a.button {
|
||||
background: #699b05;
|
||||
color: #fff;
|
||||
display: block;
|
||||
width: 50%;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
margin: 0 auto 16px;
|
||||
text-transform: uppercase;
|
||||
padding: .8rem 3rem;
|
||||
}
|
||||
|
||||
a.button:hover {
|
||||
background: #aad400;
|
||||
}
|
||||
|
||||
.bodyContent img{
|
||||
display:inline;
|
||||
height:auto;
|
||||
max-width:560px;
|
||||
}
|
||||
|
||||
.update-row h1,
|
||||
.update-row h2,
|
||||
.update-row h3 {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.update-row tr {
|
||||
border-bottom: 1px solid #cdcdcd;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.update-row tr:first-child,
|
||||
.update-row tr:last-child {
|
||||
border-bottom: 3px solid #cdcdcd;
|
||||
}
|
||||
|
||||
.update-row td {
|
||||
padding: 15px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.update-row td.update-row-name {
|
||||
width: 40%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.update-row td.update-row-from {
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
|
||||
.social-links {
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:13px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
.social-links a:link, .social-links a:visited{
|
||||
color:#699b05;
|
||||
font-weight:normal;
|
||||
text-decoration:underline;
|
||||
text-align: center;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
/* ========== Footer Styles ========== */
|
||||
|
||||
/**
|
||||
* @section footer style
|
||||
*/
|
||||
#templateFooter{
|
||||
background-color:#555555;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
color:#f5f5f5;
|
||||
font-family: 'Open Sans', Arial, Helvetica;
|
||||
font-size:10px;
|
||||
line-height:150%;
|
||||
padding-top:20px;
|
||||
padding-right:20px;
|
||||
padding-bottom:20px;
|
||||
padding-left:20px;
|
||||
text-align:left;
|
||||
}
|
||||
|
||||
/**
|
||||
* @tab Footer
|
||||
* @section footer link
|
||||
* @tip Set the styling for your email's footer links. Choose a color that helps them stand out from your text.
|
||||
*/
|
||||
.footerContent a:link, .footerContent a:visited, /* Yahoo! Mail Override */ .footerContent a .yshortcuts, .footerContent a span /* Yahoo! Mail Override */{
|
||||
/*@editable*/ color:#699b05;
|
||||
/*@editable*/ font-weight:normal;
|
||||
/*@editable*/ text-decoration:underline;
|
||||
}
|
||||
|
||||
/* /\/\/\/\/\/\/\/\/ MOBILE STYLES /\/\/\/\/\/\/\/\/ */
|
||||
|
||||
@media only screen and (max-width: 480px){
|
||||
/* /\/\/\/\/\/\/ CLIENT-SPECIFIC MOBILE STYLES /\/\/\/\/\/\/ */
|
||||
body, table, td, p, a, li, blockquote{-webkit-text-size-adjust:none !important;} /* Prevent Webkit platforms from changing default text sizes */
|
||||
body{width:100% !important; min-width:100% !important;} /* Prevent iOS Mail from adding padding to the body */
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE RESET STYLES /\/\/\/\/\/\/ */
|
||||
#bodyCell{padding:10px !important;}
|
||||
|
||||
/* /\/\/\/\/\/\/ MOBILE TEMPLATE STYLES /\/\/\/\/\/\/ */
|
||||
|
||||
/* ======== Page Styles ======== */
|
||||
|
||||
/**
|
||||
* @section template width
|
||||
*/
|
||||
#templateContainer{
|
||||
max-width:600px !important;
|
||||
width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 1
|
||||
*/
|
||||
h1{
|
||||
font-size:18px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 2
|
||||
*/
|
||||
h2{
|
||||
font-size:16px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section heading 3
|
||||
*/
|
||||
h3{
|
||||
font-size:14px !important;
|
||||
line-height:100% !important;
|
||||
}
|
||||
|
||||
|
||||
/* ======== Header Styles ======== */
|
||||
|
||||
#templatePreheader{display:none !important;} /* Hide the template preheader to save space */
|
||||
|
||||
/**
|
||||
* @section header image
|
||||
*/
|
||||
#headerImage{
|
||||
height:auto !important;
|
||||
max-width:600px !important;
|
||||
width:20% !important;
|
||||
}
|
||||
|
||||
/* ======== Body Styles ======== */
|
||||
|
||||
/**
|
||||
* @tab Mobile Styles
|
||||
* @section body image
|
||||
* @tip Make the main body image fluid for portrait or landscape view adaptability, and set the image's original width as the max-width. If a fluid setting doesn't work, set the image width to half its original size instead.
|
||||
*/
|
||||
#bodyImage{
|
||||
height:auto !important;
|
||||
max-width:560px !important;
|
||||
width:100% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body text
|
||||
*/
|
||||
.bodyContent{
|
||||
font-size:16px !important;
|
||||
line-height:125% !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* @section body link button class
|
||||
*/
|
||||
.bodyContent a.button {
|
||||
font-size:14px !important;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* ======== Footer Styles ======== */
|
||||
|
||||
/**
|
||||
* @section footer text
|
||||
*/
|
||||
.footerContent{
|
||||
font-size:14px !important;
|
||||
line-height:115% !important;
|
||||
}
|
||||
|
||||
.footerContent a{display:block !important;} /* Place footer social and utility links on their own lines, for easier access */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
|
||||
<center>
|
||||
<table align="center" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" id="bodyTable">
|
||||
<tr>
|
||||
<td valign="top" style="border-top: 1px solid gray; border-bottom: 1px solid gray;">
|
||||
<strong>From:</strong>
|
||||
</td>
|
||||
<td style="border-top: 1px solid gray; border-bottom: 1px solid gray;">
|
||||
{{ feedback_entry.full_name }} [{{ feedback_entry.email }}]
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border-top: 1px solid gray; border-bottom: 1px solid gray;">
|
||||
<strong>Comment:</strong>
|
||||
</td>
|
||||
<td style="border-top: 1px solid gray; border-bottom: 1px solid gray;">
|
||||
{{ feedback_entry.comment|linebreaks }}
|
||||
<td align="center" valign="top" id="bodyCell">
|
||||
<!-- BEGIN TEMPLATE // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" id="templateContainer">
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN HEADER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateHeader">
|
||||
<tr>
|
||||
<td valign="top" class="headerContent">
|
||||
<img src="{{ static("emails/top-bg-update.png") }}" />
|
||||
<a href="{{ home_url }}" title="{{ home_url_name }}">
|
||||
<img src="{{ static("emails/logo-color.png") }}" id="headerImage" alt="Taiga logo" />
|
||||
</a>
|
||||
|
||||
<h1>Feedback</h1>
|
||||
<p>Taiga has received feedback from {{ feedback_entry.full_name }} <{{ feedback_entry.email }}></p>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateBody">
|
||||
<tr>
|
||||
<td colspan="2" valign="top" class="bodyContent">
|
||||
<h3>Comment</h3>
|
||||
<p>{{ feedback_entry.comment }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{% if extra %}
|
||||
<tr>
|
||||
<td valign="top" style="border-top: 1px solid gray; border-bottom: 1px solid gray;">
|
||||
<strong>Extra:</strong>
|
||||
</td>
|
||||
<td style="border-top: 1px solid gray; border-bottom: 1px solid gray;">
|
||||
<td valign="top" valign="top" class="bodyContent">
|
||||
<h3>Extra:</h3>
|
||||
<dl>
|
||||
{% for k, v in extra.items() %}
|
||||
<dt>{{ k }}</dt>
|
||||
|
@ -31,7 +416,36 @@
|
|||
{% endfor %}
|
||||
</dl>
|
||||
</td>
|
||||
</tr
|
||||
{% endif %}>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END HEADER -->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<!-- BEGIN FOOTER // -->
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" id="templateFooter">
|
||||
<tr>
|
||||
<td valign="top" class="footerContent">
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END FOOTER -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<!-- // END TEMPLATE -->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -173,7 +173,7 @@ def is_hidden_snapshot(obj:FrozenDiff) -> bool:
|
|||
nfields = _not_important_fields[content_type]
|
||||
result = snapshot_fields - nfields
|
||||
|
||||
if len(result) == 0:
|
||||
if snapshot_fields and len(result) == 0:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
|
|
@ -9,141 +9,162 @@
|
|||
"us_order"
|
||||
] %}
|
||||
|
||||
<dl>
|
||||
{% for field_name, values in changed_fields.items() %}
|
||||
{% if field_name not in excluded_fields %}
|
||||
<dt style="background: #669933; padding: 5px 15px; color: #fff">
|
||||
<b>{{ verbose_name(object, field_name) }}</b>
|
||||
</dt>
|
||||
|
||||
{# POINTS #}
|
||||
{% if field_name == "points" %}
|
||||
|
||||
{% for role, points in values.items() %}
|
||||
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff">
|
||||
<b>{{ role }}</b>
|
||||
</dd>
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<b>to:</b> <i>{{ points.1|linebreaksbr }}</i>
|
||||
</dd>
|
||||
<dd style="padding: 5px 15px; color: #bbb">
|
||||
<b>from:</b> <i>{{ points.0|linebreaksbr }}</i>
|
||||
</dd>
|
||||
<tr>
|
||||
<td valign="middle" rowspan="2" class="update-row-name">
|
||||
<h3>{{ role }} role points</h3>
|
||||
</td>
|
||||
<td valign="top" class="update-row-from">
|
||||
<span>from</span><br>
|
||||
<strong>{{ points.1 }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<span>to</span><br>
|
||||
<strong>{{ points.0 }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
{# ATTACHMENTS #}
|
||||
{% elif field_name == "attachments" %}
|
||||
|
||||
{% if values.new %}
|
||||
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff">
|
||||
<b>{{ _("Added") }}</b>
|
||||
</dd>
|
||||
|
||||
{% for att in values['new']%}
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<a href="{{ att.url }}" target="_blank" style="font-weight: bold; color: #444">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>{{ _("Added new attachment") }}</h3>
|
||||
<p>
|
||||
<a href="{{ att.url }}" target="_blank">
|
||||
{{ att.filename|linebreaksbr }}
|
||||
</a>
|
||||
{% if att.description %}<i> {{ att.description|linebreaksbr }}</i>{% endif %}
|
||||
</dd>
|
||||
</p>
|
||||
{% if att.description %}
|
||||
<p>{{ att.description|linebreaksbr }}</p>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if values.changed %}
|
||||
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff">
|
||||
<b>{{ _("Changed") }}</b>
|
||||
</dd>
|
||||
|
||||
{% for att in values['changed'] %}
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<a href="{{ att.url }}" target="_blank" style="font-weight: bold; color: #444">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>{{ _("Updated attachment") }}</h3>
|
||||
<p>
|
||||
<a href="{{ att.url }}" target="_blank">
|
||||
{{ att.filename|linebreaksbr }}
|
||||
</a>
|
||||
<ul>
|
||||
{% if att.changes.is_deprecated %}
|
||||
{% if att.changes.is_deprecated.1 %}
|
||||
<li>to <i>deprecated</i></li>
|
||||
[<i>deprecated</i>]
|
||||
{% else %}
|
||||
<li>to <i>not deprecated</i></li>
|
||||
[<i>not deprecated</i>]
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</a>
|
||||
</p>
|
||||
{% if att.changes.description %}
|
||||
<li>description to <i>{{ att.changes.description.1 }}</i></li>
|
||||
<p>{{ att.changes.description.1 }}</p>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</dd>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if values.deleted %}
|
||||
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff">
|
||||
<b>{{ _("Deleted") }}</b>
|
||||
</dd>
|
||||
|
||||
{% for att in values['deleted']%}
|
||||
<dd style="padding: 5px 15px; color: #bbb">
|
||||
<i>{{ att.filename|linebreaksbr }}</i>
|
||||
</dd>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>{{ _("Deleted attachment") }}</h3>
|
||||
{% if att.changes.description %}
|
||||
<p>{{ att.filename|linebreaksbr }}</p>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{# TAGS AND WATCHERS #}
|
||||
{% elif field_name in ["tags", "watchers"] %}
|
||||
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<b>to:</b> <i>{{ ', '.join(values.1)|linebreaksbr }}</i>
|
||||
</dd>
|
||||
|
||||
{% if values.0 %}
|
||||
<dd style="padding: 5px 15px; color: #bbb">
|
||||
<b>from:</b> <i>{{ ', '.join(values.0)|linebreaksbr }}</i>
|
||||
</dd>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<td valign="middle" rowspan="2" class="update-row-name">
|
||||
<h3>{{ field_name }}</h3>
|
||||
</td>
|
||||
<td valign="top" class="update-row-from">
|
||||
<span>from</span><br>
|
||||
<strong>{{ ', '.join(values.0)|linebreaksbr }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<span>to</span><br>
|
||||
<strong>{{ ', '.join(values.1)|linebreaksbr }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{# DESCRIPTIONS #}
|
||||
{% elif field_name in ["description_diff"] %}
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<b>diff:</b> <i>{{ mdrender(project, values.1) }}</i>
|
||||
</dd>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>Description diff</h3>
|
||||
<p>{{ mdrender(project, values.1) }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{# CONTENT #}
|
||||
{% elif field_name in ["content_diff"] %}
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<b>diff:</b> <i>{{ mdrender(project, values.1) }}</i>
|
||||
</dd>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>Content diff</h3>
|
||||
<p>{{ mdrender(project, values.1) }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{# ASSIGNED TO #}
|
||||
{% elif field_name == "assigned_to" %}
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
{% if values.1 != None and values.1 != "" %}
|
||||
<b>to:</b> <i>{{ values.1|linebreaksbr }}</i>
|
||||
{% else %}
|
||||
<b>to:</b> <i>{{ _("Unassigned") }}</i>
|
||||
{% endif %}
|
||||
</dd>
|
||||
|
||||
<dd style="padding: 5px 15px; color: #bbb">
|
||||
<tr>
|
||||
<td valign="middle" rowspan="2" class="update-row-name">
|
||||
<h3>{{ field_name }}</h3>
|
||||
</td>
|
||||
<td valign="top" class="update-row-from">
|
||||
{% if values.0 != None and values.0 != "" %}
|
||||
<b>from:</b> <i>{{ values.0|linebreaksbr }}</i>
|
||||
<span>from</span><br>
|
||||
<strong>{{ values.0|linebreaksbr }}</strong>
|
||||
{% else %}
|
||||
<b>from:</b> <i>{{ _("Unassigned") }}</i>
|
||||
<span>from</span><br>
|
||||
<strong>{{ _("Unassigned") }}</strong>
|
||||
{% endif %}
|
||||
</dd>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
{% if values.1 != None and values.1 != "" %}
|
||||
<span>to</span><br>
|
||||
<strong>{{ values.1|linebreaksbr }}</strong>
|
||||
{% else %}
|
||||
<span>to</span><br>
|
||||
<strong>{{ _("Unassigned") }}</strong>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{# * #}
|
||||
{% else %}
|
||||
{% if values.1 != None and values.1 != "" %}
|
||||
<dd style="background: #eee; padding: 5px 15px; color: #444">
|
||||
<b>to:</b> <i>{{ values.1|linebreaksbr }}</i>
|
||||
</dd>
|
||||
{% endif %}
|
||||
|
||||
{% if values.0 != None and values.0 != "" %}
|
||||
<dd style="padding: 5px 15px; color: #bbb">
|
||||
<b>from:</b> <i>{{ values.0|linebreaksbr }}</i>
|
||||
</dd>
|
||||
<tr>
|
||||
<td valign="middle" rowspan="2" class="update-row-name">
|
||||
<h3>{{ field_name }}</h3>
|
||||
</td>
|
||||
<td valign="top" class="update-row-from">
|
||||
<span>from</span><br>
|
||||
<strong>{{ values.1|linebreaksbr }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<span>to</span><br>
|
||||
<strong>{{ values.0|linebreaksbr }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
</dl>
|
||||
|
|
|
@ -198,8 +198,8 @@ def _make_template_mail(name:str):
|
|||
instance for specified name, and return an instance
|
||||
of it.
|
||||
"""
|
||||
cls = type("TemplateMail",
|
||||
(template_mail.TemplateMail,),
|
||||
cls = type("InlineCSSTemplateMail",
|
||||
(template_mail.InlineCSSTemplateMail,),
|
||||
{"name": name})
|
||||
|
||||
return cls()
|
||||
|
@ -250,7 +250,8 @@ def send_sync_notifications(notification_id):
|
|||
history_entries = tuple(notification.history_entries.all().order_by("created_at"))
|
||||
obj, _ = get_last_snapshot_for_key(notification.key)
|
||||
|
||||
context = {"snapshot": obj.snapshot,
|
||||
context = {
|
||||
"snapshot": obj.snapshot,
|
||||
"project": notification.project,
|
||||
"changer": notification.owner,
|
||||
"history_entries": history_entries}
|
||||
|
@ -260,6 +261,7 @@ def send_sync_notifications(notification_id):
|
|||
email = _make_template_mail(template_name)
|
||||
|
||||
for user in notification.notify_users.distinct():
|
||||
context["user"] = user
|
||||
email.send(user.email, context)
|
||||
|
||||
notification.delete()
|
||||
|
|
|
@ -1,30 +1,42 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/updates.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("issue", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View issue #{0}".format(snapshot.ref) %}
|
||||
|
||||
{% block head %}
|
||||
<h1>Issue #{{ snapshot.ref }} {{ snapshot.subject }} updated</h1>
|
||||
<p>Hello {{ user.get_full_name() }}, <br> {{ changer.get_full_name() }} has updated an issue on {{ project.name }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See Issue #{{ snapshot.ref }}: {{ snapshot.subject }} in Taiga">See Issue</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>Issue #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
<th colspan="2"><h2>Updates</h2></th>
|
||||
</tr>
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
<p>Comment <b>{{ mdrender(project, entry.comment) }}</b></p>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>Comment</h3>
|
||||
<p>{{ mdrender(project, entry.comment) }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% set changed_fields = entry.values_diff %}
|
||||
{% if changed_fields %}
|
||||
{% include "emails/includes/fields_diff-html.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
{% set final_url = resolve_front_url("issue", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View issue #{0}".format(snapshot.ref) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- Issue #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Updated by {{ changer.get_full_name() }}
|
||||
Issue #{{ snapshot.ref }} {{ snapshot.subject }} updated
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has updated an issue on {{ project.name }}
|
||||
See issue in Taiga {{ final_url_name }} ({{ final_url }})
|
||||
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
Comment: {{ entry.comment|linebreaksbr }}
|
||||
|
@ -13,5 +14,3 @@
|
|||
{% include "emails/includes/fields_diff-text.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
|
|
|
@ -4,18 +4,21 @@
|
|||
{% set final_url_name = "Taiga - View issue #{0}".format(snapshot.ref) %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>Issue #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Created by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>New issue created</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has created a new issue on {{ project.name }}</p>
|
||||
<p>Issue #{{ snapshot.ref }} {{ snapshot.subject }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See #{{ snapshot.ref }} {{ snapshot.subject }}">See issue</a>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
{% set final_url = resolve_front_url("issue", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View issue #{0}".format(snapshot.ref) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- US #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Created by {{ changer.get_full_name() }}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
New issue created
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has created a new issue on {{ project.name }}
|
||||
See issue #{{ snapshot.ref }} {{ snapshot.subject }} at {{ final_url_name }} ({{ final_url }})
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>{{ project.name }}</h1>
|
||||
<h2>Issue #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Deleted by <b>{{ changer.get_full_name() }}</b></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>Issue deleted</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has deleted an issue on {{ project.name }}</p>
|
||||
<p>Issue #{{ snapshot.ref }} {{ snapshot.subject }}</p>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
- Project: {{ project.name }}
|
||||
- Issue #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Deleted by {{ changer.get_full_name() }}
|
||||
Issue deleted
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has deleted an issue on {{ project.name }}
|
||||
Issue #{{ snapshot.ref }} {{ snapshot.subject }}
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/updates.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("taskboard", project.slug, snapshot.slug) %}
|
||||
{% set final_url_name = "Taiga - View milestone #{0}".format(snapshot.slug) %}
|
||||
|
@ -23,8 +23,15 @@
|
|||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -14,8 +14,15 @@
|
|||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -12,3 +12,14 @@
|
|||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/updates.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("project-admin", snapshot.slug) %}
|
||||
{% set final_url_name = "Taiga - View Project #{0}".format(snapshot.slug) %}
|
||||
|
@ -22,8 +22,15 @@
|
|||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
{% if entry.comment %}
|
||||
Comment: {{ entry.comment|linebreaksbr }}
|
||||
{% endif %}
|
||||
|
||||
{% set changed_fields = entry.values_diff %}
|
||||
{% for field_name, values in changed_fields.items() %}
|
||||
* {{ verbose_name(object, field_name) }}</b>: from '{{ values.0 }}' to '{{ values.1 }}'.
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
{% extends "emails/hero.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("project-admin", snapshot.slug) %}
|
||||
{% set final_url_name = "Taiga - View Project #{0}".format(snapshot.slug) %}
|
||||
|
||||
|
@ -13,7 +15,13 @@
|
|||
</table>
|
||||
{% endblock %}
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -10,3 +10,15 @@
|
|||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,30 +1,42 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/updates.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("task", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View task #{0}".format(snapshot.ref) %}
|
||||
|
||||
{% block head %}
|
||||
<h1>Task #{{ snapshot.ref }} {{ snapshot.subject }} updated</h1>
|
||||
<p>Hello {{ user.get_full_name() }}, <br> {{ changer.get_full_name() }} has updated a task on {{ project.name }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See task in Taiga">See task</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>Task #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
<th colspan="2"><h2>Updates</h2></th>
|
||||
</tr>
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
<p>Comment <b>{{ mdrender(project, entry.comment) }}</b></p>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>Comment</h3>
|
||||
<p>{{ mdrender(project, entry.comment) }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% set changed_fields = entry.values_diff %}
|
||||
{% if changed_fields %}
|
||||
{% include "emails/includes/fields_diff-html.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
{% set final_url = resolve_front_url("task", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View task #{0}".format(snapshot.ref) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- Task #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Updated by {{ changer.get_full_name() }}
|
||||
Task #{{ snapshot.ref }} {{ snapshot.subject }} updated
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has updated a task on {{ project.name }}
|
||||
|
||||
See task at {{ final_url_name }} ({{ final_url }})
|
||||
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
Comment: {{ entry.comment|linebreaksbr }}
|
||||
|
@ -13,5 +15,3 @@
|
|||
{% include "emails/includes/fields_diff-text.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
|
|
|
@ -4,19 +4,22 @@
|
|||
{% set final_url_name = "Taiga - View task #{0}".format(snapshot.ref) %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>Task #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Created by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<h1>New task created</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has created a new task on {{ project.name }}</p>
|
||||
<p>Task #{{ snapshot.ref }} {{ snapshot.subject }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See #{{ snapshot.ref }} {{ snapshot.subject }}">See task</a>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
{% set final_url = resolve_front_url("task", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View task #{0}".format(snapshot.ref) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- Task #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Created by {{ changer.get_full_name() }}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
New task created
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has created a new task on {{ project.name }}
|
||||
See task #{{ snapshot.ref }} {{ snapshot.subject }} at {{ final_url_name }} ({{ final_url }})
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,14 +1,21 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>{{ project.name }}</h1>
|
||||
<h2>Task #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Deleted by <b>{{ changer.get_full_name() }}</b></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>Task deleted</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has deleted a task on {{ project.name }}</p>
|
||||
<p>Task #{{ snapshot.ref }} {{ snapshot.subject }}</p>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
- Project: {{ project.name }}
|
||||
- Task #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Deleted by {{ changer.get_full_name() }}
|
||||
|
||||
Task deleted
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has deleted a task on {{ project.name }}
|
||||
Task #{{ snapshot.ref }} {{ snapshot.subject }}
|
||||
|
|
|
@ -1,30 +1,42 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/updates.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("userstory", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View US #{0}".format(snapshot.ref) %}
|
||||
|
||||
{% block head %}
|
||||
<h1>User story #{{ snapshot.ref }} {{ snapshot.subject }} updated</h1>
|
||||
<p>Hello {{ user.get_full_name() }}, <br> {{ changer.get_full_name() }} has updated a user story on {{ project.name }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See Issue #{{ snapshot.ref }}: {{ snapshot.subject }} in Taiga">See Issue</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>US #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
<th colspan="2"><h2>Updates</h2></th>
|
||||
</tr>
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
<p>Comment <b>{{ mdrender(project, entry.comment) }}</b></p>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>Comment</h3>
|
||||
<p>{{ mdrender(project, entry.comment) }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% set changed_fields = entry.values_diff %}
|
||||
{% if changed_fields %}
|
||||
{% include "emails/includes/fields_diff-html.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
{% set final_url = resolve_front_url("userstory", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View US #{0}".format(snapshot.ref) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- US #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Updated by {{ changer.get_full_name() }}
|
||||
User story #{{ snapshot.ref }} {{ snapshot.subject }} updated
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has updated a user story on {{ project.name }}
|
||||
See user story in Taiga {{ final_url_name }} ({{ final_url }})
|
||||
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
Comment: {{ entry.comment|linebreaksbr }}
|
||||
|
@ -13,5 +14,3 @@
|
|||
{% include "emails/includes/fields_diff-text.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
|
|
|
@ -4,18 +4,21 @@
|
|||
{% set final_url_name = "Taiga - View US #{0}".format(snapshot.ref) %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>US #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Created by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>New user story created</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has created a new user story on {{ project.name }}</p>
|
||||
<p>User story #{{ snapshot.ref }} {{ snapshot.subject }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See #{{ snapshot.ref }} {{ snapshot.subject }}">See user story</a>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{% set final_url = resolve_front_url("userstory", project.slug, snapshot.ref) %}
|
||||
{% set final_url_name = "Taiga - View US #{0}".format(snapshot.ref) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- US #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Created by {{ changer.get_full_name() }}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
New user story created
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has created a new user story on {{ project.name }}
|
||||
User story #{{ snapshot.ref }} {{ snapshot.subject }}
|
||||
More info at {{ final_url_name }} ({{ final_url }})
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>{{ project.name }}</h1>
|
||||
<h2>US #{{ snapshot.ref }}: {{ snapshot.subject }}</h2>
|
||||
<p>Deleted by <b>{{ changer.get_full_name() }}</b></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>User story deleted</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has deleted a user story on {{ project.name }}</p>
|
||||
<p>User story #{{ snapshot.ref }} {{ snapshot.subject }}</p>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
- Project: {{ project.name }}
|
||||
- US #{{ snapshot.ref }}: {{ snapshot.subject }}
|
||||
- Deleted by {{ changer.get_full_name() }}
|
||||
User story deleted
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} hasdeleted a user story on {{ project.name }}
|
||||
User story #{{ snapshot.ref }} {{ snapshot.subject }}
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,30 +1,43 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/updates.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("wiki", project.slug, snapshot.slug) %}
|
||||
{% set final_url_name = "Taiga - View Wiki Page '{0}'".format(snapshot.slug) %}
|
||||
|
||||
{% block head %}
|
||||
<h1>Wiki Page {{ snapshot.slug }} updated</h1>
|
||||
<p>Hello {{ user.get_full_name() }}, <br> {{ changer.get_full_name() }} has updated a wiki page on {{ project.name }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="See wiki page in Taiga">See Wiki</a>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>Wiki Page: {{ snapshot.slug }}</h2>
|
||||
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
<th colspan="2"><h2>Updates</h2></th>
|
||||
</tr>
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
<p>Comment <b>{{ mdrender(project, entry.comment) }}</b></p>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h3>Comment</h3>
|
||||
<p>{{ mdrender(project, entry.comment) }}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% set changed_fields = entry.values_diff %}
|
||||
{% if changed_fields %}
|
||||
{% include "emails/includes/fields_diff-html.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
{% set final_url = resolve_front_url("wiki", project.slug, snapshot.slug) %}
|
||||
{% set final_url_name = "Taiga - View Wiki Page '{0}'".format(snapshot.slug) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- Wiki Page: {{ snapshot.slug }}
|
||||
- Updated by {{ changer.get_full_name() }}
|
||||
Wiki Page {{ snapshot.slug }} updated
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has updated a wiki page on {{ project.name }}
|
||||
See wiki page in Taiga {{ final_url_name }} ({{ final_url }})
|
||||
|
||||
{% for entry in history_entries%}
|
||||
{% if entry.comment %}
|
||||
Comment: {{ entry.comment|linebreaksbr }}
|
||||
|
@ -13,5 +14,3 @@
|
|||
{% include "emails/includes/fields_diff-text.jinja" %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
|
|
|
@ -4,18 +4,21 @@
|
|||
{% set final_url_name = "Taiga - View Wiki Page '{0}'".format(snapshot.slug) %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Project: {{ project.name }}</h1>
|
||||
<h2>Wiki Page: {{ snapshot.slug }}</h2>
|
||||
<p>Created by <b>{{ changer.get_full_name() }}</b>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>New wiki page created</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has created a new wiki page on {{ project.name }}</p>
|
||||
<p>Wiki page {{ snapshot.slug }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="Wiki page {{ snapshot.slug }}">See wiki page</a>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
{% set final_url = resolve_front_url("wiki", project.slug, snapshot.slug) %}
|
||||
{% set final_url_name = "Taiga - View Wiki Page '{0}'".format(snapshot.slug) %}
|
||||
|
||||
- Project: {{ project.name }}
|
||||
- Wiki Page: {{ snapshot.slug }}
|
||||
- Created by {{ changer.get_full_name() }}
|
||||
|
||||
** More info at {{ final_url_name }} ({{ final_url }}) **
|
||||
New wiki page created
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has created a new wiki page on {{ project.name }}
|
||||
See wiki page {{ snapshot.slug }} at {{ final_url_name }} ({{ final_url }})
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,13 +1,8 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>{{ project.name }}</h1>
|
||||
<h2>Wiki Page: {{ snapshot.slug }}</h2>
|
||||
<p>Deleted by <b>{{ changer.get_full_name() }}</b></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>Wiki page deleted</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />{{ changer.get_full_name() }} has deleted a wiki page on {{ project.name }}</p>
|
||||
<p>Wiki page {{ snapshot.slug }}</p>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
- Project: {{ project.name }}
|
||||
- Wiki Page: {{ snapshot.slug }}
|
||||
- Deleted by {{ changer.get_full_name() }}
|
||||
Wiki page deleted
|
||||
Hello {{ user.get_full_name() }}, {{ changer.get_full_name() }} has deleted a wiki page on {{ project.name }}
|
||||
Wiki page {{ snapshot.slug }}
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
|
||||
from djmail.template_mail import MagicMailBuilder
|
||||
from djmail.template_mail import MagicMailBuilder, InlineCSSTemplateMail
|
||||
|
||||
|
||||
def send_invitation(invitation):
|
||||
"""Send an invitation email"""
|
||||
mbuilder = MagicMailBuilder()
|
||||
mbuilder = MagicMailBuilder(template_mail_cls=InlineCSSTemplateMail)
|
||||
if invitation.user:
|
||||
template = mbuilder.membership_notification
|
||||
else:
|
||||
|
|
|
@ -1,31 +1,28 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/hero.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("invitation", membership.token) %}
|
||||
{% set final_url_name = "Taiga - Invitation to join on {0} project.".format(membership.project) %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<p>The Taiga.io Deputy System Admin is commanded by His Highness The Chief Lord Oompa Loompa to extend a membership invitation to {{ membership.email}} and delights in the pleasure of welcoming you to join {{ membership.invited_by.full_name }} and others in the team as a new and right honorable member in good standing of the project titled: '{{ membership.project }}'.</p>
|
||||
<p>You may indicate your humble desire to accept this invitation by gently clicking here: {{ final_url }}</p>
|
||||
|
||||
<h2>You, or someone you know, has invited you to Taiga</h2>
|
||||
<p>The Taiga.io Deputy System Admin is commanded by His Highness The Chief Lord Oompa Loompa to extend a membership invitation to </br> {{ membership.email}} </br> and delights in the pleasure of welcoming you to join <b>{{ membership.invited_by.full_name }}<b> and others in the team as a new and right honorable member in good standing of the project titled: <b>'{{ membership.project }}'</b>.</p>
|
||||
<small>You may indicate your humble desire to accept this invitation by gently clicking here</small>
|
||||
<a class="button" href="#" title="Accept your invitation to Taiga">Accept your invitation</a>
|
||||
{% if membership.invitation_extra_text %}
|
||||
<p>
|
||||
And now some words from the jolly good fellow or sistren who thought so kindly as to invite you:<br/>
|
||||
{{ membership.invitation_extra_text }}
|
||||
</p>
|
||||
<h3>And now some words from the jolly good fellow or sistren who thought so kindly as to invite you:</h3>
|
||||
<p>{{ membership.invitation_extra_text }}</p>
|
||||
{% endif %}
|
||||
|
||||
<p>Dress: Morning Suit, Uniform, Lounge Suit, Birthday Suit or hoodie.</p>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><small>Dress: Morning Suit, Uniform, Lounge Suit, Birthday Suit or hoodie.</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
Further details: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/hero.jinja" %}
|
||||
|
||||
{% set final_url = resolve_front_url("project", membership.project.slug) %}
|
||||
{% set final_url_name = "Taiga - Project '{0}'.".format(membership.project) %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<p>Hi {{ membership.user.get_full_name() }},</p>
|
||||
<p>you have been added to the project
|
||||
'<a href="{{ final_url }}" style="color: #666;">{{ membership.project }}</a>'.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h1>You have been added to a project</h1>
|
||||
<p>Hello {{ membership.user.get_full_name() }},<br />you have been added to the project {{ membership.project }}</p>
|
||||
<a class="button" href="{{ final_url }}" title="{{ membership.project }}">Go to project</a>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at: <a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
{% set final_url = resolve_front_url("project", membership.project.slug) %}
|
||||
|
||||
Hi {{ membership.user.get_full_name() }},
|
||||
You have been added to a project
|
||||
Hello {{ membership.user.get_full_name() }},you have been added to the project {{ membership.project }}
|
||||
|
||||
you have been added to the project '{{ membership.project }}' ({{ final_url }}).
|
||||
|
||||
|
||||
** More info at ({{ final_url }}) **
|
||||
See project at ({{ final_url }})
|
||||
|
|
|
@ -31,7 +31,7 @@ from rest_framework.response import Response
|
|||
from rest_framework.filters import BaseFilterBackend
|
||||
from rest_framework import status
|
||||
|
||||
from djmail.template_mail import MagicMailBuilder
|
||||
from djmail.template_mail import MagicMailBuilder, InlineCSSTemplateMail
|
||||
|
||||
from taiga.auth.tokens import get_user_for_token
|
||||
from taiga.base.decorators import list_route, detail_route
|
||||
|
@ -103,7 +103,7 @@ class UsersViewSet(ModelCrudViewSet):
|
|||
user.token = str(uuid.uuid1())
|
||||
user.save(update_fields=["token"])
|
||||
|
||||
mbuilder = MagicMailBuilder()
|
||||
mbuilder = MagicMailBuilder(template_mail_cls=InlineCSSTemplateMail)
|
||||
email = mbuilder.password_recovery(user.email, {"user": user})
|
||||
email.send()
|
||||
|
||||
|
@ -234,7 +234,7 @@ class UsersViewSet(ModelCrudViewSet):
|
|||
request.user.email_token = str(uuid.uuid1())
|
||||
request.user.new_email = new_email
|
||||
request.user.save(update_fields=["email_token", "new_email"])
|
||||
mbuilder = MagicMailBuilder()
|
||||
mbuilder = MagicMailBuilder(template_mail_cls=InlineCSSTemplateMail)
|
||||
email = mbuilder.change_email(request.user.new_email, {"user": request.user})
|
||||
email.send()
|
||||
|
||||
|
|
|
@ -4,24 +4,21 @@
|
|||
{% set final_url_name = "Taiga - Change email" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Change your email:</h1>
|
||||
<p>Hello {{ user.get_full_name() }},</p>
|
||||
<p>you can confirm your change of email by going to the following url:</p>
|
||||
<p><a style="color: #669900;" href="{{ final_url }}">{{ final_url }}</a>
|
||||
<h1>Change your email</h1>
|
||||
<p>Hello {{ user.get_full_name() }},<br />please confirm your email</p>
|
||||
<a class="button" href="{{ final_url }}" title="Confirm email">Confirm email</a>
|
||||
<p>You can ignore this message if you did not request.</p>
|
||||
<p>Regards</p>
|
||||
<p>--<br />The Taiga Team</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at:
|
||||
<a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,12 +1,5 @@
|
|||
Hello {{ user.get_full_name() }},
|
||||
|
||||
you can confirm your change of email by going to the following url:
|
||||
|
||||
{{ resolve_front_url('change-email', user.email_token) }}
|
||||
Hello {{ user.get_full_name() }}, please confirm your email {{ resolve_front_url('change-email', user.email_token) }}
|
||||
|
||||
You can ignore this message if you did not request.
|
||||
|
||||
Regards
|
||||
|
||||
--
|
||||
The Taiga Team
|
||||
|
|
|
@ -4,24 +4,21 @@
|
|||
{% set final_url_name = "Taiga - Change password" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<h1>Recover your password:</h1>
|
||||
<p>Hello {{ user.get_full_name() }},</p>
|
||||
<p>you can recover your password by going to the following url:</p>
|
||||
<p><a style="color: #669900;" href="{{ final_url }}">{{ final_url }}</a>
|
||||
<h1>Recover your password</h1>
|
||||
<p>Hello {{ user.get_full_name() }}, <br /> you asked to recover your password</p>
|
||||
<a class="button" href="{{ final_url }}" title="Recover your password">Recover your password</a>
|
||||
<p>You can ignore this message if you did not request.</p>
|
||||
<p>Regards</p>
|
||||
<p>--<br />The Taiga Team</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p><small>The Taiga Team</small></p>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
More info at:
|
||||
<a href="{{ final_url }}" style="color: #666;">{{ final_url_name }}</a>
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
Hello {{ user.get_full_name() }},
|
||||
|
||||
you can recover your password by going to the following url:
|
||||
Hello {{ user.get_full_name() }}, you asked to recover your password
|
||||
|
||||
{{ resolve_front_url('change-password', user.token) }}
|
||||
|
||||
You can ignore this message if you did not request.
|
||||
|
||||
Regards
|
||||
|
||||
--
|
||||
The Taiga Team
|
||||
|
|
|
@ -1,24 +1,30 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
{% extends "emails/hero.jinja" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<p>Welcome to Taiga, an Open Source, Agile Project Management Tool</p>
|
||||
|
||||
<p>You, or someone you know has invited you to Taiga. You may remove your account from this service by clicking here:</p>
|
||||
{{ resolve_front_url('cancel-account', cancel_token) }}
|
||||
|
||||
<p>We built Taiga because we wanted the project management tool that sits open on our computers all day long, to serve as a continued reminder of why we love to collaborate, code and design. We built it to be beautiful, elegant, simple to use and fun - without forsaking flexibility and power. We named it Taiga after the forest biome, because like its namesake, our tool is at the center of an ecosystem - your team, your projects. A great project management tool also helps you see the forest for the trees. We couldn't think of a more appropriate name for what we've done.</p>
|
||||
|
||||
<p>We hope you enjoy it.</p>
|
||||
<h2>Thank you for registering in Taiga</h2>
|
||||
<h3>We hope you enjoy it</h3>
|
||||
<p>We built Taiga because we wanted the project management tool that sits open on our computers all day long, to serve as a continued reminder of why we love to collaborate, code and design.</p>
|
||||
<p>We built it to be beautiful, elegant, simple to use and fun - without forsaking flexibility and power.</p>
|
||||
<small>The taiga Team</small>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<p style="padding: 10px; border-top: 1px solid #eee;">
|
||||
The Taiga development team.
|
||||
</p>
|
||||
<em>Copyright © 2014 Taiga Agile, LLC, All rights reserved.</em>
|
||||
<br>
|
||||
<strong>Contact us:</strong>
|
||||
<br>
|
||||
<strong>Support:</strong>
|
||||
<a href="mailto:support@taiga.io" title="Taiga Support">support@taiga.io</a>
|
||||
<br>
|
||||
<strong>Our mailing address is:</strong>
|
||||
<a href="https://groups.google.com/forum/#!forum/taigaio" title="Taiga mailing list">https://groups.google.com/forum/#!forum/taigaio</a>
|
||||
<br />
|
||||
<br />
|
||||
<strong>You may remove your account from this service</strong> <a href="{{ resolve_front_url('cancel-account', cancel_token) }}" title="Remove your account">clicking here</a>
|
||||
{% endblock %}
|
||||
|
|
|
@ -280,6 +280,7 @@ class TaskFactory(Factory):
|
|||
status = factory.SubFactory("tests.factories.TaskStatusFactory")
|
||||
milestone = factory.SubFactory("tests.factories.MilestoneFactory")
|
||||
user_story = factory.SubFactory("tests.factories.UserStoryFactory")
|
||||
tags = []
|
||||
|
||||
|
||||
class WikiPageFactory(Factory):
|
||||
|
|
Loading…
Reference in New Issue