pytask/taskapp/views/textbook.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Tue, 01 Feb 2011 02:31:53 +0530
changeset 540 b07d52d49db7
parent 538 478c7fc9a223
child 543 57b0f8f80ebf
permissions -rwxr-xr-x
Initial tags for the chapters should not contain Textbook as the keyword.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     1
"""Module containing the views for all the textbook project related activities.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     2
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     3
"""
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     4
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     5
__authors__ = [
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     6
    '"Nishanth Amuluru" <nishanth@fossee.in>',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     7
    '"Madhusudan.C.S" <madhusudancs@fossee.in>',
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     8
    ]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
     9
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    10
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    11
from datetime import datetime
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    12
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    13
from django import shortcuts
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    14
from django import http
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    15
from django.contrib.auth.decorators import login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    16
from django.contrib.auth.models import User
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    17
from django.core.context_processors import csrf
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    18
from django.core.urlresolvers import reverse
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    19
from django.template import RequestContext
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    20
from django.utils.translation import ugettext
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    21
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    22
from tagging.managers import TaggedItem
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    23
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    24
from pytask.helpers.exceptions import UnauthorizedAccess
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    25
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    26
from pytask.profile import models as profile_models
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    27
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    28
from pytask.taskapp import forms as taskapp_forms
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    29
from pytask.taskapp import models as taskapp_models
540
b07d52d49db7 Initial tags for the chapters should not contain Textbook as the keyword.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
    30
from pytask.taskapp.views.utils import get_intial_tags_for_chapter
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    31
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    32
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    33
DONT_CLAIM_TASK_MSG = ugettext(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    34
  "Please don't submit any claims for the tasks until the workshop is "
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    35
  "over. During the workshop we will introduce you to the work-flow of "
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    36
  "this entire project. Also please be warned that the task claim work-"
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    37
  "flow may change. So all the claims submitted before the workshop may "
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    38
  "not be valid.")
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    39
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    40
NO_EDIT_RIGHT = ugettext(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    41
  "You are not authorized to edit this page.")
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    42
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    43
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    44
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    45
def create_textbook(request):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    46
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    47
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    48
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    49
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    50
    if profile.role != profile_models.ROLES_CHOICES[3][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    51
        can_create = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    52
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    53
        can_create= False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    54
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    55
    if not can_create:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    56
        raise http.HttpResponseForbidden
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    57
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    58
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    59
      'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    60
      'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    61
      }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    62
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    63
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    64
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    65
    if request.method == 'POST':
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    66
        form = taskapp_forms.CreateTextbookForm(request.POST)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    67
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    68
            data = form.cleaned_data.copy()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    69
            data.update({"created_by": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    70
                         "creation_datetime": datetime.now()})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    71
            del data['chapters']
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    72
            new_textbook = taskapp_models.TextBook(**data)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    73
            new_textbook.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    74
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    75
            new_textbook.chapters = form.cleaned_data['chapters']
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    76
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    77
            textbook_url = reverse(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    78
              'view_textbook', kwargs={'task_id': new_textbook.id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    79
            return shortcuts.redirect(textbook_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    80
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    81
            context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    82
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    83
              "task/edit.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    84
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    85
        form = taskapp_forms.CreateTextbookForm()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    86
        context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    87
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    88
          "task/edit.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    89
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    90
def view_textbook(request, task_id, template='task/view_textbook.html'):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    91
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    92
    # Shortcut to get_object_or_404 is not used since django-tagging
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    93
    # api expects a queryset object for tag filtering.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    94
    task = taskapp_models.Task.objects.filter(pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    95
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    96
    textbooks = TaggedItem.objects.get_by_model(task, ['Textbook'])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    97
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    98
    if textbooks:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
    99
        textbook = textbooks[0]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   100
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   101
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   102
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   103
    chapters = textbook.children_tasks.all()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   104
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   105
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   106
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   107
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   108
      'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   109
      'textbook': textbook,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   110
      'chapters': chapters,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   111
      }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   112
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   113
    if not user.is_authenticated():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   114
        return shortcuts.render_to_response(template,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   115
                                            RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   116
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   117
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   118
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   119
    context.update({
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   120
      'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   121
      'textbook': textbook,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   122
      })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   123
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   124
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   125
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   126
    user_role = user.get_profile().role
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   127
    if ((user == textbook.created_by or
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   128
      user_role != profile_models.ROLES_CHOICES[3][0]) and
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   129
      textbook.status in [taskapp_models.TB_STATUS_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   130
      taskapp_models.TB_STATUS_CHOICES[1][0]]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   131
        can_edit = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   132
        can_create_chapters = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   133
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   134
        can_edit = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   135
        can_create_chapters = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   136
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   137
    if (profile.role in [profile_models.ROLES_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   138
      profile_models.ROLES_CHOICES[1][0]] and
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   139
      textbook.status == taskapp_models.TB_STATUS_CHOICES[0][0]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   140
        can_approve = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   141
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   142
        can_approve = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   143
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   144
    context.update({
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   145
      'can_edit': can_edit,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   146
      'can_approve': can_approve,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   147
      'can_create_chapters': can_create_chapters,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   148
      })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   149
    return shortcuts.render_to_response(template,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   150
                                        RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   151
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   152
def browse_textbooks(request):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   153
    """View to list all the open textbooks. This view fetches tasks
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   154
    tagged with Textbook.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   155
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   156
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   157
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   158
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   159
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   160
    # Get all the textbooks that are Open.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   161
    open_textbooks = taskapp_models.Task.objects.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   162
      status=taskapp_models.TASK_STATUS_CHOICES[1][0]).order_by(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   163
      'creation_datetime')
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   164
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   165
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   166
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   167
      'aero_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   168
        open_textbooks, ['Textbook', 'Aerospace']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   169
      'chemical_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   170
        open_textbooks, ['Textbook', 'Chemical']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   171
      'computerscience_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   172
        open_textbooks, ['Textbook', 'ComputerScience']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   173
      'electrical_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   174
        open_textbooks, ['Textbook', 'Electrical']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   175
      'engineeringphysics_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   176
        open_textbooks, ['Textbook', 'EngineeringPhysics']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   177
      'mechanical_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   178
        open_textbooks, ['Mechanical', 'Textbook']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   179
      'metallurgical_textbooks': TaggedItem.objects.get_by_model(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   180
        open_textbooks, ['Textbook', 'Metallurgical']),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   181
      }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   182
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   183
    # Nothing
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   184
    if user.is_authenticated() and (user.get_profile().role in
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   185
      [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   186
        unpub_textbooks = taskapp_models.TextBook.objects.filter(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   187
          status=taskapp_models.TB_STATUS_CHOICES[0][0])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   188
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   189
        context.update({"unpub_textbooks": unpub_textbooks})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   190
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   191
    return shortcuts.render_to_response("task/browse_textbooks.html",
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   192
                                        RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   193
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   194
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   195
def edit_textbook(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   196
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   197
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   198
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   199
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   200
    textbook = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   201
    textbook_url = reverse(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   202
      'view_textbook', kwargs={'task_id': textbook.id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   203
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   204
    if ((user == textbook.created_by or 
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   205
      user.get_profile().role != profile_models.ROLES_CHOICES[3][0])
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   206
      and textbook.status in [taskapp_models.TASK_STATUS_CHOICES[0][0],
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   207
      taskapp_models.TASK_STATUS_CHOICES[1][0]]):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   208
        can_edit = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   209
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   210
        can_edit = False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   211
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   212
    if not can_edit:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   213
        raise UnauthorizedAccess(NO_EDIT_RIGHT)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   214
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   215
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   216
      'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   217
      'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   218
      'textbook': textbook,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   219
      }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   220
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   221
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   222
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   223
    if request.method == "POST":
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   224
        form = taskapp_forms.EditTextbookForm(request.POST, instance=textbook)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   225
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   226
            form.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   227
            return shortcuts.redirect(textbook_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   228
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   229
            context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   230
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   231
              "task/edit.html", RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   232
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   233
        form = taskapp_forms.EditTextbookForm(instance=textbook)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   234
        context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   235
        return shortcuts.render_to_response("task/edit.html",
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   236
                                            RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   237
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   238
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   239
def create_chapter(request, book_id, template='task/chapter_edit.html'):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   240
    """View function to let Coordinators and TAs (Mentor in
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   241
    PyTask terminology) create chapters out of textbooks.
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   242
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   243
    Args:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   244
      book_id: ID of the text book to which this chapter belongs to
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   245
    """
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   246
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   247
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   248
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   249
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   250
    if profile.role != profile_models.ROLES_CHOICES[3][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   251
        can_create = True
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   252
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   253
        can_create= False
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   254
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   255
    if not can_create:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   256
        raise http.HttpResponseForbidden
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   257
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   258
    context = {
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   259
      'user': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   260
      'profile': profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   261
      }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   262
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   263
    context.update(csrf(request))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   264
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   265
    textbook = shortcuts.get_object_or_404(taskapp_models.Task, pk=book_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   266
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   267
    if request.method == 'POST':
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   268
        form = taskapp_forms.CreateChapterForm(request.POST)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   269
        if form.is_valid():
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   270
            data = form.cleaned_data.copy()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   271
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   272
            data.update({
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   273
              'created_by': user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   274
              'creation_datetime': datetime.now(),
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   275
              'parent': textbook,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   276
              })
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   277
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   278
            # TODO: remove hard coded default publish for chapters
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   279
            data['status'] = 'Open'
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   280
            new_chapter = taskapp_models.Task(**data)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   281
            new_chapter.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   282
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   283
            textbook_url = reverse(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   284
              'view_textbook', kwargs={'task_id': textbook.id})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   285
            return shortcuts.redirect(textbook_url)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   286
        else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   287
            context.update({"form": form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   288
            return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   289
              template, RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   290
    else:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   291
        form = taskapp_forms.CreateChapterForm(
540
b07d52d49db7 Initial tags for the chapters should not contain Textbook as the keyword.
Madhusudan.C.S <madhusudancs@gmail.com>
parents: 538
diff changeset
   292
          initial={'tags_field': get_intial_tags_for_chapter(textbook)})
538
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   293
        context.update({'form': form})
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   294
        return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   295
          template, RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   296
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   297
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   298
def approve_textbook(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   299
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   300
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   301
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   302
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   303
    textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   304
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   305
    if profile.role not in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]] or textbook.status != taskapp_models.TB_STATUS_CHOICES[0][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   306
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   307
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   308
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   309
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   310
               "textbook": textbook,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   311
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   312
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   313
    return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   314
      "task/confirm_textbook_approval.html",
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   315
      RequestContext(request, context))
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   316
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   317
@login_required
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   318
def approved_textbook(request, task_id):
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   319
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   320
    user = request.user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   321
    profile = user.get_profile()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   322
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   323
    textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id)
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   324
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   325
    if profile.role not in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]] or textbook.status != taskapp_models.TB_STATUS_CHOICES[0][0]:
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   326
        raise http.Http404
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   327
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   328
    textbook.approved_by = user
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   329
    textbook.approval_datetime = datetime.now()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   330
    textbook.status = taskapp_models.TB_STATUS_CHOICES[1][0]
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   331
    textbook.save()
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   332
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   333
    context = {"user": user,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   334
               "profile": profile,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   335
               "textbook": textbook,
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   336
              }
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   337
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   338
    return shortcuts.render_to_response(
478c7fc9a223 Create a package for taskapp views and break the views into task and textbook.
Madhusudan.C.S <madhusudancs@gmail.com>
parents:
diff changeset
   339
      "task/approved_textbook.html", RequestContext(request, context))