Commit 8dbb9d76a75b35f5096046d07218d137dc091135
1 parent
7f219cc5
Exists in
master
and in
5 other branches
Adding forum edition [Issue: #97]
Showing
7 changed files
with
92 additions
and
23 deletions
Show diff stats
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/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 | */ |
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/urls.py
@@ -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'), |
forum/views.py
@@ -50,6 +50,30 @@ def render_forum(request, forum): | @@ -50,6 +50,30 @@ def render_forum(request, forum): | ||
50 | 50 | ||
51 | return HttpResponse(str(reverse_lazy('course:forum:view', args = (), kwargs = {'slug': last_forum.slug})) + '-' + str(forum) + '-' + str(last_forum.name)) | 51 | return HttpResponse(str(reverse_lazy('course:forum:view', args = (), kwargs = {'slug': last_forum.slug})) + '-' + str(forum) + '-' + str(last_forum.name)) |
52 | 52 | ||
53 | +class UpdateForumView(LoginRequiredMixin, generic.UpdateView): | ||
54 | + login_url = reverse_lazy("core:home") | ||
55 | + redirect_field_name = 'next' | ||
56 | + | ||
57 | + template_name = 'forum/forum_form.html' | ||
58 | + form_class = ForumForm | ||
59 | + model = Forum | ||
60 | + | ||
61 | + def form_invalid(self, form): | ||
62 | + return self.render_to_response(self.get_context_data(form = form), status = 400) | ||
63 | + | ||
64 | + def get_success_url(self): | ||
65 | + self.success_url = reverse('course:forum:render_edit_forum', args = (self.object.id, )) | ||
66 | + | ||
67 | + return self.success_url | ||
68 | + | ||
69 | +def render_edit_forum(request, forum): | ||
70 | + last_forum = get_object_or_404(Forum, id = forum) | ||
71 | + context = { | ||
72 | + 'forum': last_forum | ||
73 | + } | ||
74 | + | ||
75 | + return render(request, 'forum/render_forum.html', context) | ||
76 | + | ||
53 | class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): | 77 | class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): |
54 | login_url = reverse_lazy("core:home") | 78 | login_url = reverse_lazy("core:home") |
55 | redirect_field_name = 'next' | 79 | redirect_field_name = 'next' |