Commit e208cd519cfb36d6e9e2e6d4ed9c2215be69ac52

Authored by filipecmedeiros
2 parents adfc46fb 80ac5e86

Merge branch 'dev' of https://github.com/amadeusproject/amadeuslms into dev

courses/templates/subject/form_view_teacher.html
@@ -26,25 +26,6 @@ @@ -26,25 +26,6 @@
26 </div> 26 </div>
27 </div> 27 </div>
28 28
29 -<div class="modal fade" id="forumModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">  
30 - <div class="modal-dialog" role="document">  
31 - <div class="modal-content">  
32 - <div class="modal-header">  
33 - <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4>  
34 - </div>  
35 - <div class="modal-body">  
36 - <section>  
37 - <div class="forum_topics"></div>  
38 - </section>  
39 - </div>  
40 - <div class="modal-footer">  
41 - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans 'Close' %}</button>  
42 - <button type="button" class="btn btn-primary btn-raised">{% trans 'Save changes' %}</button>  
43 - </div>  
44 - </div>  
45 - </div>  
46 -</div>  
47 -  
48 <div class="modal fade" id="createForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 29 <div class="modal fade" id="createForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
49 <div class="modal-dialog" role="document"> 30 <div class="modal-dialog" role="document">
50 <div class="modal-content"> 31 <div class="modal-content">
forum/forms.py
@@ -41,10 +41,11 @@ class PostAnswerForm(forms.ModelForm): @@ -41,10 +41,11 @@ class PostAnswerForm(forms.ModelForm):
41 41
42 class Meta: 42 class Meta:
43 model = PostAnswer 43 model = PostAnswer
44 - fields = ('message', ) 44 + fields = ('message', 'post', )
45 labels = { 45 labels = {
46 'message': _('Message') 46 'message': _('Message')
47 } 47 }
48 widgets = { 48 widgets = {
49 'message': forms.Textarea(attrs={'cols': 80, 'rows': 3}), 49 'message': forms.Textarea(attrs={'cols': 80, 'rows': 3}),
  50 + 'post': forms.HiddenInput(),
50 } 51 }
51 \ No newline at end of file 52 \ No newline at end of file
forum/static/js/forum.js
@@ -89,6 +89,44 @@ function createForum(url, topic) { @@ -89,6 +89,44 @@ function createForum(url, topic) {
89 89
90 /* 90 /*
91 * 91 *
  92 +* Function to load edit forum's form and set the submit function
  93 +*
  94 +*/
  95 +function editForum(url, forum) {
  96 + $.ajax({
  97 + url: url,
  98 + data: {'pk': forum},
  99 + success: function(data) {
  100 + $(".forum_form").html(data);
  101 + //$("#id_topic").val(topic);
  102 +
  103 + $('.date-picker').datepicker();
  104 +
  105 + var frm = $('#forum_create');
  106 + frm.submit(function () {
  107 + $.ajax({
  108 + type: frm.attr('method'),
  109 + url: frm.attr('action'),
  110 + data: frm.serialize(),
  111 + success: function (data) {
  112 + $('.forum_view').html(data);
  113 +
  114 + $("#editForum").modal('hide');
  115 + },
  116 + error: function(data) {
  117 + $(".forum_form").html(data.responseText);
  118 + }
  119 + });
  120 + return false;
  121 + });
  122 + }
  123 + });
  124 +
  125 + $("#editForum").modal();
  126 +}
  127 +
  128 +/*
  129 +*
92 * Function to delete a forum 130 * Function to delete a forum
93 * 131 *
94 */ 132 */
@@ -174,13 +212,62 @@ function delete_post(url, post) { @@ -174,13 +212,62 @@ function delete_post(url, post) {
174 }); 212 });
175 } 213 }
176 214
  215 +/*
  216 +*
  217 +* Function to load answer post form and set the submit function
  218 +*
  219 +*/
177 function answer(id, url) { 220 function answer(id, url) {
178 $.ajax({ 221 $.ajax({
179 url: url, 222 url: url,
180 success: function(data) { 223 success: function(data) {
181 $("#post_"+id).find(".answer_post").html(data); 224 $("#post_"+id).find(".answer_post").html(data);
  225 + $("#post_"+id).find("#id_post").val(id);
  226 +
  227 + var frm = $("#post_"+id).find(".answer_post_form");
  228 + frm.submit(function () {
  229 + $.ajax({
  230 + type: frm.attr('method'),
  231 + url: frm.attr('action'),
  232 + data: frm.serialize(),
  233 + success: function (data) {
  234 + $("#post_"+id).find(".answer_list").append(data);
  235 +
  236 + $("#post_"+id).find(".answer_post").hide();
  237 + },
  238 + error: function(data) {
  239 + console.log(frm.serialize());
  240 + console.log('Error');
  241 + }
  242 + });
  243 + return false;
  244 + });
182 } 245 }
183 }); 246 });
184 247
185 $("#post_"+id).find(".answer_post").show(); 248 $("#post_"+id).find(".answer_post").show();
  249 +}
  250 +
  251 +/*
  252 +*
  253 +* Function to delete an answer
  254 +*
  255 +*/
  256 +function delete_answer(url, answer, message) {
  257 + alertify.confirm(message, function(){
  258 + var csrftoken = getCookie('csrftoken');
  259 +
  260 + $.ajax({
  261 + method: 'post',
  262 + beforeSend: function (request) {
  263 + request.setRequestHeader('X-CSRFToken', csrftoken);
  264 + },
  265 + url: url,
  266 + success: function(data) {
  267 + alertify.alert('Amadeus', data, function(){
  268 + $("#answer_"+answer).remove();
  269 + });
  270 + }
  271 + });
  272 + });
186 } 273 }
187 \ No newline at end of file 274 \ No newline at end of file
forum/templates/forum/forum_form.html
1 {% load static i18n %} 1 {% load static i18n %}
2 {% load widget_tweaks %} 2 {% load widget_tweaks %}
3 3
4 -<form id="forum_create" method="post" action="{% url 'course:forum:create' %}" enctype="multipart/form-data"> 4 +<form id="forum_create" method="post" action="{% if forum %}{% url 'course:forum:update' forum.id %}{% else %}{% url 'course:forum:create' %}{% endif %}" enctype="multipart/form-data">
5 {% csrf_token %} 5 {% csrf_token %}
6 {% for field in form %} 6 {% for field in form %}
7 <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> 7 <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput">
forum/templates/forum/forum_view.html
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 </div> 41 </div>
42 <div class="panel-body"> 42 <div class="panel-body">
43 <ul class="nav nav-pills nav-stacked"> 43 <ul class="nav nav-pills nav-stacked">
44 - <li><a href="javascript:edit_forum('{% url 'course:forum:index' %}', '{{ forum.id }}')">{% trans 'Edit' %}</a></li> 44 + <li><a href="javascript:editForum('{% url 'course:forum:update' forum.id %}', '{{ forum.id }}')">{% trans 'Edit' %}</a></li>
45 <li><a href="javascript:delete_forum('{% url 'course:forum:delete' forum.id %}', '{{ forum.id }}', '{% trans "Are you sure you want to delete this forum?" %}', '{% url 'course:view_subject' forum.topic.subject.slug %}')">{% trans 'Delete' %}</a></li> 45 <li><a href="javascript:delete_forum('{% url 'course:forum:delete' forum.id %}', '{{ forum.id }}', '{% trans "Are you sure you want to delete this forum?" %}', '{% url 'course:view_subject' forum.topic.subject.slug %}')">{% trans 'Delete' %}</a></li>
46 </ul> 46 </ul>
47 </div> 47 </div>
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 <div class="row panel panel-default"> 53 <div class="row panel panel-default">
54 <div class="panel-body"> 54 <div class="panel-body">
55 <div class="comments-list"> 55 <div class="comments-list">
56 - <div class="section-heading"> 56 + <div class="section-heading forum_view">
57 <h1>{{ forum }}</h1> 57 <h1>{{ forum }}</h1>
58 <h4><b>{% trans 'Description' %}:</b> {{ forum.description }}</h4> 58 <h4><b>{% trans 'Description' %}:</b> {{ forum.description }}</h4>
59 <h4><b>{% trans 'Opened in' %}:</b> {{ forum.create_date }}</h4> 59 <h4><b>{% trans 'Opened in' %}:</b> {{ forum.create_date }}</h4>
@@ -103,6 +103,25 @@ @@ -103,6 +103,25 @@
103 </div> 103 </div>
104 </div> 104 </div>
105 </div> 105 </div>
  106 + <!-- Modal to show Forum edit form -->
  107 + <div class="modal fade" id="editForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  108 + <div class="modal-dialog" role="document">
  109 + <div class="modal-content">
  110 + <div class="modal-header">
  111 + <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4>
  112 + </div>
  113 + <div class="modal-body">
  114 + <section>
  115 + <div class="forum_form"></div>
  116 + </section>
  117 + </div>
  118 + <div class="modal-footer">
  119 + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans 'Close' %}</button>
  120 + <button type="button" onclick="$('#forum_create').submit();" class="btn btn-primary btn-raised">{% trans 'Update' %}</button>
  121 + </div>
  122 + </div>
  123 + </div>
  124 + </div>
106 {% endblock %} 125 {% endblock %}
107 126
108 {% block rightbar %} 127 {% block rightbar %}
@@ -114,4 +133,4 @@ @@ -114,4 +133,4 @@
114 133
115 </div> 134 </div>
116 </div> 135 </div>
117 -{% endblock rightbar %}  
118 \ No newline at end of file 136 \ No newline at end of file
  137 +{% endblock rightbar %}
forum/templates/forum/render_forum.html 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +{% load i18n %}
  2 +
  3 +<h1>{{ forum }}</h1>
  4 +<h4><b>{% trans 'Description' %}:</b> {{ forum.description }}</h4>
  5 +<h4><b>{% trans 'Opened in' %}:</b> {{ forum.create_date }}</h4>
0 \ No newline at end of file 6 \ No newline at end of file
forum/templates/post/post_list.html
@@ -36,8 +36,10 @@ @@ -36,8 +36,10 @@
36 <p class="comment-text">{{ post.message|linebreaks }}</p> 36 <p class="comment-text">{{ post.message|linebreaks }}</p>
37 </div> 37 </div>
38 <div class="answer_post"></div> 38 <div class="answer_post"></div>
  39 + <div class="answer_list">
  40 + {% list_post_answer request post %}
  41 + </div>
39 </div> 42 </div>
40 </div> 43 </div>
41 - {% list_post_answer request post %}  
42 {% endfor %} 44 {% endfor %}
43 {% endif %} 45 {% endif %}
44 \ No newline at end of file 46 \ No newline at end of file
forum/templates/post_answers/post_answer_form.html
1 {% load static i18n %} 1 {% load static i18n %}
2 {% load widget_tweaks %} 2 {% load widget_tweaks %}
3 3
4 -<form method="post" action="#" enctype="multipart/form-data"> 4 +<form class="answer_post_form" method="post" action="{% if answer %}{% else %}{% url 'course:forum:reply_post' %}{% endif %}" enctype="multipart/form-data">
5 {% csrf_token %} 5 {% csrf_token %}
6 {% for field in form %} 6 {% for field in form %}
7 - <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput">  
8 - <div class="input-group">  
9 - <label for="{{ field.auto_id }}">{{ field.label }}</label>  
10 - {% render_field field class='form-control' %}  
11 - <span class="help-block">{{ field.help_text }}</span>  
12 - {% if field.errors %}  
13 - <div class="row">  
14 - <br />  
15 - <div class="alert alert-danger alert-dismissible" role="alert">  
16 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
17 - <span aria-hidden="true">&times;</span>  
18 - </button>  
19 - <ul>  
20 - {% for error in field.errors %}  
21 - <li>{{ error }}</li>  
22 - {% endfor %}  
23 - </ul> 7 + {% if field.field.widget.input_type == 'hidden' %}
  8 + {% render_field field class='form-control' %}
  9 + {% else %}
  10 + <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput">
  11 + <div class="input-group">
  12 + <label for="{{ field.auto_id }}">{{ field.label }}</label>
  13 + {% render_field field class='form-control' %}
  14 + <span class="help-block">{{ field.help_text }}</span>
  15 + {% if field.errors %}
  16 + <div class="row">
  17 + <br />
  18 + <div class="alert alert-danger alert-dismissible" role="alert">
  19 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  20 + <span aria-hidden="true">&times;</span>
  21 + </button>
  22 + <ul>
  23 + {% for error in field.errors %}
  24 + <li>{{ error }}</li>
  25 + {% endfor %}
  26 + </ul>
  27 + </div>
24 </div> 28 </div>
25 - </div>  
26 - {% endif %}  
27 - <span class="input-group-btn">  
28 - <button type="submit" class="btn btn-fab btn-fab-mini">  
29 - <i class="material-icons">send</i>  
30 - </button>  
31 - </span> 29 + {% endif %}
  30 + <span class="input-group-btn">
  31 + <button type="submit" class="btn btn-fab btn-fab-mini">
  32 + <i class="material-icons">send</i>
  33 + </button>
  34 + </span>
  35 + </div>
32 </div> 36 </div>
33 - </div> 37 + {% endif %}
34 {% endfor %} 38 {% endfor %}
35 -  
36 </form> 39 </form>
37 \ No newline at end of file 40 \ No newline at end of file
forum/templates/post_answers/post_answer_list.html
@@ -2,11 +2,11 @@ @@ -2,11 +2,11 @@
2 2
3 {% if answers|length > 0 %} 3 {% if answers|length > 0 %}
4 {% for answer in answers %} 4 {% for answer in answers %}
5 - <div class="row" style="background-color: #e0e0e0"> 5 + <div id="answer_{{ answer.id }}" class="row" style="background-color: #e0e0e0">
6 <div class="col-sm-12 col-xs-12"> 6 <div class="col-sm-12 col-xs-12">
7 <h3 class="user-name"> 7 <h3 class="user-name">
8 {{ answer.user }} 8 {{ answer.user }}
9 - {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == answer.user %} 9 + {% if request.user|has_role:'system_admin' or request.user == answer.user %}
10 <div class="pull-right"> 10 <div class="pull-right">
11 <div class="btn-group icon-more-horiz"> 11 <div class="btn-group icon-more-horiz">
12 <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 12 <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 </a> 14 </a>
15 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> 15 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
16 <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> 16 <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li>
17 - <li><a href="javascript:void(0)"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> 17 + <li><a href="javascript:delete_answer('{% url 'course:forum:delete_answer' answer.id %}', '{{ answer.id }}', '{% trans "Are you sure you want to delete this answer?" %}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li>
18 </ul> 18 </ul>
19 </div> 19 </div>
20 </div> 20 </div>
forum/templates/post_answers/post_answer_render.html 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +{% load i18n permission_tags %}
  2 +
  3 +<div id="answer_{{ answer.id }}" class="row" style="background-color: #e0e0e0">
  4 + <div class="col-sm-12 col-xs-12">
  5 + <h3 class="user-name">
  6 + {{ answer.user }}
  7 + {% if request.user|has_role:'system_admin' or request.user == answer.user %}
  8 + <div class="pull-right">
  9 + <div class="btn-group icon-more-horiz">
  10 + <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  11 + <i class="material-icons">more_horiz</i>
  12 + </a>
  13 + <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
  14 + <li><a href="javascript:void(0)"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li>
  15 + <li><a href="javascript:delete_answer('{% url 'course:forum:delete_answer' answer.id %}', '{{ answer.id }}', '{% trans "Are you sure you want to delete this answer?" %}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li>
  16 + </ul>
  17 + </div>
  18 + </div>
  19 + {% endif %}
  20 + </h3>
  21 + <div class="card-data">
  22 + <p class="comment-date"><i class="fa fa-clock-o"></i> {{ answer.answer_date|timesince }} {% trans 'ago' %}</p>
  23 + </div>
  24 + <p class="comment-text">{{ answer.message|linebreaks }}</p>
  25 + </div>
  26 +</div>
0 \ No newline at end of file 27 \ No newline at end of file
@@ -6,8 +6,10 @@ from . import views @@ -6,8 +6,10 @@ from . import views
6 urlpatterns = [ 6 urlpatterns = [
7 url(r'^$', views.ForumIndex.as_view(), name='index'), 7 url(r'^$', views.ForumIndex.as_view(), name='index'),
8 url(r'^create/$', views.CreateForumView.as_view(), name='create'), 8 url(r'^create/$', views.CreateForumView.as_view(), name='create'),
  9 + url(r'^update/(?P<pk>[\w_-]+)/$', views.UpdateForumView.as_view(), name='update'),
9 url(r'^delete/(?P<pk>[\w_-]+)/$', views.ForumDeleteView.as_view(), name='delete'), 10 url(r'^delete/(?P<pk>[\w_-]+)/$', views.ForumDeleteView.as_view(), name='delete'),
10 url(r'^render_forum/([\w_-]+)/$', views.render_forum, name='render_forum'), 11 url(r'^render_forum/([\w_-]+)/$', views.render_forum, name='render_forum'),
  12 + url(r'^render_edit_forum/([\w_-]+)/$', views.render_edit_forum, name='render_edit_forum'),
11 url(r'^forum_deleted/$', views.forum_deleted, name='deleted_forum'), 13 url(r'^forum_deleted/$', views.forum_deleted, name='deleted_forum'),
12 url(r'^create_post/$', views.CreatePostView.as_view(), name='create_post'), 14 url(r'^create_post/$', views.CreatePostView.as_view(), name='create_post'),
13 url(r'^update_post/(?P<pk>[\w_-]+)/$', views.PostUpdateView.as_view(), name='update_post'), 15 url(r'^update_post/(?P<pk>[\w_-]+)/$', views.PostUpdateView.as_view(), name='update_post'),
@@ -16,5 +18,8 @@ urlpatterns = [ @@ -16,5 +18,8 @@ urlpatterns = [
16 url(r'^post_deleted/$', views.post_deleted, name='deleted_post'), 18 url(r'^post_deleted/$', views.post_deleted, name='deleted_post'),
17 url(r'^post_answers/$', views.PostAnswerIndex.as_view(), name='post_answers'), 19 url(r'^post_answers/$', views.PostAnswerIndex.as_view(), name='post_answers'),
18 url(r'^reply_post/$', views.CreatePostAnswerView.as_view(), name='reply_post'), 20 url(r'^reply_post/$', views.CreatePostAnswerView.as_view(), name='reply_post'),
  21 + url(r'^render_post_answer/([\w_-]+)/$', views.render_post_answer, name='render_post_answer'),
  22 + url(r'^delete_post_answer/(?P<pk>[\w_-]+)/$', views.PostAnswerDeleteView.as_view(), name='delete_answer'),
  23 + url(r'^post_answer_deleted/$', views.answer_deleted, name='deleted_answer'),
19 url(r'^(?P<slug>[\w_-]+)/$', views.ForumDetailView.as_view(), name='view'), 24 url(r'^(?P<slug>[\w_-]+)/$', views.ForumDetailView.as_view(), name='view'),
20 ] 25 ]
forum/views.py
@@ -10,6 +10,10 @@ from courses.models import Topic @@ -10,6 +10,10 @@ from courses.models import Topic
10 10
11 from .forms import ForumForm, PostForm, PostAnswerForm 11 from .forms import ForumForm, PostForm, PostAnswerForm
12 12
  13 +"""
  14 + Forum Section
  15 +"""
  16 +
13 class ForumIndex(LoginRequiredMixin, generic.ListView): 17 class ForumIndex(LoginRequiredMixin, generic.ListView):
14 login_url = reverse_lazy("core:home") 18 login_url = reverse_lazy("core:home")
15 redirect_field_name = 'next' 19 redirect_field_name = 'next'
@@ -50,6 +54,30 @@ def render_forum(request, forum): @@ -50,6 +54,30 @@ def render_forum(request, forum):
50 54
51 return HttpResponse(str(reverse_lazy('course:forum:view', args = (), kwargs = {'slug': last_forum.slug})) + '-' + str(forum) + '-' + str(last_forum.name)) 55 return HttpResponse(str(reverse_lazy('course:forum:view', args = (), kwargs = {'slug': last_forum.slug})) + '-' + str(forum) + '-' + str(last_forum.name))
52 56
  57 +class UpdateForumView(LoginRequiredMixin, generic.UpdateView):
  58 + login_url = reverse_lazy("core:home")
  59 + redirect_field_name = 'next'
  60 +
  61 + template_name = 'forum/forum_form.html'
  62 + form_class = ForumForm
  63 + model = Forum
  64 +
  65 + def form_invalid(self, form):
  66 + return self.render_to_response(self.get_context_data(form = form), status = 400)
  67 +
  68 + def get_success_url(self):
  69 + self.success_url = reverse('course:forum:render_edit_forum', args = (self.object.id, ))
  70 +
  71 + return self.success_url
  72 +
  73 +def render_edit_forum(request, forum):
  74 + last_forum = get_object_or_404(Forum, id = forum)
  75 + context = {
  76 + 'forum': last_forum
  77 + }
  78 +
  79 + return render(request, 'forum/render_forum.html', context)
  80 +
53 class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): 81 class ForumDeleteView(LoginRequiredMixin, generic.DeleteView):
54 login_url = reverse_lazy("core:home") 82 login_url = reverse_lazy("core:home")
55 redirect_field_name = 'next' 83 redirect_field_name = 'next'
@@ -79,6 +107,10 @@ class ForumDetailView(LoginRequiredMixin, generic.DetailView): @@ -79,6 +107,10 @@ class ForumDetailView(LoginRequiredMixin, generic.DetailView):
79 107
80 return context 108 return context
81 109
  110 +"""
  111 + Post Section
  112 +"""
  113 +
82 class CreatePostView(LoginRequiredMixin, generic.edit.CreateView): 114 class CreatePostView(LoginRequiredMixin, generic.edit.CreateView):
83 login_url = reverse_lazy("core:home") 115 login_url = reverse_lazy("core:home")
84 redirect_field_name = 'next' 116 redirect_field_name = 'next'
@@ -130,6 +162,12 @@ class PostDeleteView(LoginRequiredMixin, generic.DeleteView): @@ -130,6 +162,12 @@ class PostDeleteView(LoginRequiredMixin, generic.DeleteView):
130 def post_deleted(request): 162 def post_deleted(request):
131 return HttpResponse(_("Post deleted successfully.")) 163 return HttpResponse(_("Post deleted successfully."))
132 164
  165 +
  166 +
  167 +"""
  168 + Post Answer Section
  169 +"""
  170 +
133 class PostAnswerIndex(LoginRequiredMixin, generic.ListView): 171 class PostAnswerIndex(LoginRequiredMixin, generic.ListView):
134 login_url = reverse_lazy("core:home") 172 login_url = reverse_lazy("core:home")
135 redirect_field_name = 'next' 173 redirect_field_name = 'next'
@@ -150,4 +188,35 @@ class CreatePostAnswerView(LoginRequiredMixin, generic.edit.CreateView): @@ -150,4 +188,35 @@ class CreatePostAnswerView(LoginRequiredMixin, generic.edit.CreateView):
150 188
151 template_name = 'post_answers/post_answer_form.html' 189 template_name = 'post_answers/post_answer_form.html'
152 form_class = PostAnswerForm 190 form_class = PostAnswerForm
153 - success_url = reverse_lazy('course:forum:index')  
154 \ No newline at end of file 191 \ No newline at end of file
  192 +
  193 + def form_valid(self, form):
  194 + self.object = form.save(commit = False)
  195 + self.object.user = self.request.user
  196 +
  197 + self.object.save()
  198 +
  199 + return super(CreatePostAnswerView, self).form_valid(form)
  200 +
  201 + def get_success_url(self):
  202 + self.success_url = reverse('course:forum:render_post_answer', args = (self.object.id, ))
  203 +
  204 + return self.success_url
  205 +
  206 +def render_post_answer(request, answer):
  207 + last_answer = get_object_or_404(PostAnswer, id = answer)
  208 +
  209 + context = {}
  210 + context['answer'] = last_answer
  211 +
  212 + return render(request, "post_answers/post_answer_render.html", context)
  213 +
  214 +class PostAnswerDeleteView(LoginRequiredMixin, generic.DeleteView):
  215 + login_url = reverse_lazy("core:home")
  216 + redirect_field_name = 'next'
  217 +
  218 + model = PostAnswer
  219 + pk_url_kwarg = 'pk'
  220 + success_url = reverse_lazy('course:forum:deleted_answer')
  221 +
  222 +def answer_deleted(request):
  223 + return HttpResponse(_("Post answer deleted successfully."))
155 \ No newline at end of file 224 \ No newline at end of file
requirements.txt
@@ -15,5 +15,4 @@ MarkupSafe==0.23 @@ -15,5 +15,4 @@ MarkupSafe==0.23
15 Pillow==3.3.1 15 Pillow==3.3.1
16 psycopg2==2.6.2 16 psycopg2==2.6.2
17 pycpfcnpj==1.0.2 17 pycpfcnpj==1.0.2
18 -six==1.10.0  
19 -psycopg2==2.6.2 18 +six==1.10.0
20 \ No newline at end of file 19 \ No newline at end of file