web/ldt_utils/ldt/views.py
changeset 4 7c994c98d1df
parent 0 ecdfc63274bf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt_utils/ldt/views.py	Tue Jun 08 15:31:42 2010 +0200
@@ -0,0 +1,287 @@
+import django.core.urlresolvers
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response, get_object_or_404
+from django.template import RequestContext
+from django.core.urlresolvers import reverse
+from django.contrib.auth.decorators import login_required
+from django.conf import settings
+from fileimport import *
+from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm
+from ldt.core.models import Owner
+from models import *
+from utils import *
+from contentindexer import *
+from string import Template
+from Ft.Xml import MarkupWriter
+import cgi
+import uuid
+import base64
+import lucene
+import xml.dom
+import xml.dom.ext
+import xml.dom.minidom
+
+
+    
+def searchForm(request):
+    form = SearchForm()
+    return render_to_response('ldt/ldt/search_form.html',{'form': form} , context_instance=RequestContext(request))    
+
+def searchIndex(request):
+    
+    sform = SearchForm(request.POST)
+    if sform.is_valid():
+        search = sform.cleaned_data["search"]
+    
+    
+        queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
+        field = request.POST["field"]
+        language_code = request.LANGUAGE_CODE[:2]
+    
+        url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
+        return render_to_response('ldt/ldt/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': url}, context_instance=RequestContext(request))
+    else:
+        resp = HttpResponse()
+        resp.write("<html><head></head><body>Error : No result</body></html>");
+
+def searchIndexGet(request, field, query):
+
+    language_code = request.LANGUAGE_CODE[:2]
+    url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
+    return render_to_response('irisuser/ldt/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': url}, context_instance=RequestContext(request))
+
+def searchInit(request, field, query):
+    
+    ldtgen = LdtUtils()
+    
+    doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
+    
+    resp = HttpResponse(mimetype="text/xml;charset=utf-8")
+    xml.dom.ext.PrettyPrint(doc, resp)
+    return resp
+
+def searchLdt(request, field, query, edition=None):
+    
+    contentList = []
+    resp = HttpResponse(mimetype="text/xml")
+    queryStr = ""
+
+    if query and len(query)>0:        
+        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
+        searcher = LdtSearch()
+        ids = {}
+        
+        for result in searcher.query(field, queryStr):
+            ids[result["iri_id"]] = ""            
+
+        id_list = ids.keys()
+        
+        if edition is not None:
+            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")))            
+            id_list = filter(lambda id: id in id_list, ids_editions)
+            
+        contentList = Content.objects.filter(iri_id__in=id_list)        
+
+            
+    ldtgen = LdtUtils()
+    ldtgen.generateLdt(contentList, file=resp, title = u"Recherche : " + queryStr)
+    
+    return resp
+
+
+def searchSegments(request, field, query, edition=None):
+    
+    if query and len(query)>0:
+        searcher = LdtSearch()
+        
+        queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
+        res = searcher.query(field, queryStr)
+    else:
+        res = []
+        
+    iri_ids = None
+    
+    if edition is not None:
+        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")))
+
+    doc = xml.dom.getDOMImplementation().createDocument(None, "iri", None)
+
+    for resultMap in res:
+        if iri_ids is None or resultMap['iri_id'] in iri_ids:
+            elem = doc.createElement('seg')
+            elem.setAttribute('idctt', resultMap['iri_id'])
+            elem.setAttribute('idens', resultMap['ensemble_id'])
+            elem.setAttribute('iddec', resultMap['decoupage_id'])
+            elem.setAttribute('idseg', resultMap['element_id'])
+            elem.setAttribute('idvue', "")
+            elem.setAttribute('crit', "")
+            doc.documentElement.appendChild(elem)
+
+    return HttpResponse(doc.toprettyxml(encoding='utf-8'), mimetype="text/xml;charset=utf-8")
+    
+@login_required         
+def list_ldt(request):
+    contents = Content.objects.all()
+    try:
+        owner = Owner.objects.get(user=request.user)
+    except:
+        return HttpResponseRedirect(settings.LOGIN_URL)
+    ldtProjects = Project.objects.filter(owner=owner)
+    context={
+    'contents': contents,
+    'ldtProjects': ldtProjects.reverse(),
+    }
+    return render_to_response('ldt/ldt/ldt_list.html', context, context_instance=RequestContext(request))
+
+def create_ldt_view(request):
+    if request.method == "POST" :
+        form = LdtAddForm(request.POST)
+        if form.is_valid():
+            user = request.user
+            Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'])
+            return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    else:
+        form = LdtAddForm()
+        contents = Content.objects.all()    
+        return render_to_response('ldt/ldt/create_ldt.html', {'contents': contents, 'form': form,'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
+     
+def created_ldt(request):
+    return render_to_response('ldt/ldt/done.html', context_instance=RequestContext(request))
+    
+def indexProject(request, id):
+
+    urlStr = settings.WEB_URL + reverse("ldt.ldt_utils.views.init", args=['ldtProject', id])
+    posturl= settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
+    language_code = request.LANGUAGE_CODE[:2]
+    
+    ldt = get_object_or_404(Project, ldt_id=id)
+    if ldt.state ==2: #published
+        readonly = 'true'
+    else:
+        readonly = 'false'
+    
+    return render_to_response('ldt/ldt/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, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
+    
+def init(request, method, url):
+    ldtgen = LdtUtils()
+
+    doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
+
+    resp = HttpResponse(mimetype="text/xml")
+    resp['Cache-Control']='no-cache, must-revalidate'
+    resp['Pragma']='no-cache'
+    xml.dom.ext.PrettyPrint(doc, resp)
+    return resp
+       
+def ldtProject(request, id):
+    resp = HttpResponse(mimetype="text/xml")
+    resp['Cache-Control']='no-cache, must-revalidate'
+    resp['Pragma']='no-cache'
+    
+    project = Project.objects.get(ldt_id=id)
+    resp.write(project.ldt)
+    return resp
+
+def save_ldtProject(request):
+    if request.method=="POST":
+        ldt = request.POST['ldt']
+        id = request.POST['id']
+        ldtproject=Project.objects.get(ldt_id=id)
+        #save xml ldt
+        ldtproject.ldt=ldt
+        #get new title
+        dom = xml.dom.minidom.parseString(ldt.encode( "utf-8" ))
+        con = xml.xpath.Context.Context(dom, 1, 1, None)
+        result = xml.xpath.Evaluate("/iri/project",context=con)
+        for pnode in result:
+            title=pnode.getAttribute("title")
+            break
+        #set new title
+        ldtproject.title=title
+        #get new content list
+        new_contents=[]
+        result = xml.xpath.Evaluate("/iri/medias/media", context=con)
+        for medianode in result:
+            id = medianode.attributes['id'].value
+            new_contents.append(id)
+        # set new content list
+        for c in ldtproject.contents.all():
+            if not c.iri_id in new_contents:
+                ldtproject.contents.remove(c)           
+        ldtproject.save()
+    else:
+        ldt = ''
+    return render_to_response('ldt/ldt/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
+    
+@login_required    
+def publish(request, id):
+    ldt = get_object_or_404(Project, ldt_id=id)
+    ldt.state = 2 #published
+    ldt.save()
+    return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    
+@login_required    
+def unpublish(request, id):
+    ldt = get_object_or_404(Project, ldt_id=id)
+    ldt.state = 1 #edition
+    ldt.save()
+    return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    
+
+def index(request, url):
+    
+    urlStr = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.init", args=['ldt',url])
+    language_code = request.LANGUAGE_CODE[:2]
+    
+    return render_to_response('ldt/ldt/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))
+
+
+def ldt(request, url, startSegment = None):
+
+    import Ft
+    from Ft.Xml import MarkupWriter
+    
+    resp = HttpResponse(mimetype="text/xml; charset=utf-8")
+    resp['Cache-Control'] = 'no-cache'
+
+    contentList = Content.objects.filter(iri_id=url)
+
+    ldtgen = LdtUtils()
+    ldtgen.generateLdt(contentList, file=resp, title = contentList[0].title, startSegment=startSegment)
+
+    return resp
+
+
+def loading(request):
+     return render_to_response('ldt/ldt/loading.html', context_instance=RequestContext(request))
+
+
+@login_required
+def create_project(request, iri_id):
+
+    content = get_object_or_404(Content, iri_id=iri_id)
+    contents = [ content, ]
+    if request.method == "POST" :
+        form = AddProjectForm(request.POST)
+        if form.is_valid():
+            user=request.user
+            project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents)
+            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
+    else:
+        form = AddProjectForm()
+    return render_to_response('ldt/ldt/create_ldt.html', {'form':form, 'contents':contents, 'iri_id':iri_id, 'create_project_action':reverse("ldt.ldt_utils.views.create_project",args=[iri_id])}, context_instance=RequestContext(request))
+
+@login_required
+def copy_project(request, ldt_id):
+
+    project = get_object_or_404(Project, ldt_id=ldt_id)
+    if request.method == "POST" :
+        form = CopyProjectForm(request.POST)
+        if form.is_valid():
+            user=request.user
+            project = project.copy_project(title=request.POST['title'], user=user)
+            return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
+    else:
+        form = CopyProjectForm
+    return render_to_response('ldt/ldt/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
+