web/ldt/ldt_utils/views.py
changeset 84 6c3162d9e632
parent 83 ec31a4bd86d3
parent 80 1e7732f40eee
child 85 3b70d84e661a
equal deleted inserted replaced
83:ec31a4bd86d3 84:6c3162d9e632
    32 import logging
    32 import logging
    33 import lucene
    33 import lucene
    34 import tempfile
    34 import tempfile
    35 import urllib2
    35 import urllib2
    36 import uuid
    36 import uuid
    37 import xml.dom
       
    38 import xml.dom.ext
       
    39 import xml.dom.minidom
       
    40 
       
    41     
    37     
    42 def searchForm(request):
    38 def searchForm(request):
    43     form = SearchForm()
    39     form = SearchForm()
    44     return render_to_response('ldt/ldt_utils_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
    40     return render_to_response('ldt/ldt_utils_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
    45 
    41 
    71     ldtgen = LdtUtils()
    67     ldtgen = LdtUtils()
    72     
    68     
    73     doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
    69     doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
    74     
    70     
    75     resp = HttpResponse(mimetype="text/xml;charset=utf-8")
    71     resp = HttpResponse(mimetype="text/xml;charset=utf-8")
    76     xml.dom.ext.PrettyPrint(doc, resp)
    72     doc.write(resp, pretty_print=True)
    77     return resp
    73     return resp
    78 
    74 
    79 def searchLdt(request, field, query, edition=None):
    75 def searchLdt(request, field, query, edition=None):
    80     
    76     
    81     contentList = []
    77     contentList = []
   118     iri_ids = None
   114     iri_ids = None
   119     
   115     
   120     if edition is not None:
   116     if edition is not None:
   121         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")))
   117         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")))
   122 
   118 
   123     doc = xml.dom.getDOMImplementation().createDocument(None, "iri", None)
   119     iri = lxml.etree.Element('iri')
       
   120     doc = lxml.etree.ElementTree(iri)	
   124 
   121 
   125     for resultMap in res:
   122     for resultMap in res:
   126         if iri_ids is None or resultMap['iri_id'] in iri_ids:
   123         if iri_ids is None or resultMap['iri_id'] in iri_ids:
   127             elem = doc.createElement('seg')
   124 	    seg = etree.SubElement(iri, 'seg')
   128             elem.setAttribute('idctt', resultMap['iri_id'])
   125 	    seg.set('idctt', resultMap['iri_id'])
   129             elem.setAttribute('idens', resultMap['ensemble_id'])
   126             seg.set('idens', resultMap['ensemble_id'])
   130             elem.setAttribute('iddec', resultMap['decoupage_id'])
   127             seg.set('iddec', resultMap['decoupage_id'])
   131             elem.setAttribute('idseg', resultMap['element_id'])
   128             seg.set('idseg', resultMap['element_id'])
   132             elem.setAttribute('idvue', "")
   129             seg.set('idvue', "")
   133             elem.setAttribute('crit', "")
   130 	    seg.set('crit', "")
   134             doc.documentElement.appendChild(elem)
   131 
   135 
   132     return doc  
   136     return HttpResponse(doc.toprettyxml(encoding='utf-8'), mimetype="text/xml;charset=utf-8")
   133   
   137     
   134     return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") 
       
   135 
       
   136 
       
   137 
   138 @login_required         
   138 @login_required         
   139 def list_ldt(request):
   139 def list_ldt(request):
   140     contents = Content.objects.all()
   140     contents = Content.objects.all()
   141     try:
   141     try:
   142         owner = Owner.objects.get(user=request.user)
   142         owner = Owner.objects.get(user=request.user)
   197     doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
   197     doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
   198 
   198 
   199     resp = HttpResponse(mimetype="text/xml")
   199     resp = HttpResponse(mimetype="text/xml")
   200     resp['Cache-Control']='no-cache, must-revalidate'
   200     resp['Cache-Control']='no-cache, must-revalidate'
   201     resp['Pragma']='no-cache'
   201     resp['Pragma']='no-cache'
   202     xml.dom.ext.PrettyPrint(doc, resp)
   202     doc.write(resp, pretty_print=True) 
   203     return resp
   203     return resp
   204        
   204        
   205 def ldtProject(request, id):
   205 def ldtProject(request, id):
   206     resp = HttpResponse(mimetype="text/xml")
   206     resp = HttpResponse(mimetype="text/xml")
   207     resp['Cache-Control']='no-cache, must-revalidate'
   207     resp['Cache-Control']='no-cache, must-revalidate'
   213 
   213 
   214 
   214 
   215 def project_json_id(request, id):
   215 def project_json_id(request, id):
   216     
   216     
   217     project = get_object_or_404(Project,ldt_id=id)
   217     project = get_object_or_404(Project,ldt_id=id)
   218         
   218 
   219     return project_json(request, project)
   219     return project_json(request, project)
   220 
   220 
   221 
   221 
   222 def project_json_externalid(request, id):
   222 def project_json_externalid(request, id):
   223         
   223         
   325 def save_ldtProject(request):
   325 def save_ldtProject(request):
   326     if request.method=="POST":
   326     if request.method=="POST":
   327         ldt = request.POST['ldt']
   327         ldt = request.POST['ldt']
   328         id = request.POST['id']
   328         id = request.POST['id']
   329         ldtproject=Project.objects.get(ldt_id=id)
   329         ldtproject=Project.objects.get(ldt_id=id)
   330         #save xml ldt
   330 
       
   331 	    #save xml ldt
   331         ldtproject.ldt=ldt
   332         ldtproject.ldt=ldt
   332         #get new title
   333 
   333         dom = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
   334         ldtproj = get_attrib(ldtproject)
   334         con = xml.xpath.Context.Context(dom, 1, 1, None)
   335         ldtproj.save()
   335         result = xml.xpath.Evaluate("/iri/project",context=con)
       
   336         for pnode in result:
       
   337             title=pnode.getAttribute("title")
       
   338             break
       
   339         #set new title
       
   340         ldtproject.title=title
       
   341         #get new content list
       
   342         new_contents=[]
       
   343         result = xml.xpath.Evaluate("/iri/medias/media", context=con)
       
   344         for medianode in result:
       
   345             id = medianode.attributes['id'].value
       
   346             new_contents.append(id)
       
   347         # set new content list
       
   348         for c in ldtproject.contents.all():
       
   349             if not c.iri_id in new_contents:
       
   350                 ldtproject.contents.remove(c)           
       
   351         ldtproject.save()
       
   352     else:
   336     else:
   353         ldt = ''
   337         ldt = ''
       
   338     
   354     return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
   339     return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
   355     
   340 
       
   341     
       
   342 def get_attrib(ldtproject):
       
   343 
       
   344     doc = lxml.etree.fromstring(ldtproject.ldt.encode( "utf-8" ))
       
   345     result = doc.xpath("/iri/project")
       
   346 	
       
   347 	#set new title
       
   348     ldtproject.title = result[0].get("title")
       
   349 	
       
   350 	#get new content list
       
   351     new_contents=[]
       
   352     result = doc.xpath("/iri/medias/media")
       
   353     for medianode in result:
       
   354         id = medianode.get("id")
       
   355         new_contents.append(id)
       
   356 
       
   357     #set new content list
       
   358     for c in ldtproject.contents.all():
       
   359         if not c.iri_id in new_contents:
       
   360             ldtproject.contents.remove(c)
       
   361 
       
   362 	return ldtproject
       
   363 
       
   364 
       
   365 
   356 @login_required    
   366 @login_required    
   357 def publish(request, id, redirect=True):
   367 def publish(request, id, redirect=True):
   358     ldt = get_object_or_404(Project, ldt_id=id)
   368     ldt = get_object_or_404(Project, ldt_id=id)
   359     ldt.state = 2 #published
   369     ldt.state = 2 #published
   360     ldt.save()
   370     ldt.save()
   384     return render_to_response('ldt/ldt_utils/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL+settings.BASE_URL}, context_instance=RequestContext(request))
   394     return render_to_response('ldt/ldt_utils/init_ldt.html', {'MEDIA_URL': settings.MEDIA_URL, 'colorurl': settings.MEDIA_URL+'swf/ldt/pkg/color.xml', 'i18nurl': settings.MEDIA_URL+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.MEDIA_URL+'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL+settings.BASE_URL}, context_instance=RequestContext(request))
   385 
   395 
   386 
   396 
   387 def ldt(request, url, startSegment = None):
   397 def ldt(request, url, startSegment = None):
   388 
   398 
   389     import Ft
       
   390     from Ft.Xml import MarkupWriter
       
   391     
   399     
   392     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
   400     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
   393     resp['Cache-Control'] = 'no-cache'
   401     resp['Cache-Control'] = 'no-cache'
   394 
   402 
   395     contentList = Content.objects.filter(iri_id=url)
   403     contentList = Content.objects.filter(iri_id=url)