Commit 13dc217d354ac0b5f8054f188cd3462a207dae06

Authored by Matheus Lins
1 parent bea6c49b

subiscribe student in course

app/templates/home.html
@@ -74,8 +74,9 @@ @@ -74,8 +74,9 @@
74 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> 74 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
75 {% if user|has_role:'student' or not user.is_staff %} 75 {% if user|has_role:'student' or not user.is_staff %}
76 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> 76 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
  77 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
77 {% endif %} 78 {% endif %}
78 - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> 79 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
79 {% if user|has_role:'system_admin' %} 80 {% if user|has_role:'system_admin' %}
80 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> 81 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
81 {% endif %} 82 {% endif %}
app/templates/home_student.html
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 <ul class="nav nav-pills nav-stacked"> 24 <ul class="nav nav-pills nav-stacked">
25 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> 25 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
26 <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li> 26 <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li>
27 - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> 27 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
28 <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li> 28 <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li>
29 </ul> 29 </ul>
30 </div> 30 </div>
core/templates/base.html
@@ -105,8 +105,9 @@ @@ -105,8 +105,9 @@
105 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> 105 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
106 {% if user|has_role:'student' or not user.is_staff %} 106 {% if user|has_role:'student' or not user.is_staff %}
107 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> 107 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
108 - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> 108 + <li><a href="{% url 'core:all_courses' %}">{% trans 'All Courses' %}</a></li>
109 {% endif %} 109 {% endif %}
  110 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
110 {% if user|has_role:'system_admin' %} 111 {% if user|has_role:'system_admin' %}
111 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> 112 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
112 {% endif %} 113 {% endif %}
courses/static/js/course.js
@@ -70,7 +70,7 @@ function delete_course(url, course, message, return_url) { @@ -70,7 +70,7 @@ function delete_course(url, course, message, return_url) {
70 }); 70 });
71 }); 71 });
72 } 72 }
73 -/* 73 +/*
74 * 74 *
75 * Function to load create course's form 75 * Function to load create course's form
76 * 76 *
courses/templates/course/course_card.html
@@ -24,6 +24,10 @@ @@ -24,6 +24,10 @@
24 </ul> 24 </ul>
25 </div> 25 </div>
26 </div> 26 </div>
  27 + {% elif user|has_role:'student' %}
  28 + {% if not request.user in course.students.all %}
  29 + <a onclick="subscribe($(this), '{% url 'course:subscribe' course.slug %}', {{ course.id}}, '{% trans 'Are you sure you want to subscribe to this course?' %}')"><button class="btn btn-sm btn-primary btn-raised pull-right">{% trans 'Subscribe' %}</button></a>
  30 + {% endif %}
27 {% endif %} 31 {% endif %}
28 </div> 32 </div>
29 </div> 33 </div>
courses/templates/course/index.html
@@ -21,8 +21,9 @@ @@ -21,8 +21,9 @@
21 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> 21 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
22 {% if user|has_role:'student' or not user.is_staff %} 22 {% if user|has_role:'student' or not user.is_staff %}
23 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> 23 <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
24 - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> 24 + <li><a href="{% url 'course:all_courses' %}">{% trans 'All Courses' %}</a></li>
25 {% endif %} 25 {% endif %}
  26 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
26 {% if user|has_role:'system_admin' %} 27 {% if user|has_role:'system_admin' %}
27 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> 28 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
28 {% endif %} 29 {% endif %}
courses/urls.py
@@ -3,6 +3,7 @@ from django.conf.urls import url, include @@ -3,6 +3,7 @@ from django.conf.urls import url, include
3 from . import views 3 from . import views
4 urlpatterns = [ 4 urlpatterns = [
5 url(r'^$', views.IndexView.as_view(), name='manage'), 5 url(r'^$', views.IndexView.as_view(), name='manage'),
  6 + url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'),
6 url(r'^create/$', views.CreateCourseView.as_view(), name='create'), 7 url(r'^create/$', views.CreateCourseView.as_view(), name='create'),
7 url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'), 8 url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'),
8 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), 9 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'),
courses/views.py
@@ -13,7 +13,6 @@ import operator @@ -13,7 +13,6 @@ import operator
13 from functools import reduce 13 from functools import reduce
14 from rolepermissions.verifications import has_object_permission 14 from rolepermissions.verifications import has_object_permission
15 from django.http import HttpResponseRedirect, JsonResponse 15 from django.http import HttpResponseRedirect, JsonResponse
16 -  
17 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm 16 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm
18 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject 17 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject
19 from core.mixins import NotificationMixin 18 from core.mixins import NotificationMixin
@@ -32,7 +31,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): @@ -32,7 +31,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
32 queryset = Course.objects.all() 31 queryset = Course.objects.all()
33 template_name = 'course/index.html' 32 template_name = 'course/index.html'
34 context_object_name = 'courses' 33 context_object_name = 'courses'
35 - paginate_by = 5 34 + paginate_by = 2
36 aparece = True 35 aparece = True
37 36
38 37
@@ -67,7 +66,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): @@ -67,7 +66,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
67 elif has_role(self.request.user,'system_admin'): 66 elif has_role(self.request.user,'system_admin'):
68 list_courses = queryset.order_by('name') 67 list_courses = queryset.order_by('name')
69 categorys_courses = CourseCategory.objects.all() 68 categorys_courses = CourseCategory.objects.all()
70 - else: 69 + elif has_role(self.request.user, 'student'):
71 list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name') 70 list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name')
72 categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct() 71 categorys_courses = CourseCategory.objects.filter(course_category__students__name = self.request.user.name).distinct()
73 72
@@ -86,6 +85,61 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): @@ -86,6 +85,61 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
86 context['aparece'] = self.aparece 85 context['aparece'] = self.aparece
87 86
88 return context 87 return context
  88 +
  89 +class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView):
  90 +
  91 + login_url = reverse_lazy("core:home")
  92 + redirect_field_name = 'next'
  93 + queryset = Course.objects.all()
  94 + template_name = 'course/index.html'
  95 + context_object_name = 'courses'
  96 + paginate_by = 5
  97 + aparece = True
  98 +
  99 +
  100 + def get_queryset(self):
  101 + result = super(AllCoursesView, self).get_queryset()
  102 +
  103 + course_search = self.request.GET.get('q', None)
  104 + category_search = self.request.GET.get('category', None)
  105 + if course_search:
  106 + self.aparece = False
  107 + query_list = course_search.split()
  108 + result = result.filter(
  109 + reduce(operator.and_,
  110 + (Q(name__icontains=q) for q in query_list))
  111 + )
  112 + if category_search:
  113 + self.aparece = False
  114 + query_list = category_search.split()
  115 + result = result.filter(
  116 + reduce(operator.and_,
  117 + (Q(category__name=category) for category in query_list))
  118 + )
  119 + return result
  120 +
  121 + def get_context_data(self, **kwargs):
  122 + context = super(AllCoursesView, self).get_context_data(**kwargs)
  123 + list_courses = None
  124 + categorys_courses = None
  125 + list_courses = Course.objects.all().order_by('name')
  126 + categorys_courses = CourseCategory.objects.all().distinct().order_by('name')
  127 +
  128 + paginator = Paginator(list_courses, self.paginate_by)
  129 + page = self.request.GET.get('page')
  130 +
  131 + try:
  132 + list_courses = paginator.page(page)
  133 + except PageNotAnInteger:
  134 + list_courses = paginator.page(1)
  135 + except EmptyPage:
  136 + list_courses = paginator.page(paginator.num_pages)
  137 +
  138 + context['list_courses'] = list_courses
  139 + context['categorys_courses'] = categorys_courses
  140 + context['aparece'] = self.aparece
  141 +
  142 + return context
89 143
90 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView): 144 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView):
91 145