Commit 13dc217d354ac0b5f8054f188cd3462a207dae06

Authored by Matheus Lins
1 parent bea6c49b

subiscribe student in course

app/templates/home.html
... ... @@ -74,8 +74,9 @@
74 74 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
75 75 {% if user|has_role:'student' or not user.is_staff %}
76 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 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 80 {% if user|has_role:'system_admin' %}
80 81 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
81 82 {% endif %}
... ...
app/templates/home_student.html
... ... @@ -24,7 +24,7 @@
24 24 <ul class="nav nav-pills nav-stacked">
25 25 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
26 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 28 <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li>
29 29 </ul>
30 30 </div>
... ...
core/templates/base.html
... ... @@ -105,8 +105,9 @@
105 105 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
106 106 {% if user|has_role:'student' or not user.is_staff %}
107 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 109 {% endif %}
  110 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
110 111 {% if user|has_role:'system_admin' %}
111 112 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
112 113 {% endif %}
... ...
courses/static/js/course.js
... ... @@ -70,7 +70,7 @@ function delete_course(url, course, message, return_url) {
70 70 });
71 71 });
72 72 }
73   -/*
  73 +/*
74 74 *
75 75 * Function to load create course's form
76 76 *
... ...
courses/templates/course/course_card.html
... ... @@ -24,6 +24,10 @@
24 24 </ul>
25 25 </div>
26 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 31 {% endif %}
28 32 </div>
29 33 </div>
... ...
courses/templates/course/index.html
... ... @@ -21,8 +21,9 @@
21 21 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
22 22 {% if user|has_role:'student' or not user.is_staff %}
23 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 25 {% endif %}
  26 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
26 27 {% if user|has_role:'system_admin' %}
27 28 <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
28 29 {% endif %}
... ...
courses/urls.py
... ... @@ -3,6 +3,7 @@ from django.conf.urls import url, include
3 3 from . import views
4 4 urlpatterns = [
5 5 url(r'^$', views.IndexView.as_view(), name='manage'),
  6 + url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'),
6 7 url(r'^create/$', views.CreateCourseView.as_view(), name='create'),
7 8 url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'),
8 9 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'),
... ...
courses/views.py
... ... @@ -13,7 +13,6 @@ import operator
13 13 from functools import reduce
14 14 from rolepermissions.verifications import has_object_permission
15 15 from django.http import HttpResponseRedirect, JsonResponse
16   -
17 16 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm
18 17 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject
19 18 from core.mixins import NotificationMixin
... ... @@ -32,7 +31,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
32 31 queryset = Course.objects.all()
33 32 template_name = 'course/index.html'
34 33 context_object_name = 'courses'
35   - paginate_by = 5
  34 + paginate_by = 2
36 35 aparece = True
37 36  
38 37  
... ... @@ -67,7 +66,7 @@ class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView):
67 66 elif has_role(self.request.user,'system_admin'):
68 67 list_courses = queryset.order_by('name')
69 68 categorys_courses = CourseCategory.objects.all()
70   - else:
  69 + elif has_role(self.request.user, 'student'):
71 70 list_courses = Course.objects.filter(Q(students = True)|Q(students__name = self.request.user.name)).order_by('name')
72 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 85 context['aparece'] = self.aparece
87 86  
88 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 144 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView):
91 145  
... ...