From a571aeaf9af6076d27aa3bd71a38cb18fd82f725 Mon Sep 17 00:00:00 2001 From: zeroq Date: Sun, 5 May 2019 17:02:28 +0200 Subject: [PATCH] added comment functionality #14 --- kraut_incident/forms.py | 11 ++++++++- kraut_incident/models.py | 7 ++++++ kraut_incident/urls.py | 2 +- kraut_incident/views.py | 53 +++++++++++++++++++++++++++++++++++++--- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/kraut_incident/forms.py b/kraut_incident/forms.py index 358e8a4..0b20008 100644 --- a/kraut_incident/forms.py +++ b/kraut_incident/forms.py @@ -1,7 +1,7 @@ # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 from django.forms import ModelForm, widgets -from kraut_incident.models import Incident, Contact, Handler +from kraut_incident.models import Incident, Contact, Handler, IncidentComment class HandlerForm(ModelForm): class Meta: @@ -40,3 +40,12 @@ class Meta: 'category': widgets.Select(attrs={'class': 'form-control'}), 'severity': widgets.Select(attrs={'class': 'form-control'}), } + +class IncidentCommentForm(ModelForm): + class Meta: + model = IncidentComment + fields = ['ctext'] + + def __init__(self, *args, **kwargs): + super(IncidentCommentForm, self).__init__(*args, **kwargs) + self.fields['ctext'].widget.attrs.update({'class' : 'form-control', 'id': 'incidentComment'}) diff --git a/kraut_incident/models.py b/kraut_incident/models.py index 13268c7..5db15ab 100644 --- a/kraut_incident/models.py +++ b/kraut_incident/models.py @@ -1,6 +1,7 @@ # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 from django.db import models +from django.contrib.auth.models import User import random @@ -159,3 +160,9 @@ class Incident(models.Model): def __unicode__(self): return u"%s" % (self.title) + +class IncidentComment(models.Model): + ctext = models.TextField() + author = models.ForeignKey(User, on_delete=models.CASCADE) + creation_time = models.DateTimeField(auto_now_add=True) + incident_reference = models.ForeignKey(Incident, on_delete=models.CASCADE) diff --git a/kraut_incident/urls.py b/kraut_incident/urls.py index 41f567a..2974d6d 100644 --- a/kraut_incident/urls.py +++ b/kraut_incident/urls.py @@ -9,7 +9,7 @@ url(r'^incident/(?P\d+)/view/$', views.view_incident, name='view_incident'), url(r'^incident/(?P\d+)/update/header/$', views.update_incident_header, name='update_incident_header'), url(r'^incident/(?P\d+)/add/comment/$', views.comment_incident, name='comment_incident'), - + url(r'^incident/(?P\d+)/del/comment/(?P\d+)/$', views.delete_comment_incident, name='delete_comment_incident'), url(r'^create_contact/$', views.create_contact, name='create_contact'), url(r'^create_handler/$', views.create_handler, name='create_handler'), ] diff --git a/kraut_incident/views.py b/kraut_incident/views.py index 4d7c597..ae59fc3 100644 --- a/kraut_incident/views.py +++ b/kraut_incident/views.py @@ -11,8 +11,8 @@ from kraut_intel.utils import get_icon_for_namespace -from kraut_incident.forms import IncidentForm, ContactForm, HandlerForm -from kraut_incident.models import Contact, Handler, Incident +from kraut_incident.forms import IncidentForm, ContactForm, HandlerForm, IncidentCommentForm +from kraut_incident.models import Contact, Handler, Incident, IncidentComment from kraut_incident.utils import slicedict # Create your views here. @@ -55,10 +55,49 @@ def update_incident_header(request, incident_id): @login_required def comment_incident(request, incident_id): + """Add comment to incident + """ context = {} - return render(request, 'kraut_incident/incident_list.html', context) - + if request.method == "POST": + form = IncidentCommentForm(request.POST) + if form.is_valid(): + try: + inc = Incident.objects.get(id=incident_id) + except Incident.DoesNotExist: + messages.error(request, 'The requested incident does not exist!') + return render(request, 'kraut_incident/incident_list.html', context) + data = { + 'ctext': form.cleaned_data['ctext'], + 'author': request.user, + 'incident_reference': inc + } + new_comment = IncidentComment.objects.get_or_create(**data) + messages.info(request, "Comment successfully added") + else: + if form.errors: + for field in form: + for error in field.errors: + messages.error(request, '%s: %s' % (field.name, error)) + return HttpResponseRedirect(reverse("incidents:view_incident", kwargs={'incident_id': incident_id})) +@login_required +def delete_comment_incident(request, incident_id, comment_id): + """Delete a comment for given incident + """ + context = {} + try: + inc = Incident.objects.get(id=incident_id) + except Incident.DoesNotExist: + messages.error(request, 'The requested incident does not exist!') + return render(request, 'kraut_incident/incident_list.html', context) + try: + com = IncidentComment.objects.get(pk=int(comment_id), incident_reference=inc, author=request.user) + except IncidentComment.DoesNotExist: + messages.error(request, 'The requested comment does not exist!') + return render(request, 'kraut_incident/incident_list.html', context) + com.delete() + messages.info(request, 'Comment successfully deleted.') + return HttpResponseRedirect(reverse("incidents:view_incident", kwargs={'incident_id': incident_id})) @login_required def view_incident(request, incident_id): @@ -84,6 +123,12 @@ def view_incident(request, incident_id): else: context['usernamespace'] = 'nospace' context['namespaceicon'] = static('ns_icon/octalpus.png') + try: + comments = IncidentComment.objects.filter(incident_reference=inc).order_by('-creation_time') + except: + comments = None + context['comments'] = comments + context['commentform'] = IncidentCommentForm() context['num_incident_handlers'] = inc.incident_handler.count() context['num_incident_contacts'] = inc.contacts.count() context['num_incident_tasks'] = inc.tasks.count()