4 from django import http |
4 from django import http |
5 from django.contrib.auth.decorators import login_required |
5 from django.contrib.auth.decorators import login_required |
6 from django.contrib.auth.models import User |
6 from django.contrib.auth.models import User |
7 from django.core.context_processors import csrf |
7 from django.core.context_processors import csrf |
8 from django.core.urlresolvers import reverse |
8 from django.core.urlresolvers import reverse |
|
9 from django.template import RequestContext |
9 from django.utils import simplejson as json |
10 from django.utils import simplejson as json |
10 |
11 |
11 from tagging.models import Tag |
12 from tagging.models import Tag |
12 |
13 |
13 from pytask.views import show_msg |
14 from pytask.views import show_msg |
47 task_url = reverse('view_task', kwargs={'task_id': task.id}) |
48 task_url = reverse('view_task', kwargs={'task_id': task.id}) |
48 return shortcuts.redirect(task_url) |
49 return shortcuts.redirect(task_url) |
49 else: |
50 else: |
50 context.update({'form':form}) |
51 context.update({'form':form}) |
51 return shortcuts.render_to_response( |
52 return shortcuts.render_to_response( |
52 'task/edit.html', context) |
53 'task/edit.html', RequestContext(request, context)) |
53 else: |
54 else: |
54 form = taskapp_forms.CreateTaskForm() |
55 form = taskapp_forms.CreateTaskForm() |
55 context.update({'form': form}) |
56 context.update({'form': form}) |
56 return shortcuts.render_to_response('task/edit.html', context) |
57 return shortcuts.render_to_response( |
|
58 'task/edit.html', RequestContext(request, context)) |
57 else: |
59 else: |
58 return show_msg(user, 'You are not authorised to create a task.') |
60 return show_msg(user, 'You are not authorised to create a task.') |
59 |
61 |
60 def browse_tasks(request): |
62 def browse_tasks(request): |
61 |
63 |
81 |
83 |
82 context.update({"user": user, |
84 context.update({"user": user, |
83 "profile": profile, |
85 "profile": profile, |
84 }) |
86 }) |
85 |
87 |
86 return shortcuts.render_to_response("task/browse.html", context) |
88 return shortcuts.render_to_response("task/browse.html", |
|
89 RequestContext(request, context)) |
87 |
90 |
88 |
91 |
89 def view_task(request, task_id): |
92 def view_task(request, task_id): |
90 """ get the task depending on its task_id and display accordingly if it is a get. |
93 """ get the task depending on its task_id and display accordingly if it is a get. |
91 check for authentication and add a comment if it is a post request. |
94 check for authentication and add a comment if it is a post request. |
159 comment_datetime=datetime.now()) |
162 comment_datetime=datetime.now()) |
160 new_comment.save() |
163 new_comment.save() |
161 return shortcuts.redirect(task_url) |
164 return shortcuts.redirect(task_url) |
162 else: |
165 else: |
163 context['form'] = form |
166 context['form'] = form |
164 return shortcuts.render_to_response('task/view.html', context) |
167 return shortcuts.render_to_response( |
|
168 'task/view.html', RequestContext(request, context)) |
165 else: |
169 else: |
166 form = taskapp_forms.TaskCommentForm() |
170 form = taskapp_forms.TaskCommentForm() |
167 context['form'] = form |
171 context['form'] = form |
168 return shortcuts.render_to_response('task/view.html', context) |
172 return shortcuts.render_to_response( |
|
173 'task/view.html', RequestContext(request, context)) |
169 |
174 |
170 @login_required |
175 @login_required |
171 def edit_task(request, task_id): |
176 def edit_task(request, task_id): |
172 """ only creator gets to edit the task and that too only before it gets |
177 """ only creator gets to edit the task and that too only before it gets |
173 approved. |
178 approved. |
196 if form.is_valid(): |
201 if form.is_valid(): |
197 form.save() |
202 form.save() |
198 return shortcuts.redirect(task_url) |
203 return shortcuts.redirect(task_url) |
199 else: |
204 else: |
200 context.update({"form": form}) |
205 context.update({"form": form}) |
201 return shortcuts.render_to_response("task/edit.html", context) |
206 return shortcuts.render_to_response( |
|
207 "task/edit.html", RequestContext(request, context)) |
202 else: |
208 else: |
203 form = taskapp_forms.EditTaskForm(instance=task) |
209 form = taskapp_forms.EditTaskForm(instance=task) |
204 context.update({"form": form}) |
210 context.update({"form": form}) |
205 return shortcuts.render_to_response("task/edit.html", context) |
211 return shortcuts.render_to_response("task/edit.html", |
|
212 RequestContext(request, context)) |
206 |
213 |
207 @login_required |
214 @login_required |
208 def approve_task(request, task_id): |
215 def approve_task(request, task_id): |
209 |
216 |
210 user = request.user |
217 user = request.user |
218 context = {"user": user, |
225 context = {"user": user, |
219 "profile": profile, |
226 "profile": profile, |
220 "task": task, |
227 "task": task, |
221 } |
228 } |
222 |
229 |
223 return shortcuts.render_to_response("task/confirm_approval.html", context) |
230 return shortcuts.render_to_response( |
|
231 "task/confirm_approval.html", RequestContext(request, context)) |
224 |
232 |
225 @login_required |
233 @login_required |
226 def approved_task(request, task_id): |
234 def approved_task(request, task_id): |
227 |
235 |
228 user = request.user |
236 user = request.user |
241 context = {"user": user, |
249 context = {"user": user, |
242 "profile": profile, |
250 "profile": profile, |
243 "task": task, |
251 "task": task, |
244 } |
252 } |
245 |
253 |
246 return shortcuts.render_to_response("task/approved_task.html", context) |
254 return shortcuts.render_to_response( |
|
255 "task/approved_task.html", RequestContext(request, context)) |
247 |
256 |
248 @login_required |
257 @login_required |
249 def addreviewer(request, task_id): |
258 def addreviewer(request, task_id): |
250 |
259 |
251 user = request.user |
260 user = request.user |
285 |
294 |
286 task.reviewers.add(reviewer) |
295 task.reviewers.add(reviewer) |
287 return shortcuts.redirect(task_url) |
296 return shortcuts.redirect(task_url) |
288 else: |
297 else: |
289 context.update({"form": form}) |
298 context.update({"form": form}) |
290 return shortcuts.render_to_response("task/addreviewer.html", context) |
299 return shortcuts.render_to_response( |
|
300 "task/addreviewer.html", RequestContext(request, context)) |
291 else: |
301 else: |
292 form = taskapp_forms.ChoiceForm(choices, label=label) |
302 form = taskapp_forms.ChoiceForm(choices, label=label) |
293 context.update({"form": form}) |
303 context.update({"form": form}) |
294 return shortcuts.render_to_response("task/addreviewer.html", context) |
304 return shortcuts.render_to_response( |
|
305 "task/addreviewer.html", RequestContext(request, context)) |
295 |
306 |
296 def view_work(request, task_id): |
307 def view_work(request, task_id): |
297 |
308 |
298 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
309 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
299 |
310 |
303 context = {"task": task, |
314 context = {"task": task, |
304 "old_reports": old_reports, |
315 "old_reports": old_reports, |
305 } |
316 } |
306 |
317 |
307 if not user.is_authenticated(): |
318 if not user.is_authenticated(): |
308 return shortcuts.render_to_response("task/view_work.html", context) |
319 return shortcuts.render_to_response( |
|
320 "task/view_work.html", RequestContext(request, context)) |
309 |
321 |
310 profile = user.get_profile() |
322 profile = user.get_profile() |
311 |
323 |
312 context.update({"user": user, |
324 context.update({"user": user, |
313 "profile": profile, |
325 "profile": profile, |
318 working_users = task.selected_users.all() |
330 working_users = task.selected_users.all() |
319 is_working = True if user in working_users else False |
331 is_working = True if user in working_users else False |
320 |
332 |
321 context.update({"is_working": is_working}) |
333 context.update({"is_working": is_working}) |
322 |
334 |
323 return shortcuts.render_to_response("task/view_work.html", context) |
335 return shortcuts.render_to_response("task/view_work.html", |
|
336 RequestContext(request, context)) |
324 |
337 |
325 @login_required |
338 @login_required |
326 def view_report(request, report_id): |
339 def view_report(request, report_id): |
327 |
340 |
328 report = shortcuts.get_object_or_404(taskapp_models.WorkReport, |
341 report = shortcuts.get_object_or_404(taskapp_models.WorkReport, |
332 context = {"report": report, |
345 context = {"report": report, |
333 "user": user, |
346 "user": user, |
334 } |
347 } |
335 |
348 |
336 if not user.is_authenticated(): |
349 if not user.is_authenticated(): |
337 return shortcuts.render_to_response("task/view_report.html", context) |
350 return shortcuts.render_to_response( |
|
351 "task/view_report.html", RequestContext(request, context)) |
338 |
352 |
339 profile = user.get_profile() |
353 profile = user.get_profile() |
340 |
354 |
341 context.update({"profile": profile}) |
355 context.update({"profile": profile}) |
342 return shortcuts.render_to_response("task/view_report.html", context) |
356 return shortcuts.render_to_response("task/view_report.html", |
|
357 RequestContext(request, context)) |
343 |
358 |
344 @login_required |
359 @login_required |
345 def submit_report(request, task_id): |
360 def submit_report(request, task_id): |
346 """ Check if the work is in WR state and the user is in assigned_users. |
361 """ Check if the work is in WR state and the user is in assigned_users. |
347 """ |
362 """ |
383 report_url = reverse('view_report', kwargs={'report_id': r.id}) |
398 report_url = reverse('view_report', kwargs={'report_id': r.id}) |
384 return shortcuts.redirect(report_url) |
399 return shortcuts.redirect(report_url) |
385 |
400 |
386 else: |
401 else: |
387 context.update({"form":form}) |
402 context.update({"form":form}) |
388 return shortcuts.render_to_response('task/submit_report.html', context) |
403 return shortcuts.render_to_response( |
|
404 'task/submit_report.html', RequestContext(request, context)) |
389 |
405 |
390 else: |
406 else: |
391 form = taskapp_forms.WorkReportForm() |
407 form = taskapp_forms.WorkReportForm() |
392 context.update({"form":form}) |
408 context.update({"form":form}) |
393 return shortcuts.render_to_response('task/submit_report.html', context) |
409 return shortcuts.render_to_response( |
|
410 'task/submit_report.html', RequestContext(request, context)) |
394 |
411 |
395 @login_required |
412 @login_required |
396 def create_textbook(request): |
413 def create_textbook(request): |
397 |
414 |
398 user = request.user |
415 user = request.user |
423 textbook_url = reverse( |
440 textbook_url = reverse( |
424 'view_textbook', kwargs={'task_id': new_textbook.id}) |
441 'view_textbook', kwargs={'task_id': new_textbook.id}) |
425 return shortcuts.redirect(textbook_url) |
442 return shortcuts.redirect(textbook_url) |
426 else: |
443 else: |
427 context.update({"form": form}) |
444 context.update({"form": form}) |
428 return shortcuts.render_to_response("task/edit.html", context) |
445 return shortcuts.render_to_response( |
|
446 "task/edit.html", RequestContext(request, context)) |
429 else: |
447 else: |
430 form = taskapp_forms.CreateTextbookForm() |
448 form = taskapp_forms.CreateTextbookForm() |
431 context.update({"form": form}) |
449 context.update({"form": form}) |
432 return shortcuts.render_to_response("task/edit.html", context) |
450 return shortcuts.render_to_response( |
|
451 "task/edit.html", RequestContext(request, context)) |
433 |
452 |
434 def view_textbook(request, task_id): |
453 def view_textbook(request, task_id): |
435 |
454 |
436 textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id) |
455 textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id) |
437 chapters = textbook.chapters.all() |
456 chapters = textbook.chapters.all() |
442 "textbook": textbook, |
461 "textbook": textbook, |
443 "chapters": chapters, |
462 "chapters": chapters, |
444 } |
463 } |
445 |
464 |
446 if not user.is_authenticated(): |
465 if not user.is_authenticated(): |
447 return shortcuts.render_to_response("task/view_textbook.html", context) |
466 return shortcuts.render_to_response("task/view_textbook.html", |
|
467 RequestContext(request, context)) |
448 |
468 |
449 profile = user.get_profile() |
469 profile = user.get_profile() |
450 |
470 |
451 context.update({"profile": profile, |
471 context.update({"profile": profile, |
452 "textbook": textbook, |
472 "textbook": textbook, |
460 can_approve = True if profile.role in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]] and \ |
480 can_approve = True if profile.role in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]] and \ |
461 textbook.status == taskapp_models.TB_STATUS_CHOICES[0][0] else False |
481 textbook.status == taskapp_models.TB_STATUS_CHOICES[0][0] else False |
462 |
482 |
463 context.update({"can_edit": can_edit, |
483 context.update({"can_edit": can_edit, |
464 "can_approve": can_approve}) |
484 "can_approve": can_approve}) |
465 return shortcuts.render_to_response("task/view_textbook.html", context) |
485 return shortcuts.render_to_response("task/view_textbook.html", |
|
486 RequestContext(request, context)) |
466 |
487 |
467 def browse_textbooks(request): |
488 def browse_textbooks(request): |
468 |
489 |
469 user = request.user |
490 user = request.user |
470 |
491 |
480 if user.is_authenticated() and user.get_profile().role in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]]: |
501 if user.is_authenticated() and user.get_profile().role in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]]: |
481 unpub_textbooks = taskapp_models.TextBook.objects.filter(status=taskapp_models.TB_STATUS_CHOICES[0][0]) |
502 unpub_textbooks = taskapp_models.TextBook.objects.filter(status=taskapp_models.TB_STATUS_CHOICES[0][0]) |
482 |
503 |
483 context.update({"unpub_textbooks": unpub_textbooks}) |
504 context.update({"unpub_textbooks": unpub_textbooks}) |
484 |
505 |
485 return shortcuts.render_to_response("task/browse_textbooks.html", context) |
506 return shortcuts.render_to_response("task/browse_textbooks.html", |
|
507 RequestContext(request, context)) |
486 |
508 |
487 @login_required |
509 @login_required |
488 def edit_textbook(request, task_id): |
510 def edit_textbook(request, task_id): |
489 |
511 |
490 user = request.user |
512 user = request.user |
512 if form.is_valid(): |
534 if form.is_valid(): |
513 form.save() |
535 form.save() |
514 return shortcuts.redirect(textbook_url) |
536 return shortcuts.redirect(textbook_url) |
515 else: |
537 else: |
516 context.update({"form": form}) |
538 context.update({"form": form}) |
517 return shortcuts.render_to_response("task/edit.html", context) |
539 return shortcuts.render_to_response( |
|
540 "task/edit.html", RequestContext(request, context)) |
518 else: |
541 else: |
519 form = taskapp_forms.EditTextbookForm(instance=textbook) |
542 form = taskapp_forms.EditTextbookForm(instance=textbook) |
520 context.update({"form": form}) |
543 context.update({"form": form}) |
521 return shortcuts.render_to_response("task/edit.html", context) |
544 return shortcuts.render_to_response("task/edit.html", |
|
545 RequestContext(request, context)) |
522 |
546 |
523 @login_required |
547 @login_required |
524 def claim_task(request, task_id): |
548 def claim_task(request, task_id): |
525 |
549 |
526 claim_url = reverse('claim_task', kwargs={'task_id': task_id}) |
550 claim_url = reverse('claim_task', kwargs={'task_id': task_id}) |
573 |
597 |
574 return shortcuts.redirect(claim_url) |
598 return shortcuts.redirect(claim_url) |
575 |
599 |
576 else: |
600 else: |
577 context.update({"form": form}) |
601 context.update({"form": form}) |
578 return shortcuts.render_to_response("task/claim.html", context) |
602 return shortcuts.render_to_response( |
|
603 "task/claim.html", RequestContext(request, context)) |
579 else: |
604 else: |
580 form = taskapp_forms.ClaimTaskForm() |
605 form = taskapp_forms.ClaimTaskForm() |
581 context.update({"form": form}) |
606 context.update({"form": form}) |
582 return shortcuts.render_to_response("task/claim.html", context) |
607 return shortcuts.render_to_response( |
|
608 "task/claim.html", RequestContext(request, context)) |
583 |
609 |
584 @login_required |
610 @login_required |
585 def select_user(request, task_id): |
611 def select_user(request, task_id): |
586 """ first get the status of the task and then select one of claimed users |
612 """ first get the status of the task and then select one of claimed users |
587 generate list of claimed users by passing it as an argument to a function. |
613 generate list of claimed users by passing it as an argument to a function. |
624 task.save() |
650 task.save() |
625 |
651 |
626 return shortcuts.redirect(task_url) |
652 return shortcuts.redirect(task_url) |
627 else: |
653 else: |
628 context.update({"form": form}) |
654 context.update({"form": form}) |
629 return shortcuts.render_to_response('task/select_user.html', context) |
655 return shortcuts.render_to_response( |
|
656 'task/select_user.html', |
|
657 RequestContext(request, context)) |
630 else: |
658 else: |
631 form = taskapp_forms.ChoiceForm(user_list) |
659 form = taskapp_forms.ChoiceForm(user_list) |
632 context.update({"form": form}) |
660 context.update({"form": form}) |
633 return shortcuts.render_to_response('task/select_user.html', context) |
661 return shortcuts.render_to_response( |
|
662 'task/select_user.html', |
|
663 RequestContext(request, context)) |
634 else: |
664 else: |
635 return show_msg(user, 'There are no pending claims for this task', |
665 return show_msg(user, 'There are no pending claims for this task', |
636 task_url, 'view the task') |
666 task_url, 'view the task') |
637 else: |
667 else: |
638 raise http.Http404 |
668 raise http.Http404 |
651 context = {"user": user, |
681 context = {"user": user, |
652 "profile": profile, |
682 "profile": profile, |
653 "textbook": textbook, |
683 "textbook": textbook, |
654 } |
684 } |
655 |
685 |
656 return shortcuts.render_to_response("task/confirm_textbook_approval.html", context) |
686 return shortcuts.render_to_response( |
|
687 "task/confirm_textbook_approval.html", |
|
688 RequestContext(request, context)) |
657 |
689 |
658 @login_required |
690 @login_required |
659 def approved_textbook(request, task_id): |
691 def approved_textbook(request, task_id): |
660 |
692 |
661 user = request.user |
693 user = request.user |
674 context = {"user": user, |
706 context = {"user": user, |
675 "profile": profile, |
707 "profile": profile, |
676 "textbook": textbook, |
708 "textbook": textbook, |
677 } |
709 } |
678 |
710 |
679 return shortcuts.render_to_response("task/approved_textbook.html", context) |
711 return shortcuts.render_to_response( |
|
712 "task/approved_textbook.html", RequestContext(request, context)) |
680 |
713 |
681 def suggest_task_tags(request): |
714 def suggest_task_tags(request): |
682 """Returns the tags matching the query for the AJAXy autocomplete |
715 """Returns the tags matching the query for the AJAXy autocomplete |
683 to get tags related to tasks. |
716 to get tags related to tasks. |
684 """ |
717 """ |