Commit f224994a8297e6e03a67f39b3da0995ebfd6c7fe

Authored by Gustavo Bernardo
1 parent de419e4c

Search view included in users/views.py [Issue:#251]

Showing 1 changed file with 71 additions and 1 deletions   Show diff stats
users/views.py
... ... @@ -8,8 +8,18 @@ from django.core.urlresolvers import reverse_lazy
8 8 from django.utils.translation import ugettext_lazy as _
9 9 from rolepermissions.shortcuts import assign_role
10 10 from rolepermissions.verifications import has_role
  11 +from itertools import chain
  12 +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  13 +
11 14 from .models import User
12 15 from .forms import UserForm, UpdateProfileForm, UpdateUserForm, UpdateProfileFormAdmin
  16 +from links.models import Link
  17 +from poll.models import *
  18 +from forum.models import *
  19 +from files.models import *
  20 +from exam.models import *
  21 +from courses.models import *
  22 +
13 23  
14 24 # ================ ADMIN =======================
15 25 class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView):
... ... @@ -155,4 +165,64 @@ class Profile(LoginRequiredMixin, generic.DetailView):
155 165  
156 166 def get_object(self):
157 167 user = get_object_or_404(User, username = self.request.user.username)
158   - return user
159 168 \ No newline at end of file
  169 + return user
  170 +class SearchView(LoginRequiredMixin, generic.ListView):
  171 +
  172 + login_url = reverse_lazy("core:home")
  173 + redirect_field_name = 'next'
  174 + queryset = Material.objects.all()
  175 + template_name = 'users/search.html'
  176 + paginate_by = 10
  177 +
  178 + def get_context_data(self, **kwargs):
  179 + context = super(SearchView, self).get_context_data(**kwargs)
  180 + search = self.request.GET.get('search', None)
  181 + link_list = []
  182 + file_list = []
  183 + poll_list = []
  184 + exam_list = []
  185 + forum_list = []
  186 + if has_role(self.request.user,'professor'):
  187 + topics = Topic.objects.filter(owner = self.request.user)
  188 + links = Link.objects.all()
  189 + files = TopicFile.objects.all()
  190 + polls = Poll.objects.all()
  191 + exams = Exam.objects.all()
  192 + forums = Forum.objects.all()
  193 + link_list = sorted([link for link in links for topic in topics if link.topic == topic])
  194 + exam_list = sorted([exam for exam in exams for topic in topics if exam.topic == topic])
  195 + file_list = sorted([arquivo for arquivo in files for topic in topics if arquivo.topic == topic])
  196 + poll_list = sorted([poll for poll in polls for topic in topics if poll.topic == topic])
  197 + forum_list = sorted([forum for forum in forums for topic in topics if forum.topic == topic])
  198 + elif has_role(self.request.user,'system_admin'):
  199 + link_list = Link.objects.filter( Q(name__icontains=search)).order_by('name')
  200 + file_list = TopicFile.objects.filter(Q(name__icontains=search)).order_by('name')
  201 + poll_list = Poll.objects.filter(Q(name__icontains=search)).order_by('name')
  202 + exam_list = Exam.objects.filter(Q(name__icontains=search)).order_by('name')
  203 + forum_list = Forum.objects.filter(Q(name__icontains=search)).order_by('name')
  204 + elif has_role(self.request.user, 'student'):
  205 + link_list = Link.objects.filter( Q(name__icontains=search) and Q(students__name = self.request.user.name)).order_by('name')
  206 + file_list = TopicFile.objects.filter(Q(name__icontains=search) and Q(students__name = self.request.user.name)).order_by('name')
  207 + poll_list = Poll.objects.filter(Q(name__icontains=search)and Q(students__name = self.request.user.name)).order_by('name')
  208 + exam_list = Exam.objects.filter(Q(name__icontains=search)and Q(students__name = self.request.user.name)).order_by('name')
  209 + forum_list = Forum.objects.filter(Q(name__icontains=search)and Q(students__name = self.request.user.name)).order_by('name')
  210 +
  211 + '''
  212 + paginator = Paginator(list_links, self.paginate_by)
  213 + page = self.request.GET.get('page')
  214 +
  215 + try:
  216 + list_links = paginator.page(page)
  217 + except PageNotAnInteger:
  218 + list_links = paginator.page(1)
  219 + except EmptyPage:
  220 + list_links = paginator.page(paginator.num_pages)
  221 + '''
  222 +
  223 + context['link_list'] = link_list
  224 + context['file_list'] = file_list
  225 + context['poll_list'] = poll_list
  226 + context['exam_list'] = exam_list
  227 + context['forum_list'] = forum_list
  228 +
  229 + return context
... ...