Fix bug #752: Show only description_diff in emails
parent
207e0d6427
commit
eabe778b24
|
@ -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 ""
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue