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 * 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 %}
@@ -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'