src/ldt/ldt/ldt_utils/views.py
author verrierj
Thu, 08 Dec 2011 16:04:44 +0100
changeset 273 23a756e0bfee
parent 271 99347d5275b6
child 274 80375a7b7e14
permissions -rwxr-xr-x
Fix bug in group form
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
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
     9
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
    10
    HttpResponseForbidden, HttpResponseServerError)
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
    11
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
    12
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
    13
    get_list_or_404)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    14
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
    15
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
    16
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
    17
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
    18
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
    19
from forms import (LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm,
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
    20
    ContentForm, MediaForm, GroupAddForm)
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
    21
from guardian.core import ObjectPermissionChecker
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
    22
from guardian.shortcuts import assign, remove_perm, 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
    23
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
    24
from ldt.ldt_utils.utils import boolean_convert, LdtUtils, LdtSearch
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
    25
from ldt.security.utils import (assign_perm_to_obj, set_forbidden_stream, 
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
    26
    add_change_attr, get_userlist_model, get_userlist_group)
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
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    46
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    47
@login_required
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
    48
def workspace(request):
217
812ffe52038b Fix bug when disconnecting from ldt view
verrierj
parents: 206
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
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
    51
    content_list = add_change_attr(request.user, Content.safe_objects.all()) #@UndefinedVariable
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
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
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
    54
    project_list = add_change_attr(request.user, 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
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
    68
    group_list = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
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
    
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
    71
    group_list = sorted(group_list.all(), key=lambda group: group.name.lower())
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
    72
    
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    73
    for group in group_list:
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
    74
        if checker.has_perm('change_group', group):
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
    75
            group.change = True
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    76
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    77
    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
    78
    
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    79
    # render list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    80
    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
    81
                              {'groups': group_list,
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    82
                               'is_gecko': is_gecko},
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
    83
                              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
    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
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
    86
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
    87
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
    88
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
    # get list of all published projects
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
    90
    project_list = Project.safe_objects.filter(state=2) #@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
    91
    # 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
    92
    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
    93
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
    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
    95
    
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
    # 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
    97
    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
    98
                              {'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
    99
                               '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
   100
                              context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   101
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   102
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   103
def popup_embed(request):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   104
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   105
    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
   106
    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
   107
    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
   108
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
   109
    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
   110
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   111
    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
   112
    if stream_mode != "video":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   113
        stream_mode = 'radio'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   114
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   115
    player_width = 650
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   116
    player_height = 480
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   117
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   118
    if stream_mode == 'radio':
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   119
        player_height = 1
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   120
        
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   121
    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
   122
        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
   123
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   124
    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
   125
    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
   126
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   127
    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
   128
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   129
    embed_rendered = dict((typestr,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   130
                           (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
   131
                           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
   132
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   133
    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
   134
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   135
    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
   136
                              rend_dict,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   137
                              context_instance=RequestContext(request))
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
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   140
@login_required
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   141
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
   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:
255
c6e09aec199e Imrpove js of group page
verrierj
parents: 252
diff changeset
   166
        grp = Group.objects.get(id=id_group)
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   167
        project_list = get_objects_for_group(grp, 'ldt_utils.view_project').filter(query)
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
   168
        show_username = True
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   169
    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
   170
        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
   171
    
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   172
    project_list = add_change_attr(request.user, project_list)
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
   173
    # Template depends on the projects's status
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   174
    if status == 2:
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
   175
        url_templ = "ldt/ldt_utils/partial/publishedprojectslist.html"
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   176
    else:
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
   177
        url_templ = "ldt/ldt_utils/partial/projectslist.html"
248
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   178
        
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
   179
    return render_to_response(url_templ,
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   180
                              {'projects': project_list, 'show_username':show_username,
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   181
                               'is_gecko': is_gecko, 'group_id':id_group},
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   182
                              context_instance=RequestContext(request))
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   183
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   184
def share_filter(request, filter, use_groups=False):
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   185
    use_groups = boolean_convert(use_groups)
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   186
    if not filter or len(filter) == 0:
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   187
        raise AttributeError("filter should be a string")
261
14b59dcd2731 Add user search bar during group edition
verrierj
parents: 260
diff changeset
   188
    
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   189
    filter = filter[1:]    
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   190
    users = User.objects.filter(username__icontains=filter)[0:20]
261
14b59dcd2731 Add user search bar during group edition
verrierj
parents: 260
diff changeset
   191
    
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   192
    resp = []
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   193
    for u in users:
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   194
        resp.append({'name':u.username, 'id':u.id, 'type': 'user'})
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   195
        
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   196
    if use_groups:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   197
        groups = Group.objects.filter(name__icontains=filter).exclude(name=settings.PUBLIC_GROUP_NAME)[0:20]
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   198
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   199
        for g in groups:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   200
            resp.append({'name': g.name, 'id': g.id, 'type': 'group'})
261
14b59dcd2731 Add user search bar during group edition
verrierj
parents: 260
diff changeset
   201
    
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   202
    resp = sorted(resp, key=lambda elem: elem['name'].lower())
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   203
    
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   204
    return render_to_response("ldt/ldt_utils/partial/sharewith.html", {'elem_list' : resp}, context_instance=RequestContext(request))
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   205
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   206
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   207
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
   208
    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
   209
        filter = filter[1:]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   210
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   211
    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
   212
        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
   213
    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
   214
        content_list = Content.safe_objects.all() #@UndefinedVariable
248
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   215
        
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   216
    checker = ObjectPermissionChecker(request.user)
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   217
    
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   218
    for c in content_list:
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   219
        if checker.has_perm('ldt_utils.change_content', c):
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   220
            c.change = True
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   221
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   222
    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
   223
                              {'contents': content_list},
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   224
                              context_instance=RequestContext(request))
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   225
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   226
@login_required
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   227
def groups_filter(request, filter):
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   228
    if filter and len(filter) > 0 and filter[0] == '_':
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   229
        filter = filter[1:]
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   230
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   231
    if filter:
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   232
        group_list = request.user.groups.filter(title__icontains=filter) 
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   233
    else:
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   234
        group_list = request.user.groups.all()
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   235
        
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   236
    group_list = group_list.exclude(name=settings.PUBLIC_GROUP_NAME)
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
   237
    group_list = sorted(group_list.all(), key=lambda group: group.name.lower())
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   238
    checker = ObjectPermissionChecker(request.user)
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   239
    for g in group_list:
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   240
        if checker.has_perm('change_group', g):
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   241
            g.change = True
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   242
        
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   243
    return render_to_response("ldt/ldt_utils/partial/groupslist.html",
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   244
                              {'groups': group_list},
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   245
                              context_instance=RequestContext(request))
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   246
    
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   247
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   248
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
   249
    form = SearchForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   250
    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
   251
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   252
193
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   253
@login_required
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   254
def search_index(request):
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   255
        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   256
    sform = SearchForm(request.POST)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   257
    if sform.is_valid():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   258
        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
   259
        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
   260
        field = request.POST["field"]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   261
        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
   262
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   263
        if request.POST.has_key("ldt_pres"):
176
a88714473302 Added a page to display search results
verrierj
parents: 167
diff changeset
   264
            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
   265
            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
   266
        else:
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   267
            results = get_results_with_context(field, search)     
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   268
            complete_results = []
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   269
            proj_list = Project.safe_objects.all()
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   270
            
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   271
            results.sort(key=lambda k: k['iri_id'])
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   272
            for iri_id, item in groupby(results, itemgetter('iri_id')):                
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   273
                try: 
193
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   274
                    content = Content.objects.get(iri_id=iri_id)
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   275
                except Content.DoesNotExist:
1fc885d6e120 Fixed minor bugs
verrierj
parents: 185
diff changeset
   276
                    continue
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   277
                segments = list(item)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   278
                i = 0
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   279
                for s in segments:
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   280
                    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
   281
                        s['project_id'] = '_'
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   282
                    else:
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   283
                        project = proj_list.filter(ldt_id=s['project_id'])
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   284
                        if not project:
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   285
                            segments.pop(i)
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   286
                    i += 1
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   287
                if not segments:
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   288
                    continue 
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   289
                
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   290
                score = sum([seg['score'] for seg in segments])
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   291
                if content.description == None:
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   292
                    desc = ''
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   293
                else:
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   294
                    desc = content.description        
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   295
                complete_results.append({'list' : segments, 'score' : score, 'content_title' : content.title, 'content_id' : content.iri_id, 'content_description' : desc })
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   296
            
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   297
            complete_results.sort(key=lambda k: k['score'])
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   298
                                
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   299
            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
   300
            request.session['search'] = search
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   301
            request.session['field'] = field
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   302
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   303
            paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   304
            page = 1
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   305
            
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   306
            try:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   307
                results = paginator.page(page)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   308
            except (EmptyPage, InvalidPage):
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   309
                results = paginator.page(paginator.num_pages)
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   310
                
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   311
            results.object_list = highlight_documents(results.object_list, search, field)
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   312
            
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   313
            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
   314
        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   315
    else:
198
202107fff250 Fixed minor bugs
verrierj
parents: 193
diff changeset
   316
        return HttpResponseRedirect(reverse('ldt.ldt_utils.views.published_project'))
202107fff250 Fixed minor bugs
verrierj
parents: 193
diff changeset
   317
        
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   318
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   319
def search_listing(request):
220
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   320
    if not request.session.has_key('complete_results'):
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   321
        return HttpResponseRedirect(reverse('ldt.ldt_utils.views.published_project'))
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   322
     
205
49c9890dce4a Fixed bug when displaying annotations from iri files in search results + thread in indexation
verrierj
parents: 198
diff changeset
   323
    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
   324
    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
   325
    field = request.session.get('field')
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   326
    paginator = Paginator(complete_results, settings.LDT_RESULTS_PER_PAGE)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   327
    language_code = request.LANGUAGE_CODE[:2]
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   328
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   329
    try:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   330
        page = int(request.GET.get('page', '1'))
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   331
    except ValueError:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   332
        page = 1
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   333
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   334
    try:
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   335
        results = paginator.page(page)
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   336
    except (EmptyPage, InvalidPage):
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   337
        results = paginator.page(paginator.num_pages)
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   338
    
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   339
    results.object_list = highlight_documents(results.object_list, search, field)
177
32fbed79d3a1 Display search results on multiple pages
verrierj
parents: 176
diff changeset
   340
183
89334901b7c2 Improve search page
verrierj
parents: 182
diff changeset
   341
    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
   342
  
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   343
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
   344
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   345
    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
   346
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   347
    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
   348
    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
   349
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   350
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
   351
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   352
    ldtgen = LdtUtils()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   353
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   354
    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
   355
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   356
    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
   357
    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
   358
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   359
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   360
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
   361
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   362
    contentList = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   363
    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
   364
    queryStr = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   365
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   366
    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
   367
        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
   368
        searcher = LdtSearch()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   369
        ids = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   370
        projIds = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   371
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   372
        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
   373
            ids[result["iri_id"]] = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   374
            projIds[result["project_id"]] = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   375
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   376
        id_list = ids.keys()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   377
        projId_list = projIds.keys()
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
        #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
   380
        #    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
   381
        #    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
   382
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   383
        contentList = Content.objects.filter(iri_id__in=id_list)        #@UndefinedVariable
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
   384
        projectList = Project.safe_objects.filter(ldt_id__in=projId_list)    
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   385
          
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   386
    ldtgen = LdtUtils()
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   387
    #            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
   388
    doc = ldtgen.generate_ldt(contentList, title=u"Recherche : " + queryStr, projects=projectList)
262
1105a5ed9f8f Merge with d79097e98244a8f6611a950c95323517300eb4e4
verrierj
parents: 261 227
diff changeset
   389
    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
   390
    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
   391
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   392
    return resp
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
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   395
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
   396
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   397
    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
   398
        searcher = LdtSearch()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   399
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   400
        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   401
        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
   402
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   403
        res = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   404
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   405
    iri_ids = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   406
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   407
    #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
   408
    #    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
   409
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   410
    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
   411
    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
   412
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   413
    for resultMap in res:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   414
        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
   415
            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
   416
            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
   417
            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
   418
            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
   419
            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
   420
            seg.set('idvue', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   421
            seg.set('crit', "")
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   422
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   423
    #return doc  
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   424
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   425
    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
   426
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   427
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   428
@login_required         
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   429
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
   430
    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
   431
    try:
128
503e365a3af7 Starting 'group_management' branch (CAUTION : STILL SOME BUGS)
cavaliet
parents: 127
diff changeset
   432
        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
   433
    except:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   434
        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
   435
    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
   436
    context = {
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   437
    'contents': contents,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   438
    'projects': ldtProjects.reverse(),
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   439
    }
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   440
    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
   441
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   442
@login_required         
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   443
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
   444
    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
   445
    context = {
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   446
        'contents': contents,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   447
    }
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   448
    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
   449
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   450
@login_required
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   451
def create_ldt_view(request):
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   452
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
225
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   453
    redirect_to = ''
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   454
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   455
        form = LdtAddForm(request.POST)
182
b7add86c2772 Resized modal windows #3 working on Firefox, Chrome, IE8 + update jQuery
verrierj
parents: 181
diff changeset
   456
        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
   457
        contents = Content.safe_objects.all()
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   458
           
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   459
        if form.is_valid():          
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   460
            user = request.user            
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
   461
            project = Project.create_project(title=form.cleaned_data['title'], user=user, 
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   462
                                             contents=form.cleaned_data['contents'],
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
   463
                                             description=form.cleaned_data['description'])
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
   464
  
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   465
            assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], user)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   466
            form_status = "saved"
225
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   467
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   468
            if is_gecko :
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   469
                redirect_to = reverse('index_project_full', args=[project.ldt_id])
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   470
            else:
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   471
                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))       
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   472
     
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   473
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   474
        form = LdtAddForm()
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   475
        contents = Content.safe_objects.all()             
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
   476
        form_status = "none"    
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   477
    
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   478
    user_list = User.objects.all()[0:20]
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   479
    elem_list = [{'name': u.username, 'id': u.id, 'type': 'user'} for u in user_list]
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   480
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status,
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   481
                                                                'redirect_to': redirect_to, 'create_project_action':reverse(create_ldt_view), 'language_code' : settings.LANGUAGE_CODE[2:],
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   482
                                                                'elem_list': elem_list}, 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
   483
     
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   484
def created_ldt(request):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   485
    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
   486
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   487
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   488
def index_segment(request, project_id, content_id, cutting_id, ensemble_id, segment_id):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   489
    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
   490
    post_url = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   491
    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
   492
    readonly = 'true'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   493
    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
   494
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   495
    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
   496
    
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   497
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
   498
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
   499
    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
   500
        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
   501
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   502
    ldtgen = LdtUtils()
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   503
    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
   504
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   505
    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
   506
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   507
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
   508
    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
   509
        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
   510
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   511
    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
   512
    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
   513
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   514
    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
   515
    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
   516
    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
   517
    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
   518
    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
   519
    seg.set('idvue', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   520
    seg.set('crit', "")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   521
  
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   522
    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
   523
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   524
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   525
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
   526
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   527
    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
   528
    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
   529
    resp['Pragma'] = 'no-cache'
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
    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
   532
        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
   533
        ldtdoc = lxml.etree.fromstring(project.ldt.encode("utf-8"))
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   534
        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
   535
        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
   536
        if not displays_node:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   537
            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
   538
        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
   539
        if len(res) > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   540
            display_node = res[0]
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   541
        else:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   542
            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
   543
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   544
        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
   545
        if len(res) == 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   546
            #create node
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   547
            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
   548
            if len(res) == 0:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   549
                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
   550
            else:
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   551
                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
   552
            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
   553
        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
   554
        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
   555
            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
   556
        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
   557
        if id_node:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   558
            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
   559
        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
   560
                                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   561
        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
   562
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   563
        # generate ldt from 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   564
        ldtgen = LdtUtils()
248
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
   565
        content_list = Content.safe_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
   566
        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
   567
            username = request.user.username
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   568
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   569
            username = "webuser"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   570
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   571
        start_segment = {
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   572
            'idcontent': content_id,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   573
            'idgroup' : ensemble_id,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   574
            'idcutting' : cutting_id,
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   575
            'idsegment' : segment_id
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   576
        }        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   577
        
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   578
        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
   579
        doc = set_forbidden_stream(doc, request.user)
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
   580
        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
   581
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   582
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   583
        
262
1105a5ed9f8f Merge with d79097e98244a8f6611a950c95323517300eb4e4
verrierj
parents: 261 227
diff changeset
   584
   
1105a5ed9f8f Merge with d79097e98244a8f6611a950c95323517300eb4e4
verrierj
parents: 261 227
diff changeset
   585
@login_required    
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   586
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
   587
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   588
    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
   589
    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
   590
    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
   591
    
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
   592
    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
   593
    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
   594
        readonly = 'true'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   595
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   596
        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
   597
       
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   598
    if full:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   599
        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
   600
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   601
        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
   602
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   603
    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
   604
    
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
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
   607
    ldtgen = LdtUtils()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   608
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
   609
    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
   610
220
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   611
    library = doc.xpath('/iri/files/library')[0]
264
47c83e79e3c4 Improve css + fix minor bugs
verrierj
parents: 263
diff changeset
   612
    for c in Content.safe_objects.all():
220
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   613
        elem = lxml.etree.SubElement(library, 'file')
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   614
        elem.set('src', c.iri_url())
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   615
        elem.set('video', c.videopath)
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   616
        elem.set('title', c.title)
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   617
        elem.set('author', '')
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   618
        elem.set('category', '')
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   619
        elem.set('pict', '')
74738cf15d99 Contents can be added in Ligne de temps
verrierj
parents: 217
diff changeset
   620
        elem.set('img', '')
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   621
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   622
    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
   623
    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
   624
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   625
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   626
    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
   627
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   628
       
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   629
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
   630
    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
   631
    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
   632
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   633
    
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
   634
    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
   635
    
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
   636
    doc = lxml.etree.fromstring(project.ldt)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   637
    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
   638
    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
   639
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   640
    return resp
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
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   643
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
   644
    
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
   645
    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
   646
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   647
    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
   648
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   649
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   650
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
   651
        
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
   652
    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
   653
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   654
    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
   655
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   656
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   657
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   658
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
   659
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   660
    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
   661
        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
   662
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   663
    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
   664
    if mimetype is None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   665
        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
   666
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   667
        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
   668
    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
   669
        mimetype += "; charset=utf-8" 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   670
    resp = HttpResponse(mimetype=mimetype)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   671
    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
   672
    resp['Pragma'] = 'no-cache'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   673
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   674
    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
   675
    if indent is None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   676
        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
   677
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   678
        indent = int(indent)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   679
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   680
    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
   681
    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
   682
    escape_bool = False
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   683
    if escape_str:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   684
        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
   685
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   686
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   687
    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
   688
    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
   689
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   690
    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
   691
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   692
    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
   693
        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
   694
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   695
    if escape_bool:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   696
        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
   697
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   698
    resp.write(json_str)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   699
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   700
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   701
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   702
def project_annotations_rdf(request, ldt_id):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   703
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
   704
    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
   705
    
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   706
    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
   707
        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
   708
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   709
    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
   710
    if mimetype is None:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   711
        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
   712
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   713
        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
   714
    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
   715
        mimetype += "; charset=utf-8" 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   716
    resp = HttpResponse(mimetype=mimetype)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   717
    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
   718
    resp['Pragma'] = 'no-cache'
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
    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
   721
    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
   722
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   723
    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
   724
    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
   725
    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
   726
    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
   727
    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
   728
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   729
    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
   730
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   731
    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
   732
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   733
    for annotation in annotations:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   734
        uri = u""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   735
        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
   736
            uri = unicode(annotation['uri'])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   737
        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
   738
        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
   739
        if annotation['title']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   740
            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
   741
        if annotation['desc']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   742
            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
   743
        if annotation['tags']:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   744
            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
   745
                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
   746
        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
   747
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   748
    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
   749
    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
   750
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   751
    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
   752
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   753
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   754
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   755
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
   756
    if request.method == "POST":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   757
        ldt = request.POST['ldt']
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   758
        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
   759
        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
   760
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   761
        #save xml ldt
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   762
        ldtproject.ldt = ldt
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
        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
   765
        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
   766
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   767
        #set new title
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   768
        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
   769
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   770
        #get new content list
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   771
        new_contents = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   772
        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
   773
        for medianode in result:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   774
            id = medianode.get("id")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   775
            new_contents.append(id)
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
        #set new content list
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   778
        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
   779
            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
   780
                ldtproject.contents.remove(c)
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
        ldtproject.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   783
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   784
        ldt = ''
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   785
        new_contents = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   786
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   787
    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
   788
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   789
@login_required
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   790
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
   791
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   792
    ldt.publish()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   793
    ldt.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   794
    redirect = boolean_convert(redirect)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   795
    if redirect:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   796
        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
   797
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   798
        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
   799
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   800
@login_required
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   801
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
   802
    ldt = get_object_or_404(Project.safe_objects, ldt_id=id)
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   803
    ldt.unpublish()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   804
    ldt.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   805
    redirect = boolean_convert(redirect)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   806
    if redirect:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   807
        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
   808
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   809
        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
   810
    
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
def index(request, url):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   813
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   814
    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
   815
    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
   816
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   817
    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
   818
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   819
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   820
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
   821
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   822
    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
   823
    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
   824
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
   825
    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
   826
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   827
    ldtgen = LdtUtils()
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
   828
    doc = ldtgen.generate_ldt(contentList, title=contentList[0].title, startSegment=startSegment)
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   829
    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
   830
    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
   831
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   832
    return resp
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   833
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   834
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   835
def loading(request): 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   836
    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
   837
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   838
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   839
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   840
def create_project(request, 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
   841
    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
   842
    contents = [ content, ]
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   843
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
225
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   844
    redirect_to = ''
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   845
    form_status = "none"
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   846
    
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   847
    if request.method == "POST" :        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   848
        form = AddProjectForm(request.POST)
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
   849
        
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   850
        if form.is_valid():
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   851
            user = request.user
179
03007a7c14ca Corrected bug in description display
verrierj
parents: 178
diff changeset
   852
            project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents, description=form.cleaned_data['description'])
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   853
            form_status = "saved" 
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   854
            assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], user)
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   855
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   856
            # 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
   857
            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
   858
            if is_gecko :
225
691a394a7afd Improve project creation window
verrierj
parents: 220
diff changeset
   859
                redirect_to = reverse('index_project_full', args=[project.ldt_id])
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   860
            else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   861
                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
   862
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   863
        form = AddProjectForm()
263
eba92ea32281 Ask confirmation when user leaves a group
verrierj
parents: 262
diff changeset
   864
        
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   865
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status': form_status, 'contents':contents,'groups' : groups,
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   866
                                                                'redirect_to': redirect_to, 'create_project_action':reverse("ldt.ldt_utils.views.create_project", args=[iri_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
   867
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   868
@login_required
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   869
def update_project(request, ldt_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
   870
    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
   871
    contents = project.contents.all()
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
   872
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   873
    elem_list = User.objects.all()[0:20]
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   874
    elem_list = [{'name': e.username, 'id': e.id, 'type': 'user'} for e in elem_list]
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
   875
    member_list, admin_list = get_userlist_model(project, request.user)
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   876
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   877
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   878
        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
   879
        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
   880
            errors = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   881
            if project.state == 2:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   882
                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
   883
                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
   884
                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
   885
            else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   886
                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
   887
                title = _("confirm deletion")
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   888
            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
   889
        elif submit_action == "delete":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   890
            if project.state != 2:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   891
                project.delete()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   892
            form_status = 'deleted'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   893
            form = AddProjectForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   894
        else:
262
1105a5ed9f8f Merge with d79097e98244a8f6611a950c95323517300eb4e4
verrierj
parents: 261 227
diff changeset
   895
            form_status = 'none' 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   896
            form = AddProjectForm(request.POST)
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   897
            
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
   898
            if form.is_valid():          
178
4b83c370dc8a Added project description and tooltip
verrierj
parents: 177
diff changeset
   899
                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
   900
                    project.title = form.cleaned_data['title']
178
4b83c370dc8a Added project description and tooltip
verrierj
parents: 177
diff changeset
   901
                    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
   902
                    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
   903
                    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
   904
                    res[0].set("title", project.title)
179
03007a7c14ca Corrected bug in description display
verrierj
parents: 178
diff changeset
   905
                    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
   906
                    project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   907
                    project.save()                    
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
   908
                    
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   909
                assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], request.user)
262
1105a5ed9f8f Merge with d79097e98244a8f6611a950c95323517300eb4e4
verrierj
parents: 261 227
diff changeset
   910
                form_status = "saved"
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   911
    else:
179
03007a7c14ca Corrected bug in description display
verrierj
parents: 178
diff changeset
   912
        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
   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'
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
   915
       
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
   916
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups, 'elem_list': elem_list, 
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
   917
                                                                'ldt_id': ldt_id, 'contents':contents, 'member_list': member_list, 'admin_list': admin_list,
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
   918
                                                                '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
   919
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   920
@login_required
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   921
def copy_project(request, ldt_id, group_id=None): 
182
b7add86c2772 Resized modal windows #3 working on Firefox, Chrome, IE8 + update jQuery
verrierj
parents: 181
diff changeset
   922
    
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
   923
    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
   924
    if request.method == "POST" :
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   925
        form = CopyProjectForm(request.POST)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   926
        if form.is_valid():
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   927
            user = request.user
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   928
            group_id = form.cleaned_data['group']
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   929
            group = Group.objects.get(id=group_id) if group_id else None
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   930
            project = project.copy_project(title=form.cleaned_data['title'], user=user, group=group)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   931
            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
   932
            if is_gecko:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   933
                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
   934
            else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   935
                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
   936
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   937
        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
   938
    # 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
   939
    target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
   940
    return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project, 'group_id':group_id, 'target_parent':target_parent}, context_instance=RequestContext(request))
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   941
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   942
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
   943
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
   944
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   945
    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
   946
        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
   947
        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
   948
        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
   949
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   950
        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
   951
        instance_content = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   952
        instance_media = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   953
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   954
    form_status = 'none'        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   955
    if request.method == "POST":
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 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
   958
            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
   959
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   960
            content_instance_val = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   961
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   962
        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
   963
            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
   964
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   965
            media_instance_val = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   966
        #add prefix
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   967
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   968
        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
   969
            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
   970
                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
   971
                del(dict[key])
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   972
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   973
        add_prefix(content_instance_val, "content")
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   974
        add_prefix(media_instance_val, "media")     
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   975
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   976
        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
   977
            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
   978
            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
   979
            media_instance_val[k] = value
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   980
            
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   981
        content_instance_val['read_list'] = request.POST.getlist('read_list')
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   982
        content_instance_val['write_list'] = request.POST.getlist('write_list')
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
   983
            
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   984
        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
   985
        media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   986
                
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   987
        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
   988
        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
   989
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   990
        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
   991
        
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
   992
        if media_valid and content_valid:
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   993
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   994
            # 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
   995
            cleaned_data = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   996
            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
   997
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
   998
            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
   999
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1000
            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
  1001
                media = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1002
            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
  1003
                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
  1004
                created = False
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1005
            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
  1006
                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
  1007
                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
  1008
                    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
  1009
                # 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
  1010
                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
  1011
                    cleaned_data['videopath'] = ''
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1012
                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
  1013
            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
  1014
                # copy file
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1015
                #complet src
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1016
                destination_file = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1017
                source_file = None
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1018
                try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1019
                    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
  1020
                        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
  1021
                        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
  1022
                        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
  1023
                        if not source_filename:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1024
                            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
  1025
                    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
  1026
                        #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
  1027
                        # 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
  1028
                        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
  1029
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1030
                    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
  1031
                    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
  1032
                    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
  1033
                    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
  1034
                    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
  1035
                        extension = ""
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1036
                        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
  1037
                    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1038
                        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
  1039
                    i = 0
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1040
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1041
                    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
  1042
                        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
  1043
                        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
  1044
                        i += 1
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1045
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1046
                    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
  1047
                        # 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
  1048
                        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
  1049
                        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
  1050
                        while chunck:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1051
                            destination_file.write(chunck)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1052
                            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
  1053
                        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1054
                    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
  1055
                        # 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
  1056
                        # 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
  1057
                        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
  1058
                            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
  1059
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1060
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1061
                    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
  1062
                    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
  1063
                        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
  1064
                    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1065
                        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
  1066
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1067
                    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1068
                except Exception as inst:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1069
                    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
  1070
                    form_status = "error"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1071
                    #set error for form
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1072
                    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
  1073
                        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
  1074
                        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
  1075
                    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
  1076
                        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
  1077
                        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
  1078
                finally:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1079
                    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
  1080
                        if destination_file:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1081
                            destination_file.close()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1082
                        if source_file:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1083
                            source_file.close()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1084
                
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1085
                
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1086
                if form_status != "error":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1087
                    #try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1088
                    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
  1089
                    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
  1090
                        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
  1091
                    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
  1092
                    if not mimetype:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1093
                        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
  1094
                    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
  1095
                    media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data) #@UndefinedVariable
265
491d057cbfd2 Fix bug when selecting media in content creation window
verrierj
parents: 264
diff changeset
  1096
                    assign('view_media', request.user, media)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1097
                else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1098
                    media = None
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
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1101
            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
  1102
                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
  1103
                    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
  1104
                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
  1105
                if not mimetype:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1106
                    mimetype = mimetypes.guess_type(media.src)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1107
                media.mimetype_field = mimetype
266
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1108
                assign('view_media', request.user, media)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1109
                assign('change_media', request.user, media)
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1110
                media.save()                 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1111
            
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1112
            if form_status != "error": 
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1113
                content_defaults = {}
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1114
                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
  1115
                content_defaults['media_obj'] = media
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1116
                
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1117
                for key in ["media_input_type", "groups", "is_public", "read_list", "write_list" ]:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1118
                    del content_defaults[key]
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1119
                     
248
bc86d130b834 Content edit window is not displayed when content is not editable
verrierj
parents: 247
diff changeset
  1120
                content, created = Content.safe_objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults) #@UndefinedVariable
260
3d9cb9b6ff8d Add permission form to content
verrierj
parents: 256
diff changeset
  1121
                
3d9cb9b6ff8d Add permission form to content
verrierj
parents: 256
diff changeset
  1122
                assign('change_content', request.user, content)
3d9cb9b6ff8d Add permission form to content
verrierj
parents: 256
diff changeset
  1123
                assign('view_content', request.user, content)
266
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1124
                everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1125
                        
266
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1126
                if content_form.cleaned_data['is_public']:
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1127
                    assign('view_content', everyone, content)
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1128
                else:
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1129
                    remove_perm('view_content', everyone, content)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1130
                    assign_perm_to_obj(content, content_form.cleaned_data['read_list'], content_form.cleaned_data['write_list'], request.user)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1131
                if not created:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1132
                    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
  1133
                        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
  1134
                content.save()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1135
                form_status = 'saved'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1136
                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
  1137
                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
  1138
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1139
            form_status = 'error'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1140
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1141
        form_status = 'empty'
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1142
        initial = { 'media_input_type':"link"}
266
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1143
        if instance_content:
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1144
            initial['is_public'] = instance_content.is_public
122
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
        content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
265
491d057cbfd2 Fix bug when selecting media in content creation window
verrierj
parents: 264
diff changeset
  1147
        media_form = MediaForm(prefix="media", instance=instance_media)  
491d057cbfd2 Fix bug when selecting media in content creation window
verrierj
parents: 264
diff changeset
  1148
                
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1149
        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
  1150
            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
  1151
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1152
    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
  1153
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1154
@login_required
269
4b8042fc3d33 Moved Share to form to security module
verrierj
parents: 268
diff changeset
  1155
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
  1156
    submit_action = request.REQUEST.get("submit_button", False) 
260
3d9cb9b6ff8d Add permission form to content
verrierj
parents: 256
diff changeset
  1157
    groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1158
    elem_list = [{'name': u.username, 'id': u.id, 'type': 'user'} for u in User.objects.all()[0:20]]
260
3d9cb9b6ff8d Add permission form to content
verrierj
parents: 256
diff changeset
  1159
    
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1160
    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
  1161
        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
  1162
        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
  1163
            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
  1164
            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
  1165
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1166
            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
  1167
            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
  1168
        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
  1169
    elif submit_action == "delete":
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1170
        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
  1171
        form_status = "deleted"
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1172
        content_form = ContentForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1173
        media_form = MediaForm()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1174
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1175
        content_form, media_form, form_status = write_content_base(request, iri_id)
265
491d057cbfd2 Fix bug when selecting media in content creation window
verrierj
parents: 264
diff changeset
  1176
        
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1177
    if iri_id:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1178
        create_content_action = reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1179
        member_list, admin_list = get_userlist_model(Content.objects.get(iri_id=iri_id), request.user)
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1180
    else:
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1181
        member_list = admin_list = []
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1182
        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
  1183
    
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1184
    session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1185
    cookie_name = settings.SESSION_COOKIE_NAME    
266
a35924820af7 Contents can be published for everyone
verrierj
parents: 265
diff changeset
  1186
    content_form.fields["media_obj"].queryset = Media.safe_objects.all()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1187
    
260
3d9cb9b6ff8d Add permission form to content
verrierj
parents: 256
diff changeset
  1188
    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,
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1189
                                                                    'elem_list': elem_list, 'member_list': member_list, 'admin_list': admin_list,  'iri_id': iri_id, 'session_key':session_key, 'cookie_name':cookie_name}, 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
  1190
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1191
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1192
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
  1193
    errors = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1194
    titles = []
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1195
    if not iri_id:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1196
        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
  1197
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1198
    if iri_id:
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
  1199
        for content in Content.safe_objects.filter(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
  1200
            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
  1201
            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
  1202
            projects_nb = len(projects)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1203
            if projects_nb > 0:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1204
                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
  1205
                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
  1206
 
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1207
    return errors, titles
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1208
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1209
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1210
@login_required
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1211
def delete_content(request, iri_id=None):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1212
    if not iri_id:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1213
        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
  1214
        
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1215
    if iri_id:
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
  1216
        Content.safe_objects.get(iri_id=iri_id).delete()
122
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1217
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1218
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1219
def upload(request):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1220
    if request.method == 'POST':
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1221
        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
  1222
            # 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
  1223
            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
  1224
            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
  1225
            # 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
  1226
            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
  1227
            # 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
  1228
            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
  1229
                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
  1230
            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
  1231
            # 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
  1232
            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
  1233
                os.remove(destination_filepath)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1234
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1235
            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
  1236
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1237
            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
  1238
                destination_file.write(chunk)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1239
            destination_file.close()
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1240
            
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1241
        # 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
  1242
        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
  1243
    else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1244
        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
  1245
167
fe00e7302efe Change class and functions names to follow PEP8 formatting standards
verrierj
parents: 128
diff changeset
  1246
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
  1247
    # 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
  1248
    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
  1249
    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
  1250
        os.remove(file_path)
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1251
    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
  1252
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1253
def get_duration(request):
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1254
    try:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1255
        # 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
  1256
        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
  1257
        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
  1258
            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
  1259
            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
  1260
            dur_arr = m.group(1).split(":")
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1261
            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
  1262
            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
  1263
            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
  1264
        else:
f3a013f66974 Add search form, displaying the results in a regular LDT template. Update language files.
cavaliet
parents: 116
diff changeset
  1265
            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
  1266
    except Exception as inst:
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1267
        return HttpResponse(str(inst), mimetype="text/plain")
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1268
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1269
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1270
@login_required
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1271
def get_group_projects(request):
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1272
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1273
    # Get group, user and project_list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1274
    grp = Group.objects.get(id=request.POST["id_group"])  #@UndefinedVariable
247
f98f1a6e15f1 Add a group to contain published projects
verrierj
parents: 245
diff changeset
  1275
    everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
251
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
  1276
    project_list = get_objects_for_group(grp, 'ldt_utils.view_project') | get_objects_for_group(everyone, 'ldt_utils.view_project').filter(owner__in=[grp])
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
  1277
    project_list = add_change_attr(request.user, project_list)
81417fd477b0 Display specific tooltip when project edition is not allowed
verrierj
parents: 248
diff changeset
  1278
    
127
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1279
    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
  1280
    
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1281
    # render list
854f0305d866 First step of group management : tab, template, quick search, css.
cavaliet
parents: 125
diff changeset
  1282
    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
  1283
                              {'projects': project_list, 'show_username':True,
256
fd20ce3c5fbe Project are copied in the group they are displayed in group page
verrierj
parents: 255
diff changeset
  1284
                               'is_gecko': is_gecko, 'group_id': grp.id},
181
12e279e0253c Added loading bar #16 + groupped search results by project
verrierj
parents: 179
diff changeset
  1285
                              context_instance=RequestContext(request))
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1286
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1287
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1288
def create_group(request):
252
83eea387fe59 Field is_regular can be changed in admin pages, non regular users cann not change, edit or create groups
verrierj
parents: 251
diff changeset
  1289
    if not request.user.is_regular:
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1290
        return HttpResponseServerError('<h1>User can not leave a group.</h1>')
263
eba92ea32281 Ask confirmation when user leaves a group
verrierj
parents: 262
diff changeset
  1291
    query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1292
    user_list = User.objects.exclude(query)[0:20]
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
  1293
    user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1294
    form_status = ''
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1295
    
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1296
    if request.method == 'POST':
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1297
        form = GroupAddForm(request.POST)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1298
        
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1299
        if form.is_valid():          
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1300
            name = form.cleaned_data['name']
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1301
            members_list = form.cleaned_data['read_list']
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1302
            admin_list = form.cleaned_data['write_list']            
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1303
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1304
            group = Group.objects.create(name=name)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1305
            group.save()
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1306
            assign('change_group', request.user, group)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1307
            
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1308
            for elem in members_list:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1309
                if hasattr(elem, 'username'):
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1310
                    elem.groups.add(group)
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1311
                    if elem in admin_list:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1312
                        assign('change_group', elem, group)
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1313
                        
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1314
            request.user.groups.add(group)             
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1315
            form_status = 'saved' 
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1316
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1317
    else:
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1318
        form = GroupAddForm()      
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1319
    
268
c0c161736794 Projects can be shared with users and groups. Does not work with contents yet, still some bugs in templates
verrierj
parents: 267
diff changeset
  1320
    return render_to_response("ldt/ldt_utils/create_group.html", {'form' : form, 'form_status' : form_status, 'elem_list' : user_list}, context_instance=RequestContext(request))
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1321
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1322
@login_required
252
83eea387fe59 Field is_regular can be changed in admin pages, non regular users cann not change, edit or create groups
verrierj
parents: 251
diff changeset
  1323
def update_group(request, group_id):
83eea387fe59 Field is_regular can be changed in admin pages, non regular users cann not change, edit or create groups
verrierj
parents: 251
diff changeset
  1324
    if not request.user.is_regular:
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1325
        return HttpResponseServerError('<h1>User can not update a group.</h1>')
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1326
    
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1327
    group = get_object_or_404(Group, id=group_id)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1328
      
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1329
    if not request.user.has_perm('change_group', group):
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1330
        form_status = 'saved'
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1331
        return render_to_response("ldt/ldt_utils/create_group.html", {'form_status' : form_status}, context_instance=RequestContext(request))
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1332
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1333
    query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1334
    user_list = User.objects.exclude(query)[0:20]
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1335
    user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1336
    form_status = ''     
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1337
            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1338
    if request.method == "POST":
237
2c37496369db Moved manager from init file to security
verrierj
parents: 235
diff changeset
  1339
        form = GroupAddForm(request.POST, instance=group)
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1340
        submit_action = request.REQUEST.get("submit_button", False)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1341
        
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1342
        if submit_action == 'delete':
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1343
            remove_perm('change_group', request.user, group)
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1344
            group.delete()
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1345
            form_status = 'deleted'
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1346
        else:            
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1347
            if form.is_valid():
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1348
                name = form.cleaned_data['name']
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1349
                new_member_list = form.cleaned_data['read_list']
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1350
                old_member_list = group.user_set.exclude(id=request.user.id)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1351
                admin_list = form.cleaned_data['write_list']
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1352
                group.name = name
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1353
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1354
                for user in new_member_list:
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1355
                    if not hasattr(user, 'username'):
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1356
                        raise AttributeError('new_member_list should only contain users')
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1357
                    if user != request.user:                      
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1358
                        group.user_set.add(user)
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1359
                        if user in admin_list:
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1360
                            assign('change_group', user, group)
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1361
                        else:
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1362
                            remove_perm('change_group', user, group)
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1363
                        
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1364
                for user in old_member_list:
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1365
                    if user not in new_member_list:
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1366
                        group.user_set.remove(user)
238
b738eb0717de Improved forms about group management
verrierj
parents: 237
diff changeset
  1367
                        remove_perm('change_group', user, group)
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1368
                                        
228
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1369
                group.save()
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1370
                form_status = 'saved'       
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1371
                    
94fdb72b7d56 Users can add their own groups
verrierj
parents: 206
diff changeset
  1372
    else:
271
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1373
        form = GroupAddForm(initial={'name':unicode(group.name)})    
99347d5275b6 Contents can be shared with groups
verrierj
parents: 269
diff changeset
  1374
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1375
    member_list, admin_list = get_userlist_group(group, request.user)
267
e00779f0dcba Change form for group creation / update
verrierj
parents: 266
diff changeset
  1376
    return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status,
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1377
                                                                  'elem_list' : user_list, 'member_list': member_list, 'admin_list': admin_list},
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1378
                                                                  context_instance=RequestContext(request))
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1379
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1380
@login_required
245
953228fcbb56 Permissions are checked in search results
verrierj
parents: 243
diff changeset
  1381
def leave_group(request, group_id, redirect=True):
252
83eea387fe59 Field is_regular can be changed in admin pages, non regular users cann not change, edit or create groups
verrierj
parents: 251
diff changeset
  1382
    if not request.user.is_regular:
255
c6e09aec199e Imrpove js of group page
verrierj
parents: 252
diff changeset
  1383
        return HttpResponseServerError('<h1>User can not leave a group.</h1>')
252
83eea387fe59 Field is_regular can be changed in admin pages, non regular users cann not change, edit or create groups
verrierj
parents: 251
diff changeset
  1384
    
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1385
    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
  1386
    redirect = boolean_convert(redirect)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1387
    
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1388
    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
  1389
        request.user.groups.remove(group)
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1390
        
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1391
    if redirect:        
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1392
        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
  1393
    else:
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1394
        return HttpResponse(simplejson.dumps({'res':True}, ensure_ascii=False), mimetype='application/json')
273
23a756e0bfee Fix bug in group form
verrierj
parents: 271
diff changeset
  1395
         
235
e5e5c4aeede9 User can leave groups and code is cleaner when updating project permissions
verrierj
parents: 233
diff changeset
  1396