Commit f224994a8297e6e03a67f39b3da0995ebfd6c7fe
1 parent
de419e4c
Exists in
master
and in
5 other branches
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 | ... | ... |