permissions for comments & issue creation/deletion

This commit is contained in:
Élie Bouttier 2014-08-14 20:43:45 -07:00
parent 719f317582
commit 3cb84d971f
3 changed files with 39 additions and 10 deletions

View file

@ -35,11 +35,21 @@
<a href="{% same_author event.author %}"><b>{{ event.author}}</b></a> {{ event }} {{ event.date|naturaltime }}
{% if event.code == event.DESCRIBE %}
<div class="pull-right">
<a href="{% url 'edit-issue' project.name issue.id %}" class="btn btn-primary btn-xs">Edit</a>
{% if perm.delete_issue %}
<a href="{% url 'delete-issue' project.name issue.id %}?prev={{ request.path }}" class="btn btn-danger btn-xs"><span class="glyphicon glyphicon-trash"></span></a>
{% endif %}
{% if perm.modify_issue %}
<a href="{% url 'edit-issue' project.name issue.id %}" class="btn btn-primary btn-xs"><span class="glyphicon glyphicon-edit"></span> Edit</a>
{% endif %}
</div>
{% elif event.code == event.COMMENT %}
<div class="pull-right">
<a href="{% url 'edit-comment' project.name issue.id event.id %}" class="btn btn-primary btn-xs">Edit</a>
{% if perm.delete_comment %}
<a href="{% url 'delete-comment' project.name issue.id event.id %}?prev={{ request.path }}" class="btn btn-danger btn-xs"><span class="glyphicon glyphicon-trash"></span></a>
{% endif %}
{% if perm.modify_comment %}
<a href="{% url 'edit-comment' project.name issue.id event.id %}" class="btn btn-primary btn-xs"><span class="glyphicon glyphicon-edit"></span> Edit</a>
{% endif %}
</div>
{% endif %}
</div>
@ -64,19 +74,19 @@
</div>
<div class="col-md-3">
<a href="{% url 'edit-issue' project.name issue.id %}" class="btn btn-default btn-block">Edit this issue</a>
<a href="{% url 'edit-issue' project.name issue.id %}" class="btn btn-primary btn-block"><span class="glyphicon glyphicon-edit"></span> Edit this issue</a>
</div>
<div class="col-md-3">
{% if issue.closed %}
<a href="{% url 'reopen-issue' project.name issue.id %}" class="btn btn-default btn-block">Reopen this issue</a>
<a href="{% url 'reopen-issue' project.name issue.id %}" class="btn btn-info btn-block"><span class="glyphicon glyphicon-refresh"></span> Reopen this issue</a>
{% else %}
<a href="{% url 'close-issue' project.name issue.id %}" class="btn btn-default btn-block">Close this issue</a>
<a href="{% url 'close-issue' project.name issue.id %}" class="btn btn-success btn-block"><span class="glyphicon glyphicon-ok-circle"></span> Close this issue</a>
{% endif %}
</div>
<div class="col-md-3">
<a href="{% url 'delete-issue' project.name issue.id %}" class="btn btn-default btn-block">Delete this issue</a>
<a href="{% url 'delete-issue' project.name issue.id %}" class="btn btn-danger btn-block"><span class="glyphicon glyphicon-trash"></span> Delete this issue</a>
</div>
</div>

View file

@ -11,8 +11,9 @@ urlpatterns = [
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/edit$', 'issue.views.issue_edit', name='edit-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/close$', 'issue.views.issue_close', name='close-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/reopen$', 'issue.views.issue_reopen', name='reopen-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/comment$', 'issue.views.issue_comment', name='comment-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/comments/(?P<comment>[0-9]+)/edit$', 'issue.views.issue_comment', name='edit-comment'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/comment$', 'issue.views.issue_edit_comment', name='comment-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/comments/(?P<comment>[0-9]+)/edit$', 'issue.views.issue_edit_comment', name='edit-comment'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/comments/(?P<comment>[0-9]+)/delete$', 'issue.views.issue_delete_comment', name='delete-comment'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/delete$', 'issue.views.issue_delete', name='delete-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/add-label/(?P<label>[0-9]+)$', 'issue.views.issue_add_label', name='add-label-to-issue'),
url(r'^(?P<project>[a-z0-9_-]+)/issues/(?P<issue>[0-9]+)/remove-label/(?P<label>[0-9]+)$', 'issue.views.issue_remove_label', name='remove-label-from-issue'),

View file

@ -436,16 +436,20 @@ def issue(request, project, issue):
return render(request, 'issue/issue.html', c)
@project_perm_required('create_comment')
def issue_comment(request, project, issue, comment=None):
@login_required
def issue_edit_comment(request, project, issue, comment=None):
issue = get_object_or_404(Issue, project=project, id=issue)
if comment:
if not request.user.has_perm('modify_comment', project):
return HttpResponseForbidden()
event = get_object_or_404(Event, code=Event.COMMENT,
issue=issue, id=comment)
init_data = {'comment': event.additionnal_section}
else:
if not request.user.has_perm('create_comment', project):
return HttpResponseForbidden()
event = None
init_data = None
@ -483,6 +487,19 @@ def issue_comment(request, project, issue, comment=None):
return render(request, 'issue/issue_comment.html', c)
@project_perm_required('delete_comment')
@confirmation_required('Are you sure to delete this comment?')
def issue_delete_comment(request, project, issue, comment):
comment = get_object_or_404(Event,
issue__project=project, issue__pk=issue, id=comment)
comment.delete()
message.success(request, 'Issue deleted successfully.')
return redirect('show-issue', project.name, issue)
@project_perm_required('manage_issue')
def issue_close(request, project, issue):
@ -514,6 +531,7 @@ def issue_reopen(request, project, issue):
@project_perm_required('delete_issue')
@confirmation_required('Are you sure to delete this issue?')
def issue_delete(request, project, issue):
issue = get_object_or_404(Issue, project=project, id=issue)