Commit afce7b17780ec3ba98879adbf7507e1dfdaf9efd

Authored by Zambom
1 parent 5274c42f

Adding post deletion [Issue: #74]

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 20 * Function to load forum to modal
... ... @@ -33,6 +50,21 @@ function showForum(url, forum_id) {
33 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 68 function answer(id, url) {
37 69 $.ajax({
38 70 url: url,
... ...
forum/templates/post/post_list.html
... ... @@ -11,13 +11,14 @@
11 11 <i class="material-icons">reply</i>
12 12 </a>
13 13 {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %}
  14 + {% csrf_token %}
14 15 <div class="btn-group icon-more-horiz">
15 16 <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
16 17 <i class="material-icons">more_horiz</i>
17 18 </a>
18 19 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
19 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 22 </ul>
22 23 </div>
23 24 {% endif %}
... ...
forum/templates/post/post_render.html
... ... @@ -9,13 +9,14 @@
9 9 <i class="material-icons">reply</i>
10 10 </a>
11 11 {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %}
  12 + {% csrf_token %}
12 13 <div class="btn-group icon-more-horiz">
13 14 <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
14 15 <i class="material-icons">more_horiz</i>
15 16 </a>
16 17 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
17 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 20 </ul>
20 21 </div>
21 22 {% endif %}
... ...
forum/urls.py
... ... @@ -8,7 +8,9 @@ urlpatterns = [
8 8 url(r'^create$', views.CreateForumView.as_view(), name='create'),
9 9 url(r'^posts$', views.PostIndex.as_view(), name='posts'),
10 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 14 url(r'^post_answers$', views.PostAnswerIndex.as_view(), name='post_answers'),
13 15 url(r'^reply_post$', views.CreatePostAnswerView.as_view(), name='reply_post'),
14 16 ]
... ...
forum/views.py
  1 +from django.http import HttpResponse
1 2 from django.shortcuts import render, get_object_or_404
2 3 from django.core.urlresolvers import reverse, reverse_lazy
3 4 from django.utils.translation import ugettext_lazy as _
... ... @@ -76,6 +77,17 @@ def render_post(request, post):
76 77  
77 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 91 class PostAnswerIndex(LoginRequiredMixin, generic.ListView):
80 92 login_url = reverse_lazy("core:home")
81 93 redirect_field_name = 'next'
... ...