Commit c29d4f3ae571759f2fa21091b97432942c281a58

Authored by Matheus Lins
2 parents 4f7868a5 2666c250

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

amadeus/urls.py
@@ -23,7 +23,6 @@ urlpatterns = [ @@ -23,7 +23,6 @@ urlpatterns = [
23 url(r'^home/', include('app.urls', namespace = 'app')), 23 url(r'^home/', include('app.urls', namespace = 'app')),
24 url(r'^course/', include('courses.urls', namespace = 'course')), 24 url(r'^course/', include('courses.urls', namespace = 'course')),
25 url(r'^users/', include('users.urls', namespace = 'users')), 25 url(r'^users/', include('users.urls', namespace = 'users')),
26 - url(r'^forum/', include('forum.urls', namespace = 'forum')),  
27 url(r'^admin/', admin.site.urls), 26 url(r'^admin/', admin.site.urls),
28 url(r'^', include('core.urls', namespace = 'core')), 27 url(r'^', include('core.urls', namespace = 'core')),
29 28
core/templates/base.html
@@ -45,6 +45,8 @@ @@ -45,6 +45,8 @@
45 <script src="{% static 'js/base/amadeus.js' %}"></script> 45 <script src="{% static 'js/base/amadeus.js' %}"></script>
46 {% block style %} 46 {% block style %}
47 {% endblock %} 47 {% endblock %}
  48 + {% block javascript %}
  49 + {% endblock %}
48 </head> 50 </head>
49 <body> 51 <body>
50 <div class="container-fluid"> 52 <div class="container-fluid">
courses/templates/subject/form_view_teacher.html
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 </a> 19 </a>
20 <div class="panel-body"> 20 <div class="panel-body">
21 <p>{{ topic.description|linebreaks }}</p> 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 <div class="foruns_list"> 23 <div class="foruns_list">
24 {% list_topic_foruns request topic %} 24 {% list_topic_foruns request topic %}
25 </div> 25 </div>
courses/templates/topic/list_topic_foruns.html
1 {% for forum in foruns %} 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 {% endfor %} 3 {% endfor %}
4 \ No newline at end of file 4 \ No newline at end of file
courses/urls.py
@@ -24,6 +24,7 @@ urlpatterns = [ @@ -24,6 +24,7 @@ urlpatterns = [
24 url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'), 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 url(r'^poll/', include('poll.urls', namespace = 'poll')) 28 url(r'^poll/', include('poll.urls', namespace = 'poll'))
28 29
29 ] 30 ]
forum/templates/forum/forum_list.html
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 {% list_posts request forum %} 29 {% list_posts request forum %}
30 </div> 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 {% csrf_token %} 33 {% csrf_token %}
34 {% for field in form %} 34 {% for field in form %}
35 {% if field.field.widget.input_type == 'hidden' %} 35 {% if field.field.widget.input_type == 'hidden' %}
@@ -63,26 +63,4 @@ @@ -63,26 +63,4 @@
63 </div> 63 </div>
64 {% endif %} 64 {% endif %}
65 {% endfor %} 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 \ No newline at end of file 67 \ No newline at end of file
forum/templates/forum/forum_view.html 0 → 100644
@@ -0,0 +1,79 @@ @@ -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 \ No newline at end of file 80 \ No newline at end of file
forum/templates/post/post_list.html
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 <h3 class="user-name"> 7 <h3 class="user-name">
8 {{ post.user }} 8 {{ post.user }}
9 <div class="pull-right"> 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 <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 == post.user %} 13 {% if request.user|has_role:'system_admin' or request.user == post.user %}
@@ -17,8 +17,8 @@ @@ -17,8 +17,8 @@
17 <i class="material-icons">more_horiz</i> 17 <i class="material-icons">more_horiz</i>
18 </a> 18 </a>
19 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> 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 </ul> 22 </ul>
23 </div> 23 </div>
24 {% endif %} 24 {% endif %}
@@ -40,34 +40,4 @@ @@ -40,34 +40,4 @@
40 </div> 40 </div>
41 {% list_post_answer request post %} 41 {% list_post_answer request post %}
42 {% endfor %} 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 \ No newline at end of file 43 \ No newline at end of file
  44 +{% endif %}
75 \ No newline at end of file 45 \ No newline at end of file
forum/templates/post/post_render.html
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <h3 class="user-name"> 5 <h3 class="user-name">
6 {{ post.user }} 6 {{ post.user }}
7 <div class="pull-right"> 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 <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 %}
@@ -15,8 +15,8 @@ @@ -15,8 +15,8 @@
15 <i class="material-icons">more_horiz</i> 15 <i class="material-icons">more_horiz</i>
16 </a> 16 </a>
17 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> 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 </ul> 20 </ul>
21 </div> 21 </div>
22 {% endif %} 22 {% endif %}
1 -from django.conf.urls import url, include 1 +from django.conf.urls import url
2 2
3 from . import views 3 from . import views
4 4
5 5
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'^(?P<slug>[\w_-]+)/$', views.ForumDetailView.as_view(), name='view'),
8 url(r'^create/$', views.CreateForumView.as_view(), name='create'), 9 url(r'^create/$', views.CreateForumView.as_view(), name='create'),
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'),
forum/views.py
@@ -42,14 +42,14 @@ class CreateForumView(LoginRequiredMixin, generic.edit.CreateView): @@ -42,14 +42,14 @@ class CreateForumView(LoginRequiredMixin, generic.edit.CreateView):
42 42
43 def get_success_url(self): 43 def get_success_url(self):
44 print("Pass") 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 return self.success_url 47 return self.success_url
48 48
49 def render_forum(request, forum): 49 def render_forum(request, forum):
50 last_forum = get_object_or_404(Forum, id = forum) 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 class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): 54 class ForumDeleteView(LoginRequiredMixin, generic.DeleteView):
55 login_url = reverse_lazy("core:home") 55 login_url = reverse_lazy("core:home")
@@ -57,11 +57,28 @@ class ForumDeleteView(LoginRequiredMixin, generic.DeleteView): @@ -57,11 +57,28 @@ class ForumDeleteView(LoginRequiredMixin, generic.DeleteView):
57 57
58 model = Forum 58 model = Forum
59 pk_url_kwarg = 'pk' 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 def forum_deleted(request): 62 def forum_deleted(request):
63 return HttpResponse(_("Forum deleted successfully.")) 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 class CreatePostView(LoginRequiredMixin, generic.edit.CreateView): 82 class CreatePostView(LoginRequiredMixin, generic.edit.CreateView):
66 login_url = reverse_lazy("core:home") 83 login_url = reverse_lazy("core:home")
67 redirect_field_name = 'next' 84 redirect_field_name = 'next'
@@ -77,7 +94,7 @@ class CreatePostView(LoginRequiredMixin, generic.edit.CreateView): @@ -77,7 +94,7 @@ class CreatePostView(LoginRequiredMixin, generic.edit.CreateView):
77 return super(CreatePostView, self).form_valid(form) 94 return super(CreatePostView, self).form_valid(form)
78 95
79 def get_success_url(self): 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 return self.success_url 99 return self.success_url
83 100
@@ -98,7 +115,7 @@ class PostUpdateView(LoginRequiredMixin, generic.UpdateView): @@ -98,7 +115,7 @@ class PostUpdateView(LoginRequiredMixin, generic.UpdateView):
98 template_name = "post/post_update_form.html" 115 template_name = "post/post_update_form.html"
99 116
100 def get_success_url(self): 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 return self.success_url 120 return self.success_url
104 121
@@ -108,7 +125,7 @@ class PostDeleteView(LoginRequiredMixin, generic.DeleteView): @@ -108,7 +125,7 @@ class PostDeleteView(LoginRequiredMixin, generic.DeleteView):
108 125
109 model = Post 126 model = Post
110 pk_url_kwarg = 'pk' 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 def post_deleted(request): 130 def post_deleted(request):
114 return HttpResponse(_("Post deleted successfully.")) 131 return HttpResponse(_("Post deleted successfully."))
@@ -131,4 +148,4 @@ class CreatePostAnswerView(LoginRequiredMixin, generic.edit.CreateView): @@ -131,4 +148,4 @@ class CreatePostAnswerView(LoginRequiredMixin, generic.edit.CreateView):
131 148
132 template_name = 'post_answers/post_answer_form.html' 149 template_name = 'post_answers/post_answer_form.html'
133 form_class = PostAnswerForm 150 form_class = PostAnswerForm
134 - success_url = reverse_lazy('forum:index')  
135 \ No newline at end of file 151 \ No newline at end of file
  152 + success_url = reverse_lazy('course:forum:index')
136 \ No newline at end of file 153 \ No newline at end of file
requirements.txt
@@ -14,7 +14,6 @@ itsdangerous==0.24 @@ -14,7 +14,6 @@ itsdangerous==0.24
14 Jinja2==2.8 14 Jinja2==2.8
15 MarkupSafe==0.23 15 MarkupSafe==0.23
16 Pillow==3.3.1 16 Pillow==3.3.1
17 -pkg-resources==0.0.0  
18 psycopg2==2.6.2 17 psycopg2==2.6.2
19 pycpfcnpj==1.0.2 18 pycpfcnpj==1.0.2
20 six==1.10.0 19 six==1.10.0