src/ldt/ldt/ldt_utils/views/project.py
author verrierj
Mon, 02 Jan 2012 16:27:01 +0100
changeset 319 c45aed3c7a89
parent 315 877f89ec1efa
child 321 c68744402249
permissions -rw-r--r--
Remove unused imports in views
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     1
from django.conf import settings
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     2
from django.contrib.auth.decorators import login_required
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     3
from django.contrib.auth.models import Group
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     4
from django.core.urlresolvers import reverse
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     5
from django.db.models import Q
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     6
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseServerError
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     7
from django.shortcuts import render_to_response, get_object_or_404
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     8
from django.template import RequestContext
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     9
from django.utils import simplejson
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    10
from django.utils.translation import ugettext as _
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    11
from ldt.ldt_utils.forms import LdtAddForm, AddProjectForm, CopyProjectForm
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    12
from guardian.shortcuts import get_objects_for_group, get_objects_for_user
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    13
from ldt.ldt_utils.models import Content, Project
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    14
from ldt.ldt_utils.utils import boolean_convert
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    15
from ldt.security.utils import (assign_perm_to_obj, add_change_attr, get_userlist,
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    16
                                get_userlist_model)
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    17
import lxml.etree
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    18
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    19
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    20
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    21
def create_project(request, iri_id): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    22
    content = get_object_or_404(Content.safe_objects, iri_id=iri_id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    23
    contents = [ content, ]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    24
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    25
    redirect_to = ''
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    26
    form_status = "none"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    27
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    28
    if request.method == "POST" :        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    29
        form = AddProjectForm(request.POST)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    30
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    31
        if form.is_valid():
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    32
            user = request.user
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    33
            project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents, description=form.cleaned_data['description'])
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    34
            form_status = "saved" 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    35
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    36
            if form.cleaned_data["share"]:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    37
                assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    38
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    39
            # Modal window is not used with firefox
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    40
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    41
            if is_gecko :
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    42
                redirect_to = reverse('index_project_full', args=[project.ldt_id])
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    43
            else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    44
                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    45
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    46
        form = AddProjectForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    47
           
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    48
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status': form_status, 'contents':contents,'groups' : groups,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    49
                                                                'redirect_to': redirect_to, 'elem_list': get_userlist(request.user), 'create_project_action':reverse("ldt.ldt_utils.views.create_project", args=[iri_id])}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    50
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    51
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    52
def update_project(request, ldt_id):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    53
    project = get_object_or_404(Project.safe_objects, ldt_id=ldt_id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    54
    contents = project.contents.all()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    55
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    56
    member_list, admin_list = get_userlist_model(project, request.user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    57
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    58
    if request.method == "POST" :
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    59
        submit_action = request.REQUEST.get("submit_button", False)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    60
        if submit_action == "prepare_delete":
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    61
            errors = []
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    62
            if project.state == 2:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    63
                errors.append(_("the project %(title)s is published. please unpublish before deleting.") % {'title':project.title})
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    64
                message = _("can not delete the project. Please correct the following error")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    65
                title = _('title error deleting project')
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    66
            else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    67
                message = _("please confirm deleting project %(title)s") % {'title':project.title}
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    68
                title = _("confirm deletion")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    69
            return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    70
        elif submit_action == "delete":
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    71
            if project.state != 2:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    72
                project.delete()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    73
            form_status = 'deleted'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    74
            form = AddProjectForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    75
        else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    76
            form_status = 'none' 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    77
            form = AddProjectForm(request.POST)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    78
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    79
            if form.is_valid():          
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    80
                if project.title != form.cleaned_data['title'] or project.description != form.cleaned_data['description']:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    81
                    project.title = form.cleaned_data['title']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    82
                    project.description = form.cleaned_data['description']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    83
                    ldt = lxml.etree.fromstring(project.ldt.encode("utf-8"))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    84
                    res = ldt.xpath("/iri/project")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    85
                    res[0].set("title", project.title)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    86
                    res[0].set("abstract", project.description)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    87
                    project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    88
                    project.save()                    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    89
                    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    90
                if form.cleaned_data["share"]:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    91
                    assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], request.user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    92
                form_status = "saved"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    93
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    94
        form = AddProjectForm({'title':unicode(project.title), 'description':unicode(project.get_description())})
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    95
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    96
        form_status = 'none'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    97
       
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    98
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups, 'elem_list': get_userlist(request.user), 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    99
                                                                'ldt_id': ldt_id, 'contents':contents, 'member_list': member_list, 'admin_list': admin_list,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   100
                                                                'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   101
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   102
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   103
def copy_project(request, ldt_id, group_id=0): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   104
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   105
    project = get_object_or_404(Project.safe_objects, ldt_id=ldt_id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   106
    if request.method == "POST" :
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   107
        form = CopyProjectForm(request.POST)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   108
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   109
        if form.is_valid():
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   110
            user = request.user
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   111
            group_id = form.cleaned_data['group']
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   112
            group = Group.objects.get(id=group_id) if group_id and group_id > 0 else None
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   113
            project = project.copy_project(title=form.cleaned_data['title'], user=user, group=group)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   114
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   115
            if is_gecko:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   116
                return HttpResponseRedirect(reverse('index_project_full', args=[project.ldt_id]))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   117
            else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   118
                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   119
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   120
        form = CopyProjectForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   121
    # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case.
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   122
    target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   123
    return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project, 'group_id':group_id, 'target_parent':target_parent}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   124
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   125
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   126
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   127
def projects_filter(request, filter, is_owner=False, status=0, id_group=0):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   128
    is_owner = boolean_convert(is_owner)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   129
    status = int(status)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   130
    id_group = int(id_group)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   131
    query = Q()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   132
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   133
    if is_owner:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   134
        owner = None
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   135
        try:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   136
            owner = request.user
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   137
        except:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   138
            return HttpResponseServerError("<h1>User not found</h1>")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   139
        query &= Q(owner=owner)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   140
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   141
    if status > 0:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   142
        query &= Q(state=status)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   143
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   144
    if filter:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   145
        if len(filter) > 0 and filter[0] == '_':
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   146
            filter = filter[1:]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   147
        query &= Q(title__icontains=filter)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   148
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   149
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   150
    show_username = True
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   151
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   152
    if id_group > 0:    # Search inside a group
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   153
        grp = Group.objects.get(id=id_group)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   154
        project_list = get_objects_for_group(grp, 'ldt_utils.view_project').filter(query)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   155
    elif id_group == -1:# Search inside projects shared with a specific user
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   156
        project_list = get_objects_for_user(request.user, 'ldt_utils.view_project', use_groups=False).exclude(owner=request.user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   157
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   158
        project_list = Project.safe_objects.filter(query)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   159
        show_username = False
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   160
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   161
    project_list = add_change_attr(request.user, project_list)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   162
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   163
    if status == 2:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   164
        url_templ = "ldt/ldt_utils/partial/publishedprojectslist.html"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   165
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   166
        url_templ = "ldt/ldt_utils/partial/projectslist.html"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   167
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   168
    return render_to_response(url_templ,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   169
                              {'projects': project_list, 'show_username':show_username,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   170
                               'is_gecko': is_gecko, 'group_id':id_group},
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   171
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   172
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   173
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   174
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   175
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   176
def publish(request, id):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   177
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   178
    ldt.publish()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   179
    ldt.save()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   180
    return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   181
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   182
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   183
def unpublish(request, id):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   184
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   185
    ldt.unpublish()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   186
    ldt.save()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   187
    return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   188
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   189
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   190
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   191
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   192
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   193
def create_ldt_view(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   194
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   195
    redirect_to = ''
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   196
    if request.method == "POST" :
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   197
        form = LdtAddForm(request.POST)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   198
        form_status = "none"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   199
        contents = Content.safe_objects.all()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   200
           
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   201
        if form.is_valid():              
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   202
                     
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   203
            user = request.user            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   204
            project = Project.create_project(title=form.cleaned_data['title'], user=user, 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   205
                                             contents=form.cleaned_data['contents'],
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   206
                                             description=form.cleaned_data['description'])
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   207
  
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   208
            if form.cleaned_data["share"]:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   209
                assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], user)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   210
            form_status = "saved"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   211
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   212
            if is_gecko :
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   213
                redirect_to = reverse('index_project_full', args=[project.ldt_id])
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   214
            else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   215
                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))   
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   216
     
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   217
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   218
        form = LdtAddForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   219
        contents = Content.safe_objects.all()             
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   220
        form_status = "none"    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   221
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   222
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   223
                                                                'redirect_to': redirect_to, 'create_project_action':reverse(create_ldt_view), 'language_code' : settings.LANGUAGE_CODE[2:],
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   224
                                                                'elem_list': get_userlist(request.user)}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   225
     
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   226
def created_ldt(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   227
    return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request))