diff --git a/users/views.py b/users/views.py index c3e48ef..76b6162 100644 --- a/users/views.py +++ b/users/views.py @@ -8,8 +8,18 @@ from django.core.urlresolvers import reverse_lazy from django.utils.translation import ugettext_lazy as _ from rolepermissions.shortcuts import assign_role from rolepermissions.verifications import has_role +from itertools import chain +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger + from .models import User from .forms import UserForm, UpdateProfileForm, UpdateUserForm, UpdateProfileFormAdmin +from links.models import Link +from poll.models import * +from forum.models import * +from files.models import * +from exam.models import * +from courses.models import * + # ================ ADMIN ======================= class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView): @@ -155,4 +165,64 @@ class Profile(LoginRequiredMixin, generic.DetailView): def get_object(self): user = get_object_or_404(User, username = self.request.user.username) - return user \ No newline at end of file + return user +class SearchView(LoginRequiredMixin, generic.ListView): + + login_url = reverse_lazy("core:home") + redirect_field_name = 'next' + queryset = Material.objects.all() + template_name = 'users/search.html' + paginate_by = 10 + + def get_context_data(self, **kwargs): + context = super(SearchView, self).get_context_data(**kwargs) + search = self.request.GET.get('search', None) + link_list = [] + file_list = [] + poll_list = [] + exam_list = [] + forum_list = [] + if has_role(self.request.user,'professor'): + topics = Topic.objects.filter(owner = self.request.user) + links = Link.objects.all() + files = TopicFile.objects.all() + polls = Poll.objects.all() + exams = Exam.objects.all() + forums = Forum.objects.all() + link_list = sorted([link for link in links for topic in topics if link.topic == topic]) + exam_list = sorted([exam for exam in exams for topic in topics if exam.topic == topic]) + file_list = sorted([arquivo for arquivo in files for topic in topics if arquivo.topic == topic]) + poll_list = sorted([poll for poll in polls for topic in topics if poll.topic == topic]) + forum_list = sorted([forum for forum in forums for topic in topics if forum.topic == topic]) + elif has_role(self.request.user,'system_admin'): + link_list = Link.objects.filter( Q(name__icontains=search)).order_by('name') + file_list = TopicFile.objects.filter(Q(name__icontains=search)).order_by('name') + poll_list = Poll.objects.filter(Q(name__icontains=search)).order_by('name') + exam_list = Exam.objects.filter(Q(name__icontains=search)).order_by('name') + forum_list = Forum.objects.filter(Q(name__icontains=search)).order_by('name') + elif has_role(self.request.user, 'student'): + link_list = Link.objects.filter( Q(name__icontains=search) and Q(students__name = self.request.user.name)).order_by('name') + file_list = TopicFile.objects.filter(Q(name__icontains=search) and Q(students__name = self.request.user.name)).order_by('name') + poll_list = Poll.objects.filter(Q(name__icontains=search)and Q(students__name = self.request.user.name)).order_by('name') + exam_list = Exam.objects.filter(Q(name__icontains=search)and Q(students__name = self.request.user.name)).order_by('name') + forum_list = Forum.objects.filter(Q(name__icontains=search)and Q(students__name = self.request.user.name)).order_by('name') + + ''' + paginator = Paginator(list_links, self.paginate_by) + page = self.request.GET.get('page') + + try: + list_links = paginator.page(page) + except PageNotAnInteger: + list_links = paginator.page(1) + except EmptyPage: + list_links = paginator.page(paginator.num_pages) + ''' + + context['link_list'] = link_list + context['file_list'] = file_list + context['poll_list'] = poll_list + context['exam_list'] = exam_list + context['forum_list'] = forum_list + + return context -- libgit2 0.21.2