src/ldt/ldt/ldt_utils/views.py
author verrierj
Mon, 21 Nov 2011 15:33:17 +0100
changeset 245 953228fcbb56
parent 243 3cff86180fbe
child 247 f98f1a6e15f1
permissions -rwxr-xr-x
Permissions are checked in search results
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     1
from django.conf import settings
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     2
from django.contrib.auth.decorators import login_required
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
     3
from django.contrib.auth.models import User, Group
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     4
from django.core.urlresolvers import reverse
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
     5
from django.core.paginator import Paginator, InvalidPage, EmptyPage
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     6
from django.db.models import Q
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     7
from django.forms.models import model_to_dict
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     8
from django.forms.util import ErrorList
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
     9
from django.forms.formsets import formset_factory
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    10
from django.http import (HttpResponse, HttpResponseRedirect,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    11
    HttpResponseForbidden, HttpResponseServerError)
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
    12
from ldt.indexation import get_results_with_context, highlight_documents
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    13
from django.shortcuts import (render_to_response, get_object_or_404,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    14
    get_list_or_404)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    15
from django.template import RequestContext
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    16
from django.template.loader import render_to_string
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    17
from django.utils import simplejson
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    18
from django.utils.html import escape
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    19
from django.utils.translation import ugettext as _, ungettext
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    20
from forms import (LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm,
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
    21
    ContentForm, MediaForm, GroupAddForm, PermissionForm)
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
    22
from guardian.core import ObjectPermissionChecker
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
    23
from guardian.shortcuts import assign, remove_perm, get_perms, get_objects_for_group
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    24
from ldt.ldt_utils.models import Content
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    25
from ldt.ldt_utils.utils import boolean_convert, LdtUtils, LdtSearch
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
    26
from ldt.security.utils import assign_project_to_groups, set_forbidden_stream
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    27
from lxml.html import fragment_fromstring
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    28
from models import Media, Project
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    29
from projectserializer import ProjectSerializer
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    30
from urllib2 import urlparse
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
    31
from operator import itemgetter
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
    32
from itertools import groupby
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    33
import base64
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    34
import django.core.urlresolvers
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    35
import ldt.auth as ldt_auth
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    36
import ldt.utils.path as ldt_utils_path
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    37
import logging
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    38
import lxml.etree
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    39
import mimetypes
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    40
import os
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    41
import urllib2
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    42
import subprocess
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    43
import re
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    44
import datetime
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    45
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
    46
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    47
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
    48
def workspace(request):
229
fce9a02cc0a2 Basic access control for Projects
verrierj
parents: 228
diff changeset
    49
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    50
    # list of contents
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
    51
    content_list = Content.safe_objects.all() #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    52
125
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    53
    # get list of projects owned by the current user
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
    54
    project_list = Project.safe_objects.filter(owner=request.user) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    55
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    56
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    57
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    58
    # render list
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    59
    return render_to_response("ldt/ldt_utils/workspace.html",
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    60
                              {'contents': content_list, 'projects': project_list,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    61
                               'is_gecko': is_gecko},
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    62
                              context_instance=RequestContext(request))
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    63
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    64
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
    65
def groups(request): 
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    66
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    67
    # get list of all published projects
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    68
    group_list = request.user.groups #@UndefinedVariable
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    69
    checker = ObjectPermissionChecker(request.user)
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    70
    
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    71
    group_list = list(group_list.all())
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    72
    for group in group_list:
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    73
        if checker.has_perm('change_group', group):
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    74
            group.can_change = True
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    75
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    76
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    77
    
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    78
    # render list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    79
    return render_to_response("ldt/ldt_utils/groups.html",
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
    80
                              {'groups': group_list,
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    81
                               'is_gecko': is_gecko},
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    82
                              context_instance=RequestContext(request))
125
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    83
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    84
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    85
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
    86
def published_project(request): 
125
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    87
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    88
    # get list of all published projects
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    89
    project_list = Project.objects.filter(state=2) #@UndefinedVariable
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    90
    # Search form
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    91
    form = SearchForm()
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    92
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    93
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    94
    
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    95
    # render list
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    96
    return render_to_response("ldt/ldt_utils/published_projects.html",
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    97
                              {'projects': project_list, 'form': form,
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
    98
                               'is_gecko': is_gecko},
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    99
                              context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   100
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   101
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   102
def popup_embed(request):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   103
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   104
    json_url = request.GET.get("json_url")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   105
    player_id = request.GET.get("player_id")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   106
    ldt_id = request.GET.get("ldt_id")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   107
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   108
    project = Project.safe_objects.get(ldt_id=ldt_id); #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   109
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   110
    stream_mode = project.stream_mode
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   111
    if stream_mode != "video":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   112
        stream_mode = 'radio'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   113
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   114
    player_width = 650
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   115
    player_height = 480
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   116
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   117
    if stream_mode == 'radio':
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   118
        player_height = 1
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   119
        
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   120
    if not ldt_auth.check_access(request.user, project):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   121
        return HttpResponseForbidden(_("You can not access this project"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   123
    ps = ProjectSerializer(project, from_contents=False, from_display=True)
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   124
    annotations = ps.get_annotations(first_cutting=True)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   125
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   126
    rend_dict = {'json_url':json_url, 'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id, 'stream_mode': stream_mode, 'player_width': player_width, 'player_height': player_height}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   127
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   128
    embed_rendered = dict((typestr,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   129
                           (lambda s:escape(lxml.etree.tostring(fragment_fromstring(render_to_string("ldt/ldt_utils/partial/embed_%s.html" % (s), rend_dict, context_instance=RequestContext(request))), pretty_print=True)))(typestr))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   130
                           for typestr in ('player', 'seo_body', 'seo_meta', 'links'))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   131
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   132
    rend_dict['embed_rendered'] = embed_rendered
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   133
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   134
    return render_to_response("ldt/ldt_utils/embed_popup.html",
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   135
                              rend_dict,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   136
                              context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   137
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   138
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   139
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   140
def projects_filter(request, filter, is_owner=False, status=0, id_group=None): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   141
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   142
    is_owner = boolean_convert(is_owner)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   143
    status = int(status)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   144
    query = Q()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   145
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   146
    if is_owner:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   147
        owner = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   148
        try:
128
503e365a3af7 Starting 'group_management' branch (CAUTION : STILL SOME BUGS)
cavaliet
parents: 127
diff changeset
   149
            owner = request.user #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   150
        except:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   151
            return HttpResponseServerError("<h1>User not found</h1>")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   152
        query &= Q(owner=owner)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   153
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   154
    if status > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   155
        query &= Q(state=status)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   156
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   157
    if filter:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   158
        if len(filter) > 0 and filter[0] == '_':
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   159
            filter = filter[1:]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   160
        query &= Q(title__icontains=filter)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   161
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   162
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   163
    show_username = False
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   164
    
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   165
    if id_group > 0:
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   166
        # Get group, user and project_list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   167
        grp = Group.objects.get(id=id_group)  #@UndefinedVariable
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   168
        users = User.objects.filter(groups__in=[grp]) #@UndefinedVariable
128
503e365a3af7 Starting 'group_management' branch (CAUTION : STILL SOME BUGS)
cavaliet
parents: 127
diff changeset
   169
        query &= Q(owner__in=users) #@UndefinedVariable
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   170
        project_list = Project.safe_objects.filter(query).extra(select={'lower_title': 'lower(title)'}).order_by('owner__username', 'lower_title') #@UndefinedVariable
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   171
        show_username = True
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   172
    else :
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   173
        project_list = Project.safe_objects.filter(query) #@UndefinedVariable
125
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   174
    
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   175
    # Template depends on the projects's status
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   176
    if status == 2 :
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   177
        url_templ = "ldt/ldt_utils/partial/publishedprojectslist.html"
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   178
    else :
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   179
        url_templ = "ldt/ldt_utils/partial/projectslist.html"
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   180
    
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   181
    return render_to_response(url_templ,
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   182
                              {'projects': project_list, 'show_username':show_username, 'is_gecko': is_gecko},
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   183
                              context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   184
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   185
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   186
def contents_filter(request, filter): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   187
    if filter and len(filter) > 0 and filter[0] == '_':
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   188
        filter = filter[1:]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   189
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   190
    if filter:
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   191
        content_list = Content.safe_objects.filter(title__icontains=filter) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   192
    else:
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   193
        content_list = Content.safe_objects.all() #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   194
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   195
    return render_to_response("ldt/ldt_utils/partial/contentslist.html",
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   196
                              {'contents': content_list},
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   197
                              context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   198
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   199
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   200
def search_form(request): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   201
    form = SearchForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   202
    return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   203
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   204
193
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   205
@login_required
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   206
def search_index(request):
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   207
        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   208
    sform = SearchForm(request.POST)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   209
    if sform.is_valid():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   210
        search = sform.cleaned_data["search"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   211
        queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   212
        field = request.POST["field"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   213
        language_code = request.LANGUAGE_CODE[:2]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   214
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   215
        if request.POST.has_key("ldt_pres"):
176
a88714473302 Added a page to display search results
verrierj
parents: 167
diff changeset
   216
            url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.search_init", args=[field, queryStr])
a88714473302 Added a page to display search results
verrierj
parents: 167
diff changeset
   217
            return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   218
        else:
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   219
            results = get_results_with_context(field, search)     
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   220
            complete_results = []
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   221
            checker = ObjectPermissionChecker(request.user)
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   222
            
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   223
            results.sort(key=lambda k: k['iri_id'])
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   224
            for iri_id, item in groupby(results, itemgetter('iri_id')):                
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   225
                try: 
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   226
                    content = Content.objects.get(iri_id=iri_id)
193
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   227
                except Content.DoesNotExist:
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   228
                    continue
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   229
                segments = list(item)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   230
                i = 0
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   231
                for s in segments:
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   232
                    if not s['project_id']:
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   233
                        s['project_id'] = '_'
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   234
                    else:
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   235
                        project = Project.objects.get(ldt_id=s['project_id'])
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   236
                        if not checker.has_perm('view_project', project):
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   237
                            segments.pop(i)
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   238
                    i += 1
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   239
                if not segments:
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   240
                    continue 
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   241
                        
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   242
                score = sum([seg['score'] for seg in segments])
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   243
                if content.description == None:
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   244
                    desc = ''
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   245
                else:
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   246
                    desc = content.description        
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   247
                complete_results.append({'list' : segments, 'score' : score, 'content_title' : content.title, 'content_id' : content.iri_id, 'content_description' : desc })
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   248
            complete_results.sort(key=lambda k: k['score'])
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   249
                                
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   250
            request.session['complete_results'] = complete_results
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   251
            request.session['search'] = search
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   252
            request.session['field'] = field
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   253
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   254
            paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   255
            page = 1
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   256
            
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   257
            try:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   258
                results = paginator.page(page)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   259
            except (EmptyPage, InvalidPage):
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   260
                results = paginator.page(paginator.num_pages)
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   261
                
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   262
            results.object_list = highlight_documents(results.object_list, search, field)
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   263
            
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   264
            return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))   
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   265
        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   266
    else:
198
202107fff250 Fixed minor bugs
verrierj
parents: 193
diff changeset
   267
        return HttpResponseRedirect(reverse('ldt.ldt_utils.views.published_project'))
202107fff250 Fixed minor bugs
verrierj
parents: 193
diff changeset
   268
        
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   269
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   270
def search_listing(request):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   271
    if not request.session.has_key('complete_results'):
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   272
        msg = _("Please enter valid keywords.")
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   273
        return render_to_response('ldt/ldt_utils/search_results.html', {'msg' : msg}, context_instance=RequestContext(request))
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   274
 
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   275
    complete_results = request.session.get('complete_results')
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   276
    search = request.session.get('search')
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   277
    field = request.session.get('field')
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   278
    paginator = Paginator(complete_results, settings.LDT_RESULTS_PER_PAGE)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   279
    language_code = request.LANGUAGE_CODE[:2]
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   280
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   281
    try:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   282
        page = int(request.GET.get('page', '1'))
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   283
    except ValueError:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   284
        page = 1
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   285
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   286
    try:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   287
        results = paginator.page(page)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   288
    except (EmptyPage, InvalidPage):
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   289
        results = paginator.page(paginator.num_pages)
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   290
    
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   291
    results.object_list = highlight_documents(results.object_list, search, field)
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   292
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   293
    return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))   
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   294
  
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   295
def search_index_get(request, field, query):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   296
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   297
    language_code = request.LANGUAGE_CODE[:2]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   298
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   299
    url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.search_init", args=[field, query])
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   300
    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   301
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   302
def search_init(request, field, query):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   303
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   304
    ldtgen = LdtUtils()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   305
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   306
    doc = ldtgen.generate_init([field, query], 'ldt.ldt_utils.views.search_ldt', 'ldt.ldt_utils.views.search_segments')
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   307
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   308
    resp = HttpResponse(mimetype="text/xml;charset=utf-8")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   309
    resp.write(lxml.etree.tostring(doc, pretty_print=True, encoding="utf-8")) 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   310
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   311
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   312
def search_ldt(request, field, query, edition=None): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   313
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   314
    contentList = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   315
    resp = HttpResponse(mimetype="text/xml")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   316
    queryStr = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   317
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   318
    if query and len(query) > 0:        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   319
        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   320
        searcher = LdtSearch()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   321
        ids = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   322
        projIds = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   323
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   324
        for result in searcher.query(field, queryStr):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   325
            ids[result["iri_id"]] = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   326
            projIds[result["project_id"]] = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   327
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   328
        id_list = ids.keys()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   329
        projId_list = projIds.keys()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   330
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   331
        #if edition is not None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   332
        #    ids_editions = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   333
        #    id_list = filter(lambda id: id in id_list, ids_editions)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   334
            
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   335
        contentList = Content.objects.filter(iri_id__in=id_list)        #@UndefinedVariable
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   336
        projectList = Project.safe_objects.filter(ldt_id__in=projId_list);
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   337
    
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   338
          
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   339
    ldtgen = LdtUtils()
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   340
    #            generate_ldt(contentList, title=u"", author=u"IRI Web", web_url=u"", startSegment=None, projects=None):
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   341
    doc = ldtgen.generate_ldt(contentList, title=u"Recherche : " + queryStr, projects=projectList)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   342
    doc = set_forbidden_stream(doc, request.user)        
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   343
   
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   344
    doc.write(resp, pretty_print=True)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   345
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   346
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   347
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   348
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   349
def search_segments(request, field, query, edition=None):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   350
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   351
    if query and len(query) > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   352
        searcher = LdtSearch()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   353
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   354
        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   355
        res = searcher.query(field, queryStr)            
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   356
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   357
        res = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   358
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   359
    iri_ids = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   360
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   361
    #if edition is not None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   362
    #    iri_ids = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   363
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   364
    iri = lxml.etree.Element('iri')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   365
    doc = lxml.etree.ElementTree(iri)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   366
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   367
    for resultMap in res:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   368
        if iri_ids is None or resultMap['iri_id'] in iri_ids:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   369
            seg = lxml.etree.SubElement(iri, 'seg')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   370
            seg.set('idctt', resultMap['iri_id'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   371
            seg.set('idens', resultMap['ensemble_id'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   372
            seg.set('iddec', resultMap['decoupage_id'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   373
            seg.set('idseg', resultMap['element_id'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   374
            seg.set('idvue', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   375
            seg.set('crit', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   376
  
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   377
    #return doc  
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   378
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   379
    return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   380
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   381
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   382
@login_required         
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   383
def list_ldt(request):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   384
    contents = Content.safe_objects.all() #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   385
    try:
128
503e365a3af7 Starting 'group_management' branch (CAUTION : STILL SOME BUGS)
cavaliet
parents: 127
diff changeset
   386
        owner = request.user #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   387
    except:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   388
        return HttpResponseRedirect(settings.LOGIN_URL)
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   389
    ldtProjects = Project.safe_objects.filter(owner=owner) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   390
    context = {
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   391
    'contents': contents,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   392
    'projects': ldtProjects.reverse(),
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   393
    }
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   394
    return render_to_response('ldt/ldt_utils/ldt_list.html', context, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   395
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   396
@login_required         
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   397
def list_content(request):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   398
    contents = Content.safe_objects.all() #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   399
    context = {
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   400
        'contents': contents,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   401
    }
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   402
    return render_to_response('ldt/ldt_utils/content_list.html', context, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   403
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   404
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   405
def create_ldt_view(request):
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   406
    permission_formset = formset_factory(PermissionForm, extra=0)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   407
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   408
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   409
        form = LdtAddForm(request.POST)
182
b7add86c2772 Resized modal windows #3 working on Firefox, Chrome, IE8 + update jQuery
verrierj
parents: 181
diff changeset
   410
        form_status = "none"
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   411
        contents = Content.safe_objects.all()
231
535ce952e51c Stub of html template for project creation containing a group selection
verrierj
parents: 229
diff changeset
   412
        groups = request.user.groups.all()
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   413
        group_form = permission_formset(request.POST)
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   414
        management_form = None
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   415
                
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   416
        if form.is_valid() and group_form.is_valid():
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   417
            user = request.user
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
   418
            
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   419
            p = Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'],
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
   420
                                       description=form.cleaned_data['description'])
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   421
            
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   422
            assign_project_to_groups(p, group_form.cleaned_data)          
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
   423
            
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   424
            form_status = "saved"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   425
            contents = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   426
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   427
        form = LdtAddForm()
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   428
        contents = Content.safe_objects.all() #@UndefinedVariable
231
535ce952e51c Stub of html template for project creation containing a group selection
verrierj
parents: 229
diff changeset
   429
        groups = request.user.groups.all()
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   430
        
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   431
        perm_list = [] 
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   432
        for group in groups:
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   433
            perm_list.append({'share': False, 'perms': 'read', 'group': group.id })
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   434
        permission = permission_formset(initial=perm_list)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   435
              
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   436
        management_form = permission.management_form
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   437
        group_form = zip(permission, groups)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   438
        
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   439
        form_status = "none"    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   440
            
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   441
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'group_form': group_form, 'management_form': management_form, 'form_status':form_status, 'create_project_action':reverse(create_ldt_view), 'language_code' : settings.LANGUAGE_CODE[2:]}, context_instance=RequestContext(request))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   442
     
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   443
def created_ldt(request):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   444
    return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   445
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   446
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   447
def index_segment(request, project_id, content_id, cutting_id, ensemble_id, segment_id):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   448
    url_str = settings.WEB_URL + reverse("ldt.ldt_utils.views.init_segment", args=[project_id, content_id, ensemble_id, cutting_id, segment_id])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   449
    post_url = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   450
    language_code = request.LANGUAGE_CODE[:2]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   451
    readonly = 'true'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   452
    template_path = 'ldt/ldt_utils/init_ldt.html'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   453
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   454
    return render_to_response(template_path, {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url_str, 'posturl': post_url, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   455
    
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   456
def init_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   457
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   458
    if project_id != u"_":
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   459
        get_object_or_404(Project.safe_objects, ldt_id=project_id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   460
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   461
    ldtgen = LdtUtils()
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   462
    doc = ldtgen.generate_init([project_id, content_id, ensemble_id, cutting_id, segment_id], 'ldt.ldt_utils.views.ldt_segment', 'ldt.ldt_utils.views.highlight_segment')
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   463
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   464
    return HttpResponse(lxml.etree.tostring(lxml.etree.ElementTree(doc), pretty_print=True), mimetype="text/xml;charset=utf-8")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   465
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   466
def highlight_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   467
    if project_id != u"_":
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   468
        get_object_or_404(Project.safe_objects, ldt_id=project_id)
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   469
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   470
    iri = lxml.etree.Element('iri')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   471
    doc = lxml.etree.ElementTree(iri)    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   472
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   473
    seg = lxml.etree.SubElement(iri, 'seg')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   474
    seg.set('idctt', content_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   475
    seg.set('idens', ensemble_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   476
    seg.set('iddec', cutting_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   477
    seg.set('idseg', segment_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   478
    seg.set('idvue', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   479
    seg.set('crit', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   480
  
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   481
    return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   482
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   483
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   484
def ldt_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   485
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   486
    resp = HttpResponse(mimetype="text/xml")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   487
    resp['Cache-Control'] = 'no-cache, must-revalidate'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   488
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   489
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   490
    if project_id and project_id != "_" :
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   491
        project = Project.safe_objects.get(ldt_id=project_id) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   492
        ldtdoc = lxml.etree.fromstring(project.ldt.encode("utf-8"))
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   493
           
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   494
        ldtdoc = set_forbidden_stream(ldtdoc, request.user)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   495
        displays_node = ldtdoc.find("displays")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   496
        if not displays_node:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   497
            displays_node = lxml.etree.SubElement(ldtdoc, u"displays")        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   498
        res = displays_node.xpath("display")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   499
        if len(res) > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   500
            display_node = res[0]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   501
        else:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   502
            display_node = lxml.etree.SubElement(displays_node, u"display", attrib={u'id':u'0', u'title': u'generated', u'idsel':unicode(content_id), u'tc':u'0'})
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   503
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   504
        res = display_node.xpath("content[@id='%s']/decoupage[(@id='%s') and (@idens='%s')]" % (content_id, cutting_id, ensemble_id))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   505
        if len(res) == 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   506
            #create node
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   507
            res = display_node.xpath("content[@id='%s']" % (content_id))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   508
            if len(res) == 0:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   509
                content_node = lxml.etree.SubElement(display_node, u"content")
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   510
            else:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   511
                content_node = res[0]
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   512
            lxml.etree.SubElement(content_node, u"decoupage", attrib={u'id':unicode(cutting_id), u'idens':unicode(ensemble_id)})
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   513
        active_segment_node = displays_node.find(u"activeSegment")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   514
        if not active_segment_node:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   515
            active_segment_node = lxml.etree.SubElement(displays_node, u"activeSegment")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   516
        id_node = active_segment_node.find(u"id")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   517
        if id_node:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   518
            active_segment_node.remove(id_node)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   519
        lxml.etree.SubElement(active_segment_node, u"id", attrib={u"idctt":unicode(content_id), u"idens": unicode(ensemble_id), "idcut":unicode(cutting_id), u"idseg":unicode(segment_id)})
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   520
                                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   521
        resp.write(lxml.etree.tostring(ldtdoc, xml_declaration=True, encoding='utf-8', pretty_print=True))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   522
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   523
        # generate ldt from 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   524
        ldtgen = LdtUtils()
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   525
        content_list = Content.objects.filter(iri_id=content_id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   526
        if request.user and request.user.username:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   527
            username = request.user.username
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   528
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   529
            username = "webuser"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   530
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   531
        start_segment = {
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   532
            'idcontent': content_id,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   533
            'idgroup' : ensemble_id,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   534
            'idcutting' : cutting_id,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   535
            'idsegment' : segment_id
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   536
        }        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   537
        
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   538
        doc = ldtgen.generate_ldt(content_list, "segment : ", author=username, startSegment=start_segment)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   539
        doc = set_forbidden_stream(doc, request.user)
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   540
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   541
        doc.write(resp, pretty_print=('DEBUG' in dir(settings) and settings.DEBUG))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   542
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   543
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   544
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   545
#        ldtgen.
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   546
    
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   547
def index_project(request, id, full=False): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   548
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   549
    urlStr = settings.WEB_URL + reverse("space_ldt_init", args=['ldt_project', id])
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   550
    posturl = settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldt_project")
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   551
    language_code = request.LANGUAGE_CODE[:2]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   552
    
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   553
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   554
    if ldt.state == 2: #published
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   555
        readonly = 'true'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   556
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   557
        readonly = 'false'
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   558
       
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   559
    if full:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   560
        template_path = 'ldt/ldt_utils/init_ldt_full.html'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   561
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   562
        template_path = 'ldt/ldt_utils/init_ldt.html'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   563
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   564
    return render_to_response(template_path, {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   565
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   566
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   567
def init(request, method, url):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   568
    ldtgen = LdtUtils()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   569
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   570
    doc = ldtgen.generate_init([url], 'ldt.ldt_utils.views.' + method, None)    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   571
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   572
    resp = HttpResponse(mimetype="text/xml")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   573
    resp['Cache-Control'] = 'no-cache, must-revalidate'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   574
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   575
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   576
    resp.write(lxml.etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   577
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   578
       
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   579
def ldt_project(request, id): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   580
    resp = HttpResponse(mimetype="text/xml")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   581
    resp['Cache-Control'] = 'no-cache, must-revalidate'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   582
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   583
    
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   584
    project = Project.safe_objects.get(ldt_id=id) #@UndefinedVariable
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   585
    
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   586
    doc = lxml.etree.fromstring(project.ldt)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   587
    doc = set_forbidden_stream(doc, request.user)
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   588
    resp.write(lxml.etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   589
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   590
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   591
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   592
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   593
def project_json_id(request, id): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   594
    
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   595
    project = get_object_or_404(Project.safe_objects, ldt_id=id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   596
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   597
    return project_json(request, project, False)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   598
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   599
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   600
def project_json_externalid(request, id): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   601
        
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   602
    res_proj = get_list_or_404(Project.safe_objects.order_by('-modification_date'), contents__external_id=id) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   603
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   604
    return project_json(request, res_proj[0], False)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   605
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   606
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   607
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   608
def project_json(request, project, serialize_contents=True): # Not checked
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   609
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   610
    if not ldt_auth.check_access(request.user, project):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   611
        return HttpResponseForbidden(_("You can not access this project"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   612
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   613
    mimetype = request.REQUEST.get("mimetype")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   614
    if mimetype is None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   615
        mimetype = "application/json; charset=utf-8"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   616
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   617
        mimetype = mimetype.encode("utf-8")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   618
    if "charset" not in mimetype:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   619
        mimetype += "; charset=utf-8" 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   620
    resp = HttpResponse(mimetype=mimetype)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   621
    resp['Cache-Control'] = 'no-cache, must-revalidate'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   622
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   623
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   624
    indent = request.REQUEST.get("indent")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   625
    if indent is None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   626
        indent = settings.LDT_JSON_DEFAULT_INDENT
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   627
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   628
        indent = int(indent)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   629
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   630
    callback = request.REQUEST.get("callback")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   631
    escape_str = request.REQUEST.get("escape")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   632
    escape_bool = False
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   633
    if escape_str:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   634
        escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower())
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   635
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   636
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   637
    ps = ProjectSerializer(project, serialize_contents)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   638
    project_dict = ps.serialize_to_cinelab()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   639
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   640
    json_str = simplejson.dumps(project_dict, ensure_ascii=False, indent=indent)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   641
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   642
    if callback is not None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   643
        json_str = "%s(%s)" % (callback, json_str)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   644
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   645
    if escape_bool:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   646
        json_str = escape(json_str)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   647
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   648
    resp.write(json_str)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   649
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   650
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   651
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   652
def project_annotations_rdf(request, ldt_id):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   653
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   654
    project = Project.safe_objects.get(ldt_id=ldt_id); #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   655
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   656
    if not ldt_auth.check_access(request.user, project):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   657
        return HttpResponseForbidden(_("You can not access this project"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   658
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   659
    mimetype = request.REQUEST.get("mimetype")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   660
    if mimetype is None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   661
        mimetype = "application/rdf+xml; charset=utf-8"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   662
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   663
        mimetype = mimetype.encode("utf-8")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   664
    if "charset" not in mimetype:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   665
        mimetype += "; charset=utf-8" 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   666
    resp = HttpResponse(mimetype=mimetype)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   667
    resp['Cache-Control'] = 'no-cache, must-revalidate'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   668
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   669
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   670
    ps = ProjectSerializer(project, from_contents=False, from_display=True) 
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   671
    annotations = ps.get_annotations(first_cutting=True)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   672
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   673
    rdf_ns = u"http://www.w3.org/1999/02/22-rdf-syntax-ns#"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   674
    dc_ns = u"http://purl.org/dc/elements/1.1/"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   675
    rdf = u"{%s}" % rdf_ns
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   676
    dc = u"{%s}" % dc_ns
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   677
    nsmap = {u'rdf' : rdf_ns, u'dc':dc_ns}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   678
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   679
    rdf_root = lxml.etree.Element(rdf + u"RDF", nsmap=nsmap)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   680
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   681
    logging.debug("RDF annotations : " + repr(annotations)) #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   682
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   683
    for annotation in annotations:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   684
        uri = u""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   685
        if 'uri' in annotation and annotation['uri']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   686
            uri = unicode(annotation['uri'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   687
        annot_desc = lxml.etree.SubElement(rdf_root, rdf + u"Description")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   688
        annot_desc.set(rdf + u'about', uri)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   689
        if annotation['title']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   690
            lxml.etree.SubElement(annot_desc, dc + 'title').text = lxml.etree.CDATA(unicode(annotation['title']))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   691
        if annotation['desc']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   692
            lxml.etree.SubElement(annot_desc, dc + 'description').text = lxml.etree.CDATA(unicode(annotation['desc']))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   693
        if annotation['tags']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   694
            for tag in annotation['tags']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   695
                lxml.etree.SubElement(annot_desc, dc + 'subject').text = lxml.etree.CDATA(unicode(tag))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   696
        lxml.etree.SubElement(annot_desc, dc + 'coverage').text = u"start=%s, duration=%s" % (annotation['begin'], annotation['duration'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   697
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   698
    resp.write(u"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   699
    resp.write(u"<!DOCTYPE rdf:RDF PUBLIC \"-//DUBLIN CORE//DCMES DTD 2002/07/31//EN\" \"http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd\">\n")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   700
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   701
    resp.write(lxml.etree.tostring(rdf_root, xml_declaration=False, encoding="utf-8", pretty_print=True))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   702
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   703
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   704
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   705
def save_ldt_project(request):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   706
    if request.method == "POST":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   707
        ldt = request.POST['ldt']
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   708
        id = request.POST['id']
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   709
        ldtproject = Project.safe_objects.get(ldt_id=id) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   710
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   711
        #save xml ldt
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   712
        ldtproject.ldt = ldt
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   713
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   714
        doc = lxml.etree.fromstring(ldtproject.ldt.encode("utf-8"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   715
        result = doc.xpath("/iri/project")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   716
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   717
        #set new title
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   718
        ldtproject.title = result[0].get("title")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   719
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   720
        #get new content list
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   721
        new_contents = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   722
        result = doc.xpath("/iri/medias/media")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   723
        for medianode in result:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   724
            id = medianode.get("id")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   725
            new_contents.append(id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   726
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   727
        #set new content list
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   728
        for c in ldtproject.contents.all():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   729
            if not c.iri_id in new_contents:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   730
                ldtproject.contents.remove(c)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   731
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   732
        ldtproject.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   733
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   734
        ldt = ''
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   735
        new_contents = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   736
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   737
    return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':ldtproject.title, 'contents': new_contents}, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   738
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   739
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   740
def publish(request, id, redirect=True):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   741
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   742
    ldt.state = 2
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   743
    ldt.save()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   744
    redirect = boolean_convert(redirect)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   745
    if redirect:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   746
        return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   747
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   748
        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
229
fce9a02cc0a2 Basic access control for Projects
verrierj
parents: 228
diff changeset
   749
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   750
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   751
def unpublish(request, id, redirect=True):
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   752
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   753
    ldt.state = 1
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   754
    ldt.save()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   755
    redirect = boolean_convert(redirect)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   756
    if redirect:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   757
        return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   758
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   759
        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   760
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   761
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   762
def index(request, url):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   763
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   764
    urlStr = settings.WEB_URL + reverse("ldt_init", args=['ldt', url])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   765
    language_code = request.LANGUAGE_CODE[:2]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   766
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   767
    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL + settings.BASE_URL}, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   768
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   769
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   770
def ldt(request, url, startSegment=None): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   771
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   772
    resp = HttpResponse(mimetype="text/xml; charset=utf-8")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   773
    resp['Cache-Control'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   774
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   775
    contentList = Content.safe_objects.filter(iri_id=url) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   776
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   777
    ldtgen = LdtUtils()
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   778
    doc = ldtgen.generate_ldt(contentList, title=contentList[0].title, startSegment=startSegment)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   779
    doc = set_forbidden_stream(doc, request.user)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   780
    doc.write(resp, pretty_print=True)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   781
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   782
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   783
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   784
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   785
def loading(request): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   786
    return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   787
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   788
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   789
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   790
def create_project(request, iri_id): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   791
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   792
    content = get_object_or_404(Content.safe_objects, iri_id=iri_id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   793
    contents = [ content, ]
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
   794
    groups = request.user.groups.all()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   795
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   796
        form = AddProjectForm(request.POST)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   797
        if form.is_valid():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   798
            user = request.user
179
03007a7c14ca Corrected bug in description display
verrierj
parents: 178
diff changeset
   799
            project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents, description=form.cleaned_data['description'])
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   800
            # Modal window is not used with firefox
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   801
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   802
            if is_gecko :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   803
                return HttpResponseRedirect(reverse('index_project_full', args=[project.ldt_id]))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   804
            else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   805
                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   806
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   807
        form = AddProjectForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   808
    # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case.
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   809
    target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
   810
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'contents':contents, 'groups' : groups, 'create_project_action':reverse("ldt.ldt_utils.views.create_project", args=[iri_id]), 'target_parent':target_parent}, context_instance=RequestContext(request))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   811
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   812
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   813
def update_project(request, ldt_id):
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   814
    permission_formset = formset_factory(PermissionForm, extra=0)
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   815
    project = get_object_or_404(Project.safe_objects, ldt_id=ldt_id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   816
    contents = project.contents.all()
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   817
    groups = request.user.groups.all()
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
   818
    
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   819
    management_form = None    
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   820
        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   821
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   822
        submit_action = request.REQUEST.get("submit_button", False)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   823
        if submit_action == "prepare_delete":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   824
            errors = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   825
            if project.state == 2:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   826
                errors.append(_("the project %(title)s is published. please unpublish before deleting.") % {'title':project.title})
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   827
                message = _("can not delete the project. Please correct the following error")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   828
                title = _('title error deleting project')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   829
            else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   830
                message = _("please confirm deleting project %(title)s") % {'title':project.title}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   831
                title = _("confirm deletion")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   832
            return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title}, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   833
        elif submit_action == "delete":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   834
            if project.state != 2:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   835
                project.delete()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   836
            form_status = 'deleted'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   837
            form = AddProjectForm()
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   838
            group_form = permission_formset()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   839
        else:
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   840
            form_status = 'saved' 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   841
            form = AddProjectForm(request.POST)
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   842
            group_form = permission_formset(request.POST)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   843
            
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   844
            if form.is_valid() and group_form.is_valid():
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   845
                
178
4b83c370dc8a Added project description and tooltip
verrierj
parents: 177
diff changeset
   846
                if project.title != form.cleaned_data['title'] or project.description != form.cleaned_data['description']:
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   847
                    project.title = form.cleaned_data['title']
178
4b83c370dc8a Added project description and tooltip
verrierj
parents: 177
diff changeset
   848
                    project.description = form.cleaned_data['description']
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   849
                    ldt = lxml.etree.fromstring(project.ldt.encode("utf-8"))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   850
                    res = ldt.xpath("/iri/project")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   851
                    res[0].set("title", project.title)
179
03007a7c14ca Corrected bug in description display
verrierj
parents: 178
diff changeset
   852
                    res[0].set("abstract", project.description)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   853
                    project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   854
                    project.save()                    
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   855
                    
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   856
                assign_project_to_groups(project, group_form.cleaned_data)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   857
    else:
179
03007a7c14ca Corrected bug in description display
verrierj
parents: 178
diff changeset
   858
        form = AddProjectForm({'title':unicode(project.title), 'description':unicode(project.get_description())})
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   859
        
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   860
        perm_list = [] 
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   861
        for group in groups:
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   862
            group_perms = get_perms(group, project)
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   863
            share = False
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   864
            perm = None
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   865
            if 'view_project' in group_perms:
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   866
                share = True
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   867
                perm = 'read'
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   868
            if 'change_project' in group_perms:
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   869
                perm = 'write'
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   870
                
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   871
            perm_list.append({'share': share, 'perms': perm, 'group': group.id })
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   872
        permission = permission_formset(initial=perm_list)    
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   873
        management_form = permission.management_form
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   874
        group_form = zip(permission, groups)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   875
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   876
        form_status = 'none'
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   877
       
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   878
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups,
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   879
                              'ldt_id': ldt_id, 'contents':contents, 'group_form': group_form, 'management_form': management_form, 
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   880
                              'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   881
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   882
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   883
def copy_project(request, ldt_id): 
182
b7add86c2772 Resized modal windows #3 working on Firefox, Chrome, IE8 + update jQuery
verrierj
parents: 181
diff changeset
   884
    
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   885
    project = get_object_or_404(Project.safe_objects, ldt_id=ldt_id)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   886
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   887
        form = CopyProjectForm(request.POST)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   888
        if form.is_valid():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   889
            user = request.user
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   890
            project = project.copy_project(title=request.POST['title'], user=user)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   891
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   892
            if is_gecko:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   893
                return HttpResponseRedirect(reverse('index_project_full', args=[project.ldt_id]))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   894
            else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   895
                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   896
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   897
        form = CopyProjectForm
125
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   898
    # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case.
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   899
    target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
5c3ed9c919bb New search feature on top right corner. Advanced search included in published projects tab. Colored icons. Change css to avoid scroll on contents and projects table.
cavaliet
parents: 122
diff changeset
   900
    return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project, 'target_parent':target_parent}, context_instance=RequestContext(request))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   901
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   902
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   903
def write_content_base(request, iri_id=None): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   904
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   905
    if iri_id:        
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
   906
        instance_content = Content.safe_objects.get(iri_id=iri_id) #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   907
        instance_media = instance_content.media_obj
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   908
        logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content)) #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   909
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   910
        logging.debug("No iri_id") #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   911
        instance_content = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   912
        instance_media = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   913
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   914
    form_status = 'none'        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   915
    if request.method == "POST":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   916
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   917
        if instance_content is not None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   918
            content_instance_val = model_to_dict(instance_content, exclude=ContentForm.Meta.exclude)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   919
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   920
            content_instance_val = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   921
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   922
        if instance_media is not None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   923
            media_instance_val = model_to_dict(instance_media, exclude=MediaForm.Meta.exclude)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   924
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   925
            media_instance_val = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   926
        #add prefix
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   927
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   928
        def add_prefix(dict, prefix):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   929
            for key, value in dict.items():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   930
                dict['%s-%s' % (prefix, key)] = value
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   931
                del(dict[key])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   932
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   933
        add_prefix(content_instance_val, "content")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   934
        add_prefix(media_instance_val, "media")        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   935
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   936
        for k in request.POST.keys():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   937
            value = request.POST.get(k)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   938
            content_instance_val[k] = value
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   939
            media_instance_val[k] = value
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   940
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   941
        content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   942
        media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   943
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   944
        media_valid = media_form.is_valid()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   945
        content_valid = content_form.is_valid()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   946
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   947
        logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid)) #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   948
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   949
        if media_valid and content_valid :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   950
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   951
            # see if media must be created
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   952
            cleaned_data = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   953
            cleaned_data.update(media_form.cleaned_data)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   954
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   955
            media_input_type = content_form.cleaned_data["media_input_type"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   956
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   957
            if media_input_type == "none":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   958
                media = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   959
            elif media_input_type == "link":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   960
                media = content_form.cleaned_data["media_obj"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   961
                created = False
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   962
            elif media_input_type == "create":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   963
                del cleaned_data["media_file"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   964
                if not cleaned_data['videopath']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   965
                    cleaned_data['videopath'] = settings.STREAM_URL
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   966
                # if the source is already http:// or rtmp:// we don't have to add STREAM_URL
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   967
                if cleaned_data['src'].startswith("rtmp://") or cleaned_data['src'].startswith("http://"):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   968
                    cleaned_data['videopath'] = ''
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   969
                media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data) #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   970
            elif media_input_type == "url" or media_input_type == "upload" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   971
                # copy file
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   972
                #complet src
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   973
                destination_file = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   974
                source_file = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   975
                try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   976
                    if media_input_type == "url":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   977
                        url = cleaned_data["external_src_url"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   978
                        source_file = urllib2.urlopen(url)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   979
                        source_filename = source_file.info().get('Content-Disposition', None)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   980
                        if not source_filename:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   981
                            source_filename = urlparse.urlparse(url).path.rstrip("/").split('/')[-1]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   982
                    elif media_input_type == "upload":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   983
                        #source_file = request.FILES['media-media_file']
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   984
                        # At this point the file has already be uploaded thanks to the upload view, and original file name is sent through a post var
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   985
                        source_filename = request.POST["media-local_file_name"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   986
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   987
                    source_filename = ldt_utils_path.sanitize_filename(source_filename)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   988
                    destination_filepath = os.path.join(settings.STREAM_PATH, source_filename)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   989
                    base_source_filename = source_filename
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   990
                    extension = base_source_filename.split(".")[-1]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   991
                    if extension == base_source_filename:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   992
                        extension = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   993
                        base_basename_filename = base_source_filename
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   994
                    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   995
                        base_basename_filename = base_source_filename[:-1 * (len(extension) + 1)]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   996
                    i = 0
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   997
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   998
                    while os.path.exists(destination_filepath):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   999
                        base_source_filename = "%s.%d.%s" % (base_basename_filename, i, extension)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1000
                        destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1001
                        i += 1
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1002
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1003
                    if media_input_type == "url":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1004
                        # we upload the file if we are in url case
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1005
                        destination_file = open(destination_filepath, "wb")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1006
                        chunck = source_file.read(2048)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1007
                        while chunck:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1008
                            destination_file.write(chunck)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1009
                            chunck = source_file.read(2048)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1010
                        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1011
                    elif media_input_type == "upload":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1012
                        # The media file has been uploaded in the session temp folder 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1013
                        # so we just have to move to the regular folder and rename it.
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1014
                        if os.path.exists(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", source_filename)):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1015
                            os.rename(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", source_filename), os.path.join(settings.STREAM_PATH, base_source_filename))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1016
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1017
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1018
                    src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1019
                    if len(src_prefix) > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1020
                        cleaned_data["src"] = src_prefix + "/" + base_source_filename
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1021
                    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1022
                        cleaned_data["src"] = base_source_filename
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1023
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1024
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1025
                except Exception as inst:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1026
                    logging.debug("write_content_base : POST error when processing file:" + str(inst)) #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1027
                    form_status = "error"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1028
                    #set error for form
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1029
                    if media_input_type == "url":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1030
                        errors = media_form._errors.setdefault("external_src_url", ErrorList())
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1031
                        errors.append(_("Problem when downloading file from url : ") + url)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1032
                    elif media_input_type == "upload":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1033
                        errors = media_form._errors.setdefault("media_file", ErrorList())
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1034
                        errors.append(_("Problem when uploading file : ") + str(inst))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1035
                finally:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1036
                    if media_input_type == "url":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1037
                        if destination_file:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1038
                            destination_file.close()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1039
                        if source_file:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1040
                            source_file.close()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1041
                
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1042
                if form_status != "error":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1043
                    #try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1044
                    del cleaned_data["media_file"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1045
                    if not cleaned_data['videopath']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1046
                        cleaned_data['videopath'] = settings.STREAM_URL
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1047
                    mimetype = cleaned_data.get('mimetype_field', None)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1048
                    if not mimetype:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1049
                        mimetype = mimetypes.guess_type(cleaned_data['src'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1050
                    cleaned_data['mimetype_field'] = mimetype
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1051
                    media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data) #@UndefinedVariable
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1052
                else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1053
                    media = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1054
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1055
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1056
            if media and not created:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1057
                for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title'):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1058
                    setattr(media, attribute, cleaned_data.get(attribute))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1059
                mimetype = cleaned_data.get('mimetype_field', None)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1060
                if not mimetype:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1061
                    mimetype = mimetypes.guess_type(media.src)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1062
                media.mimetype_field = mimetype
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1063
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1064
                media.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1065
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1066
            if form_status != "error":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1067
                #try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1068
                content_defaults = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1069
                content_defaults.update(content_form.cleaned_data)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1070
                content_defaults['media_obj'] = media
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1071
                del content_defaults["media_input_type"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1072
                content, created = Content.objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults) #@UndefinedVariable
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1073
                if created:
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1074
                    assign('change_content', request.user, content)
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1075
                    assign('view_content', request.user, content)                
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1076
                else:
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1077
                    for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1078
                        setattr(content, attribute, content_defaults[attribute])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1079
                content.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1080
                form_status = 'saved'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1081
                media_form = MediaForm(instance=media, prefix="media")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1082
                content_form = ContentForm(instance=content, prefix="content")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1083
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1084
            form_status = 'error'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1085
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1086
        form_status = 'empty'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1087
        initial = { 'media_input_type':"link"}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1088
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1089
        content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1090
        media_form = MediaForm(prefix="media", instance=instance_media)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1091
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1092
        if instance_content is not None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1093
            content_form.media_input_type = "link"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1094
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1095
    return content_form, media_form, form_status
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1096
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1097
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1098
def write_content(request, iri_id=None):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1099
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1100
    submit_action = request.REQUEST.get("submit_button", False) 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1101
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1102
    if submit_action == "prepare_delete": 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1103
        errors, titles = prepare_delete_content(request, iri_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1104
        if errors and len(errors) > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1105
            message = ungettext("There is %(count)d error when deleting content", "There are %(count)d errors when deleting content", len(errors)) % { 'count': len(errors)}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1106
            title_msg = _('title error deleting content')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1107
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1108
            message = _("Confirm delete content %(titles)s") % { 'titles' : ",".join(titles) }
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1109
            title_msg = _("confirm delete content")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1110
        return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title_msg}, context_instance=RequestContext(request))  
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1111
    elif submit_action == "delete":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1112
        delete_content(request, iri_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1113
        form_status = "deleted"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1114
        content_form = ContentForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1115
        media_form = MediaForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1116
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1117
        content_form, media_form, form_status = write_content_base(request, iri_id)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1118
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1119
    if iri_id:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1120
        create_content_action = reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1121
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1122
        create_content_action = reverse('ldt.ldt_utils.views.write_content')
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1123
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1124
    session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1125
    cookie_name = settings.SESSION_COOKIE_NAME
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1126
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1127
    return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form, 'form_status': form_status, 'create_content_action': create_content_action, 'iri_id': iri_id, 'session_key':session_key, 'cookie_name':cookie_name}, context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1128
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1129
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1130
def prepare_delete_content(request, iri_id=None): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1131
    errors = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1132
    titles = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1133
    if not iri_id:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1134
        iri_id = request.REQUEST.get("iri_id", None)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1135
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1136
    if iri_id:
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1137
        for content in Content.safe_objects.filter(iri_id=iri_id): #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1138
            titles.append(unicode(content.title))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1139
            projects = content.project_set.all()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1140
            projects_nb = len(projects)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1141
            if projects_nb > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1142
                project_titles = map(lambda p: unicode(p.title), projects)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1143
                errors.append(ungettext("Content '%(title)s' is referenced by this project : %(project_titles)s. Please delete it beforehand.", "Content '%(title)s' is referenced by %(count)d projects: %(project_titles)s. Please delete them beforehand.", projects_nb) % {'title':unicode(content.title), 'count':projects_nb, 'project_titles': ",".join(project_titles)})
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1144
 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1145
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1146
    return errors, titles
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1147
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1148
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1149
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1150
def delete_content(request, iri_id=None):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1151
    if not iri_id:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1152
        iri_id = request.REQUEST.get("iri_id", None)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1153
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1154
    if iri_id:
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1155
        Content.objects_safe.filter(iri_id=iri_id).delete() #@UndefinedVariable
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1156
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1157
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1158
def upload(request):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1159
    if request.method == 'POST':
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1160
        for field_name in request.FILES:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1161
            # We get the file name
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1162
            source_file = request.FILES[field_name]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1163
            source_filename = source_file.name
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1164
            # We sanitize the file name : no space, only lower case.
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1165
            source_filename = ldt_utils_path.sanitize_filename(source_filename)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1166
            # We create the session temp folder if necessary
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1167
            if not os.path.exists(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME])):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1168
                os.makedirs(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME]))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1169
            destination_filepath = os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", source_filename)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1170
            # We delete the existing file if necessary
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1171
            if os.path.exists(destination_filepath):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1172
                os.remove(destination_filepath)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1173
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1174
            destination_file = open(destination_filepath, "wb")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1175
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1176
            for chunk in source_file.chunks():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1177
                destination_file.write(chunk)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1178
            destination_file.close()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1179
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1180
        # indicate that everything is OK for SWFUpload
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1181
        return HttpResponse("ok", mimetype="text/plain")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1182
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1183
        return HttpResponse("notok", mimetype="text/plain")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1184
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1185
def remove_temp_file(request):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1186
    # The filename arrives with a GET var.
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1187
    file_path = os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", ldt_utils_path.sanitize_filename(request.GET["filename"]))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1188
    if os.path.exists(file_path):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1189
        os.remove(file_path)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1190
    return HttpResponse("remove ok", mimetype="text/plain")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1191
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1192
def get_duration(request):
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1193
    try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1194
        # The filename arrives with a GET var.
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1195
        file_path = os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", ldt_utils_path.sanitize_filename(request.GET["filename"]))
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1196
        if hasattr(settings, 'FFMPEG_PATH') and os.path.exists(file_path):
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1197
            output = str(subprocess.Popen([settings.FFMPEG_PATH, "-i", file_path], stderr=subprocess.PIPE).communicate()[1])
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1198
            m = re.search("Duration:\s*?([\d.:]+)", output, re.M)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1199
            dur_arr = m.group(1).split(":")
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1200
            td = datetime.timedelta(hours=int(dur_arr[0]), minutes=int(dur_arr[1]), seconds=float(dur_arr[2]))
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1201
            str_duration = str((td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 ** 6) / 10 ** 3)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1202
            return HttpResponse(str_duration, mimetype="text/plain")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1203
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1204
            return HttpResponse("", mimetype="text/plain")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1205
    except Exception as inst:
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1206
        return HttpResponse(str(inst), mimetype="text/plain")
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1207
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1208
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1209
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1210
def get_group_projects(request):
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1211
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1212
    # Get group, user and project_list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1213
    grp = Group.objects.get(id=request.POST["id_group"])  #@UndefinedVariable
243
3cff86180fbe Replaced calls to objects by calls to safe_objects in views + xml can be changed on the fly to hide a content
verrierj
parents: 240
diff changeset
  1214
    project_list = get_objects_for_group(grp, 'ldt_utils.view_project') | Project.objects.filter(state=2).filter(owner__in=[grp])
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1215
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1216
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1217
    
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1218
    # render list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1219
    return render_to_response("ldt/ldt_utils/partial/projectslist.html",
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1220
                              {'projects': project_list, 'show_username':True,
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1221
                               'is_gecko': is_gecko},
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1222
                              context_instance=RequestContext(request))
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1223
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1224
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1225
def create_group(request):
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
  1226
    user_list = User.objects.exclude(id=settings.ANONYMOUS_USER_ID).exclude(id=request.user.id)
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1227
    form_status = ''
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1228
    
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1229
    if request.method == 'POST':
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1230
        form = GroupAddForm(request.POST)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1231
        
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1232
        if form.is_valid():            
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1233
            name = form.cleaned_data['name']
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1234
            members_list = form.cleaned_data['members_list']
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
  1235
            admin_list = form.cleaned_data['admin_list']
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1236
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1237
            group = Group.objects.create(name=name)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1238
            group.save()
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1239
            assign('change_group', request.user, group)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1240
            user_list = User.objects.filter(id__in=members_list)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1241
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1242
            for user in user_list:
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1243
                user.groups.add(group)
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1244
                if user in admin_list:
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1245
                    assign('change_group', user, group)
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1246
            request.user.groups.add(group)             
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1247
            form_status = 'saved' 
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1248
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1249
    else:
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1250
        form = GroupAddForm()        
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1251
    
233
f6d009f83e38 User can choose how to share a project at creation (read/write). Permissions updating does not work yet.
verrierj
parents: 232
diff changeset
  1252
    return render_to_response("ldt/ldt_utils/create_group.html", {'form' : form, 'form_status' : form_status, 'user_list' : user_list, 'admin_list': user_list}, context_instance=RequestContext(request))
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1253
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1254
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1255
def update_group(request, group_id): 
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1256
    
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1257
    group = get_object_or_404(Group, id=group_id)    
231
535ce952e51c Stub of html template for project creation containing a group selection
verrierj
parents: 229
diff changeset
  1258
    user_list = User.objects.exclude(id=settings.ANONYMOUS_USER_ID).exclude(id=request.user.id)
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1259
    members_list = User.objects.filter(groups__id=group_id)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1260
    form_status = ''    
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1261
    
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1262
    if not request.user.has_perm('change_group', group):
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1263
        user_list = []
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1264
        form_status = 'saved'
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1265
        form = GroupAddForm()
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1266
        return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status, 'user_list' : user_list}, context_instance=RequestContext(request))
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1267
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1268
    for u in user_list:
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1269
        if u in members_list:
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1270
            u.member = True
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1271
        if u.has_perm('change_group', group):
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1272
            u.admin = True
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1273
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1274
    if request.method == "POST":
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1275
        form = GroupAddForm(request.POST, instance=group)
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1276
        submit_action = request.REQUEST.get("submit_button", False)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1277
        
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1278
        if submit_action == 'delete':
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1279
            remove_perm('change_group', request.user, group)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1280
            group.delete()
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1281
            form_status = 'deleted'
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1282
        else:            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1283
            if form.is_valid():
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1284
                name = form.cleaned_data['name']
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1285
                members_list = form.cleaned_data['members_list']
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1286
                admin_list = form.cleaned_data['admin_list']
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1287
                group.name = name
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1288
                
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
  1289
                for user in User.objects.all().exclude(username=request.user.username):
231
535ce952e51c Stub of html template for project creation containing a group selection
verrierj
parents: 229
diff changeset
  1290
                    if user in members_list:                        
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1291
                        group.user_set.add(user)
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1292
                        if user in admin_list:
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
  1293
                            assign('change_group', user, group)
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1294
                        else:
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
  1295
                            remove_perm('change_group', user, group)
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1296
                    else:
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1297
                        group.user_set.remove(user)
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
  1298
                        remove_perm('change_group', user, group)
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
  1299
                        
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1300
                group.save()
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1301
                form_status = 'saved'       
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1302
                    
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1303
    else:
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1304
        form = GroupAddForm(initial={'name':unicode(group.name), 'members_list':members_list})    
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1305
    
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1306
    return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status, 'user_list' : user_list}, context_instance=RequestContext(request))
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1307
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1308
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1309
def leave_group(request, group_id, redirect=True):
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1310
    group = get_object_or_404(Group, id=group_id)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1311
    redirect = boolean_convert(redirect)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1312
    
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1313
    if not request.user.has_perm('change_group', group):
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1314
        request.user.groups.remove(group)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1315
        
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1316
    if redirect:        
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1317
        return HttpResponseRedirect(reverse('ldt.ldt_utils.views.groups'))
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1318
    else:
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1319
        return HttpResponse(simplejson.dumps({'res':True}, ensure_ascii=False), mimetype='application/json')
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1320
        
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1321