Fix bug #752: Show only description_diff in emails

remotes/origin/enhancement/email-actions
David Barragán Merino 2014-09-04 15:20:58 +02:00
parent 207e0d6427
commit eabe778b24
5 changed files with 154 additions and 118 deletions

View File

@ -23,4 +23,6 @@ register = library.Library()
@register.global_function @register.global_function
def mdrender(project, text) -> str: def mdrender(project, text) -> str:
return Markup(render(project, text)) if text:
return Markup(render(project, text))
return ""

View File

@ -166,7 +166,8 @@ def make_diff(oldobj:FrozenObj, newobj:FrozenObj) -> FrozenDiff:
diff["description"][0], diff["description"][0],
diff["description"][1] diff["description"][1]
) )
diff["description_diff"] = (not_found_value, description_diff) if description_diff:
diff["description_diff"] = (not_found_value, description_diff)
return FrozenDiff(newobj.key, diff, newobj.snapshot) return FrozenDiff(newobj.key, diff, newobj.snapshot)

View File

@ -1,108 +1,125 @@
{% set excluded_fields = [
"description",
"description_html"
] %}
<dl> <dl>
{% for field_name, values in changed_fields.items() %} {% for field_name, values in changed_fields.items() %}
<dt style="background: #669933; padding: 5px 15px; color: #fff"> {% if field_name not in excluded_fields %}
<b>{{ verbose_name(object, field_name) }}</b> <dt style="background: #669933; padding: 5px 15px; color: #fff">
</dt> <b>{{ verbose_name(object, field_name) }}</b>
</dt>
{# POINTS #} {# POINTS #}
{% if field_name == "points" %} {% if field_name == "points" %}
{% for role, points in values.items() %} {% for role, points in values.items() %}
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff"> <dd style="background: #b2cc99; padding: 5px 15px; color: #fff">
<b>{{ role }}</b> <b>{{ role }}</b>
</dd> </dd>
<dd style="background: #eee; padding: 5px 15px; color: #444"> <dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ points.1|linebreaksbr }}</i> <b>to:</b> <i>{{ points.1|linebreaksbr }}</i>
</dd> </dd>
<dd style="padding: 5px 15px; color: #bbb"> <dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ points.0|linebreaksbr }}</i> <b>from:</b> <i>{{ points.0|linebreaksbr }}</i>
</dd> </dd>
{% 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">
<i>
{{ att.filename|linebreaksbr }} {% if att.description %}({{ att.description|linebreaksbr }}){% endif %}
</i>
</dd>
{% endfor %} {% endfor %}
{% endif %}
{% if values.changed %} {# ATTACHMENTS #}
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff"> {% elif field_name == "attachments" %}
<b>{{ _("Changed") }}</b>
</dd> {% 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">
<i>
{{ att.filename|linebreaksbr }} {% if att.description %}({{ att.description|linebreaksbr }}){% endif %}
</i>
</dd>
{% 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">
<i>{{ att.1.filename|linebreaksbr }} {% if att.1.description %}({{ att.1.description|linebreaksbr }}){% endif %}</i>
{% if att.1.is_deprecated and not att.0.is_deprecated %}
to <b>deprecated</b>
{% elif not att.1.is_deprecated and att.0.is_deprecated %}
to <b>not deprecated</b>
{% endif %}
</dd>
{% 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>
{% endfor %}
{% endif %}
{# TAGS AND WATCHERS #}
{% elif field_name in ["tags", "watchers"] %}
{% for att in values['changed'] %}
<dd style="background: #eee; padding: 5px 15px; color: #444"> <dd style="background: #eee; padding: 5px 15px; color: #444">
<i>{{ att.1.filename|linebreaksbr }} {% if att.1.description %}({{ att.1.description|linebreaksbr }}){% endif %}</i> <b>to:</b> <i>{{ ', '.join(values.1)|linebreaksbr }}</i>
{% if att.1.is_deprecated and not att.0.is_deprecated %}
to <b>deprecated</b>
{% elif not att.1.is_deprecated and att.0.is_deprecated %}
to <b>not deprecated</b>
{% endif %}
</dd>
{% endfor %}
{% endif %}
{% if values.deleted %}
<dd style="background: #b2cc99; padding: 5px 15px; color: #fff">
<b>{{ _("Deleted") }}</b>
</dd> </dd>
{% for att in values['deleted']%} {% if values.0 %}
<dd style="padding: 5px 15px; color: #bbb"> <dd style="padding: 5px 15px; color: #bbb">
<i>{{ att.filename|linebreaksbr }}</i> <b>from:</b> <i>{{ ', '.join(values.0)|linebreaksbr }}</i>
</dd> </dd>
{% endfor %} {% endif %}
{% endif %}
{# TAGS AND WATCHERS #} {# DESCRIPTIONS #}
{% elif field_name in ["tags", "watchers"] %} {% elif field_name in ["description_diff"] %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ mdrender(object.project, values.1) }}</i>
</dd>
{# 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="background: #eee; padding: 5px 15px; color: #444"> <dd style="padding: 5px 15px; color: #bbb">
<b>to:</b> <i>{{ ', '.join(values.1)|linebreaksbr }}</i> {% if values.0 != None and values.0 != "" %}
</dd> <b>from:</b> <i>{{ values.0|linebreaksbr }}</i>
{% else %}
<b>from:</b> <i>{{ _("Unassigned") }}</i>
{% endif %}
</dd>
{# * #}
{% 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 %} {% if values.0 != None and values.0 != "" %}
<dd style="padding: 5px 15px; color: #bbb"> <dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ ', '.join(values.0)|linebreaksbr }}</i> <b>from:</b> <i>{{ values.0|linebreaksbr }}</i>
</dd> </dd>
{% endif %} {% endif %}
{# DESCRIPTIONS #}
{% elif field_name in ["description"] %}
{% if values.1 != None or values.1 != "" %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ mdrender(object.project, values.1) }}</i>
</dd>
{% endif %}
{% if values.0 != None or values.0 != "" %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ mdrender(object.project, values.0) }}</i>
</dd>
{% endif %}
{# * #}
{% else %}
{% if values.1 != None or 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 or values.0 != "" %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ values.0|linebreaksbr }}</i>
</dd>
{% endif %} {% endif %}
{% endif %} {% endif %}

View File

@ -1,45 +1,51 @@
{% set excluded_fields = [
"description_diff",
"description_html"
] %}
{% for field_name, values in changed_fields.items() %} {% for field_name, values in changed_fields.items() %}
{% if field_name not in excluded_fields %}
- {{ verbose_name(object, field_name) }}: - {{ verbose_name(object, field_name) }}:
{# POINTS #} {# POINTS #}
{% if field_name == "points" %} {% if field_name == "points" %}
{% for role, points in values.items() %} {% for role, points in values.items() %}
* {{ role }} to: {{ points.1|linebreaksbr }} from: {{ points.0|linebreaksbr }} * {{ role }} to: {{ points.1|linebreaksbr }} from: {{ points.0|linebreaksbr }}
{% endfor %} {% endfor %}
{# ATTACHMENTS #} {# ATTACHMENTS #}
{% elif field_name == "attachments" %} {% elif field_name == "attachments" %}
{% if values.new %} {% if values.new %}
* {{ _("Added") }}: * {{ _("Added") }}:
{% for att in values['new']%} {% for att in values['new']%}
- {{ att.filename|linebreaksbr }} - {{ att.filename|linebreaksbr }}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if values.changed %} {% if values.changed %}
* {{ _("Changed") }} * {{ _("Changed") }}
{% for att in values['changed'] %} {% for att in values['changed'] %}
- {{ att.1.filename|linebreaksbr }} - {{ att.1.filename|linebreaksbr }}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if values.deleted %} {% if values.deleted %}
* {{ _("Deleted") }} * {{ _("Deleted") }}
{% for att in values['deleted']%} {% for att in values['deleted']%}
- {{ att.filename|linebreaksbr }} - {{ att.filename|linebreaksbr }}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{# TAGS AND WATCHERS #} {# TAGS AND WATCHERS #}
{% elif field_name in ["tags", "watchers"] %} {% elif field_name in ["tags", "watchers"] %}
* to: {{ ', '.join(values.1)|linebreaksbr }} * to: {{ ', '.join(values.1)|linebreaksbr }}
{% if values.0 %} {% if values.0 %}
* from: {{ ', '.join(values.0)|linebreaksbr }} * from: {{ ', '.join(values.0)|linebreaksbr }}
{% endif %} {% endif %}
{# * #} {# * #}
{% else %} {% else %}
{% if values.1 != None or values.1 != "" %} {% if values.1 != None and values.1 != "" %}
* to: {{ values.1|linebreaksbr }} * to: {{ values.1|linebreaksbr }}
{% endif %} {% endif %}
{% if values.0 != None or values.0 != "" %} {% if values.0 != None and values.0 != "" %}
* from: {{ values.0|linebreaksbr }} * from: {{ values.0|linebreaksbr }}
{% endif %}
{% endif %} {% endif %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}

View File

@ -14,13 +14,23 @@
# You should have received a copy of the GNU Affero General Public License # 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/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.utils.translation import ugettext_lazy as _
from django_jinja import library from django_jinja import library
register = library.Library() register = library.Library()
EXTRA_FIELD_VERBOSE_NAMES = {
"description_diff": _("description"),
}
@register.global_function @register.global_function
def verbose_name(obj:object, field_name:str) -> str: def verbose_name(obj:object, field_name:str) -> str:
if field_name in EXTRA_FIELD_VERBOSE_NAMES:
return EXTRA_FIELD_VERBOSE_NAMES[field_name]
try: try:
return obj._meta.get_field(field_name).verbose_name return obj._meta.get_field(field_name).verbose_name
except Exception: except Exception: