src/ldt/ldt/ldt_utils/views/front.py
author cavaliet
Wed, 08 Aug 2012 17:20:37 +0200
changeset 740 d03908cf3c73
parent 710 eea2dcb555c1
child 741 45d814511958
permissions -rw-r--r--
front all medias pagination. #26
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
     1
from django.conf import settings
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
     2
from django.contrib.auth.models import Group, User
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
     3
from django.http import HttpResponseRedirect
740
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
     4
from django.core.paginator import Paginator, InvalidPage, EmptyPage
339
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
     5
from django.core.urlresolvers import reverse
482
c802e00c7131 Lot of bugfixes
verrierj
parents: 480
diff changeset
     6
from django.shortcuts import render_to_response
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
     7
from django.template import RequestContext
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
     8
from guardian.shortcuts import get_objects_for_group
480
5cc5afa71d7e Minor bugs
verrierj
parents: 452
diff changeset
     9
from ldt.ldt_utils.models import Content, Project
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
    10
from ldt.ldt_utils.forms import SearchForm
710
eea2dcb555c1 Content tag cloud and filter in workspace.
cavaliet
parents: 702
diff changeset
    11
from ldt.ldt_utils.views.content import get_content_tags
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
    12
from ldt.ldt_utils.views.workspace import get_search_results
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    13
from tagging.models import Tag, TaggedItem
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
    14
import base64
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
    15
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    16
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    17
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    18
def front_home(request):
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    19
    # Get the 3 last annotated contents
553
b5848487839b commit query
ymh <ymh.work@gmail.com>
parents: 552
diff changeset
    20
    last_contents = Content.objects.order_by('-stat_annotation__last_annotated').exclude(stat_annotation__nb_annotations=0)[:3]
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    21
    # Get the most annotated contents
552
6fbf608bd2a7 put external stream in settings
ymh <ymh.work@gmail.com>
parents: 543
diff changeset
    22
    most_contents = Content.objects.order_by('-stat_annotation__nb_annotations')[:8]
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    23
    # Get the active groups
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    24
    active_groups = Group.objects.exclude(name=settings.PUBLIC_GROUP_NAME)[:5]
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    25
    # Get the main tag list
444
2711eef17092 Update front tag list management with settings/config.
cavaliet
parents: 443
diff changeset
    26
    front_tags = settings.FRONT_TAG_LIST
702
d50cb79f96ee Add category cloud in front and media page. Correct js pagination in workspace. Languages updated.
cavaliet
parents: 602
diff changeset
    27
    # Get the all tags list
d50cb79f96ee Add category cloud in front and media page. Correct js pagination in workspace. Languages updated.
cavaliet
parents: 602
diff changeset
    28
    tag_cloud = get_content_tags()
444
2711eef17092 Update front tag list management with settings/config.
cavaliet
parents: 443
diff changeset
    29
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    30
    
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    31
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    32
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    33
    return render_to_response("front/front_home.html",
444
2711eef17092 Update front tag list management with settings/config.
cavaliet
parents: 443
diff changeset
    34
                              {'last_contents': last_contents, 'most_contents':most_contents, 'active_groups':active_groups, 'front_tags':front_tags,
702
d50cb79f96ee Add category cloud in front and media page. Correct js pagination in workspace. Languages updated.
cavaliet
parents: 602
diff changeset
    35
                               'tag_cloud': tag_cloud, 'is_gecko': is_gecko},
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    36
                              context_instance=RequestContext(request))
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    37
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    38
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    39
def group_info(request, group_id):
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    40
    # Get the active group
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    41
    group = Group.objects.get(id=group_id)
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    42
    # list of contents annotated by the group (or everyone)
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    43
    everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    44
    content_list = get_objects_for_group(group, 'ldt_utils.view_content') | get_objects_for_group(everyone, 'ldt_utils.view_content')
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    45
    # Group's users
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
    46
    users = User.objects.filter(groups__in=[group]).exclude(is_superuser=True)
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    47
    
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    48
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    49
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    50
    return render_to_response("front/front_group.html",
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    51
                              {'group': group, 'content_list':content_list, 'users':users,
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    52
                               'is_gecko': is_gecko},
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    53
                              context_instance=RequestContext(request))
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    54
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
    55
504
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 491
diff changeset
    56
364
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    57
def all_contents(request):
740
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    58
    # Get the page number parameter if possible
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    59
    page = request.GET.get("page") or 1
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    60
    # Get the tag parameter if possible
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    61
    tag_label = request.GET.get("tag")
364
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    62
    # Get all the public contents group
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    63
    if tag_label is None :
504
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 491
diff changeset
    64
        content_list = Content.objects.all()
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    65
    else :
504
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 491
diff changeset
    66
        content_list = TaggedItem.objects.get_by_model(Content.objects.all(), '"'+tag_label+'"')
740
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    67
    
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    68
    nb = settings.LDT_FRONT_MEDIA_PER_PAGE
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    69
    if page=="x":
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    70
        nb = content_list.count()
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    71
    
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    72
    paginator = Paginator(content_list, nb)
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    73
    try:
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    74
        results = paginator.page(page)
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    75
    except (EmptyPage, InvalidPage):
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    76
        results = paginator.page(paginator.num_pages)
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    77
    
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    78
    # Get the main tag list
444
2711eef17092 Update front tag list management with settings/config.
cavaliet
parents: 443
diff changeset
    79
    front_tags = settings.FRONT_TAG_LIST
2711eef17092 Update front tag list management with settings/config.
cavaliet
parents: 443
diff changeset
    80
    # Get the all tags list
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
    81
    tag_cloud = get_content_tags()
364
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    82
    
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    83
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    84
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    85
    return render_to_response("front/front_all_contents.html",
740
d03908cf3c73 front all medias pagination. #26
cavaliet
parents: 710
diff changeset
    86
                              {'results':results, 'tag_label':tag_label, 'front_tags':front_tags, 'tag_cloud':tag_cloud,
364
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    87
                               'is_gecko': is_gecko},
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    88
                              context_instance=RequestContext(request))
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    89
0d1a9d5922ed commit before merge. Add "All contents" page.
cavaliet
parents: 354
diff changeset
    90
399
08172df3074d update search result link to MDP.
cavaliet
parents: 386
diff changeset
    91
def annot_content(request, content_iri_id, project_id=None, cutting_id=None):
339
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
    92
    # Get the wanted content
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
    93
    content = Content.objects.get(iri_id=content_iri_id)
543
03a99f7440ef enable dailymotion embed player.
cavaliet
parents: 542
diff changeset
    94
    # Get the content src to see if it is a youtube/dailymotion video
03a99f7440ef enable dailymotion embed player.
cavaliet
parents: 542
diff changeset
    95
    external_url = None
552
6fbf608bd2a7 put external stream in settings
ymh <ymh.work@gmail.com>
parents: 543
diff changeset
    96
    if content.src is not None:
6fbf608bd2a7 put external stream in settings
ymh <ymh.work@gmail.com>
parents: 543
diff changeset
    97
        for external_src in settings.EXTERNAL_STREAM_SRC:
6fbf608bd2a7 put external stream in settings
ymh <ymh.work@gmail.com>
parents: 543
diff changeset
    98
            if  external_src in content.src:
6fbf608bd2a7 put external stream in settings
ymh <ymh.work@gmail.com>
parents: 543
diff changeset
    99
                external_url = content.src
6fbf608bd2a7 put external stream in settings
ymh <ymh.work@gmail.com>
parents: 543
diff changeset
   100
                break
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   101
        
399
08172df3074d update search result link to MDP.
cavaliet
parents: 386
diff changeset
   102
    # If project id is not set, we get the default project for the content
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   103
    if project_id is None or project_id == "_":
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   104
        front_proj = content.front_project
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   105
        if front_proj:
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   106
            proj = front_proj
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   107
        else:
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   108
            # The main project for the content
491
b0da8cecb6b3 View annot_content always finds a project
verrierj
parents: 482
diff changeset
   109
            proj = Project.safe_objects.filter(contents__in=[content], state=2)
b0da8cecb6b3 View annot_content always finds a project
verrierj
parents: 482
diff changeset
   110
            if not proj:
b0da8cecb6b3 View annot_content always finds a project
verrierj
parents: 482
diff changeset
   111
                content.create_front_project()
b0da8cecb6b3 View annot_content always finds a project
verrierj
parents: 482
diff changeset
   112
                proj = content.front_project
b0da8cecb6b3 View annot_content always finds a project
verrierj
parents: 482
diff changeset
   113
            else:
b0da8cecb6b3 View annot_content always finds a project
verrierj
parents: 482
diff changeset
   114
                proj = proj[0]           
480
5cc5afa71d7e Minor bugs
verrierj
parents: 452
diff changeset
   115
    else:
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 400
diff changeset
   116
        proj = Project.safe_objects.get(ldt_id=project_id)
517
2ae1a476a69d Medias with no annotations are not displayed on front home page
verrierj
parents: 511
diff changeset
   117
               
339
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   118
    # Vars for player
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   119
    player_id = "player_project_" + proj.ldt_id
338
631c0edee9ea First commit for front pages. View, templates, and css img added.
cavaliet
parents:
diff changeset
   120
    
400
6f507891791a little debug on front json url.
cavaliet
parents: 399
diff changeset
   121
    if cutting_id is None :
6f507891791a little debug on front json url.
cavaliet
parents: 399
diff changeset
   122
        json_url = reverse("ldt.ldt_utils.views.json.project_json_id", args=[proj.ldt_id])
517
2ae1a476a69d Medias with no annotations are not displayed on front home page
verrierj
parents: 511
diff changeset
   123
    else:
400
6f507891791a little debug on front json url.
cavaliet
parents: 399
diff changeset
   124
        json_url = reverse("ldt.ldt_utils.views.json.project_json_cutting_id", args=[proj.ldt_id, cutting_id])
339
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   125
    player_width = 550
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   126
    player_height = 380
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   127
    stream_mode = proj.stream_mode
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   128
    if stream_mode != "video":
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   129
        stream_mode = 'radio'
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   130
    
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   131
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   132
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   133
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   134
    return render_to_response("front/front_player.html",
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   135
                              {'content': content, 'project':proj, 'player_id': player_id, 
543
03a99f7440ef enable dailymotion embed player.
cavaliet
parents: 542
diff changeset
   136
                              'json_url': json_url, 'player_width':player_width, 'player_height':player_height, 'stream_mode':stream_mode, 'external_url':external_url,
339
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   137
                               'is_gecko': is_gecko},
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   138
                              context_instance=RequestContext(request))
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   139
c6a6ea1ce091 First step of player page in front. Old version of metadata player integrated.
cavaliet
parents: 338
diff changeset
   140
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 347
diff changeset
   141
def search_index(request):
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
   142
    language_code = request.LANGUAGE_CODE[:2]
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   143
    nb = 0
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   144
    results = []
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   145
    search = ''
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   146
    field = 'all'
602
642b3654b8f1 Enable search by author.
cavaliet
parents: 599
diff changeset
   147
    content_tag = None
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
   148
    
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   149
    sform = SearchForm(request.GET)
563
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
   150
    if sform.is_valid():
9beab46d99d3 Remove cache from search results
verrierj
parents: 553
diff changeset
   151
        search = sform.cleaned_data["search"]
570
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   152
        field = sform.cleaned_data["field"]
361ecea621e0 Little clean up for search
verrierj
parents: 567
diff changeset
   153
        page = sform.cleaned_data["page"] or 1
599
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   154
        # If asked, we filter the request with only the contents tagged with content_tag
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   155
        content_tag = sform.cleaned_data["content_tag"]
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   156
        content_list = None
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   157
        if content_tag is not None and content_tag != "" :
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   158
            content_list = TaggedItem.objects.get_by_model(Content.objects.all(), '"'+content_tag+'"')
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   159
        results, nb = get_search_results(request, search, field, page, content_list)
348
d211a78da395 Merge and add search list in front template.
cavaliet
parents: 347
diff changeset
   160
599
5207abea900d possibility to search by group of tagged medias.
cavaliet
parents: 570
diff changeset
   161
    return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'tag_label':content_tag, '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))
409
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
   162
e4855d669c55 First step of tag management for contents.
cavaliet
parents: 404
diff changeset
   163
710
eea2dcb555c1 Content tag cloud and filter in workspace.
cavaliet
parents: 702
diff changeset
   164