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