src/ldt/ldt/ldt_utils/views/workspace.py
author verrierj
Wed, 01 Feb 2012 11:53:41 +0100
changeset 495 1c50afe6a949
parent 488 403f92f24144
child 511 2edec83f1bd8
permissions -rw-r--r--
Search results with the same segment.element_id are displayed correctly
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     1
from django.conf import settings
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     2
from django.contrib.auth.decorators import login_required
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     3
from django.contrib.auth.models import Group
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     4
from django.core.cache import cache
332
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
     5
from django.core.urlresolvers import reverse#, resolve
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     6
from django.core.paginator import Paginator, InvalidPage, EmptyPage
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     7
from django.http import (HttpResponseRedirect, HttpResponseForbidden )
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
     8
from ldt.indexation import get_results_with_context, highlight_documents
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     9
from django.shortcuts import render_to_response
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    10
from django.template import RequestContext
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    11
from django.template.loader import render_to_string
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    12
from django.utils.html import escape
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    13
from django.utils.translation import ugettext as _
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    14
from ldt.ldt_utils.forms import SearchForm
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
    15
from ldt.ldt_utils.models import Content, Project, Segment
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    16
from ldt.ldt_utils.utils import boolean_convert
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    17
from ldt.security.utils import add_change_attr, get_userlist
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    18
from lxml.html import fragment_fromstring
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    19
from ldt.ldt_utils.projectserializer import ProjectSerializer
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    20
from operator import itemgetter
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    21
from itertools import groupby
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    22
import base64
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    23
import django.core.urlresolvers
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    24
import ldt.auth as ldt_auth
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    25
import lxml.etree
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    26
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    27
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    28
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    29
def home(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    30
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    31
    # list of contents
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    32
    content_list = add_change_attr(request.user, Content.safe_objects.all()) #@UndefinedVariable
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    33
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    34
    # get list of projects owned by the current user
392
65c1898141da Front projects are created by admins
verrierj
parents: 384
diff changeset
    35
    project_list = add_change_attr(request.user, Project.safe_objects.filter(owner=request.user)) #@UndefinedVariable
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    36
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    37
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    38
    
332
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    39
    # Resolve a URL
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    40
    #project_api_view, project_api_args, project_api_kwargs = resolve('/api/ldt/projects/c8448f21-272d-11e1-876b-c8bcc896c290.json')
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    41
    #match = resolve('/api/ldt/projects/c8448f21-272d-11e1-876b-c8bcc896c290.json')
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    42
    
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    43
    # Print the URL pattern that matches the URL
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    44
    #print match.url_name
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    45
    
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    46
    # render list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    47
    return render_to_response("ldt/ldt_utils/workspace.html",
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    48
                              {'contents': content_list, 'projects': project_list,
332
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    49
                               'is_gecko': is_gecko, #'project_api_url':"match.url_name",
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    50
                               #'project_api_view':match.url_name,'project_api_args':"project_api_args",'project_api_kwargs':"project_api_kwargs"
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    51
                               },
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    52
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    53
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    54
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    55
def groups(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    56
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    57
    # get list of all published projects
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    58
    group_list = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    59
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    60
    group_list = sorted(group_list.all(), key=lambda group: group.name.lower())    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    61
    group_list = add_change_attr(request.user, group_list)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    62
342
17d615b49a91 Extend image fields size to 200 characters + minor bugs
verrierj
parents: 332
diff changeset
    63
    can_add_group = request.user.has_perm('auth.add_group')
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    64
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    65
    # render list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    66
    return render_to_response("ldt/ldt_utils/groups.html",
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    67
                              {'groups': group_list,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    68
                               'is_gecko': is_gecko,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    69
                               'can_add_group': can_add_group},
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    70
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    71
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    72
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    73
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    74
def published_project(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    75
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    76
    # get list of all published projects
384
0e410517b311 Front projects are hidden from user interface
verrierj
parents: 349
diff changeset
    77
    project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front') #@UndefinedVariable
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    78
    # Search form
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    79
    form = SearchForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    80
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    81
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    82
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    83
    # render list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    84
    return render_to_response("ldt/ldt_utils/published_projects.html",
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    85
                              {'projects': project_list, 'form': form,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    86
                               'is_gecko': is_gecko},
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    87
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    88
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    89
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    90
def popup_embed(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    91
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    92
    json_url = request.GET.get("json_url")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    93
    player_id = request.GET.get("player_id")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    94
    ldt_id = request.GET.get("ldt_id")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    95
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    96
    project = Project.safe_objects.get(ldt_id=ldt_id); #@UndefinedVariable
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    97
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    98
    stream_mode = project.stream_mode
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    99
    if stream_mode != "video":
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   100
        stream_mode = 'radio'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   101
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   102
    player_width = 650
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   103
    player_height = 480
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   104
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   105
    if stream_mode == 'radio':
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   106
        player_height = 1
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   107
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   108
    if not ldt_auth.check_access(request.user, project):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   109
        return HttpResponseForbidden(_("You can not access this project"))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   110
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   111
    ps = ProjectSerializer(project, from_contents=False, from_display=True)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   112
    annotations = ps.get_annotations(first_cutting=True)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   113
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   114
    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}
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   115
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   116
    embed_rendered = dict((typestr,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   117
                           (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))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   118
                           for typestr in ('player', 'seo_body', 'seo_meta', 'links'))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   119
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   120
    rend_dict['embed_rendered'] = embed_rendered
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   121
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   122
    return render_to_response("ldt/ldt_utils/embed_popup.html",
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   123
                              rend_dict,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   124
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   125
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   126
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   127
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   128
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   129
def share_filter(request, filter, use_groups=False):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   130
    use_groups = boolean_convert(use_groups)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   131
    if not filter or len(filter) == 0:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   132
        raise AttributeError("filter should be a string")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   133
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   134
    filter = filter[1:]    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   135
    resp = get_userlist(request.user, filter=filter)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   136
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   137
    if use_groups:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   138
        groups = Group.objects.filter(name__icontains=filter).exclude(name=settings.PUBLIC_GROUP_NAME)[0:20]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   139
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   140
        for g in groups:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   141
            resp.append({'name': g.name, 'id': g.id, 'type': 'group'})
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   142
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   143
    resp = sorted(resp, key=lambda elem: elem['name'].lower())
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   144
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   145
    return render_to_response("ldt/ldt_utils/partial/sharewith.html", {'elem_list' : resp}, context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   146
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   147
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   148
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   149
def search_form(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   150
    form = SearchForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   151
    return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   152
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   153
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   154
@login_required
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   155
def search_index(request, front_template=False):
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   156
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   157
    sform = SearchForm(request.POST)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   158
    if sform.is_valid():
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   159
        search = sform.cleaned_data["search"]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   160
        queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   161
        field = request.POST["field"]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   162
        language_code = request.LANGUAGE_CODE[:2]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   163
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   164
        if request.POST.has_key("ldt_pres"):
321
c68744402249 Change urls used in reverse to be compatible with the new organization
verrierj
parents: 319
diff changeset
   165
            url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr])
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   166
            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))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   167
        else:
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   168
            results = get_results_with_context(field, search) 
469
8004f0d1a1bf Fix bug in search results for nan-admin users
verrierj
parents: 452
diff changeset
   169
            
470
b1dd78b59750 add all polemic attributes and polemic attribute rates on contents
verrierj
parents: 469
diff changeset
   170
            Segment.safe_objects.check_perm = False # no permission policy for segments
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   171
            all_segments = Segment.safe_objects.filter(element_id__in=[e['element_id'] for e in results])
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   172
            all_projects = Project.safe_objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2)
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   173
            all_contents = Content.safe_objects.filter(iri_id__in=[e['iri_id'] for e in results])
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   174
            viewable_projects_id = [p.ldt_id for p in all_projects]
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   175
            
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   176
            complete_results = []           
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   177
            results.sort(key=lambda k: k['iri_id'])
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   178
            
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   179
            for iri_id, item in groupby(results, itemgetter('iri_id')):
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   180
                content = filter(lambda e: e.iri_id == iri_id, all_contents)[0]
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   181
                if content.description is None:
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   182
                    content.description = ''
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   183
                    
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   184
                all_related_segments = list(item)
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   185
                
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   186
                valid_segments = []
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   187
                for s in all_related_segments:
495
1c50afe6a949 Search results with the same segment.element_id are displayed correctly
verrierj
parents: 488
diff changeset
   188
                    segment = [seg for seg in all_segments if seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['decoupage_id'] and seg.ensemble_id == s['ensemble_id'] ][0]
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   189
                    
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   190
                    segment.score = s['score']
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   191
                    segment.lucene_id = s['lucene_id']
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   192
                    segment.context = s['context']
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   193
                    segment.context_tags = s['tags']
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   194
                                        
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   195
                    if not s['project_id']:
488
403f92f24144 Bugfixes in search page + update settings metadataplayer
verrierj
parents: 470
diff changeset
   196
                        segment.project_id = '_'
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   197
                        valid_segments.append(segment)
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   198
                    elif s['project_id'] in viewable_projects_id:
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   199
                        valid_segments.append(segment)
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   200
                
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   201
                # If all segments found belong to unpublished projects or projects
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   202
                # the current user is not allowed to see
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   203
                if not valid_segments:
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   204
                    continue
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   205
                
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   206
                score = sum([seg.score for seg in valid_segments])
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   207
                complete_results.append({
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   208
                                         'list': valid_segments,
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   209
                                         'score': score,
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   210
                                         'content': content,                                         
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   211
                                         })
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   212
                
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   213
      
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   214
            complete_results.sort(key=lambda k: k['score'])
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   215
                                
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   216
            cache.set('complete_results_%s' % request.user.username, complete_results)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   217
            cache.set('search_%s' % request.user.username, search)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   218
            cache.set('field_%s' % request.user.username, field)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   219
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   220
            paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   221
            page = 1
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   222
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   223
            try:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   224
                results = paginator.page(page)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   225
            except (EmptyPage, InvalidPage):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   226
                results = paginator.page(paginator.num_pages)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   227
            
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   228
            results.object_list = highlight_documents(results.object_list, search, field)            
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   229
            
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   230
            if front_template :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   231
                return render_to_response('front/front_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))
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   232
            else :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   233
                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))
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   234
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   235
    else:
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   236
        if front_template :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   237
            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.front.front_home'))
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   238
        else :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   239
            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project'))
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   240
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   241
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   242
def search_listing(request, front_template=False):
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   243
    if not cache.get('complete_results_%s' % request.user.username):
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   244
        if front_template :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   245
            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.front.front_home'))
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   246
        else :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   247
            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project'))
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   248
     
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   249
    complete_results = cache.get('complete_results_%s' % request.user.username)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   250
    search = cache.get('search_%s' % request.user.username)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   251
    field = cache.get('field_%s' % request.user.username)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   252
    paginator = Paginator(complete_results, settings.LDT_RESULTS_PER_PAGE)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   253
    language_code = request.LANGUAGE_CODE[:2]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   254
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   255
    try:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   256
        page = int(request.GET.get('page', '1'))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   257
    except ValueError:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   258
        page = 1
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   259
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   260
    try:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   261
        results = paginator.page(page)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   262
    except (EmptyPage, InvalidPage):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   263
        results = paginator.page(paginator.num_pages)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   264
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   265
    results.object_list = highlight_documents(results.object_list, search, field)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   266
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   267
    if front_template :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   268
        return render_to_response('front/front_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))
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   269
    else :
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 342
diff changeset
   270
        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))   
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   271
  
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   272
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   273
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   274
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   275
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   276
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   277
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   278
def loading(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   279
    return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   280
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   281