src/ldt/ldt/ldt_utils/views/workspace.py
author ymh <ymh.work@gmail.com>
Tue, 22 Jan 2013 09:41:36 +0100
changeset 1074 36f657714851
parent 1035 85322320d89c
child 1075 66c7a0826bd7
permissions -rw-r--r--
optimize adding an annotation
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.paginator import Paginator, InvalidPage, EmptyPage
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
     5
from django.core.urlresolvers import reverse #, resolve
1074
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
     6
from django.db import transaction
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
     7
from django.http import (HttpResponseForbidden, HttpResponseNotFound, 
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
     8
    HttpResponseRedirect)
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
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    13
from django.utils.safestring import mark_safe
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    14
from django.utils.translation import ugettext as _
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    15
from itertools import groupby
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    16
from ldt.indexation import get_results_with_context, highlight_documents
1074
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
    17
from ldt.ldt_utils import contentindexer
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
    18
from ldt.ldt_utils.forms import SearchForm
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    19
from ldt.ldt_utils.models import Content, Project, Segment
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    20
from ldt.ldt_utils.projectserializer import ProjectJsonSerializer
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    21
from ldt.ldt_utils.utils import boolean_convert
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    22
from ldt.ldt_utils.views.content import get_contents_page, get_content_tags
1074
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
    23
from ldt.ldt_utils.views.project import (get_projects_page, 
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
    24
    get_published_projects_page)
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    25
from ldt.security.utils import add_change_attr, get_userlist
1010
a8a42538ba0e modification of get_web_url to have less dependances and be usable in ldt_utils->models
grandjoncl
parents: 1008
diff changeset
    26
from ldt.utils.url import absstatic, absurl
a8a42538ba0e modification of get_web_url to have less dependances and be usable in ldt_utils->models
grandjoncl
parents: 1008
diff changeset
    27
from ldt.utils.web_url_management import get_web_url
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    28
from operator import itemgetter
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    29
import base64
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    30
import ldt.auth as ldt_auth
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
    31
import lxml.etree
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    32
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
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    35
def home(request):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    36
    
644
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    37
    num_page = 0
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    38
    # Prepare contents pagination
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    39
    content_nb, nb_ct_pages, content_list = get_contents_page(num_page, request.user)
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    40
    # get list of projects owned by the current user
644
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    41
    project_nb, nb_pj_pages, project_list = get_projects_page(num_page, request.user)
710
eea2dcb555c1 Content tag cloud and filter in workspace.
cavaliet
parents: 646
diff changeset
    42
    # Get the all tags list
eea2dcb555c1 Content tag cloud and filter in workspace.
cavaliet
parents: 646
diff changeset
    43
    tag_cloud = get_content_tags()
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    44
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    45
    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
    46
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    47
    # render list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    48
    return render_to_response("ldt/ldt_utils/workspace.html",
644
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    49
                              {'contents': content_list, 'nb_ct_pages': nb_ct_pages, 'content_nb': content_nb, 'current_content_page':float(num_page),
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    50
                               'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page),
710
eea2dcb555c1 Content tag cloud and filter in workspace.
cavaliet
parents: 646
diff changeset
    51
                               'tag_cloud': tag_cloud, 'is_gecko': is_gecko, #'project_api_url':"match.url_name",
332
c28d4dc49a50 add API interface to add annotation, with an ajax example in the comment.
cavaliet
parents: 321
diff changeset
    52
                               #'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
    53
                               },
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    54
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    55
644
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    56
    
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
    57
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    58
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    59
def groups(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    60
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    61
    # get list of all published projects
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    62
    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
    63
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    64
    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
    65
    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
    66
342
17d615b49a91 Extend image fields size to 200 characters + minor bugs
verrierj
parents: 332
diff changeset
    67
    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
    68
    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
    69
    # render list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    70
    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
    71
                              {'groups': group_list,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    72
                               'is_gecko': is_gecko,
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    73
                               'can_add_group': can_add_group},
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    74
                              context_instance=RequestContext(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
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    77
@login_required
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    78
def published_project(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    79
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    80
    # get list of all published projects
646
97f5db87d71c Enhance pagination with public project and quick search.
cavaliet
parents: 644
diff changeset
    81
    #project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front') #@UndefinedVariable
97f5db87d71c Enhance pagination with public project and quick search.
cavaliet
parents: 644
diff changeset
    82
    num_page = 0
97f5db87d71c Enhance pagination with public project and quick search.
cavaliet
parents: 644
diff changeset
    83
    project_nb, nb_pj_pages, project_list = get_published_projects_page(num_page)
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    84
    # Search form
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    85
    form = SearchForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    86
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    87
    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
    88
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    89
    # render list
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    90
    return render_to_response("ldt/ldt_utils/published_projects.html",
646
97f5db87d71c Enhance pagination with public project and quick search.
cavaliet
parents: 644
diff changeset
    91
                              {'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), 
97f5db87d71c Enhance pagination with public project and quick search.
cavaliet
parents: 644
diff changeset
    92
                               'form': form, 'is_gecko': is_gecko},
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    93
                              context_instance=RequestContext(request))
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    94
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
def popup_embed(request):
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
    json_url = request.GET.get("json_url")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    99
    player_id = request.GET.get("player_id")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   100
    ldt_id = request.GET.get("ldt_id")
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   101
    rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id)
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   102
    
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   103
    embed_rendered = dict((typestr,
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   104
                           (lambda s:escape(render_to_string("ldt/ldt_utils/partial/embed_%s.html" % (s), rend_dict, context_instance=RequestContext(request))))(typestr))
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   105
                           for typestr in ('seo_body', 'seo_meta', 'links'))
893
bd5f9dea9791 Embed code popup modified in order to be abble to display html5 player
grandjoncl
parents: 886
diff changeset
   106
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   107
    rend_dict['embed_rendered'] = embed_rendered
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   108
    return render_to_response("ldt/ldt_utils/embed_popup.html", rend_dict, context_instance=RequestContext(request))
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   109
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   110
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   111
def iframe_embed(request):
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   112
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   113
    project_id = request.GET.get("project_id")
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   114
    if not project_id:
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   115
        content_id = request.GET.get("content_id")
821
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   116
        try:
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   117
            content = Content.safe_objects.get(iri_id=content_id)
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   118
        except:
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   119
            return HttpResponseForbidden(_("The content does not exists or you are not allowed to access this content"))
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   120
        project = content.get_or_create_front_project()
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   121
        project_id = project.ldt_id
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   122
    if not project_id :
821
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   123
        return HttpResponseForbidden(_("Parameters project_id or content_id must be given in the url"))
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   124
        
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   125
    json_url = reverse("projectjson_id", args=[project_id])
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   126
    player_id = "player_project_" + project_id
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   127
    ldt_id = project_id
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   128
    rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id)
819
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   129
    
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   130
    # Manage iframe options
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   131
    if request.GET.has_key("player_height"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   132
        rend_dict["player_height"]=request.GET.get("player_height")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   133
    else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   134
        rend_dict["player_height"]=300
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   135
    if request.GET.has_key("player_width"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   136
        rend_dict["player_width"]=request.GET.get("player_width")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   137
    else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   138
        rend_dict["player_width"]=550
819
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   139
    if request.GET.has_key("polemic"):
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   140
        rend_dict["polemic"] = request.GET.get("polemic")
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   141
        if request.GET.has_key("polemic_defaultColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   142
            rend_dict["polemic_defaultColor"] = request.GET.get("polemic_defaultColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   143
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   144
            rend_dict["polemic_defaultColor"]="585858"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   145
        if request.GET.has_key("polemic_foundColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   146
            rend_dict["polemic_foundColor"] = request.GET.get("polemic_foundColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   147
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   148
            rend_dict["polemic_foundColor"]="fc00ff"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   149
        if request.GET.has_key("polemic_okColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   150
            rend_dict["polemic_okColor"] = request.GET.get("polemic_okColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   151
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   152
            rend_dict["polemic_okColor"] = "1d973d"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   153
        if request.GET.has_key("polemic_koColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   154
            rend_dict["polemic_koColor"] = request.GET.get("polemic_koColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   155
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   156
            rend_dict["polemic_koColor"]="ce0a15"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   157
        if request.GET.has_key("polemic_refColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   158
            rend_dict["polemic_refColor"] = request.GET.get("polemic_refColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   159
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   160
            rend_dict["polemic_refColor"] = "c5a62d"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   161
        if request.GET.has_key("polemic_qColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   162
            rend_dict["polemic_qColor"] = request.GET.get("polemic_qColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   163
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   164
            rend_dict["polemic_qColor"] = "036aae"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   165
            
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   166
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   167
    if request.GET.has_key("createannotation"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   168
        rend_dict["createannotation"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("createannotation").lower())
819
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   169
    if request.GET.has_key("show_mic_record"):
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   170
        rend_dict["show_mic_record"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_mic_record").lower())
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   171
        if rend_dict["show_mic_record"]:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   172
            rend_dict["createannotation"]=True
821
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   173
    if request.GET.has_key("annotations_list"):
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   174
        rend_dict["annotations_list"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("annotations_list").lower())
ca8127a4cdd5 add iframe annotation list feature.
cavaliet
parents: 819
diff changeset
   175
        rend_dict["player_width"] = 550
930
e107b2225680 configuration of embed code over
grandjoncl
parents: 929
diff changeset
   176
    if request.GET.has_key("tag_titles"):
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   177
        rend_dict["tag_titles"] = request.GET.get("tag_titles") 
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   178
    if request.GET.has_key("sparkline"):
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   179
        rend_dict["sparkline"] = request.GET.get("sparkline")
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   180
        if request.GET.has_key("sparkline_lineColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   181
            rend_dict["sparkline_lineColor"] = request.GET.get("sparkline_lineColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   182
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   183
            rend_dict["sparkline_lineColor"] = "7492b4"
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   184
        if request.GET.has_key("sparkline_fillColor"):
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   185
            rend_dict["sparkline_fillColor"] = request.GET.get("sparkline_fillColor")
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   186
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   187
            rend_dict["sparkline_fillColor"] = "aeaeb8"
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   188
    if request.GET.has_key("slideshare"):
928
f5fe14b94ef5 amelioration iframe embed
grandjoncl
parents: 927
diff changeset
   189
        rend_dict["slideshare"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("slideshare").lower())
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   190
    if request.GET.has_key("social"):
928
f5fe14b94ef5 amelioration iframe embed
grandjoncl
parents: 927
diff changeset
   191
        rend_dict["social"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("social").lower())     
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   192
        if request.GET.has_key("show_url"):
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   193
            rend_dict["show_url"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_url").lower())
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   194
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   195
            rend_dict["show_url"] = True    
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   196
        if request.GET.has_key("show_twitter"):
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   197
            rend_dict["show_twitter"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_twitter").lower())     
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   198
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   199
            rend_dict["show_twitter"] = True
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   200
        if request.GET.has_key("show_fb"):
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   201
            rend_dict["show_fb"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_fb").lower())     
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   202
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   203
            rend_dict["show_fb"] = True
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   204
        if request.GET.has_key("show_gplus"):
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   205
            rend_dict["show_gplus"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_gplus").lower())     
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   206
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   207
            rend_dict["show_gplus"] = True
929
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   208
        if request.GET.has_key("show_mail"):
a374c1724314 embed_config almost over
grandjoncl
parents: 928
diff changeset
   209
            rend_dict["show_mail"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("show_mail").lower())     
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   210
        else:
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   211
            rend_dict["show_mail"] = True
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   212
    if request.GET.has_key("annotation"):
928
f5fe14b94ef5 amelioration iframe embed
grandjoncl
parents: 927
diff changeset
   213
        rend_dict["annotation"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("annotation").lower())
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   214
    if request.GET.has_key("tweet"):
928
f5fe14b94ef5 amelioration iframe embed
grandjoncl
parents: 927
diff changeset
   215
        rend_dict["tweet"] ={'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("tweet").lower())
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   216
    if request.GET.has_key("segments"):
1022
7fa1389a1d1d default : segments widget is true
grandjoncl
parents: 1021
diff changeset
   217
        rend_dict["segments"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("segments").lower())
7fa1389a1d1d default : segments widget is true
grandjoncl
parents: 1021
diff changeset
   218
    else:
7fa1389a1d1d default : segments widget is true
grandjoncl
parents: 1021
diff changeset
   219
        rend_dict["segments"] = True
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   220
    if request.GET.has_key("tagcloud"):
928
f5fe14b94ef5 amelioration iframe embed
grandjoncl
parents: 927
diff changeset
   221
        rend_dict["tagcloud"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("tagcloud").lower())
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   222
    return render_to_response("ldt/ldt_utils/embed_iframe.html", rend_dict, context_instance=RequestContext(request))
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   223
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   224
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   225
def get_datas_for_embed(request, json_url, player_id, ldt_id):
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   226
    
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   227
    project = Project.safe_objects.get(ldt_id=ldt_id); #@UndefinedVariable
804
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   228
    project_contents = project.contents.all()
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   229
    content=project_contents[0]
1007
a6d47caa7fc0 creation of a function in order to avoid using settings.WEB_URL + reverse in the views. Function to get the web_url using site domain
grandjoncl
parents: 997
diff changeset
   230
    WEB_URL=get_web_url(request)
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   231
    iframe_url = mark_safe(WEB_URL+settings.BASE_URL+"ldtplatform/ldt/embediframe/?content_id="+content.iri_id+"&project_id="+ldt_id)
804
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   232
    external_url = None
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   233
    if content.src is not None:
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   234
        for external_src in settings.EXTERNAL_STREAM_SRC:
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   235
            if  external_src in content.src:
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   236
                external_url = content.src
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   237
                break
804
2ed891cf8c44 Correction of embed code generator. It takes the youtube/vimeo/dailymotion player when possible.
grandjoncl
parents: 726
diff changeset
   238
    
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   239
    stream_mode = project.stream_mode
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   240
    if stream_mode != "video":
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   241
        stream_mode = 'radio'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   242
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   243
    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
   244
        return HttpResponseForbidden(_("You can not access this project"))
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   245
    LANGUAGE_CODE=settings.LANGUAGE_CODE
886
3ccedd271e36 add to_cinelab serializer to api
cavaliet
parents: 876
diff changeset
   246
    ps = ProjectJsonSerializer(project, from_contents=True, from_display=True)
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   247
    annotations = ps.get_annotations(first_cutting=True)
819
d6b64df81b35 enhance iframe embed parameters.
cavaliet
parents: 817
diff changeset
   248
    rend_dict = {'json_url':json_url, 'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id, 'stream_mode': stream_mode, 
930
e107b2225680 configuration of embed code over
grandjoncl
parents: 929
diff changeset
   249
                'external_url': external_url,
927
1b2ea7f6cda0 Starting 'embed_config' branch
grandjoncl
parents: 876
diff changeset
   250
                 'polemic':False, 'show_mic_record':False, 'annotations_list':False, 'iframe_url':iframe_url, 'WEB_URL':WEB_URL,
995
94f9d36371f6 new template tag absstatic to have absolute url for static file and avoid using LDT_MEDIA_PREFIX
grandjoncl
parents: 937
diff changeset
   251
                'LANGUAGE_CODE':LANGUAGE_CODE}
817
ec35bc26b8c2 add iframe url for metadaplayer
cavaliet
parents: 804
diff changeset
   252
    return rend_dict
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   253
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
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   256
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
   257
    use_groups = boolean_convert(use_groups)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   258
    if not filter or len(filter) == 0:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   259
        raise AttributeError("filter should be a string")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   260
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   261
    filter = filter[1:]    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   262
    resp = get_userlist(request.user, filter=filter)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   263
            
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   264
    if use_groups:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   265
        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
   266
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   267
        for g in groups:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   268
            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
   269
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   270
    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
   271
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   272
    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
   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
def search_form(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   277
    form = SearchForm()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   278
    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
   279
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   280
@login_required
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   281
def search_index(request):
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   282
    language_code = request.LANGUAGE_CODE[:2]
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   283
    nb = 0
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   284
    results = []
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   285
    search = ''
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   286
    field = 'all'
997
947c8ad09bd6 change of method to have absolute url for static file in views
grandjoncl
parents: 995
diff changeset
   287
    colorurl=absstatic(request, "ldt/swf/ldt/pkg/color.xml")
947c8ad09bd6 change of method to have absolute url for static file in views
grandjoncl
parents: 995
diff changeset
   288
    i18nurl=absstatic(request, "ldt/swf/ldt/pkg/i18n")
947c8ad09bd6 change of method to have absolute url for static file in views
grandjoncl
parents: 995
diff changeset
   289
    baseurl=absstatic(request, "ldt/swf/ldt/")
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   290
    sform = SearchForm(request.GET)
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   291
    if sform.is_valid():
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   292
        search = sform.cleaned_data["search"]
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   293
        queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   294
        field = sform.cleaned_data["field"]
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   295
        page = sform.cleaned_data["page"] or 1
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   296
        ldt_pres = sform.cleaned_data["ldt_pres"]
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   297
        if ldt_pres:
1007
a6d47caa7fc0 creation of a function in order to avoid using settings.WEB_URL + reverse in the views. Function to get the web_url using site domain
grandjoncl
parents: 997
diff changeset
   298
            url = absurl(request, "ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr])
995
94f9d36371f6 new template tag absstatic to have absolute url for static file and avoid using LDT_MEDIA_PREFIX
grandjoncl
parents: 937
diff changeset
   299
            return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'colorurl': colorurl, 'i18nurl': i18nurl , 'language': language_code, 'baseurl': baseurl, 'url': url}, context_instance=RequestContext(request))
94f9d36371f6 new template tag absstatic to have absolute url for static file and avoid using LDT_MEDIA_PREFIX
grandjoncl
parents: 937
diff changeset
   300
        else:                                        
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   301
            results, nb, nb_segment = get_search_results(request, search, field, page)            
452
8e9494006e7b segment abstracts + content images can be retrieved directly from search results page
verrierj
parents: 392
diff changeset
   302
            
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   303
    return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : nb, 'nb_segment' : nb_segment, 'search' : search, 'field': field, 'colorurl': colorurl, 'i18nurl': i18nurl , 'language': language_code, 'baseurl': baseurl}, context_instance=RequestContext(request))
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   304
        
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   305
 
599
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   306
def get_search_results(request, search, field, page, content_list=None):
602
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   307
    # We parse the author if necessary. For author search to work in every case, we have to transform the query author:cheese shop into author:"CHEESE SHOP"
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   308
    if u'author:' in search.lower() :
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   309
        sub = search[7:]
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   310
        sub = sub.upper()
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   311
        if sub[0] != u'"':
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   312
            sub = u'"' + sub
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   313
        if sub[-1] != u'"':
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   314
            sub = sub + u'"'
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   315
        search = u'author:' + sub
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   316
    results = get_results_with_context(field, search, content_list)
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   317
    all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results])
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   318
    all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2)
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   319
    all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results])
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   320
    viewable_projects_id = [p.ldt_id for p in all_projects]
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   321
    nb_segment=0       
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   322
    complete_results = []           
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   323
    results.sort(key=lambda k: k['iri_id'])
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   324
           
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   325
    for iri_id, item in groupby(results, itemgetter('iri_id')):
1020
f3205dfbeb4f minor correction to avoid error when search result is empty (initialise var)
rougeronj
parents: 1019
diff changeset
   326
        content=[]
1019
d665c0b9dac0 minor correction to avoid error when search result is empty
rougeronj
parents: 1011
diff changeset
   327
        content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
d665c0b9dac0 minor correction to avoid error when search result is empty
rougeronj
parents: 1011
diff changeset
   328
        if len(content_filter)>0:
1074
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
   329
            content = content_filter[0]
1019
d665c0b9dac0 minor correction to avoid error when search result is empty
rougeronj
parents: 1011
diff changeset
   330
            if content.description is None:
d665c0b9dac0 minor correction to avoid error when search result is empty
rougeronj
parents: 1011
diff changeset
   331
                content.description = ''
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   332
                    
567
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   333
        all_related_segments = list(item)
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   334
                
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   335
        valid_segments = []
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   336
        for s in all_related_segments:
915
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   337
            array_of_segs = [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['cutting_id'] and seg.ensemble_id == s['ensemble_id'] ]
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   338
            if len(array_of_segs)>0:
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   339
                segment = array_of_segs[0]
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   340
                    
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   341
                segment.score = s['score']
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   342
                segment.indexation_id = s['indexation_id']
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   343
                segment.context = s['context']
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   344
                segment.context_tags = s['tags']
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   345
                segment.highlighted = s['highlighted']
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   346
                                        
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   347
                if not s['project_id']:
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   348
                    segment.project_id = '_'
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   349
                    valid_segments.append(segment)
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   350
                    nb_segment+=1
915
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   351
                elif s['project_id'] in viewable_projects_id:
5d08847528dd Little error treatment in search result.
cavaliet
parents: 893
diff changeset
   352
                    valid_segments.append(segment)
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   353
                    nb_segment+=1
567
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   354
            
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   355
        # If all segments found belong to unpublished projects or projects
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   356
        # the current user is not allowed to see
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   357
        if not valid_segments:
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   358
            continue
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   359
            
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   360
        score = sum([seg.score for seg in valid_segments])
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   361
        complete_results.append({
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   362
                                 'list': valid_segments,
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   363
                                 'score': score,
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   364
                                 'content': content,                                         
715f117b0415 correct search function. change two default tags in embed player.
cavaliet
parents: 563
diff changeset
   365
                                 })                
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   366
      
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   367
    complete_results.sort(key=lambda k: k['score'])
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   368
    
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   369
    paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   370
    
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   371
    try:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   372
        results = paginator.page(page)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   373
    except (EmptyPage, InvalidPage):
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   374
        results = paginator.page(paginator.num_pages)
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   375
            
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   376
    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
   377
    
1021
56ecf04fe605 modification of embed too be more userfriendly
grandjoncl
parents: 1020
diff changeset
   378
    return results, len(complete_results), nb_segment
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 511
diff changeset
   379
   
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   380
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   381
def loading(request): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   382
    return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))
644
94429061bbfa First step of pagination for contents and projet in workspace home.
cavaliet
parents: 602
diff changeset
   383
   
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
   384
1074
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
   385
@transaction.commit_on_success
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   386
def delete_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id):
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   387
    if project_id and project_id != "_" :
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   388
        project = Project.safe_objects.get(ldt_id=project_id) #@UndefinedVariable
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   389
        if project:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   390
            ldtdoc = lxml.etree.fromstring(project.ldt_encoded)
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   391
            xstr = "/iri/annotations/content[@id='%s']/ensemble[@id='%s']/decoupage[@id='%s']/elements/element[@id='%s']" % (content_id, ensemble_id, cutting_id, segment_id)
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   392
            element = None
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   393
            try:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   394
                element = ldtdoc.xpath(xstr)
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   395
            except:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   396
                return HttpResponseNotFound(_("Annotation not found in the xml"))
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   397
            if element and len(element)>0:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   398
                # element[0] is the annotation to remove
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   399
                el = element[0]
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   400
                el.getparent().remove(el)
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   401
                project.ldt = lxml.etree.tostring(ldtdoc)
1074
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
   402
                project.save(must_reindex=False)
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
   403
                contentindexer.delete_segment(project, project_id, content_id, ensemble_id, cutting_id, segment_id)                
36f657714851 optimize adding an annotation
ymh <ymh.work@gmail.com>
parents: 1035
diff changeset
   404
                
1035
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   405
                return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   406
            else:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   407
                return HttpResponseNotFound(_("Annotation not found"))
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   408
        else:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   409
            return HttpResponseNotFound(_("Project not found"))
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   410
    else:
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   411
        return HttpResponseNotFound(_("Project not found"))
85322320d89c delete annotation when you are admin, and import cleaning.
cavaliet
parents: 1022
diff changeset
   412