src/ldt/ldt/ldt_utils/views.py
author cavaliet
Tue, 22 Mar 2011 12:35:29 +0100
changeset 46 ba02faf089df
parent 44 20ab9a7f1849
child 63 93325a5d61f0
permissions -rw-r--r--
Update media adding, to allow youtube import, and display the thumbnail when we paste the youtube url.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
from contentindexer import *
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from django.conf import settings
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from django.contrib.auth.decorators import login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from django.core import serializers
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.core.urlresolvers import reverse
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from django.db.models import Q
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.forms.forms import get_declared_fields
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.forms.models import model_to_dict
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.forms.util import ErrorList
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from django.http import HttpResponse, HttpResponseRedirect, \
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    HttpResponseForbidden, HttpResponseServerError
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
from django.shortcuts import render_to_response, get_object_or_404, \
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
    get_list_or_404
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
from django.template import RequestContext
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from django.template.loader import render_to_string
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
from django.utils import simplejson
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
from django.utils.html import escape
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
from django.utils.translation import ugettext as _, ungettext
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
from fileimport import *
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, \
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    CopyProjectForm, ContentForm, MediaForm
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
from ldt.core.models import Owner
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
from ldt.ldt_utils.models import Content, Project, Owner
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
from ldt.ldt_utils.projectserializer import ProjectSerializer
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
from ldt.ldt_utils.utils import boolean_convert
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
from lxml.html import fromstring, fragment_fromstring
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
from models import *
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
from projectserializer import *
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
from string import Template
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
from urllib2 import urlparse
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
from utils import *
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
import StringIO
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
import base64
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
import cgi
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
import django.core.urlresolvers
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
import ldt.auth as ldt_auth
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
import ldt.utils.path as ldt_utils_path
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
import logging
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
import lucene
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
import lxml.etree
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
import tempfile
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
import urllib2
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
import uuid
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
def workspace(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    # list of contents
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    content_list = Content.objects.all()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    # get list of projects
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    project_list = Project.objects.all()
38
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
    54
    
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
    55
    is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
    56
    
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    # render list
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    return render_to_response("ldt/ldt_utils/workspace.html",
38
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
    59
                              {'contents': content_list, 'projects': project_list, 
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
    60
                               'is_gecko': is_gecko},
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
                              context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
def popup_embed(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    json_url = request.GET.get("json_url")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    player_id = request.GET.get("player_id")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    ldt_id = request.GET.get("ldt_id")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    project = Project.objects.get(ldt_id=ldt_id);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    73
    stream_mode = project.stream_mode
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    74
    if stream_mode != "video":
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    75
        stream_mode = 'radio'
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    76
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    77
    player_width = 650
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    78
    player_height = 480
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    79
    
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    80
    if stream_mode == 'radio':
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    81
        player_height = 1
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    82
        
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    if not ldt_auth.checkAccess(request.user, project):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        return HttpResponseForbidden(_("You can not access this project"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    ps = ProjectSerializer(project, from_contents=False, from_display=True)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    annotations = ps.getAnnotations(first_cutting=True)
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    88
    
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    89
    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}
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    embed_rendered = dict((typestr,
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    92
                           (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))
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    93
                           for typestr in ('player', 'seo_body', 'seo_meta', 'links'))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    95
    rend_dict['embed_rendered'] = embed_rendered
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    96
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    return render_to_response("ldt/ldt_utils/embed_popup.html",
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
    98
                              rend_dict,
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                              context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
def projectsfilter(request, filter, is_owner=False, status=0):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    is_owner = boolean_convert(is_owner)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    status = int(status)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    query = Q()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    if is_owner:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        owner = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        try:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
            owner = Owner.objects.get(user=request.user)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        except:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
            return HttpResponseServerError("<h1>User not found</h1>")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
        query &= Q(owner=owner)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    if status > 0:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
        query &= Q(state=status)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    if filter:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        if len(filter) > 0 and filter[0] == '_':
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            filter = filter[1:]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
        query &= Q(title__icontains=filter)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   126
    project_list = Project.objects.filter(query)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    return render_to_response("ldt/ldt_utils/partial/projectslist.html",
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                              {'projects': project_list},
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                              context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
def contentsfilter(request, filter):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    if filter and len(filter) > 0 and filter[0] == '_':
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        filter = filter[1:]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
    if filter:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        content_list = Content.objects.filter(title__icontains=filter)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        content_list = Content.objects.all()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    return render_to_response("ldt/ldt_utils/partial/contentslist.html",
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
                              {'contents': content_list},
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
                              context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
def searchForm(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
    form = SearchForm()
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   153
    return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request))    
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
def searchIndex(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
    sform = SearchForm(request.POST)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
    if sform.is_valid():
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
        search = sform.cleaned_data["search"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        field = request.POST["field"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
        language_code = request.LANGUAGE_CODE[:2]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
        url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   167
        return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
        resp = HttpResponse()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
        resp.write("<html><head></head><body>Error : No result</body></html>");
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
def searchIndexGet(request, field, query):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
    language_code = request.LANGUAGE_CODE[:2]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
    url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   176
    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
def searchInit(request, field, query):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
    ldtgen = LdtUtils()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   182
    doc = ldtgen.generateInit([field, query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    resp = HttpResponse(mimetype="text/xml;charset=utf-8")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
    doc.write(resp, pretty_print=True)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
def searchLdt(request, field, query, edition=None):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    contentList = []
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    resp = HttpResponse(mimetype="text/xml")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    queryStr = ""
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   194
    if query and len(query) > 0:        
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
        searcher = LdtSearch()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        ids = {}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        for result in searcher.query(field, queryStr):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
            ids[result["iri_id"]] = ""            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        id_list = ids.keys()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        if edition is not None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
            ids_editions = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
            id_list = filter(lambda id: id in id_list, ids_editions)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
        contentList = Content.objects.filter(iri_id__in=id_list)        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
    ldtgen = LdtUtils()
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   212
    ldtgen.generateLdt(contentList, file=resp, title=u"Recherche : " + queryStr)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
def searchSegments(request, field, query, edition=None):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   219
    if query and len(query) > 0:
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
        searcher = LdtSearch()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
        res = searcher.query(field, queryStr)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        res = []
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
    iri_ids = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
    if edition is not None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
        iri_ids = map(lambda t:t[0], filter(lambda id: id[0] is not None, Speak.objects.filter(session__day__edition=edition).order_by("session__start_ts", "order").values_list("content__iri_id")))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
    iri = lxml.etree.Element('iri')
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    doc = lxml.etree.ElementTree(iri)	
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
    for resultMap in res:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        if iri_ids is None or resultMap['iri_id'] in iri_ids:
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   237
            seg = lxml.etree.SubElement(iri, 'seg')
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   238
            seg.set('idctt', resultMap['iri_id'])
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
            seg.set('idens', resultMap['ensemble_id'])
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
            seg.set('iddec', resultMap['decoupage_id'])
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
            seg.set('idseg', resultMap['element_id'])
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
            seg.set('idvue', "")
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   243
            seg.set('crit', "")
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
    return doc  
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
  
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
    return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") 
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
@login_required         
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
def list_ldt(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    contents = Content.objects.all()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
    try:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
        owner = Owner.objects.get(user=request.user)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    except:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
        return HttpResponseRedirect(settings.LOGIN_URL)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
    ldtProjects = Project.objects.filter(owner=owner)
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   259
    context = {
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    'contents': contents,
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
    'projects': ldtProjects.reverse(),
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    return render_to_response('ldt/ldt_utils/ldt_list.html', context, context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
@login_required         
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
def list_content(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
    contents = Content.objects.all()
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   268
    context = {
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        'contents': contents,
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
    }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
    return render_to_response('ldt/ldt_utils/content_list.html', context, context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
def create_ldt_view(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
    if request.method == "POST" :
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
        form = LdtAddForm(request.POST)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
        if form.is_valid():
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
            user = request.user
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
            Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'])
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
            form_status = "saved"
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   281
            contents = []
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
            #return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        form = LdtAddForm()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        contents = Content.objects.all()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        form_status = "none"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
            
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   288
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status, 'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
     
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
def created_ldt(request):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
    return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
def indexProject(request, id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
    urlStr = settings.WEB_URL + reverse("space_ldt_init", args=['ldtProject', id])
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   296
    posturl = settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
    language_code = request.LANGUAGE_CODE[:2]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
    ldt = get_object_or_404(Project, ldt_id=id)
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   300
    if ldt.state == 2: #published
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
        readonly = 'true'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
        readonly = 'false'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   305
    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
    
38
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   307
def indexProjectFull(request, id):
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   308
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   309
    urlStr = settings.WEB_URL + reverse("space_ldt_init", args=['ldtProject', id])
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   310
    posturl = settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   311
    language_code = request.LANGUAGE_CODE[:2]
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   312
    
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   313
    ldt = get_object_or_404(Project, ldt_id=id)
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   314
    if ldt.state == 2: #published
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   315
        readonly = 'true'
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   316
    else:
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   317
        readonly = 'false'
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   318
    
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   319
    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': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
457d4ab675df debug modal for chrome, ie7. For firefox, links are not modal anymore.
cavaliet
parents: 24
diff changeset
   320
    
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
def init(request, method, url):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
    ldtgen = LdtUtils()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   324
    doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.' + method, None)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
    resp = HttpResponse(mimetype="text/xml")
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   327
    resp['Cache-Control'] = 'no-cache, must-revalidate'
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   328
    resp['Pragma'] = 'no-cache'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   330
    resp.write(lxml.etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
       
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
def ldtProject(request, id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
    resp = HttpResponse(mimetype="text/xml")
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   335
    resp['Cache-Control'] = 'no-cache, must-revalidate'
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   336
    resp['Pragma'] = 'no-cache'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
    project = Project.objects.get(ldt_id=id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
    resp.write(project.ldt)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
def project_json_id(request, id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   345
    project = get_object_or_404(Project, ldt_id=id)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
    return project_json(request, project, False)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
def project_json_externalid(request, id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
        
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   352
    res_proj = get_list_or_404(Project.objects.order_by('-modification_date'), contents__external_id=id)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
    return project_json(request, res_proj[0], False)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   358
def project_json(request, project, serialize_contents=True):
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    if not ldt_auth.checkAccess(request.user, project):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
        return HttpResponseForbidden(_("You can not access this project"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    mimetype = request.REQUEST.get("mimetype")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
    if mimetype is None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
        mimetype = "application/json; charset=utf-8"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
        mimetype = mimetype.encode("utf-8")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
    if "charset" not in mimetype:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
        mimetype += "; charset=utf-8" 
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    resp = HttpResponse(mimetype=mimetype)
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   371
    resp['Cache-Control'] = 'no-cache, must-revalidate'
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   372
    resp['Pragma'] = 'no-cache'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
    indent = request.REQUEST.get("indent")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
    if indent is None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
        indent = settings.LDT_JSON_DEFAULT_INDENT
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
        indent = int(indent)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
    callback = request.REQUEST.get("callback")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
    escape_str = request.REQUEST.get("escape")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
    escape_bool = False
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
    if escape_str:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
        escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower())
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    ps = ProjectSerializer(project, serialize_contents)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
    project_dict = ps.serialize_to_cinelab()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
    json_str = simplejson.dumps(project_dict, ensure_ascii=False, indent=indent)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
    if callback is not None:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   393
        json_str = "%s(%s)" % (callback, json_str)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    if escape_bool:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
        json_str = escape(json_str)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
    resp.write(json_str)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
def project_annotations_rdf(request, ldt_id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
    project = Project.objects.get(ldt_id=ldt_id);
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
    if not ldt_auth.checkAccess(request.user, project):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
        return HttpResponseForbidden(_("You can not access this project"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
    mimetype = request.REQUEST.get("mimetype")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
    if mimetype is None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
        mimetype = "application/rdf+xml; charset=utf-8"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
        mimetype = mimetype.encode("utf-8")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
    if "charset" not in mimetype:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
        mimetype += "; charset=utf-8" 
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
    resp = HttpResponse(mimetype=mimetype)
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   417
    resp['Cache-Control'] = 'no-cache, must-revalidate'
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   418
    resp['Pragma'] = 'no-cache'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
    ps = ProjectSerializer(project, from_contents=False, from_display=True) 
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
    annotations = ps.getAnnotations(first_cutting=True)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
    rdf_ns = u"http://www.w3.org/1999/02/22-rdf-syntax-ns#"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
    dc_ns = u"http://purl.org/dc/elements/1.1/"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
    rdf = u"{%s}" % rdf_ns
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
    dc = u"{%s}" % dc_ns
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
    nsmap = {u'rdf' : rdf_ns, u'dc':dc_ns}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
    
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   429
    rdf_root = lxml.etree.Element(rdf + u"RDF", nsmap=nsmap)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
    logging.debug("RDF annotations : " + repr(annotations))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
    for annotation in annotations:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
        uri = u""
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
        if 'uri' in annotation and annotation['uri']:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
            uri = unicode(annotation['uri'])
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   437
        annot_desc = lxml.etree.SubElement(rdf_root, rdf + u"Description")
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   438
        annot_desc.set(rdf + u'about', uri)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
        if annotation['title']:
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   440
            lxml.etree.SubElement(annot_desc, dc + 'title').text = lxml.etree.CDATA(unicode(annotation['title']))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
        if annotation['desc']:
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   442
            lxml.etree.SubElement(annot_desc, dc + 'description').text = lxml.etree.CDATA(unicode(annotation['desc']))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
        if annotation['tags']:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
            for tag in annotation['tags']:
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   445
                lxml.etree.SubElement(annot_desc, dc + 'subject').text = lxml.etree.CDATA(unicode(tag))
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   446
        lxml.etree.SubElement(annot_desc, dc + 'coverage').text = u"start=%s, duration=%s" % (annotation['begin'], annotation['duration'])
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
    resp.write(u"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
    resp.write(u"<!DOCTYPE rdf:RDF PUBLIC \"-//DUBLIN CORE//DCMES DTD 2002/07/31//EN\" \"http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd\">\n")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
    
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   451
    resp.write(lxml.etree.tostring(rdf_root, xml_declaration=False, encoding="utf-8", pretty_print=True))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
def save_ldtProject(request):
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   456
    if request.method == "POST":
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
        ldt = request.POST['ldt']
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
        id = request.POST['id']
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   459
        ldtproject = Project.objects.get(ldt_id=id)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   461
        #save xml ldt
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   462
        ldtproject.ldt = ldt
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   465
        doc = lxml.etree.fromstring(ldtproject.ldt.encode("utf-8"))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
        result = doc.xpath("/iri/project")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
        #set new title
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
        ldtproject.title = result[0].get("title")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
        #get new content list
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   472
        new_contents = []
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
        result = doc.xpath("/iri/medias/media")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
        for medianode in result:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
            id = medianode.get("id")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
            new_contents.append(id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
        #set new content list
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
        for c in ldtproject.contents.all():
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
            if not c.iri_id in new_contents:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
                ldtproject.contents.remove(c)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
        ldtproject.save()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
        ldt = ''
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   486
        new_contents = []
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
    return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':ldtproject.title, 'contents': new_contents}, context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
@login_required    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
def publish(request, id, redirect=True):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
    ldt = get_object_or_404(Project, ldt_id=id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    ldt.state = 2 #published
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
    ldt.save()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
    redirect = boolean_convert(redirect)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
    if redirect:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
        return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
    else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   501
        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
@login_required    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
def unpublish(request, id, redirect=True):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
    ldt = get_object_or_404(Project, ldt_id=id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
    ldt.state = 1 #edition
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
    ldt.save()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
    redirect = boolean_convert(redirect)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
    if redirect:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
        return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
    else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   512
        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
def index(request, url):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   517
    urlStr = settings.WEB_URL + reverse("ldt_init", args=['ldt', url])
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
    language_code = request.LANGUAGE_CODE[:2]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   520
    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL + settings.BASE_URL}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   523
def ldt(request, url, startSegment=None):
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
    resp = HttpResponse(mimetype="text/xml; charset=utf-8")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
    resp['Cache-Control'] = 'no-cache'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
    contentList = Content.objects.filter(iri_id=url)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    ldtgen = LdtUtils()
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   531
    ldtgen.generateLdt(contentList, file=resp, title=contentList[0].title, startSegment=startSegment)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
    return resp
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
def loading(request):
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   537
    return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
def create_project(request, iri_id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
    content = get_object_or_404(Content, iri_id=iri_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
    contents = [ content, ]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
    if request.method == "POST" :
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
        form = AddProjectForm(request.POST)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
        if form.is_valid():
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   548
            user = request.user
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
            project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents)
44
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   550
            # Modal window is not used with firefox
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   551
            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   552
            if is_gecko :
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   553
                return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProjectFull', args=[project.ldt_id]))
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   554
            else:
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   555
                return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
        form = AddProjectForm()
44
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   558
    # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case.
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   559
    target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
20ab9a7f1849 update modal management for create project.
cavaliet
parents: 38
diff changeset
   560
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.create_project", args=[iri_id]), 'target_parent':target_parent}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
def update_project(request, ldt_id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
    project = get_object_or_404(Project, ldt_id=ldt_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
    contents = project.contents.all()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
    if request.method == "POST" :
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   568
        submit_action = request.REQUEST.get("submit_button", False)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
        if submit_action == "prepare_delete":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
            errors = []
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
            if project.state == 2:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   572
                errors.append(_("the project %(title)s is published. please unpublish before deleting.") % {'title':project.title})
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
                message = _("can not delete the project. Please correct the following error")
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   574
                title = _('title error deleting project')
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
            else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   576
                message = _("please confirm deleting project %(title)s") % {'title':project.title}
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
                title = _("confirm deletion")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
            return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title}, context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
        elif submit_action == "delete":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
            if project.state != 2:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
                project.delete()
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   582
            form_status = 'deleted'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
            form = AddProjectForm()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
        else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   585
            form_status = 'saved'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
            form = AddProjectForm(request.POST)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
            if form.is_valid():
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
                if project.title != form.cleaned_data['title']:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   589
                    project.title = form.cleaned_data['title']
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
                    ldt = lxml.etree.fromstring(project.ldt.encode("utf-8"))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
                    res = ldt.xpath("/iri/project")
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   592
                    res[0].set("title", project.title)
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   593
                    project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
                    project.save()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
        form = AddProjectForm({'title':unicode(project.title)})
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   597
        form_status = 'none'
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
        
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   599
    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'ldt_id': ldt_id, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
def copy_project(request, ldt_id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
    project = get_object_or_404(Project, ldt_id=ldt_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
    if request.method == "POST" :
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
        form = CopyProjectForm(request.POST)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
        if form.is_valid():
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   609
            user = request.user
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
            project = project.copy_project(title=request.POST['title'], user=user)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
        form = CopyProjectForm
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
    return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
def write_content_base(request, iri_id=None):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
    if iri_id:        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
        instance_content = Content.objects.get(iri_id=iri_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
        instance_media = instance_content.media_obj
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   622
        logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content)) 
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
        logging.debug("No iri_id")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
        instance_content = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
        instance_media = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   628
    form_status = 'none'        
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   629
    if request.method == "POST":
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
        if instance_content is not None:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   632
            content_instance_val = model_to_dict(instance_content, exclude=ContentForm.Meta.exclude)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
        else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
            content_instance_val = {}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
        if instance_media is not None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
            media_instance_val = model_to_dict(instance_media, exclude=MediaForm.Meta.exclude)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
        else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
            media_instance_val = {}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
        #add prefix
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
        def add_prefix(dict, prefix):
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   643
            for key, value in dict.items():
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
                dict['%s-%s' % (prefix, key)] = value
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
                del(dict[key])
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
        add_prefix(content_instance_val, "content")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
        add_prefix(media_instance_val, "media")        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
        for k in request.POST.keys():
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
            value = request.POST.get(k)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
            content_instance_val[k] = value
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
            media_instance_val[k] = value
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
        content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
        media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
        media_valid = media_form.is_valid()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
        content_valid = content_form.is_valid()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
        
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   661
        logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
        if media_valid and content_valid :
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
            # see if media must be created
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
            cleaned_data = {}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
            cleaned_data.update(media_form.cleaned_data)
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   668
                        
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
            media_input_type = content_form.cleaned_data["media_input_type"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
            if media_input_type == "none":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
                media = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
            elif media_input_type == "link":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
                media = content_form.cleaned_data["media_obj"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
                created = False
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
            elif media_input_type == "create":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
                del cleaned_data["media_file"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
                if not cleaned_data['videopath']:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
                    cleaned_data['videopath'] = settings.STREAM_URL
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
                media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
            elif media_input_type == "url" or  media_input_type == "upload" :                
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
                # copy file
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
                #complet src
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
                destination_file = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
                source_file = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
                try:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
                    if media_input_type == "url":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
                        url = cleaned_data["external_src_url"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
                        source_file = urllib2.urlopen(url)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
                        source_filename = source_file.info().get('Content-Disposition', None)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
                        if not source_filename:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
                            source_filename = urlparse.urlparse(url).path.rstrip("/").split('/')[-1]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
                    elif media_input_type == "upload":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
                        source_file = request.FILES['media-media_file']
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
                        source_filename = source_file.name
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
                    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
                    source_filename = ldt_utils_path.sanitize_filename(source_filename)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
                    destination_filepath = os.path.join(settings.STREAM_PATH, source_filename)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
                    base_source_filename = source_filename
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
                    extension = base_source_filename.split(".")[-1]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
                    if extension == base_source_filename:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
                        extension = ""
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
                        base_basename_filename = base_source_filename
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
                    else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   706
                        base_basename_filename = base_source_filename[:-1 * (len(extension) + 1)]
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
                    i = 0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
                    while os.path.exists(destination_filepath):
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   709
                        base_source_filename = "%s.%d.%s" % (base_basename_filename, i, extension)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
                        destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
                        i += 1
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
                        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
                    destination_file = open(destination_filepath, "w")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
                    src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
                    if len(src_prefix) > 0:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
                        cleaned_data["src"] = src_prefix + "/" + base_source_filename
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
                    else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   718
                        cleaned_data["src"] = base_source_filename
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
                    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
                    chunck = source_file.read(2048)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
                    while chunck:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
                        destination_file.write(chunck)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
                        chunck = source_file.read(2048)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
                except Exception as inst:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
                    logging.debug("write_content_base : POST error when processing file:" + str(inst))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
                    form_status = "error"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
                    #set error for form
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
                    if media_input_type == "url":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
                        errors = media_form._errors.setdefault("external_src_url", ErrorList())
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   731
                        errors.append(_("Problem when downloading file from url : ") + str(inst))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
                    elif media_input_type == "upload":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
                        errors = media_form._errors.setdefault("media_file", ErrorList())
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
                        errors.append(_("Problem when uploading file : ") + str(inst))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
                finally:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
                    if destination_file:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
                        destination_file.close()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
                    if source_file:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
                        source_file.close()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
                        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
                if form_status != "error":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
                    #try:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
                    del cleaned_data["media_file"]
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
                    if not cleaned_data['videopath']:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
                        cleaned_data['videopath'] = settings.STREAM_URL
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   746
                    mimetype = cleaned_data.get('mimetype_field',None)
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   747
                    if not mimetype:
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   748
                        mimetype = mimetypes.guess_type(cleaned_data['src'])
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   749
                    cleaned_data['mimetype_field'] = mimetype
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
                    media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
                else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
                    media = None
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
46
ba02faf089df Update media adding, to allow youtube import, and display the thumbnail when we paste the youtube url.
cavaliet
parents: 44
diff changeset
   754
            if media and not created:
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
                for attribute in ('external_id', 'external_permalink', 'external_publication_url', 'external_src_url', 'media_creation_date', 'videopath', 'duration', 'description', 'title'):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
                    setattr(media, attribute, cleaned_data.get(attribute))
24
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   757
                mimetype = cleaned_data.get('mimetype_field',None)
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   758
                if not mimetype:
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   759
                    mimetype = mimetypes.guess_type(media.src) 
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   760
                media.mimetype_field = mimetype
57a2650a7f87 update nyromodal
ymh <ymh.work@gmail.com>
parents: 13
diff changeset
   761
                    
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
                media.save()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
            
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
            if form_status != "error":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
                #try:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
                content_defaults = {}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
                content_defaults.update(content_form.cleaned_data)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
                content_defaults['media_obj'] = media
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
                del content_defaults["media_input_type"]
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   771
                content, created = Content.objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
                if not created:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
                    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
                    for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
                        setattr(content, attribute, content_defaults[attribute])
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
                content.save()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
                form_status = 'saved'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
                media_form = MediaForm(instance=media, prefix="media")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
                content_form = ContentForm(instance=content, prefix="content")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
        else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
            form_status = 'error'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
        form_status = 'empty'
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
        initial = { 'media_input_type':"link"}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
        
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   786
        content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
        media_form = MediaForm(prefix="media", instance=instance_media)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
        if instance_content is not None:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
            content_form.media_input_type = "link"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
    
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
    return content_form, media_form, form_status
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
def write_content(request, iri_id=None):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   797
    submit_action = request.REQUEST.get("submit_button", False) 
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
    if submit_action == "prepare_delete": 
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
        errors, titles = prepare_delete_content(request, iri_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
        if errors and len(errors) > 0:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
            message = ungettext("There is %(count)d error when deleting content", "There are %(count)d errors when deleting content", len(errors)) % { 'count': len(errors)}
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
            title_msg = _('title error deleting content')
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
        else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
            message = _("Confirm delete content %(titles)s") % { 'titles' : ",".join(titles) }
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
            title_msg = _("confirm delete content")
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
        return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title_msg}, context_instance=RequestContext(request))  
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
    elif submit_action == "delete":
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
        delete_content(request, iri_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
        form_status = "deleted"
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
        content_form = ContentForm()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
        media_form = MediaForm()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
    else:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
        content_form, media_form, form_status = write_content_base(request, iri_id)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
    if iri_id:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   817
        create_content_action = reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
    else:
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   819
        create_content_action = reverse('ldt.ldt_utils.views.write_content')
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
    
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   821
    return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form, 'form_status': form_status, 'create_content_action': create_content_action, 'iri_id': iri_id}, context_instance=RequestContext(request))
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
def prepare_delete_content(request, iri_id=None):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
    errors = []
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
    titles = []
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
    if not iri_id:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
        iri_id = request.REQUEST.get("iri_id", None)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
    if iri_id:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
        for content in Content.objects.filter(iri_id=iri_id):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
            titles.append(unicode(content.title))
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
            projects = content.project_set.all()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
            projects_nb = len(projects)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
            if projects_nb > 0:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
                project_titles = map(lambda p: unicode(p.title), projects)
13
97ab7b3191cf add api to update project, uses psiton
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   837
                errors.append(ungettext("Content '%(title)s' is referenced by this project : %(project_titles)s. Please delete it beforehand.", "Content '%(title)s' is referenced by %(count)d projects: %(project_titles)s. Please delete them beforehand.", projects_nb) % {'title':unicode(content.title), 'count':projects_nb, 'project_titles': ",".join(project_titles)})
0
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
 
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
    return errors, titles
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
@login_required
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
def delete_content(request, iri_id=None):
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
    if not iri_id:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
        iri_id = request.REQUEST.get("iri_id", None)
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
        
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
    if iri_id:
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
        Content.objects.filter(iri_id=iri_id).delete()
bdf22b140727 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850