Commit c29d4f3ae571759f2fa21091b97432942c281a58
Exists in
master
and in
5 other branches
Merge branch 'dev' of https://github.com/amadeusproject/amadeuslms into dev
Showing
12 changed files
with
119 additions
and
73 deletions
Show diff stats
amadeus/urls.py
... | ... | @@ -23,7 +23,6 @@ urlpatterns = [ |
23 | 23 | url(r'^home/', include('app.urls', namespace = 'app')), |
24 | 24 | url(r'^course/', include('courses.urls', namespace = 'course')), |
25 | 25 | url(r'^users/', include('users.urls', namespace = 'users')), |
26 | - url(r'^forum/', include('forum.urls', namespace = 'forum')), | |
27 | 26 | url(r'^admin/', admin.site.urls), |
28 | 27 | url(r'^', include('core.urls', namespace = 'core')), |
29 | 28 | ... | ... |
core/templates/base.html
courses/templates/subject/form_view_teacher.html
... | ... | @@ -19,7 +19,7 @@ |
19 | 19 | </a> |
20 | 20 | <div class="panel-body"> |
21 | 21 | <p>{{ topic.description|linebreaks }}</p> |
22 | - <button class="btn btn-primary btn-raised" onclick="createForum('{% url 'forum:create' %}', '{{ topic.id }}')">{% trans '+ Create Forum' %}</button> | |
22 | + <button class="btn btn-primary btn-raised" onclick="createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans '+ Create Forum' %}</button> | |
23 | 23 | <div class="foruns_list"> |
24 | 24 | {% list_topic_foruns request topic %} |
25 | 25 | </div> | ... | ... |
courses/templates/topic/list_topic_foruns.html
1 | 1 | {% for forum in foruns %} |
2 | - <a id="forum_{{ forum.id }}" href="javascript:showForum('{% url 'forum:index' %}', '{{forum.id}}')">{{ forum }}<br /></a> | |
2 | + <a id="forum_{{ forum.id }}" href="{% url 'course:forum:view' forum.slug %}">{{ forum }}<br /></a> | |
3 | 3 | {% endfor %} |
4 | 4 | \ No newline at end of file | ... | ... |
courses/urls.py
... | ... | @@ -24,6 +24,7 @@ urlpatterns = [ |
24 | 24 | url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'), |
25 | 25 | |
26 | 26 | |
27 | + url(r'^forum/', include('forum.urls', namespace = 'forum')), | |
27 | 28 | url(r'^poll/', include('poll.urls', namespace = 'poll')) |
28 | 29 | |
29 | 30 | ] | ... | ... |
forum/templates/forum/forum_list.html
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | {% list_posts request forum %} |
30 | 30 | </div> |
31 | 31 | |
32 | -<form id="form_post" method="post" action="{% url 'forum:create_post' %}" enctype="multipart/form-data"> | |
32 | +<form id="form_post" method="post" action="{% url 'course:forum:create_post' %}" enctype="multipart/form-data"> | |
33 | 33 | {% csrf_token %} |
34 | 34 | {% for field in form %} |
35 | 35 | {% if field.field.widget.input_type == 'hidden' %} |
... | ... | @@ -63,26 +63,4 @@ |
63 | 63 | </div> |
64 | 64 | {% endif %} |
65 | 65 | {% endfor %} |
66 | -</form> | |
67 | - | |
68 | -<!--{% if foruns|length > 0 %} | |
69 | - {% for forum in foruns %} | |
70 | - <a class="forum_collapse" role="button" href="javascript: showPosts('{% url 'forum:posts' %}', '{{ forum.slug }}')" aria-expanded="true"> | |
71 | - <div class="page-header"> | |
72 | - <h1 id="timeline"> | |
73 | - {{ forum }} | |
74 | - </h1> | |
75 | - <b>{% trans 'Description' %}: </b>{{ forum.description }}<p> | |
76 | - <b>{% trans 'Created in' %}: </b>{{ forum.create_date }} | |
77 | - </div> | |
78 | - </a> | |
79 | - <div class="collapse" id="collapse{{ forum.slug }}"> | |
80 | - <div class="well"> | |
81 | - </div> | |
82 | - </div> | |
83 | - {% endfor %} | |
84 | -{% else %} | |
85 | - <div class="page-header"> | |
86 | - <p>{% trans 'No forum created yet.' %}</p> | |
87 | - </div> | |
88 | -{% endif %}--> | |
66 | +</form> | |
89 | 67 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,79 @@ |
1 | +{% extends 'base.html' %} | |
2 | + | |
3 | +{% load static i18n permission_tags list_post %} | |
4 | +{% load widget_tweaks %} | |
5 | + | |
6 | +{% block javascript %} | |
7 | + <script type="text/javascript" src="{% static 'js/forum.js' %}"></script> | |
8 | +{% endblock %} | |
9 | + | |
10 | +{% block breadcrumbs %} | |
11 | + | |
12 | + <ol class="breadcrumb"> | |
13 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | |
14 | + <li><a href="{% url 'course:view' forum.topic.subject.course.slug %}">{{ forum.topic.subject.course }}</a></li> | |
15 | + {% if user|has_role:'professor' or user|has_role:'system_admin' %} | |
16 | + <li class="active">{% trans 'Forum' %}</li> | |
17 | + {% else %} | |
18 | + <li class="active">{{ forum.name }}</li> | |
19 | + {% endif %} | |
20 | + | |
21 | + </ol> | |
22 | +{% endblock %} | |
23 | + | |
24 | +{% block sidebar %} | |
25 | + <div class="panel panel-primary navigation"> | |
26 | + <div class="panel-heading"> | |
27 | + <h5>{% trans 'Menu' %}</h5> | |
28 | + </div> | |
29 | + <div class="panel-body"> | |
30 | + <ul class="nav nav-pills nav-stacked"> | |
31 | + <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> | |
32 | + <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li> | |
33 | + </ul> | |
34 | + </div> | |
35 | + </div> | |
36 | + | |
37 | + {% if request.user|has_role:'system_admin' or request.user|has_role:'professor' and request.user == post.user %} | |
38 | + <div class="panel panel-primary navigation"> | |
39 | + <div class="panel-heading"> | |
40 | + <h3 class="panel-title">{% trans 'Actions' %}</h3> | |
41 | + </div> | |
42 | + <div class="panel-body"> | |
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> | |
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?" %}')">{% trans 'Delete' %}</a></li> | |
46 | + </ul> | |
47 | + </div> | |
48 | + </div> | |
49 | + {% endif %} | |
50 | +{% endblock %} | |
51 | + | |
52 | +{% block content %} | |
53 | + <div class="row panel panel-default"> | |
54 | + <div class="panel-body"> | |
55 | + <div class="comments-list"> | |
56 | + <div class="section-heading"> | |
57 | + <h1>{{ forum }}</h1> | |
58 | + <h4><b>{% trans 'Description' %}:</b> {{ forum.description }}</h4> | |
59 | + <h4><b>{% trans 'Opened in' %}:</b> {{ forum.create_date }}</h4> | |
60 | + </div> | |
61 | + </div> | |
62 | + | |
63 | + <div id="posts_list"> | |
64 | + {% list_posts request forum %} | |
65 | + </div> | |
66 | + </div> | |
67 | + </div> | |
68 | +{% endblock %} | |
69 | + | |
70 | +{% block rightbar %} | |
71 | + <div class="panel panel-warning"> | |
72 | + <div class="panel-heading"> | |
73 | + <h3 class="panel-title">{% trans "Pending Stuffs" %}</h3> | |
74 | + </div> | |
75 | + <div class="panel-body"> | |
76 | + | |
77 | + </div> | |
78 | + </div> | |
79 | +{% endblock rightbar %} | |
0 | 80 | \ No newline at end of file | ... | ... |
forum/templates/post/post_list.html
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | <h3 class="user-name"> |
8 | 8 | {{ post.user }} |
9 | 9 | <div class="pull-right"> |
10 | - <a href="javascript:answer('{{ post.id }}', '{% url 'forum:reply_post' %}');"> | |
10 | + <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | |
11 | 11 | <i class="material-icons">reply</i> |
12 | 12 | </a> |
13 | 13 | {% if request.user|has_role:'system_admin' or request.user == post.user %} |
... | ... | @@ -17,8 +17,8 @@ |
17 | 17 | <i class="material-icons">more_horiz</i> |
18 | 18 | </a> |
19 | 19 | <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> |
20 | - <li><a href="javascript:edit_post('{% url 'forum:update_post' post.id %}', '{{ post.id }}')"><i class="material-icons">create</i> {% trans 'Edit' %}</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> | |
20 | + <li><a href="javascript:edit_post('{% url 'course:forum:update_post' post.id %}', '{{ post.id }}')"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | |
21 | + <li><a href="javascript:javascript:delete_post('{% url 'course:forum:delete_post' post.id %}', '{{ post.id }}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | |
22 | 22 | </ul> |
23 | 23 | </div> |
24 | 24 | {% endif %} |
... | ... | @@ -40,34 +40,4 @@ |
40 | 40 | </div> |
41 | 41 | {% list_post_answer request post %} |
42 | 42 | {% endfor %} |
43 | -{% endif %} | |
44 | - <!--<li> | |
45 | - <a class="post_collapse" role="button" href="javascript: showPostsAnswers('{% url 'forum:post_answers' %}', '{{ post.id }}')" aria-expanded="false"> | |
46 | - <div class="timeline-panel"> | |
47 | - <div class="row"> | |
48 | - <div class="col-xs-2 col-sm-2 col-md-2"> | |
49 | - <img class="img-responsive img-rounded" src="{{ post.user.image_url }}" /> | |
50 | - </div> | |
51 | - <div class="col-xs-10 col-sm-10 col-md-10"> | |
52 | - <div class="timeline-heading"> | |
53 | - <h3> {{ post.user }}</h3> | |
54 | - </div> | |
55 | - <div class="timeline-body"> | |
56 | - <p><em>{{ post.message|linebreaks }}</em></p> | |
57 | - </div> | |
58 | - <hr> | |
59 | - <small class="text-muted"> | |
60 | - <span class="pull-right"> | |
61 | - <i class="glyphicon glyphicon-time"></i> {{ post.post_date|timesince }} | |
62 | - {% trans ' ago' %} | |
63 | - </span> | |
64 | - </small> | |
65 | - </div> | |
66 | - </div> | |
67 | - </div> | |
68 | - </a> | |
69 | - <div class="collapse" id="collapse{{ post.id }}" style="margin-top:10px;"> | |
70 | - <div class="well"> | |
71 | - </div> | |
72 | - </div> | |
73 | - </li>--> | |
74 | 43 | \ No newline at end of file |
44 | +{% endif %} | |
75 | 45 | \ No newline at end of file | ... | ... |
forum/templates/post/post_render.html
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | <h3 class="user-name"> |
6 | 6 | {{ post.user }} |
7 | 7 | <div class="pull-right"> |
8 | - <a href="javascript:answer('{{ post.id }}', '{% url 'forum:reply_post' %}');"> | |
8 | + <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | |
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 %} |
... | ... | @@ -15,8 +15,8 @@ |
15 | 15 | <i class="material-icons">more_horiz</i> |
16 | 16 | </a> |
17 | 17 | <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> |
18 | - <li><a href="javascript:edit_post('{% url 'forum:update_post' post.id %}', '{{ post.id }}')"></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> | |
18 | + <li><a href="javascript:edit_post('{% url 'course:forum:update_post' post.id %}', '{{ post.id }}')"></li> | |
19 | + <li><a href="javascript:delete_post('{% url 'course:forum:delete_post' post.id %}', '{{ post.id }}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | |
20 | 20 | </ul> |
21 | 21 | </div> |
22 | 22 | {% endif %} | ... | ... |
forum/urls.py
1 | -from django.conf.urls import url, include | |
1 | +from django.conf.urls import url | |
2 | 2 | |
3 | 3 | from . import views |
4 | 4 | |
5 | 5 | |
6 | 6 | urlpatterns = [ |
7 | 7 | url(r'^$', views.ForumIndex.as_view(), name='index'), |
8 | + url(r'^(?P<slug>[\w_-]+)/$', views.ForumDetailView.as_view(), name='view'), | |
8 | 9 | url(r'^create/$', views.CreateForumView.as_view(), name='create'), |
9 | 10 | url(r'^delete/(?P<pk>[\w_-]+)/$', views.ForumDeleteView.as_view(), name='delete'), |
10 | 11 | url(r'^render_forum/([\w_-]+)/$', views.render_forum, name='render_forum'), | ... | ... |
forum/views.py
... | ... | @@ -42,14 +42,14 @@ class CreateForumView(LoginRequiredMixin, generic.edit.CreateView): |
42 | 42 | |
43 | 43 | def get_success_url(self): |
44 | 44 | print("Pass") |
45 | - self.success_url = reverse('forum:render_forum', args = (self.object.id, )) | |
45 | + self.success_url = reverse('course:forum:render_forum', args = (self.object.id, )) | |
46 | 46 | |
47 | 47 | return self.success_url |
48 | 48 | |
49 | 49 | def render_forum(request, forum): |
50 | 50 | last_forum = get_object_or_404(Forum, id = forum) |
51 | 51 | |
52 | - return HttpResponse(str(reverse_lazy('forum:index')) + '-' + str(forum) + '-' + str(last_forum.name)) | |
52 | + return HttpResponse(str(reverse_lazy('course:forum:index')) + '-' + str(forum) + '-' + str(last_forum.name)) | |
53 | 53 | |
54 | 54 | class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): |
55 | 55 | login_url = reverse_lazy("core:home") |
... | ... | @@ -57,11 +57,28 @@ class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): |
57 | 57 | |
58 | 58 | model = Forum |
59 | 59 | pk_url_kwarg = 'pk' |
60 | - success_url = reverse_lazy('forum:deleted_forum') | |
60 | + success_url = reverse_lazy('course:forum:deleted_forum') | |
61 | 61 | |
62 | 62 | def forum_deleted(request): |
63 | 63 | return HttpResponse(_("Forum deleted successfully.")) |
64 | 64 | |
65 | +class ForumDetailView(LoginRequiredMixin, generic.DetailView): | |
66 | + login_url = reverse_lazy("core:home") | |
67 | + redirect_field_name = 'next' | |
68 | + | |
69 | + model = Forum | |
70 | + template_name = 'forum/forum_view.html' | |
71 | + context_object_name = 'forum' | |
72 | + | |
73 | + def get_context_data(self, **kwargs): | |
74 | + context = super(ForumDetailView, self).get_context_data(**kwargs) | |
75 | + forum = get_object_or_404(Forum, slug = self.kwargs.get('slug')) | |
76 | + | |
77 | + context['forum'] = forum | |
78 | + context['title'] = forum.name | |
79 | + | |
80 | + return context | |
81 | + | |
65 | 82 | class CreatePostView(LoginRequiredMixin, generic.edit.CreateView): |
66 | 83 | login_url = reverse_lazy("core:home") |
67 | 84 | redirect_field_name = 'next' |
... | ... | @@ -77,7 +94,7 @@ class CreatePostView(LoginRequiredMixin, generic.edit.CreateView): |
77 | 94 | return super(CreatePostView, self).form_valid(form) |
78 | 95 | |
79 | 96 | def get_success_url(self): |
80 | - self.success_url = reverse('forum:render_post', args = (self.object.id, )) | |
97 | + self.success_url = reverse('course:forum:render_post', args = (self.object.id, )) | |
81 | 98 | |
82 | 99 | return self.success_url |
83 | 100 | |
... | ... | @@ -98,7 +115,7 @@ class PostUpdateView(LoginRequiredMixin, generic.UpdateView): |
98 | 115 | template_name = "post/post_update_form.html" |
99 | 116 | |
100 | 117 | def get_success_url(self): |
101 | - self.success_url = reverse('forum:render_post', args = (self.object.id, )) | |
118 | + self.success_url = reverse('course:forum:render_post', args = (self.object.id, )) | |
102 | 119 | |
103 | 120 | return self.success_url |
104 | 121 | |
... | ... | @@ -108,7 +125,7 @@ class PostDeleteView(LoginRequiredMixin, generic.DeleteView): |
108 | 125 | |
109 | 126 | model = Post |
110 | 127 | pk_url_kwarg = 'pk' |
111 | - success_url = reverse_lazy('forum:deleted_post') | |
128 | + success_url = reverse_lazy('course:forum:deleted_post') | |
112 | 129 | |
113 | 130 | def post_deleted(request): |
114 | 131 | return HttpResponse(_("Post deleted successfully.")) |
... | ... | @@ -131,4 +148,4 @@ class CreatePostAnswerView(LoginRequiredMixin, generic.edit.CreateView): |
131 | 148 | |
132 | 149 | template_name = 'post_answers/post_answer_form.html' |
133 | 150 | form_class = PostAnswerForm |
134 | - success_url = reverse_lazy('forum:index') | |
135 | 151 | \ No newline at end of file |
152 | + success_url = reverse_lazy('course:forum:index') | |
136 | 153 | \ No newline at end of file | ... | ... |