--- ECHO_content/VLPExtension.py 2008/08/05 16:17:46 1.70 +++ ECHO_content/VLPExtension.py 2008/09/04 12:09:33 1.74 @@ -2,16 +2,10 @@ This module contains extensions which where originally made for the VLP. """ from OFS.Cache import Cacheable -from Products.ECHO_content.ECHO_collection import * from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from OFS.Image import File -try: - from Products.zogiLib import zogiLib -except: - print "Zogilib not installed, VLP_resource will not work" - import xml.dom.minidom import urllib import xmlrpclib @@ -23,6 +17,13 @@ from types import * from Globals import package_home import transaction +from Products.ECHO_content.ECHO_collection import * +from vlp_xmlhelpers import * +try: + from Products.zogiLib import zogiLib +except: + print "Zogilib not installed, VLP_resource will not work" + def lemmatize(str): """takes a str and addes links the dictionary service""" @@ -52,13 +53,14 @@ def checkXMLfrag(str): xmltempl = """ %s""" + try: - dom=xml.dom.minidom.parseString(xmltempl%str) + dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str)) return str except: str=str.replace("& ","& ") - dom=xml.dom.minidom.parseString(xmltempl%str) + dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str)) return str @@ -246,10 +248,14 @@ class VLP_essay(Folder): pages = self.objectItems(['DTML Document','File']) pages.sort(sortFind) + #logging.debug("pageList=%s"%repr(pages)) + return pages def getPageXMLfrag(self, pageNum=None, pageId=None, pageObj=None): """returns XML fragment of page with id""" + xml = None + if pageNum is not None: pl = self.getPageList() pageObj = pl[int(pageNum)-1][1] @@ -259,16 +265,24 @@ class VLP_essay(Folder): if pageObj is not None: txt = "" - data = pageObj.data - while data is not None: - txt += data - if isinstance(data, str): - data = None - else: - data = data.next + if pageObj.meta_type == 'File': + data = pageObj.data + #logging.debug("data=%s txt=%s"%(repr(data),txt)) + while data is not None: + if isinstance(data, str): + txt += data + data = None + else: + txt += data.data + data = data.next + else: + # not a File object... perhaps its executable + txt += pageObj() + xml = checkXMLfrag(txt) - return xml + + return unicodify(xml) def getPage(self,pagenum): @@ -695,6 +709,34 @@ class VLP_resource(ECHO_resource,Cacheab + def identifyMediaType(self): + """identifiziert den Medientype aus der VLP Datenbank""" + founds=self.ZSQLSimpleSearch('select * from vl_literature where reference=\''+self.resourceID+'\' order by id') + if (not founds) or (len(founds)==0): + self.mediaType="generic" # steht nicht in der Datenbank, dann nimm generisch an + return self.mediaType + + + if founds[0].referencetype =="Audio": + self.mediaType ="audio" + elif founds[0].referencetype =="Film": + self.mediaType ="video" + else: + self.mediaType ="image" # nimm an, dass alle anderen Eintrage in der Datenbank auf images verweisen (Buecher oder Fotografien). + + return self.mediaType + + def getMediaType(self,cached=False): + """give the Media-type back, if chached False, then get it from the database""" + + if (not hasattr(self,'mediaType')) or (self.mediaType=="") or (not cached): + self.identifyMediaType() + + return self.mediaType + + + + def copyTranscriptionFromDB(self): """checks if transcription exits in DB""" founds=self.ZSQLSimpleSearch('select * from vl_transcript where source=\''+self.resourceID+'\' order by id') @@ -749,21 +791,33 @@ class VLP_resource(ECHO_resource,Cacheab def show(self): """show the rendered file""" - if self.REQUEST.get('p',None): - #self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None))) - params = "pn=%s"%self.file2page(self.REQUEST.get('p',None)) - mk = self.REQUEST.get('mk',None) - if mk: - params += "&mk=%s"%mk - self.REQUEST.RESPONSE.redirect(self.REQUEST['URL']+'?'+params) - - if hasattr(self,'libraryTemplate.html'): - return getattr(self,'libraryTemplate.html')() + mt = self.getMediaType() - pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','library_template.zpt')).__of__(self) - pt.content_type="text/html" + if (mt in ['video','audio']): + pt = self.getVLPTemplate('libraryMovieTemplate') + else: #zur zeit werden alle anderen type auf das libraryTemplate abgebildet. + + if self.REQUEST.get('p',None): #make sure that parameter p exists + #self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None))) + params = "pn=%s"%self.file2page(self.REQUEST.get('p',None)) + mk = self.REQUEST.get('mk',None) + if mk: + params += "&mk=%s"%mk + self.REQUEST.RESPONSE.redirect(self.REQUEST['URL']+'?'+params) + + pt = self.getVLPTemplate('libraryTemplate') + return pt() + def getVLPTemplate(self,name): + html=name+".html" + if hasattr(self,html): + return getattr(self,html) + + pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp',name+'.zpt')).__of__(self) + pt.content_type="text/html" + return pt + def index_html(self): """index_html""" #return self.REQUEST