web/ldt/ldt_utils/views.py
changeset 99 0fb4b009c6eb
parent 98 c9460033138f
parent 95 9bae869b2146
child 100 c5514a2bfdcd
equal deleted inserted replaced
98:c9460033138f 99:0fb4b009c6eb
     1 from Ft.Xml import MarkupWriter
       
     2 from contentindexer import *
     1 from contentindexer import *
     3 from django.conf import settings
     2 from django.conf import settings
     4 from django.contrib.auth.decorators import login_required
     3 from django.contrib.auth.decorators import login_required
     5 from django.core import serializers
     4 from django.core import serializers
     6 from django.core.urlresolvers import reverse
     5 from django.core.urlresolvers import reverse
       
     6 from django.db.models import Q
     7 from django.forms.forms import get_declared_fields
     7 from django.forms.forms import get_declared_fields
     8 from django.forms.models import model_to_dict 
     8 from django.forms.models import model_to_dict
     9 from django.forms.util import ErrorList
     9 from django.forms.util import ErrorList
    10 from django.http import HttpResponse, HttpResponseRedirect, \
    10 from django.http import HttpResponse, HttpResponseRedirect, \
    11     HttpResponseForbidden
    11     HttpResponseForbidden, HttpResponseServerError
    12 from django.shortcuts import render_to_response, get_object_or_404, \
    12 from django.shortcuts import render_to_response, get_object_or_404, \
    13     get_list_or_404
    13     get_list_or_404
    14 from django.template import RequestContext
    14 from django.template import RequestContext
       
    15 from django.template.loader import render_to_string
    15 from django.utils import simplejson
    16 from django.utils import simplejson
    16 from django.utils.html import escape
    17 from django.utils.html import escape
    17 from django.utils.translation import ugettext as _, ungettext
    18 from django.utils.translation import ugettext as _, ungettext
    18 from fileimport import *
    19 from fileimport import *
    19 from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, \
    20 from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, \
    20     CopyProjectForm, ContentForm, MediaForm
    21     CopyProjectForm, ContentForm, MediaForm
    21 from ldt.core.models import Owner
    22 from ldt.core.models import Owner
       
    23 from ldt.ldt_utils.models import Content, Project, Owner
       
    24 from ldt.ldt_utils.projectserializer import ProjectSerializer
       
    25 from ldt.ldt_utils.utils import boolean_convert
    22 from lxml import etree
    26 from lxml import etree
       
    27 from lxml.html import fromstring, fragment_fromstring
    23 from models import *
    28 from models import *
    24 from projectserializer import *
    29 from projectserializer import *
    25 from string import Template
    30 from string import Template
    26 from urllib2 import urlparse
    31 from urllib2 import urlparse
    27 from utils import *
    32 from utils import *
    31 import django.core.urlresolvers
    36 import django.core.urlresolvers
    32 import ldt.auth as ldt_auth
    37 import ldt.auth as ldt_auth
    33 import ldt.utils.path as ldt_utils_path
    38 import ldt.utils.path as ldt_utils_path
    34 import logging
    39 import logging
    35 import lucene
    40 import lucene
       
    41 import lxml.etree
    36 import tempfile
    42 import tempfile
    37 import urllib2
    43 import urllib2
    38 import uuid
    44 import uuid
    39     
    45 
       
    46 
       
    47 @login_required
       
    48 def workspace(request):
       
    49 
       
    50     # list of contents
       
    51     content_list = Content.objects.all()
       
    52 
       
    53     # get list of projects
       
    54     project_list = Project.objects.all()
       
    55 
       
    56     # render list
       
    57     return render_to_response("ldt/ldt_utils/workspace.html",
       
    58                               {'contents': content_list, 'projects': project_list},
       
    59                               context_instance=RequestContext(request))
       
    60 
       
    61 
       
    62 def popup_embed(request):
       
    63 
       
    64     json_url = request.GET.get("json_url")
       
    65     player_id = request.GET.get("player_id")
       
    66     ldt_id = request.GET.get("ldt_id")
       
    67 
       
    68 
       
    69     project = Project.objects.get(ldt_id=ldt_id);
       
    70 
       
    71     if not ldt_auth.checkAccess(request.user, project):
       
    72         return HttpResponseForbidden(_("You can not access this project"))
       
    73 
       
    74     ps = ProjectSerializer(project, from_contents=False, from_display=True)
       
    75     annotations = ps.getAnnotations(first_cutting=True)
       
    76 
       
    77     embed_rendered = dict((typestr,
       
    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))
       
    79                            for typestr in ('player','seo_body', 'seo_meta', 'links')  )
       
    80 
       
    81     return render_to_response("ldt/ldt_utils/embed_popup.html",
       
    82                               {'json_url':json_url,'player_id':player_id, 'embed_rendered':embed_rendered, 'annotations':annotations},
       
    83                               context_instance=RequestContext(request))
       
    84 
       
    85 
       
    86 
       
    87 @login_required
       
    88 def projectsfilter(request, filter, is_owner=False, status=0):
       
    89 
       
    90     project_list = None
       
    91     is_owner = boolean_convert(is_owner)
       
    92     status = int(status)
       
    93     query = Q()
       
    94 
       
    95     if is_owner:
       
    96         owner = None
       
    97         try:
       
    98             owner = Owner.objects.get(user=request.user)
       
    99         except:
       
   100             return HttpResponseServerError("<h1>User not found</h1>")
       
   101         query &= Q(owner=owner)
       
   102 
       
   103     if status > 0:
       
   104         query &= Q(state=status)
       
   105 
       
   106     if filter:
       
   107         if len(filter) > 0 and filter[0] == '_':
       
   108             filter = filter[1:]
       
   109         query &= Q(title__icontains=filter)
       
   110 
       
   111     project_list =  Project.objects.filter(query)
       
   112 
       
   113     return render_to_response("ldt/ldt_utils/partial/projectslist.html",
       
   114                               {'projects': project_list},
       
   115                               context_instance=RequestContext(request))
       
   116 
       
   117 
       
   118 
       
   119 
       
   120 
       
   121 @login_required
       
   122 def contentsfilter(request, filter):
       
   123     if filter and len(filter) > 0 and filter[0] == '_':
       
   124         filter = filter[1:]
       
   125 
       
   126     if filter:
       
   127         content_list = Content.objects.filter(title__icontains=filter)
       
   128     else:
       
   129         content_list = Content.objects.all()
       
   130 
       
   131     return render_to_response("ldt/ldt_utils/partial/contentslist.html",
       
   132                               {'contents': content_list},
       
   133                               context_instance=RequestContext(request))
       
   134 
       
   135 
    40 def searchForm(request):
   136 def searchForm(request):
    41     form = SearchForm()
   137     form = SearchForm()
    42     return render_to_response('ldt/ldt_utils_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
   138     return render_to_response('ldt/ldt_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
    43 
   139 
    44 def searchIndex(request):
   140 def searchIndex(request):
    45     
   141     
    46     sform = SearchForm(request.POST)
   142     sform = SearchForm(request.POST)
    47     if sform.is_valid():
   143     if sform.is_valid():
    51         queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
   147         queryStr = base64.urlsafe_b64encode(search.encode('utf8'))
    52         field = request.POST["field"]
   148         field = request.POST["field"]
    53         language_code = request.LANGUAGE_CODE[:2]
   149         language_code = request.LANGUAGE_CODE[:2]
    54     
   150     
    55         url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
   151         url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
    56         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': url}, context_instance=RequestContext(request))
   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))
    57     else:
   153     else:
    58         resp = HttpResponse()
   154         resp = HttpResponse()
    59         resp.write("<html><head></head><body>Error : No result</body></html>");
   155         resp.write("<html><head></head><body>Error : No result</body></html>");
    60 
   156 
    61 def searchIndexGet(request, field, query):
   157 def searchIndexGet(request, field, query):
    62 
   158 
    63     language_code = request.LANGUAGE_CODE[:2]
   159     language_code = request.LANGUAGE_CODE[:2]
    64     url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
   160     url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
    65     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))
   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))
    66 
   162 
    67 def searchInit(request, field, query):
   163 def searchInit(request, field, query):
    68     
   164     
    69     ldtgen = LdtUtils()
   165     ldtgen = LdtUtils()
    70     
   166     
   175         form_status = "none"
   271         form_status = "none"
   176             
   272             
   177     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))
   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))
   178      
   274      
   179 def created_ldt(request):
   275 def created_ldt(request):
   180     return render_to_response('ldt/ldt_utils/done.html', context_instance=RequestContext(request))
   276     return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request))
   181     
   277     
   182 def indexProject(request, id):
   278 def indexProject(request, id):
   183 
   279 
   184     urlStr = settings.WEB_URL + reverse("space_ldt_init", args=['ldtProject', id])
   280     urlStr = settings.WEB_URL + reverse("space_ldt_init", args=['ldtProject', id])
   185     posturl= settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
   281     posturl= settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
   189     if ldt.state ==2: #published
   285     if ldt.state ==2: #published
   190         readonly = 'true'
   286         readonly = 'true'
   191     else:
   287     else:
   192         readonly = 'false'
   288         readonly = 'false'
   193     
   289     
   194     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, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
   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))
   195     
   291     
   196 def init(request, method, url):
   292 def init(request, method, url):
   197     ldtgen = LdtUtils()
   293     ldtgen = LdtUtils()
   198 
   294 
   199     doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
   295     doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
   200 
   296 
   201     resp = HttpResponse(mimetype="text/xml")
   297     resp = HttpResponse(mimetype="text/xml")
   202     resp['Cache-Control']='no-cache, must-revalidate'
   298     resp['Cache-Control']='no-cache, must-revalidate'
   203     resp['Pragma']='no-cache'
   299     resp['Pragma']='no-cache'
   204     
   300 
   205     resp.write( etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
   301     resp.write( etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
   206     return resp
   302     return resp
   207        
   303        
   208 def ldtProject(request, id):
   304 def ldtProject(request, id):
   209     resp = HttpResponse(mimetype="text/xml")
   305     resp = HttpResponse(mimetype="text/xml")
   390 def index(request, url):
   486 def index(request, url):
   391     
   487     
   392     urlStr = settings.WEB_URL + reverse("ldt_init", args=['ldt',url])
   488     urlStr = settings.WEB_URL + reverse("ldt_init", args=['ldt',url])
   393     language_code = request.LANGUAGE_CODE[:2]
   489     language_code = request.LANGUAGE_CODE[:2]
   394     
   490     
   395     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))
   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))
   396 
   492 
   397 
   493 
   398 def ldt(request, url, startSegment = None):
   494 def ldt(request, url, startSegment = None):
   399 
       
   400     
   495     
   401     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
   496     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
   402     resp['Cache-Control'] = 'no-cache'
   497     resp['Cache-Control'] = 'no-cache'
   403 
   498 
   404     contentList = Content.objects.filter(iri_id=url)
   499     contentList = Content.objects.filter(iri_id=url)
   478     return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
   573     return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
   479 
   574 
   480 
   575 
   481 def write_content_base(request, iri_id=None):
   576 def write_content_base(request, iri_id=None):
   482 
   577 
   483     logging.debug(repr(request))
       
   484     if iri_id:        
   578     if iri_id:        
   485         instance_content = Content.objects.get(iri_id=iri_id)
   579         instance_content = Content.objects.get(iri_id=iri_id)
   486         instance_media = instance_content.media_obj
   580         instance_media = instance_content.media_obj
   487         logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content) ) 
   581         logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content) ) 
   488     else:
   582     else:
   672         media_form = MediaForm()
   766         media_form = MediaForm()
   673     else:
   767     else:
   674         content_form, media_form, form_status = write_content_base(request, iri_id)
   768         content_form, media_form, form_status = write_content_base(request, iri_id)
   675 
   769 
   676     if iri_id:
   770     if iri_id:
   677         create_content_action =  reverse(write_content, kwargs={'iri_id':iri_id})
   771         create_content_action =  reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
   678     else:
   772     else:
   679         create_content_action =  reverse(write_content)
   773         create_content_action =  reverse('ldt.ldt_utils.views.write_content')
   680 
       
   681     
   774     
   682     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))
   775     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))
   683 
   776 
   684 @login_required
   777 @login_required
   685 def prepare_delete_content(request, iri_id=None):
   778 def prepare_delete_content(request, iri_id=None):