diff --git a/templates/tracker/issue_details.html b/templates/tracker/issue_details.html
index 0422336..6c2bec6 100644
--- a/templates/tracker/issue_details.html
+++ b/templates/tracker/issue_details.html
@@ -93,9 +93,11 @@
{% if perm.manage_issue %}
{% if issue.closed %}
-
Reopen this issue
+
Reopen this issue
+
{% else %}
-
Close this issue
+
Close this issue
+
{% endif %}
@@ -224,6 +226,15 @@
{{ block.super }}
diff --git a/tracker/views.py b/tracker/views.py
index e122e38..9284a7a 100644
--- a/tracker/views.py
+++ b/tracker/views.py
@@ -424,6 +424,14 @@ def issue_comment_edit(request, project, issue, comment=None):
issue = get_object_or_404(Issue, project=project, id=issue)
+ redirect = 'to-issue'
+ change_state = False
+
+ if 'change-state' in request.POST:
+ if not request.user.has_perm('manage_issue', project):
+ raise PermissionDenied()
+ change_state = True
+
if comment:
if not request.user.has_perm('modify_comment', project):
raise PermissionDenied()
@@ -458,9 +466,27 @@ def issue_comment_edit(request, project, issue, comment=None):
event.save()
issue.subscribers.add(request.user)
notify_new_comment(event)
- messages.success(request, 'Comment added successfully.')
+ if change_state:
+ issue.closed = not issue.closed
+ issue.save()
+ if issue.closed:
+ event = Event(issue=issue, author=request.user, code=Event.CLOSE)
+ event.save()
+ notify_close_issue(event)
+ messages.success(request, 'Comment added successfully and issue closed.')
+ redirect = 'to-list'
+ else:
+ event = Event(issue=issue, author=request.user, code=Event.REOPEN)
+ event.save()
+ notify_reopen_issue(event)
+ messages.success(request, 'Issue reopened and omment added successfully.')
+ else:
+ messages.success(request, 'Comment added successfully.')
- return redirect('show-issue', project.name, issue.id)
+ if redirect == 'to-issue':
+ return redirect('show-issue', project.name, issue.id)
+ else:
+ return redirect('list-issue', project.name)
c = {
'project': project,
@@ -498,6 +524,8 @@ def issue_close(request, project, issue):
notify_close_issue(event)
+ messages.success(request, 'Issue closed.')
+
return redirect('list-issue', project.name)
@@ -514,6 +542,8 @@ def issue_reopen(request, project, issue):
notify_reopen_issue(event)
+ messages.success(request, 'Issue reopened.')
+
return redirect('show-issue', project.name, issue.id)