Commit afce7b17780ec3ba98879adbf7507e1dfdaf9efd
1 parent
5274c42f
Exists in
master
and in
5 other branches
Adding post deletion [Issue: #74]
Showing
5 changed files
with
51 additions
and
3 deletions
Show diff stats
forum/static/js/forum.js
1 | +function getCookie(name) { | ||
2 | + var cookieValue = null; | ||
3 | + if (document.cookie && document.cookie !== '') { | ||
4 | + var cookies = document.cookie.split(';'); | ||
5 | + for (var i = 0; i < cookies.length; i++) { | ||
6 | + var cookie = jQuery.trim(cookies[i]); | ||
7 | + // Does this cookie string begin with the name we want? | ||
8 | + if (cookie.substring(0, name.length + 1) === (name + '=')) { | ||
9 | + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); | ||
10 | + break; | ||
11 | + } | ||
12 | + } | ||
13 | + } | ||
14 | + return cookieValue; | ||
15 | +} | ||
16 | + | ||
17 | + | ||
1 | /* | 18 | /* |
2 | * | 19 | * |
3 | * Function to load forum to modal | 20 | * Function to load forum to modal |
@@ -33,6 +50,21 @@ function showForum(url, forum_id) { | @@ -33,6 +50,21 @@ function showForum(url, forum_id) { | ||
33 | $('#forumModal').modal(); | 50 | $('#forumModal').modal(); |
34 | } | 51 | } |
35 | 52 | ||
53 | +function delete_post(url, post) { | ||
54 | + var csrftoken = getCookie('csrftoken'); | ||
55 | + | ||
56 | + $.ajax({ | ||
57 | + method: 'post', | ||
58 | + beforeSend: function (request) { | ||
59 | + request.setRequestHeader('X-CSRFToken', csrftoken); | ||
60 | + }, | ||
61 | + url: url, | ||
62 | + success: function(data) { | ||
63 | + $("#post_"+post).remove(); | ||
64 | + } | ||
65 | + }); | ||
66 | +} | ||
67 | + | ||
36 | function answer(id, url) { | 68 | function answer(id, url) { |
37 | $.ajax({ | 69 | $.ajax({ |
38 | url: url, | 70 | url: url, |
forum/templates/post/post_list.html
@@ -11,13 +11,14 @@ | @@ -11,13 +11,14 @@ | ||
11 | <i class="material-icons">reply</i> | 11 | <i class="material-icons">reply</i> |
12 | </a> | 12 | </a> |
13 | {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} | 13 | {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} |
14 | + {% csrf_token %} | ||
14 | <div class="btn-group icon-more-horiz"> | 15 | <div class="btn-group icon-more-horiz"> |
15 | <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | 16 | <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
16 | <i class="material-icons">more_horiz</i> | 17 | <i class="material-icons">more_horiz</i> |
17 | </a> | 18 | </a> |
18 | <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> | 19 | <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> |
19 | <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | 20 | <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> |
20 | - <li><a href="javascript:void(0)"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | 21 | + <li><a href="javascript:javascript:delete_post('{% url 'forum:delete_post' post.id %}', '{{ post.id }}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> |
21 | </ul> | 22 | </ul> |
22 | </div> | 23 | </div> |
23 | {% endif %} | 24 | {% endif %} |
forum/templates/post/post_render.html
@@ -9,13 +9,14 @@ | @@ -9,13 +9,14 @@ | ||
9 | <i class="material-icons">reply</i> | 9 | <i class="material-icons">reply</i> |
10 | </a> | 10 | </a> |
11 | {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} | 11 | {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} |
12 | + {% csrf_token %} | ||
12 | <div class="btn-group icon-more-horiz"> | 13 | <div class="btn-group icon-more-horiz"> |
13 | <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | 14 | <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
14 | <i class="material-icons">more_horiz</i> | 15 | <i class="material-icons">more_horiz</i> |
15 | </a> | 16 | </a> |
16 | <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> | 17 | <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> |
17 | <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | 18 | <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> |
18 | - <li><a href="javascript:void(0)"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | 19 | + <li><a href="javascript:delete_post('{% url 'forum:delete_post' post.id %}', '{{ post.id }}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> |
19 | </ul> | 20 | </ul> |
20 | </div> | 21 | </div> |
21 | {% endif %} | 22 | {% endif %} |
forum/urls.py
@@ -8,7 +8,9 @@ urlpatterns = [ | @@ -8,7 +8,9 @@ urlpatterns = [ | ||
8 | url(r'^create$', views.CreateForumView.as_view(), name='create'), | 8 | url(r'^create$', views.CreateForumView.as_view(), name='create'), |
9 | url(r'^posts$', views.PostIndex.as_view(), name='posts'), | 9 | url(r'^posts$', views.PostIndex.as_view(), name='posts'), |
10 | url(r'^create_post$', views.CreatePostView.as_view(), name='create_post'), | 10 | url(r'^create_post$', views.CreatePostView.as_view(), name='create_post'), |
11 | - url(r'^render+post/([\w_-]+)/$', views.render_post, name='render_post'), | 11 | + url(r'^render_post/([\w_-]+)/$', views.render_post, name='render_post'), |
12 | + url(r'^delete_post/(?P<pk>[\w_-]+)/$', views.PostDeleteView.as_view(), name='delete_post'), | ||
13 | + url(r'^post_deleted/$', views.post_deleted, name='deleted_post'), | ||
12 | url(r'^post_answers$', views.PostAnswerIndex.as_view(), name='post_answers'), | 14 | url(r'^post_answers$', views.PostAnswerIndex.as_view(), name='post_answers'), |
13 | url(r'^reply_post$', views.CreatePostAnswerView.as_view(), name='reply_post'), | 15 | url(r'^reply_post$', views.CreatePostAnswerView.as_view(), name='reply_post'), |
14 | ] | 16 | ] |
forum/views.py
1 | +from django.http import HttpResponse | ||
1 | from django.shortcuts import render, get_object_or_404 | 2 | from django.shortcuts import render, get_object_or_404 |
2 | from django.core.urlresolvers import reverse, reverse_lazy | 3 | from django.core.urlresolvers import reverse, reverse_lazy |
3 | from django.utils.translation import ugettext_lazy as _ | 4 | from django.utils.translation import ugettext_lazy as _ |
@@ -76,6 +77,17 @@ def render_post(request, post): | @@ -76,6 +77,17 @@ def render_post(request, post): | ||
76 | 77 | ||
77 | return render(request, "post/post_render.html", context) | 78 | return render(request, "post/post_render.html", context) |
78 | 79 | ||
80 | +class PostDeleteView(LoginRequiredMixin, generic.DeleteView): | ||
81 | + login_url = reverse_lazy("core:home") | ||
82 | + redirect_field_name = 'next' | ||
83 | + | ||
84 | + model = Post | ||
85 | + pk_url_kwarg = 'pk' | ||
86 | + success_url = reverse_lazy('forum:deleted_post') | ||
87 | + | ||
88 | +def post_deleted(request): | ||
89 | + return HttpResponse(_("Post deleted successfully.")) | ||
90 | + | ||
79 | class PostAnswerIndex(LoginRequiredMixin, generic.ListView): | 91 | class PostAnswerIndex(LoginRequiredMixin, generic.ListView): |
80 | login_url = reverse_lazy("core:home") | 92 | login_url = reverse_lazy("core:home") |
81 | redirect_field_name = 'next' | 93 | redirect_field_name = 'next' |