Commit ca7c1550f9d7beb816b5a2d43dfeed205345a9cb

Authored by Felipe Henrique de Almeida Bormann
1 parent 2b6e44f7

finished search subject search constrainsts

Showing 1 changed file with 575 additions and 572 deletions   Show diff stats
subjects/views.py
... ... @@ -31,624 +31,627 @@ from users.models import User
31 31  
32 32  
33 33 class HomeView(LoginRequiredMixin, ListView):
34   - login_url = reverse_lazy("users:login")
35   - redirect_field_name = 'next'
36   - template_name = 'subjects/initial.html'
37   - context_object_name = 'subjects'
38   - paginate_by = 10
39   - total = 0
40   -
41   - def get_queryset(self):
42   - if self.request.user.is_staff:
43   - subjects = Subject.objects.all().order_by("name")
44   - else:
45   - pk = self.request.user.pk
46   -
47   - subjects = Subject.objects.filter(Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)).distinct()
48   -
49   - self.total = subjects.count()
50   -
51   - return subjects
52   -
53   - def get_context_data(self, **kwargs):
54   - context = super(HomeView, self).get_context_data(**kwargs)
55   - context['title'] = _('Home')
56   - context['show_buttons'] = True #So it shows subscribe and access buttons
57   -
58   - #bringing users
59   - tag_amount = 50
60   - tags = Tag.objects.all()
61   - tags_list = []
62   - for tag in tags:
63   - if len(tags_list) <= tag_amount:
64   - tags_list.append((tag.name, Subject.objects.filter(tags__pk = tag.pk).count()))
65   - tags_list.sort(key= lambda x: x[1], reverse=True) #sort by value
66   -
67   - else:
68   - count = Subject.objects.filter(tags__pk = tag.pk).count()
69   - if count > tags_list[tag_amount][1]:
70   - tags_list[tag_amount - 1] = (tag.name, count)
71   - tags_list.sort(key = lambda x: x[1], reverse=True)
72   -
73   -
74   - i = 0
75   - tags = []
76   -
77   - for item in tags_list:
78   - if i < tag_amount/10:
79   - tags.append((item[0], 0))
80   - elif i < tag_amount/2:
81   - tags.append((item[0], 1))
82   - else:
83   - tags.append((item[0], 2))
84   - i += 1
85   - shuffle(tags)
86   - context['tags'] = tags
87   - context['total_subs'] = self.total
88   -
89   - return context
  34 + login_url = reverse_lazy("users:login")
  35 + redirect_field_name = 'next'
  36 + template_name = 'subjects/initial.html'
  37 + context_object_name = 'subjects'
  38 + paginate_by = 10
  39 + total = 0
  40 +
  41 + def get_queryset(self):
  42 + if self.request.user.is_staff:
  43 + subjects = Subject.objects.all().order_by("name")
  44 + else:
  45 + pk = self.request.user.pk
  46 +
  47 + subjects = Subject.objects.filter(Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)).distinct()
  48 +
  49 + self.total = subjects.count()
  50 +
  51 + return subjects
  52 +
  53 + def get_context_data(self, **kwargs):
  54 + context = super(HomeView, self).get_context_data(**kwargs)
  55 + context['title'] = _('Home')
  56 + context['show_buttons'] = True #So it shows subscribe and access buttons
  57 +
  58 + #bringing users
  59 + tag_amount = 50
  60 + tags = Tag.objects.all()
  61 + tags_list = []
  62 + for tag in tags:
  63 + if len(tags_list) <= tag_amount:
  64 + tags_list.append((tag.name, Subject.objects.filter(tags__pk = tag.pk).count()))
  65 + tags_list.sort(key= lambda x: x[1], reverse=True) #sort by value
  66 +
  67 + else:
  68 + count = Subject.objects.filter(tags__pk = tag.pk).count()
  69 + if count > tags_list[tag_amount][1]:
  70 + tags_list[tag_amount - 1] = (tag.name, count)
  71 + tags_list.sort(key = lambda x: x[1], reverse=True)
  72 +
  73 +
  74 + i = 0
  75 + tags = []
  76 +
  77 + for item in tags_list:
  78 + if i < tag_amount/10:
  79 + tags.append((item[0], 0))
  80 + elif i < tag_amount/2:
  81 + tags.append((item[0], 1))
  82 + else:
  83 + tags.append((item[0], 2))
  84 + i += 1
  85 + shuffle(tags)
  86 + context['tags'] = tags
  87 + context['total_subs'] = self.total
  88 +
  89 + return context
90 90  
91 91  
92 92 class IndexView(LoginRequiredMixin, ListView):
93   - totals = {}
94   -
95   - login_url = reverse_lazy("users:login")
96   - redirect_field_name = 'next'
97   - template_name = 'subjects/list.html'
98   - context_object_name = 'categories'
99   - paginate_by = 10
100   -
101   - def get_queryset(self):
102   - self.totals['all_subjects'] = count_subjects(self.request.user)
103   -
104   - self.totals['my_subjects'] = self.totals['all_subjects']
105   -
106   - if self.request.user.is_staff:
107   - categories = Category.objects.all().order_by('name')
108   - else:
109   - pk = self.request.user.pk
110   -
111   - self.totals['my_subjects'] = count_subjects(self.request.user, False)
112   -
113   - if not self.kwargs.get('option'):
114   - my_categories = Category.objects.filter(Q(coordinators__pk=pk) | Q(subject_category__professor__pk=pk) | Q(subject_category__students__pk = pk, visible = True)).distinct().order_by('name')
115   -
116   - categories = my_categories
117   - else:
118   - categories = Category.objects.filter(Q(coordinators__pk = pk) | Q(visible=True) ).distinct().order_by('name')
119   -
120   - #if not self.request.user.is_staff:
121   -
122   - #my_categories = [category for category in categories if self.request.user in category.coordinators.all() \
123   - #or has_professor_profile(self.request.user, category) or has_student_profile(self.request.user, category)]
124   - #So I remove all categories that doesn't have the possibility for the user to be on
125   -
126   -
127   - return categories
128   -
129   - def paginate_queryset(self, queryset, page_size):
130   - paginator = self.get_paginator(
131   - queryset, page_size, orphans=self.get_paginate_orphans(),
132   - allow_empty_first_page=self.get_allow_empty())
133   -
134   - page_kwarg = self.page_kwarg
135   -
136   - page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
137   -
138   - if self.kwargs.get('slug'):
139   - categories = queryset
140   -
141   - paginator = Paginator(categories, self.paginate_by)
142   -
143   - page = get_category_page(categories, self.kwargs.get('slug'), self.paginate_by)
144   -
145   - try:
146   - page_number = int(page)
147   - except ValueError:
148   - if page == 'last':
149   - page_number = paginator.num_pages
150   - else:
151   - raise Http404(_("Page is not 'last', nor can it be converted to an int."))
152   -
153   - try:
154   - page = paginator.page(page_number)
155   - return (paginator, page, page.object_list, page.has_other_pages())
156   - except InvalidPage as e:
157   - raise Http404(_('Invalid page (%(page_number)s): %(message)s') % {
158   - 'page_number': page_number,
159   - 'message': str(e)
160   - })
161   -
162   - def render_to_response(self, context, **response_kwargs):
163   - if self.request.user.is_staff:
164   - context['page_template'] = "categories/home_admin_content.html"
165   - else:
166   - context['page_template'] = "categories/home_teacher_student.html"
167   -
168   - if self.request.is_ajax():
169   - if self.request.user.is_staff:
170   - self.template_name = "categories/home_admin_content.html"
171   - else:
172   - self.template_name = "categories/home_teacher_student_content.html"
173   -
174   - return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs)
175   -
176   - def get_context_data(self, **kwargs):
177   - context = super(IndexView, self).get_context_data(**kwargs)
178   -
179   - context['all'] = False
180   - context['title'] = _('My Subjects')
181   -
182   - context['show_buttons'] = True #So it shows subscribe and access buttons
183   - context['totals'] = self.totals
184   -
185   - if self.kwargs.get('option'):
186   - context['all'] = True
187   - context['title'] = _('All Subjects')
188   -
189   - if self.kwargs.get('slug'):
190   - context['cat_slug'] = self.kwargs.get('slug')
191   -
192   - context['subjects_menu_active'] = 'subjects_menu_active'
193   -
194   - return context
  93 + totals = {}
  94 +
  95 + login_url = reverse_lazy("users:login")
  96 + redirect_field_name = 'next'
  97 + template_name = 'subjects/list.html'
  98 + context_object_name = 'categories'
  99 + paginate_by = 10
  100 +
  101 + def get_queryset(self):
  102 + self.totals['all_subjects'] = count_subjects(self.request.user)
  103 +
  104 + self.totals['my_subjects'] = self.totals['all_subjects']
  105 +
  106 + if self.request.user.is_staff:
  107 + categories = Category.objects.all().order_by('name')
  108 + else:
  109 + pk = self.request.user.pk
  110 +
  111 + self.totals['my_subjects'] = count_subjects(self.request.user, False)
  112 +
  113 + if not self.kwargs.get('option'):
  114 + my_categories = Category.objects.filter(Q(coordinators__pk=pk) | Q(subject_category__professor__pk=pk) | Q(subject_category__students__pk = pk, visible = True)).distinct().order_by('name')
  115 +
  116 + categories = my_categories
  117 + else:
  118 + categories = Category.objects.filter(Q(coordinators__pk = pk) | Q(visible=True) ).distinct().order_by('name')
  119 +
  120 + #if not self.request.user.is_staff:
  121 +
  122 + #my_categories = [category for category in categories if self.request.user in category.coordinators.all() \
  123 + #or has_professor_profile(self.request.user, category) or has_student_profile(self.request.user, category)]
  124 + #So I remove all categories that doesn't have the possibility for the user to be on
  125 +
  126 +
  127 + return categories
  128 +
  129 + def paginate_queryset(self, queryset, page_size):
  130 + paginator = self.get_paginator(
  131 + queryset, page_size, orphans=self.get_paginate_orphans(),
  132 + allow_empty_first_page=self.get_allow_empty())
  133 +
  134 + page_kwarg = self.page_kwarg
  135 +
  136 + page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
  137 +
  138 + if self.kwargs.get('slug'):
  139 + categories = queryset
  140 +
  141 + paginator = Paginator(categories, self.paginate_by)
  142 +
  143 + page = get_category_page(categories, self.kwargs.get('slug'), self.paginate_by)
  144 +
  145 + try:
  146 + page_number = int(page)
  147 + except ValueError:
  148 + if page == 'last':
  149 + page_number = paginator.num_pages
  150 + else:
  151 + raise Http404(_("Page is not 'last', nor can it be converted to an int."))
  152 +
  153 + try:
  154 + page = paginator.page(page_number)
  155 + return (paginator, page, page.object_list, page.has_other_pages())
  156 + except InvalidPage as e:
  157 + raise Http404(_('Invalid page (%(page_number)s): %(message)s') % {
  158 + 'page_number': page_number,
  159 + 'message': str(e)
  160 + })
  161 +
  162 + def render_to_response(self, context, **response_kwargs):
  163 + if self.request.user.is_staff:
  164 + context['page_template'] = "categories/home_admin_content.html"
  165 + else:
  166 + context['page_template'] = "categories/home_teacher_student.html"
  167 +
  168 + if self.request.is_ajax():
  169 + if self.request.user.is_staff:
  170 + self.template_name = "categories/home_admin_content.html"
  171 + else:
  172 + self.template_name = "categories/home_teacher_student_content.html"
  173 +
  174 + return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs)
  175 +
  176 + def get_context_data(self, **kwargs):
  177 + context = super(IndexView, self).get_context_data(**kwargs)
  178 +
  179 + context['all'] = False
  180 + context['title'] = _('My Subjects')
  181 +
  182 + context['show_buttons'] = True #So it shows subscribe and access buttons
  183 + context['totals'] = self.totals
  184 +
  185 + if self.kwargs.get('option'):
  186 + context['all'] = True
  187 + context['title'] = _('All Subjects')
  188 +
  189 + if self.kwargs.get('slug'):
  190 + context['cat_slug'] = self.kwargs.get('slug')
  191 +
  192 + context['subjects_menu_active'] = 'subjects_menu_active'
  193 +
  194 + return context
195 195  
196 196 class GetSubjectList(LoginRequiredMixin, ListView):
197   - login_url = reverse_lazy("users:login")
198   - redirect_field_name = 'next'
  197 + login_url = reverse_lazy("users:login")
  198 + redirect_field_name = 'next'
199 199  
200   - template_name = 'subjects/_list.html'
201   - model = Subject
202   - context_object_name = 'subjects'
  200 + template_name = 'subjects/_list.html'
  201 + model = Subject
  202 + context_object_name = 'subjects'
203 203  
204   - def get_queryset(self):
205   - slug = self.kwargs.get('slug')
206   - category = get_object_or_404(Category, slug = slug)
  204 + def get_queryset(self):
  205 + slug = self.kwargs.get('slug')
  206 + category = get_object_or_404(Category, slug = slug)
207 207  
208   - return category.subject_category.all()
  208 + return category.subject_category.all()
209 209  
210   - def get_context_data(self, **kwargs):
211   - context = super(GetSubjectList, self).get_context_data(**kwargs)
  210 + def get_context_data(self, **kwargs):
  211 + context = super(GetSubjectList, self).get_context_data(**kwargs)
212 212  
213   - context['show_buttons'] = True #So it shows subscribe and access buttons
  213 + context['show_buttons'] = True #So it shows subscribe and access buttons
214 214  
215   - if 'all' in self.request.META.get('HTTP_REFERER'):
216   - context['all'] = True
  215 + if 'all' in self.request.META.get('HTTP_REFERER'):
  216 + context['all'] = True
217 217  
218   - return context
  218 + return context
219 219  
220 220 class SubjectCreateView(LoginRequiredMixin, LogMixin, CreateView):
221   - log_component = 'subject'
222   - log_action = 'create'
223   - log_resource = 'subject'
224   - log_context = {}
225   -
226   - model = Subject
227   - template_name = "subjects/create.html"
228   -
229   - login_url = reverse_lazy('users:login')
230   - redirect_field_name = 'next'
231   - form_class = CreateSubjectForm
232   -
233   - success_url = reverse_lazy('subject:index')
234   -
235   - def dispatch(self, request, *args, **kwargs):
236   - user = request.user
237   - pk = user.pk
238   -
239   - if kwargs.get('subject_slug'):
240   - subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('subject_slug')))
241   - if not user.is_staff:
242   - if subject.count() == 0:
243   - if request.META.get('HTTP_REFERER'):
244   - return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
245   - else:
246   - return redirect('subjects:index')
247   -
248   -
249   - if kwargs.get('slug'):
250   - if not user.is_staff:
251   - category = Category.objects.filter(Q(coordinators__pk=pk) & Q(slug= kwargs.get('slug')))
252   - if category.count() == 0:
253   - if request.META.get('HTTP_REFERER'):
254   - return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
255   - else:
256   - return redirect('subjects:index')
257   - if request.method.lower() in self.http_method_names:
258   - handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
259   - else:
260   - handler = self.http_method_not_allowed
261   - return handler(request, *args, **kwargs)
  221 + log_component = 'subject'
  222 + log_action = 'create'
  223 + log_resource = 'subject'
  224 + log_context = {}
  225 +
  226 + model = Subject
  227 + template_name = "subjects/create.html"
  228 +
  229 + login_url = reverse_lazy('users:login')
  230 + redirect_field_name = 'next'
  231 + form_class = CreateSubjectForm
  232 +
  233 + success_url = reverse_lazy('subject:index')
  234 +
  235 + def dispatch(self, request, *args, **kwargs):
  236 + user = request.user
  237 + pk = user.pk
  238 +
  239 + if kwargs.get('subject_slug'):
  240 + subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('subject_slug')))
  241 + if not user.is_staff:
  242 + if subject.count() == 0:
  243 + if request.META.get('HTTP_REFERER'):
  244 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  245 + else:
  246 + return redirect('subjects:index')
  247 +
  248 +
  249 + if kwargs.get('slug'):
  250 + if not user.is_staff:
  251 + category = Category.objects.filter(Q(coordinators__pk=pk) & Q(slug= kwargs.get('slug')))
  252 + if category.count() == 0:
  253 + if request.META.get('HTTP_REFERER'):
  254 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  255 + else:
  256 + return redirect('subjects:index')
  257 + if request.method.lower() in self.http_method_names:
  258 + handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  259 + else:
  260 + handler = self.http_method_not_allowed
  261 + return handler(request, *args, **kwargs)
262 262  
263 263  
264   - def get_initial(self):
265   - initial = super(SubjectCreateView, self).get_initial()
266   -
267   - if self.kwargs.get('slug'): #when the user creates a subject
268   - initial['category'] = Category.objects.all().filter(slug=self.kwargs['slug'])
269   -
270   - if self.kwargs.get('subject_slug'): #when the user replicate a subject
271   - subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
272   - initial = initial.copy()
273   - initial['category'] = subject.category
274   - initial['description'] = subject.description
275   - initial['name'] = subject.name
276   - initial['visible'] = subject.visible
277   - initial['professor'] = subject.professor.all()
278   - initial['tags'] = ", ".join(subject.tags.all().values_list("name", flat = True))
279   - initial['init_date'] = subject.init_date
280   - initial['end_date'] = subject.end_date
281   - initial['students'] = subject.students.all()
282   - initial['description_brief'] = subject.description_brief
283   -
284   - self.log_action = 'replicate'
285   -
286   - self.log_context['replicated_subject_id'] = subject.id
287   - self.log_context['replicated_subject_name'] = subject.name
288   - self.log_context['replicated_subject_slug'] = subject.slug
289   -
290   - return initial
291   -
292   - def get_context_data(self, **kwargs):
293   - context = super(SubjectCreateView, self).get_context_data(**kwargs)
294   - context['title'] = _('Create Subject')
295   -
296   - if self.kwargs.get('slug'):
297   - context['slug'] = self.kwargs['slug']
298   -
299   - if self.kwargs.get('subject_slug'):
300   - context['title'] = _('Replicate Subject')
301   -
302   - subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
303   -
304   - context['slug'] = subject.category.slug
305   - context['replicate'] = True
306   -
307   - context['subject'] = subject
308   -
309   - context['subjects_menu_active'] = 'subjects_menu_active'
310   -
311   - return context
312   -
313   - def form_valid(self, form):
314   -
315   - self.object = form.save()
316   -
317   - if self.kwargs.get('slug'):
318   - self.object.category = Category.objects.get(slug=self.kwargs['slug'])
319   -
320   - if self.kwargs.get('subject_slug'):
321   - subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
322   - self.object.category = subject.category
323   -
324   - self.object.save()
325   -
326   - self.log_context['category_id'] = self.object.category.id
327   - self.log_context['category_name'] = self.object.category.name
328   - self.log_context['category_slug'] = self.object.category.slug
329   - self.log_context['subject_id'] = self.object.id
330   - self.log_context['subject_name'] = self.object.name
331   - self.log_context['subject_slug'] = self.object.slug
332   -
333   - super(SubjectCreateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
334   -
335   - return super(SubjectCreateView, self).form_valid(form)
336   -
337   - def get_success_url(self):
338   - if not self.object.category.visible:
339   - self.object.visible = False
340   - self.object.save()
341   -
342   - messages.success(self.request, _('Subject "%s" was registered on "%s" successfully!')%(self.object.name, self.object.category.name ))
343   - return reverse_lazy('subjects:index')
  264 + def get_initial(self):
  265 + initial = super(SubjectCreateView, self).get_initial()
  266 +
  267 + if self.kwargs.get('slug'): #when the user creates a subject
  268 + initial['category'] = Category.objects.all().filter(slug=self.kwargs['slug'])
  269 +
  270 + if self.kwargs.get('subject_slug'): #when the user replicate a subject
  271 + subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
  272 + initial = initial.copy()
  273 + initial['category'] = subject.category
  274 + initial['description'] = subject.description
  275 + initial['name'] = subject.name
  276 + initial['visible'] = subject.visible
  277 + initial['professor'] = subject.professor.all()
  278 + initial['tags'] = ", ".join(subject.tags.all().values_list("name", flat = True))
  279 + initial['init_date'] = subject.init_date
  280 + initial['end_date'] = subject.end_date
  281 + initial['students'] = subject.students.all()
  282 + initial['description_brief'] = subject.description_brief
  283 +
  284 + self.log_action = 'replicate'
  285 +
  286 + self.log_context['replicated_subject_id'] = subject.id
  287 + self.log_context['replicated_subject_name'] = subject.name
  288 + self.log_context['replicated_subject_slug'] = subject.slug
  289 +
  290 + return initial
  291 +
  292 + def get_context_data(self, **kwargs):
  293 + context = super(SubjectCreateView, self).get_context_data(**kwargs)
  294 + context['title'] = _('Create Subject')
  295 +
  296 + if self.kwargs.get('slug'):
  297 + context['slug'] = self.kwargs['slug']
  298 +
  299 + if self.kwargs.get('subject_slug'):
  300 + context['title'] = _('Replicate Subject')
  301 +
  302 + subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
  303 +
  304 + context['slug'] = subject.category.slug
  305 + context['replicate'] = True
  306 +
  307 + context['subject'] = subject
  308 +
  309 + context['subjects_menu_active'] = 'subjects_menu_active'
  310 +
  311 + return context
  312 +
  313 + def form_valid(self, form):
  314 +
  315 + self.object = form.save()
  316 +
  317 + if self.kwargs.get('slug'):
  318 + self.object.category = Category.objects.get(slug=self.kwargs['slug'])
  319 +
  320 + if self.kwargs.get('subject_slug'):
  321 + subject = get_object_or_404(Subject, slug = self.kwargs['subject_slug'])
  322 + self.object.category = subject.category
  323 +
  324 + self.object.save()
  325 +
  326 + self.log_context['category_id'] = self.object.category.id
  327 + self.log_context['category_name'] = self.object.category.name
  328 + self.log_context['category_slug'] = self.object.category.slug
  329 + self.log_context['subject_id'] = self.object.id
  330 + self.log_context['subject_name'] = self.object.name
  331 + self.log_context['subject_slug'] = self.object.slug
  332 +
  333 + super(SubjectCreateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  334 +
  335 + return super(SubjectCreateView, self).form_valid(form)
  336 +
  337 + def get_success_url(self):
  338 + if not self.object.category.visible:
  339 + self.object.visible = False
  340 + self.object.save()
  341 +
  342 + messages.success(self.request, _('Subject "%s" was registered on "%s" successfully!')%(self.object.name, self.object.category.name ))
  343 + return reverse_lazy('subjects:index')
344 344  
345 345 class SubjectUpdateView(LoginRequiredMixin, LogMixin, UpdateView):
346   - log_component = 'subject'
347   - log_action = 'update'
348   - log_resource = 'subject'
349   - log_context = {}
350   -
351   - model = Subject
352   - form_class = CreateSubjectForm
353   - template_name = 'subjects/update.html'
354   -
355   - login_url = reverse_lazy("users:login")
356   - redirect_field_name = 'next'
357   -
358   - def dispatch(self, request, *args, **kwargs):
359   - user = self.request.user
360   -
361   - pk = user.pk
362   -
363   - subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
364   - if not user.is_staff:
365   - if subject.count() == 0:
366   - if request.META.get('HTTP_REFERER'):
367   - return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
368   - else:
369   - return redirect('subjects:index')
370   -
371   - if request.method.lower() in self.http_method_names:
372   - handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
373   - else:
374   - handler = self.http_method_not_allowed
375   - return handler(request, *args, **kwargs)
376   -
377   - def get_context_data(self, **kwargs):
378   - context = super(SubjectUpdateView, self).get_context_data(**kwargs)
379   - context['title'] = _('Update Subject')
380   - context['template_extends'] = 'categories/home.html'
381   - context['subjects_menu_active'] = 'subjects_menu_active'
382   -
383   - return context
384   -
385   - def get_success_url(self):
386   - if not self.object.category.visible:
387   - self.object.visible = False
388   - self.object.save()
389   -
390   - self.log_context['category_id'] = self.object.category.id
391   - self.log_context['category_name'] = self.object.category.name
392   - self.log_context['category_slug'] = self.object.category.slug
393   - self.log_context['subject_id'] = self.object.id
394   - self.log_context['subject_name'] = self.object.name
395   - self.log_context['subject_slug'] = self.object.slug
396   -
397   - super(SubjectUpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
398   -
399   - messages.success(self.request, _('Subject "%s" was updated on "%s" successfully!')%(self.object.name, self.object.category.name ))
400   - return reverse_lazy('subjects:index')
  346 + log_component = 'subject'
  347 + log_action = 'update'
  348 + log_resource = 'subject'
  349 + log_context = {}
  350 +
  351 + model = Subject
  352 + form_class = CreateSubjectForm
  353 + template_name = 'subjects/update.html'
  354 +
  355 + login_url = reverse_lazy("users:login")
  356 + redirect_field_name = 'next'
  357 +
  358 + def dispatch(self, request, *args, **kwargs):
  359 + user = self.request.user
  360 +
  361 + pk = user.pk
  362 +
  363 + subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
  364 + if not user.is_staff:
  365 + if subject.count() == 0:
  366 + if request.META.get('HTTP_REFERER'):
  367 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  368 + else:
  369 + return redirect('subjects:index')
  370 +
  371 + if request.method.lower() in self.http_method_names:
  372 + handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  373 + else:
  374 + handler = self.http_method_not_allowed
  375 + return handler(request, *args, **kwargs)
  376 +
  377 + def get_context_data(self, **kwargs):
  378 + context = super(SubjectUpdateView, self).get_context_data(**kwargs)
  379 + context['title'] = _('Update Subject')
  380 + context['template_extends'] = 'categories/home.html'
  381 + context['subjects_menu_active'] = 'subjects_menu_active'
  382 +
  383 + return context
  384 +
  385 + def get_success_url(self):
  386 + if not self.object.category.visible:
  387 + self.object.visible = False
  388 + self.object.save()
  389 +
  390 + self.log_context['category_id'] = self.object.category.id
  391 + self.log_context['category_name'] = self.object.category.name
  392 + self.log_context['category_slug'] = self.object.category.slug
  393 + self.log_context['subject_id'] = self.object.id
  394 + self.log_context['subject_name'] = self.object.name
  395 + self.log_context['subject_slug'] = self.object.slug
  396 +
  397 + super(SubjectUpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  398 +
  399 + messages.success(self.request, _('Subject "%s" was updated on "%s" successfully!')%(self.object.name, self.object.category.name ))
  400 + return reverse_lazy('subjects:index')
401 401  
402 402 class SubjectDeleteView(LoginRequiredMixin, LogMixin, DeleteView):
403   - log_component = 'subject'
404   - log_action = 'delete'
405   - log_resource = 'subject'
406   - log_context = {}
  403 + log_component = 'subject'
  404 + log_action = 'delete'
  405 + log_resource = 'subject'
  406 + log_context = {}
407 407  
408   - login_url = reverse_lazy("users:login")
409   - redirect_field_name = 'next'
410   - model = Subject
411   - template_name = 'subjects/delete.html'
412   -
413   - def dispatch(self, request, *args, **kwargs):
414   - user = self.request.user
415   -
416   - pk = user.pk
417   -
418   - subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
419   - if not user.is_staff:
420   - if subject.count() == 0:
421   - if request.META.get('HTTP_REFERER'):
422   - return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
423   - else:
424   - return redirect('subjects:index')
425   - return super(SubjectDeleteView, self).dispatch(request, *args, **kwargs)
426   -
427   - def get(self, request, *args, **kwargs):
428   - self.object = self.get_object()
429   - if self.object.students.all().count() > 0:
430   - messages.error(self.request, _("Subject can't be removed. The subject still possess students and learning objects associated"))
431   -
432   - return JsonResponse({'error':True,'url':reverse_lazy('subjects:index')})
433   - context = self.get_context_data(object=self.object)
434   - return self.render_to_response(context)
435   -
436   - def get_context_data(self, **kwargs):
437   - context = super(SubjectDeleteView, self).get_context_data(**kwargs)
438   - subject = get_object_or_404(Subject, slug = self.kwargs.get('slug'))
439   - context['subject'] = subject
440   -
441   - if (self.request.GET.get('view') == 'index'):
442   - context['index'] = True
443   - else:
444   - context['index'] = False
445   -
446   - return context
447   -
448   - def get_success_url(self):
449   - self.log_context['category_id'] = self.object.category.id
450   - self.log_context['category_name'] = self.object.category.name
451   - self.log_context['category_slug'] = self.object.category.slug
452   - self.log_context['subject_id'] = self.object.id
453   - self.log_context['subject_name'] = self.object.name
454   - self.log_context['subject_slug'] = self.object.slug
455   -
456   - super(SubjectDeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
457   -
458   -
459   - messages.success(self.request, _('Subject "%s" removed successfully!')%(self.object.name))
460   -
461   - return reverse_lazy('subjects:index')
  408 + login_url = reverse_lazy("users:login")
  409 + redirect_field_name = 'next'
  410 + model = Subject
  411 + template_name = 'subjects/delete.html'
  412 +
  413 + def dispatch(self, request, *args, **kwargs):
  414 + user = self.request.user
  415 +
  416 + pk = user.pk
  417 +
  418 + subject = Subject.objects.filter((Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
  419 + if not user.is_staff:
  420 + if subject.count() == 0:
  421 + if request.META.get('HTTP_REFERER'):
  422 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  423 + else:
  424 + return redirect('subjects:index')
  425 + return super(SubjectDeleteView, self).dispatch(request, *args, **kwargs)
  426 +
  427 + def get(self, request, *args, **kwargs):
  428 + self.object = self.get_object()
  429 + if self.object.students.all().count() > 0:
  430 + messages.error(self.request, _("Subject can't be removed. The subject still possess students and learning objects associated"))
  431 +
  432 + return JsonResponse({'error':True,'url':reverse_lazy('subjects:index')})
  433 + context = self.get_context_data(object=self.object)
  434 + return self.render_to_response(context)
  435 +
  436 + def get_context_data(self, **kwargs):
  437 + context = super(SubjectDeleteView, self).get_context_data(**kwargs)
  438 + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug'))
  439 + context['subject'] = subject
  440 +
  441 + if (self.request.GET.get('view') == 'index'):
  442 + context['index'] = True
  443 + else:
  444 + context['index'] = False
  445 +
  446 + return context
  447 +
  448 + def get_success_url(self):
  449 + self.log_context['category_id'] = self.object.category.id
  450 + self.log_context['category_name'] = self.object.category.name
  451 + self.log_context['category_slug'] = self.object.category.slug
  452 + self.log_context['subject_id'] = self.object.id
  453 + self.log_context['subject_name'] = self.object.name
  454 + self.log_context['subject_slug'] = self.object.slug
  455 +
  456 + super(SubjectDeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  457 +
  458 +
  459 + messages.success(self.request, _('Subject "%s" removed successfully!')%(self.object.name))
  460 +
  461 + return reverse_lazy('subjects:index')
462 462  
463 463  
464 464 class SubjectDetailView(LoginRequiredMixin, LogMixin, DetailView):
465   - log_component = 'subject'
466   - log_action = 'access'
467   - log_resource = 'subject'
468   - log_context = {}
469   -
470   - login_url = reverse_lazy("users:login")
471   - redirect_field_name = 'next'
472   -
473   - model = Subject
474   - template_name = 'subjects/view.html'
475   - context_object_name = 'subject'
476   -
477   - def dispatch(self, request, *args,**kwargs):
478   - user = request.user
479   - pk = user.pk
480   - if kwargs.get('slug') and not user.is_staff:
481   - subject = get_object_or_404(Subject, slug = kwargs.get('slug'))
482   -
483   - subject = Subject.objects.filter((Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
484   -
485   - if subject.count() == 0:
486   - if request.META.get('HTTP_REFERER'):
487   - return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
488   - else:
489   - return redirect('subjects:home')
490   -
491   - if request.method.lower() in self.http_method_names:
492   - handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
493   - else:
494   - handler = self.http_method_not_allowed
495   - return handler(request, *args, **kwargs)
496   -
497   - def get_context_data(self, **kwargs):
498   - context = super(SubjectDetailView, self).get_context_data(**kwargs)
499   - context['title'] = self.object.name
500   -
501   - resources = self.request.session.get('resources', None)
502   -
503   - if resources:
504   - context['resource_new_page'] = resources['new_page']
505   - context['resource_new_page_url'] = resources['new_page_url']
506   -
507   - self.request.session['resources'] = None
508   -
509   - if self.kwargs.get('topic_slug'):
510   - context['topic_slug'] = self.kwargs.get('topic_slug')
511   -
512   - self.log_context['category_id'] = self.object.category.id
513   - self.log_context['category_name'] = self.object.category.name
514   - self.log_context['category_slug'] = self.object.category.slug
515   - self.log_context['subject_id'] = self.object.id
516   - self.log_context['subject_name'] = self.object.name
517   - self.log_context['subject_slug'] = self.object.slug
518   - self.log_context['timestamp_start'] = str(int(time.time()))
519   -
520   - super(SubjectDetailView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
521   -
522   - self.request.session['log_id'] = Log.objects.latest('id').id
523   -
524   - return context
  465 + log_component = 'subject'
  466 + log_action = 'access'
  467 + log_resource = 'subject'
  468 + log_context = {}
  469 +
  470 + login_url = reverse_lazy("users:login")
  471 + redirect_field_name = 'next'
  472 +
  473 + model = Subject
  474 + template_name = 'subjects/view.html'
  475 + context_object_name = 'subject'
  476 +
  477 + def dispatch(self, request, *args,**kwargs):
  478 + user = request.user
  479 + pk = user.pk
  480 + if kwargs.get('slug') and not user.is_staff:
  481 + subject = get_object_or_404(Subject, slug = kwargs.get('slug'))
  482 +
  483 + subject = Subject.objects.filter((Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk)) & Q(slug = kwargs.get('slug')))
  484 +
  485 + if subject.count() == 0:
  486 + if request.META.get('HTTP_REFERER'):
  487 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  488 + else:
  489 + return redirect('subjects:home')
  490 +
  491 + if request.method.lower() in self.http_method_names:
  492 + handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  493 + else:
  494 + handler = self.http_method_not_allowed
  495 + return handler(request, *args, **kwargs)
  496 +
  497 + def get_context_data(self, **kwargs):
  498 + context = super(SubjectDetailView, self).get_context_data(**kwargs)
  499 + context['title'] = self.object.name
  500 +
  501 + resources = self.request.session.get('resources', None)
  502 +
  503 + if resources:
  504 + context['resource_new_page'] = resources['new_page']
  505 + context['resource_new_page_url'] = resources['new_page_url']
  506 +
  507 + self.request.session['resources'] = None
  508 +
  509 + if self.kwargs.get('topic_slug'):
  510 + context['topic_slug'] = self.kwargs.get('topic_slug')
  511 +
  512 + self.log_context['category_id'] = self.object.category.id
  513 + self.log_context['category_name'] = self.object.category.name
  514 + self.log_context['category_slug'] = self.object.category.slug
  515 + self.log_context['subject_id'] = self.object.id
  516 + self.log_context['subject_name'] = self.object.name
  517 + self.log_context['subject_slug'] = self.object.slug
  518 + self.log_context['timestamp_start'] = str(int(time.time()))
  519 +
  520 + super(SubjectDetailView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  521 +
  522 + self.request.session['log_id'] = Log.objects.latest('id').id
  523 +
  524 + return context
525 525  
526 526 class SubjectSubscribeView(LoginRequiredMixin, LogMixin, TemplateView):
527   - log_component = 'subject'
528   - log_action = 'subscribe'
529   - log_resource = 'subject'
530   - log_context = {}
  527 + log_component = 'subject'
  528 + log_action = 'subscribe'
  529 + log_resource = 'subject'
  530 + log_context = {}
531 531  
532   - login_url = reverse_lazy("users:login")
533   - redirect_field_name = 'next'
  532 + login_url = reverse_lazy("users:login")
  533 + redirect_field_name = 'next'
534 534  
535   - template_name = 'subjects/subscribe.html'
  535 + template_name = 'subjects/subscribe.html'
536 536  
537   - def get_context_data(self, **kwargs):
538   - context = super(SubjectSubscribeView, self).get_context_data(**kwargs)
539   - context['subject'] = get_object_or_404(Subject, slug= kwargs.get('slug'))
  537 + def get_context_data(self, **kwargs):
  538 + context = super(SubjectSubscribeView, self).get_context_data(**kwargs)
  539 + context['subject'] = get_object_or_404(Subject, slug= kwargs.get('slug'))
540 540  
541   - return context
  541 + return context
542 542  
543   - def post(self, request, *args, **kwargs):
544   - subject = get_object_or_404(Subject, slug= kwargs.get('slug'))
  543 + def post(self, request, *args, **kwargs):
  544 + subject = get_object_or_404(Subject, slug= kwargs.get('slug'))
545 545  
546   - if subject.subscribe_end < datetime.datetime.today().date():
547   - messages.error(self.request, _('Subscription date is due!'))
548   - else:
549   - self.log_context['category_id'] = subject.category.id
550   - self.log_context['category_name'] = subject.category.name
551   - self.log_context['category_slug'] = subject.category.slug
552   - self.log_context['subject_id'] = subject.id
553   - self.log_context['subject_name'] = subject.name
554   - self.log_context['subject_slug'] = subject.slug
  546 + if subject.subscribe_end < datetime.datetime.today().date():
  547 + messages.error(self.request, _('Subscription date is due!'))
  548 + else:
  549 + self.log_context['category_id'] = subject.category.id
  550 + self.log_context['category_name'] = subject.category.name
  551 + self.log_context['category_slug'] = subject.category.slug
  552 + self.log_context['subject_id'] = subject.id
  553 + self.log_context['subject_name'] = subject.name
  554 + self.log_context['subject_slug'] = subject.slug
555 555  
556   - super(SubjectSubscribeView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  556 + super(SubjectSubscribeView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
557 557  
558   - subject.students.add(request.user)
559   - subject.save()
560   - messages.success(self.request, _('Subscription was successfull!'))
561   -
562   - return JsonResponse({'url':reverse_lazy('subjects:index')})
  558 + subject.students.add(request.user)
  559 + subject.save()
  560 + messages.success(self.request, _('Subscription was successfull!'))
  561 +
  562 + return JsonResponse({'url':reverse_lazy('subjects:index')})
563 563  
564 564  
565 565 class SubjectSearchView(LoginRequiredMixin, LogMixin, ListView):
566   - log_component = 'subject'
567   - log_action = 'search'
568   - log_resource = 'subject/resources'
569   - log_context = {}
570   -
571   - login_url = reverse_lazy("users:login")
572   - redirect_field_name = 'next'
573   -
574   - template_name = 'subjects/list_search.html'
575   - context_object_name = 'subjects'
576   - paginate_by = 10
577   -
578   - def dispatch(self, request, *args, **kwargs):
579   - # Try to dispatch to the right method; if a method doesn't exist,
580   - # defer to the error handler. Also defer to the error handler if the
581   - # request method isn't on the approved list.
582   - tags = request.GET.get('search')
583   - tags = tags.split(" ")
584   -
585   - if tags[0] == '':
586   - return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
587   - if request.method.lower() in self.http_method_names:
588   - handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
589   - else:
590   - handler = self.http_method_not_allowed
591   - return handler(request, *args, **kwargs)
  566 + log_component = 'subject'
  567 + log_action = 'search'
  568 + log_resource = 'subject/resources'
  569 + log_context = {}
  570 +
  571 + login_url = reverse_lazy("users:login")
  572 + redirect_field_name = 'next'
  573 +
  574 + template_name = 'subjects/list_search.html'
  575 + context_object_name = 'subjects'
  576 + paginate_by = 10
  577 +
  578 + def dispatch(self, request, *args, **kwargs):
  579 + # Try to dispatch to the right method; if a method doesn't exist,
  580 + # defer to the error handler. Also defer to the error handler if the
  581 + # request method isn't on the approved list.
  582 + tags = request.GET.get('search')
  583 + tags = tags.split(" ")
  584 +
  585 + if tags[0] == '':
  586 + return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
  587 + if request.method.lower() in self.http_method_names:
  588 + handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  589 + else:
  590 + handler = self.http_method_not_allowed
  591 + return handler(request, *args, **kwargs)
592 592  
593   - def get_queryset(self):
594   -
595   - tags = self.request.GET.get('search')
596   -
597   - self.tags = tags
598   - tags = tags.split(" ")
599   -
600   - subjects = Subject.objects.filter(tags__name__unaccent__in=tags)
601   - #pk = self.request.user.pk
602   - #my_subjects = Subject.objects.filter(Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk) & Q(tags__name__in=tags) ).distinct()
603   -
604   - self.totals = {'all_subjects': subjects.count(), 'my_subjects': subjects.count()}
605   - #if self.kwargs.get('option'):
606   - # subjects = my_subjects
607   - return subjects
  593 + def get_queryset(self):
  594 +
  595 + tags = self.request.GET.get('search')
  596 +
  597 + self.tags = tags
  598 + tags = tags.split(" ")
  599 + q = Q()
  600 + for tag in tags:
  601 + q = q | Q(tags__name__unaccent__iexact=tag)
  602 +
  603 + subjects = Subject.objects.filter(q)
  604 + #pk = self.request.user.pk
  605 + #my_subjects = Subject.objects.filter(Q(students__pk=pk) | Q(professor__pk=pk) | Q(category__coordinators__pk=pk) & Q(tags__name__in=tags) ).distinct()
  606 +
  607 + self.totals = {'all_subjects': subjects.count(), 'my_subjects': subjects.count()}
  608 + #if self.kwargs.get('option'):
  609 + # subjects = my_subjects
  610 + return subjects
608 611  
609   - def get_context_data(self, **kwargs):
610   - context = super(SubjectSearchView, self).get_context_data(**kwargs)
611   -
612   - context['tags'] = self.tags
613   - context['all'] = False
614   - context['title'] = _('Subjects')
615   -
616   - context['show_buttons'] = True #So it shows subscribe and access buttons
617   - context['totals'] = self.totals
618   -
619   - if self.kwargs.get('option'):
620   - context['all'] = True
621   - context['title'] = _('Subjects')
622   -
623   - context['subjects_menu_active'] = 'subjects_menu_active'
624   -
625   - self.log_context['search_for'] = self.tags
626   - super(SubjectSearchView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
627   -
628   - return context
  612 + def get_context_data(self, **kwargs):
  613 + context = super(SubjectSearchView, self).get_context_data(**kwargs)
  614 +
  615 + context['tags'] = self.tags
  616 + context['all'] = False
  617 + context['title'] = _('Subjects')
  618 +
  619 + context['show_buttons'] = True #So it shows subscribe and access buttons
  620 + context['totals'] = self.totals
  621 +
  622 + if self.kwargs.get('option'):
  623 + context['all'] = True
  624 + context['title'] = _('Subjects')
  625 +
  626 + context['subjects_menu_active'] = 'subjects_menu_active'
  627 +
  628 + self.log_context['search_for'] = self.tags
  629 + super(SubjectSearchView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
  630 +
  631 + return context
629 632  
630 633 @log_decorator_ajax('subject', 'view', 'subject')
631 634 def subject_view_log(request, subject):
632   - action = request.GET.get('action')
  635 + action = request.GET.get('action')
633 636  
634   - if action == 'open':
635   - subject = get_object_or_404(Subject, id = subject)
  637 + if action == 'open':
  638 + subject = get_object_or_404(Subject, id = subject)
636 639  
637   - log_context = {}
638   - log_context['category_id'] = subject.category.id
639   - log_context['category_name'] = subject.category.name
640   - log_context['category_slug'] = subject.category.slug
641   - log_context['subject_id'] = subject.id
642   - log_context['subject_name'] = subject.name
643   - log_context['subject_slug'] = subject.slug
644   - log_context['timestamp_start'] = str(int(time.time()))
645   - log_context['timestamp_end'] = '-1'
  640 + log_context = {}
  641 + log_context['category_id'] = subject.category.id
  642 + log_context['category_name'] = subject.category.name
  643 + log_context['category_slug'] = subject.category.slug
  644 + log_context['subject_id'] = subject.id
  645 + log_context['subject_name'] = subject.name
  646 + log_context['subject_slug'] = subject.slug
  647 + log_context['timestamp_start'] = str(int(time.time()))
  648 + log_context['timestamp_end'] = '-1'
646 649  
647   - request.log_context = log_context
  650 + request.log_context = log_context
648 651  
649   - log_id = Log.objects.latest('id').id
  652 + log_id = Log.objects.latest('id').id
650 653  
651   - return JsonResponse({'message': 'ok', 'log_id': log_id})
  654 + return JsonResponse({'message': 'ok', 'log_id': log_id})
652 655  
653   - return JsonResponse({'message': 'ok'})
  656 + return JsonResponse({'message': 'ok'})
654 657  
... ...