Skip to content

Commit 0586282

Browse files
authored
Merge pull request DefectDojo#1820 from wichmannpas/fix-apply-template-tags
Apply Template to Finding: Fix merge options for tags
2 parents d75ca2c + 959921c commit 0586282

File tree

5 files changed

+20
-4
lines changed

5 files changed

+20
-4
lines changed

dojo/finding/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1353,6 +1353,7 @@ def choose_finding_template_options(request, tid, fid):
13531353
'product_tab': product_tab,
13541354
'template': template,
13551355
'form': form,
1356+
'finding_tags': [tag.name for tag in finding.tags.all()],
13561357
})
13571358

13581359

dojo/forms.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,8 +1017,9 @@ class ApplyFindingTemplateForm(forms.Form):
10171017
"Choose from the list or add new tags. Press TAB key to add.")
10181018

10191019
def __init__(self, template=None, *args, **kwargs):
1020-
tags = Tag.objects.usage_for_model(Finding_Template)
1021-
t = [(tag.name, tag.name) for tag in tags]
1020+
# django-tagging apparently can not filter for multiple models at once
1021+
tags = Tag.objects.usage_for_model(Finding_Template) + Tag.objects.usage_for_model(Finding)
1022+
t = sorted({(tag.name, tag.name) for tag in tags})
10221023
super(ApplyFindingTemplateForm, self).__init__(*args, **kwargs)
10231024
self.fields['tags'].widget.choices = t
10241025
self.template = template

dojo/templates/dojo/apply_finding_template.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ <h3> Apply template to a Finding</h3>
8080
]
8181
});
8282
mde.render();
83+
elem.mde = mde;
8384
});
8485
});
8586

dojo/templates/dojo/apply_finding_template_form_fields.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{% load as_json %}
12
{% load event_tags %}
23
{% load get_attribute %}
34
{% if form.non_field_errors %}
@@ -21,10 +22,14 @@
2122
<div class="form-group{% if field.errors %} has-error{% endif %}">
2223
<label class="col-sm-2 control-label">{{ field.label }} Option</label>
2324
<div class="col-sm-10 {{ classes.value }}">
24-
<select class="form-control" data-field-value="{{ field.value }}" data-template-value="{{ template_value }}" onchange="(function(t){ var fieldValue = ''; switch(t.value.toLowerCase()){ case 'keep': fieldValue=t.getAttribute('data-field-value'); break; case 'replace': fieldValue= t.getAttribute('data-template-value'); break; case 'combine': fieldValue= t.getAttribute('data-field-value').concat('\r\n').concat(t.getAttribute('data-template-value')); break; } document.forms['apply_template']['{{ field.name }}'].value = fieldValue; })(this)">
25+
{% if field.name == 'tags' %}
26+
<select class="form-control" data-field-value="{{ finding_tags|as_json }}" data-template-value="{{ field.value|as_json }}" onchange="(function(t){ var field = document.forms['apply_template']['{{ field.name }}']; var fieldValue = ''; switch(t.value.toLowerCase()){ case 'keep': fieldValue=JSON.parse(t.getAttribute('data-field-value')); break; case 'replace': fieldValue= JSON.parse(t.getAttribute('data-template-value')); break; case 'combine': fieldValue= JSON.parse(t.getAttribute('data-field-value')).concat(JSON.parse(t.getAttribute('data-template-value'))); break; } $(field).val(fieldValue); $('#id_tags').trigger('chosen:updated'); })(this)">
27+
{% else %}
28+
<select class="form-control" data-field-value="{{ field.value }}" data-template-value="{{ template_value }}" onchange="(function(t){ var field = document.forms['apply_template']['{{ field.name }}']; var fieldValue = ''; switch(t.value.toLowerCase()){ case 'keep': fieldValue=t.getAttribute('data-field-value'); break; case 'replace': fieldValue= t.getAttribute('data-template-value'); break; case 'combine': fieldValue= t.getAttribute('data-field-value').concat('\r\n').concat(t.getAttribute('data-template-value')); break; } field.mde === undefined ? field.value = fieldValue : field.mde.value(fieldValue); })(this)">
29+
{% endif %}
2530
<option value="Keep">Keep</option>
2631
<option value="Replace">Replace</option>
27-
{% if field|is_text %}
32+
{% if field|is_text or field.name == 'tags' %}
2833
<option value="Combine">Combine</option>
2934
{% endif %}
3035
</select>

dojo/templatetags/as_json.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import json
2+
from django import template
3+
register = template.Library()
4+
5+
6+
@register.filter
7+
def as_json(value):
8+
return json.dumps(value)

0 commit comments

Comments
 (0)