web/ldt/ldt_utils/views.py
changeset 80 1e7732f40eee
parent 71 fc1210bbb854
child 84 6c3162d9e632
child 91 9c83809fda01
equal deleted inserted replaced
79:674a65969a14 80:1e7732f40eee
    14 from models import *
    14 from models import *
    15 from utils import *
    15 from utils import *
    16 from contentindexer import *
    16 from contentindexer import *
    17 from projectserializer import *
    17 from projectserializer import *
    18 from string import Template
    18 from string import Template
    19 from Ft.Xml import MarkupWriter
       
    20 import cgi
    19 import cgi
    21 import uuid
    20 import uuid
    22 import base64
    21 import base64
    23 import lucene
    22 import lucene
    24 import xml.dom
       
    25 import xml.dom.ext
       
    26 import xml.dom.minidom
       
    27 import tempfile
    23 import tempfile
    28 import urllib2
    24 import urllib2
    29 from urllib2 import urlparse
    25 from urllib2 import urlparse
    30 from jogging import logging
    26 from jogging import logging
    31 
    27 import lxml.etree
    32 
    28 
    33     
    29     
    34 def searchForm(request):
    30 def searchForm(request):
    35     form = SearchForm()
    31     form = SearchForm()
    36     return render_to_response('ldt/ldt_utils_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
    32     return render_to_response('ldt/ldt_utils_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
    63     ldtgen = LdtUtils()
    59     ldtgen = LdtUtils()
    64     
    60     
    65     doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
    61     doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
    66     
    62     
    67     resp = HttpResponse(mimetype="text/xml;charset=utf-8")
    63     resp = HttpResponse(mimetype="text/xml;charset=utf-8")
    68     xml.dom.ext.PrettyPrint(doc, resp)
    64     doc.write(resp, pretty_print=True)
    69     return resp
    65     return resp
    70 
    66 
    71 def searchLdt(request, field, query, edition=None):
    67 def searchLdt(request, field, query, edition=None):
    72     
    68     
    73     contentList = []
    69     contentList = []
   110     iri_ids = None
   106     iri_ids = None
   111     
   107     
   112     if edition is not None:
   108     if edition is not None:
   113         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")))
   109         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")))
   114 
   110 
   115     doc = xml.dom.getDOMImplementation().createDocument(None, "iri", None)
   111     iri = lxml.etree.Element('iri')
       
   112     doc = lxml.etree.ElementTree(iri)	
   116 
   113 
   117     for resultMap in res:
   114     for resultMap in res:
   118         if iri_ids is None or resultMap['iri_id'] in iri_ids:
   115         if iri_ids is None or resultMap['iri_id'] in iri_ids:
   119             elem = doc.createElement('seg')
   116 	    seg = etree.SubElement(iri, 'seg')
   120             elem.setAttribute('idctt', resultMap['iri_id'])
   117 	    seg.set('idctt', resultMap['iri_id'])
   121             elem.setAttribute('idens', resultMap['ensemble_id'])
   118             seg.set('idens', resultMap['ensemble_id'])
   122             elem.setAttribute('iddec', resultMap['decoupage_id'])
   119             seg.set('iddec', resultMap['decoupage_id'])
   123             elem.setAttribute('idseg', resultMap['element_id'])
   120             seg.set('idseg', resultMap['element_id'])
   124             elem.setAttribute('idvue', "")
   121             seg.set('idvue', "")
   125             elem.setAttribute('crit', "")
   122 	    seg.set('crit', "")
   126             doc.documentElement.appendChild(elem)
   123 
   127 
   124     return doc  
   128     return HttpResponse(doc.toprettyxml(encoding='utf-8'), mimetype="text/xml;charset=utf-8")
   125   
   129     
   126     return HttpResponse(lxml.etree.tostring(doc, pretty_print=True), mimetype="text/xml;charset=utf-8") 
       
   127 
       
   128 
       
   129 
   130 @login_required         
   130 @login_required         
   131 def list_ldt(request):
   131 def list_ldt(request):
   132     contents = Content.objects.all()
   132     contents = Content.objects.all()
   133     try:
   133     try:
   134         owner = Owner.objects.get(user=request.user)
   134         owner = Owner.objects.get(user=request.user)
   185     doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
   185     doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
   186 
   186 
   187     resp = HttpResponse(mimetype="text/xml")
   187     resp = HttpResponse(mimetype="text/xml")
   188     resp['Cache-Control']='no-cache, must-revalidate'
   188     resp['Cache-Control']='no-cache, must-revalidate'
   189     resp['Pragma']='no-cache'
   189     resp['Pragma']='no-cache'
   190     xml.dom.ext.PrettyPrint(doc, resp)
   190     doc.write(resp, pretty_print=True) 
   191     return resp
   191     return resp
   192        
   192        
   193 def ldtProject(request, id):
   193 def ldtProject(request, id):
   194     resp = HttpResponse(mimetype="text/xml")
   194     resp = HttpResponse(mimetype="text/xml")
   195     resp['Cache-Control']='no-cache, must-revalidate'
   195     resp['Cache-Control']='no-cache, must-revalidate'
   260 def save_ldtProject(request):
   260 def save_ldtProject(request):
   261     if request.method=="POST":
   261     if request.method=="POST":
   262         ldt = request.POST['ldt']
   262         ldt = request.POST['ldt']
   263         id = request.POST['id']
   263         id = request.POST['id']
   264         ldtproject=Project.objects.get(ldt_id=id)
   264         ldtproject=Project.objects.get(ldt_id=id)
   265         #save xml ldt
   265         
       
   266 	#save xml ldt
   266         ldtproject.ldt=ldt
   267         ldtproject.ldt=ldt
   267         #get new title
   268 
   268         dom = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
   269 	ldtproj = get_attrib(ldtproject)
   269         con = xml.xpath.Context.Context(dom, 1, 1, None)
   270         ldtproj.save()
   270         result = xml.xpath.Evaluate("/iri/project",context=con)
   271 
   271         for pnode in result:
   272     else:
   272             title=pnode.getAttribute("title")
   273         ldt = ''
       
   274     
       
   275     return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
       
   276 
       
   277     
       
   278 def get_attrib(ldtproject):
       
   279        	doc = lxml.etree.fromstring(ldtproject.ldt.encode( "utf-8" ))
       
   280 	result = doc.xpath("/iri/project")
       
   281 	 
       
   282 	for pnode in result:
       
   283 	    title = pnode.get("title")
   273             break
   284             break
   274         #set new title
   285 
       
   286 	#set new title
   275         ldtproject.title=title
   287         ldtproject.title=title
   276         #get new content list
   288 	
       
   289 	#get new content list
   277         new_contents=[]
   290         new_contents=[]
   278         result = xml.xpath.Evaluate("/iri/medias/media", context=con)
   291 	result = doc.xpath("/iri/medias/media")
   279         for medianode in result:
   292         for medianode in result:
   280             id = medianode.attributes['id'].value
   293 	    id = medianode.get("id")
   281             new_contents.append(id)
   294             new_contents.append(id)
   282         # set new content list
   295 
       
   296         #set new content list
   283         for c in ldtproject.contents.all():
   297         for c in ldtproject.contents.all():
   284             if not c.iri_id in new_contents:
   298             if not c.iri_id in new_contents:
   285                 ldtproject.contents.remove(c)           
   299                 ldtproject.contents.remove(c)
   286         ldtproject.save()
   300 
   287     else:
   301 	return ldtproject
   288         ldt = ''
   302 
   289     return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
   303 
   290     
   304 
   291 @login_required    
   305 @login_required    
   292 def publish(request, id, redirect=True):
   306 def publish(request, id, redirect=True):
   293     ldt = get_object_or_404(Project, ldt_id=id)
   307     ldt = get_object_or_404(Project, ldt_id=id)
   294     ldt.state = 2 #published
   308     ldt.state = 2 #published
   295     ldt.save()
   309     ldt.save()
   319     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))
   333     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))
   320 
   334 
   321 
   335 
   322 def ldt(request, url, startSegment = None):
   336 def ldt(request, url, startSegment = None):
   323 
   337 
   324     import Ft
   338     ##import Ft
   325     from Ft.Xml import MarkupWriter
   339     ##from Ft.Xml import MarkupWriter ## ?
   326     
   340     
   327     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
   341     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
   328     resp['Cache-Control'] = 'no-cache'
   342     resp['Cache-Control'] = 'no-cache'
   329 
   343 
   330     contentList = Content.objects.filter(iri_id=url)
   344     contentList = Content.objects.filter(iri_id=url)