--- ECHO_content/VLPExtension.py 2007/10/04 18:45:33 1.65 +++ ECHO_content/VLPExtension.py 2008/09/05 16:08:30 1.75 @@ -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""" @@ -46,6 +47,22 @@ def makeXML(str): %s """%str + +def checkXMLfrag(str): + """checks and returns str as XML fragment""" + + xmltempl = """ + %s""" + + try: + dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str)) + return str + except: + str=str.replace("& ","& ") + + dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str)) + return str + def getText(nodelist): @@ -217,6 +234,56 @@ class VLP_essay(Folder): if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getPageList(self): + """returns sorted list of (id,object) of page objects""" + + def sortFind(x,y): + return cmp(x[0],y[0]) + +# pages=[] +# pagestmp=self.ZopeFind(self,obj_metatypes=['DTML Document','File']) +# for page in pagestmp: +# if not (page[1].getId()[0]=="."): +# pages.append(page) + + 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] + + if pageId is not None: + pageObj = getattr(self, pageId, None) + + if pageObj is not None: + txt = "" + 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 unicodify(xml) + def getPage(self,pagenum): """gibt essay page mit num aus""" @@ -225,25 +292,20 @@ class VLP_essay(Folder): pages=[] pagestmp=self.ZopeFind(self,obj_metatypes=['DTML Document','File']) for page in pagestmp: - if not (page[1].getId()[0]=="."): - pages.append(page) + if not (page[1].getId()[0]=="."): + pages.append(page) pages.sort(sortFind) #print str(pages[int(pagenum)][1]()) if pages[int(pagenum)-1][1].meta_type=='File': - - #return makeXML(str(pages[int(pagenum)-1][1])) - #txt=pages[int(pagenum)-1][1].data.decode('utf-8') - txt=pages[int(pagenum)-1][1].data - #print txt.encode('utf-8') - - return self.xml2html(makeXML(txt),quote="no") + #return makeXML(str(pages[int(pagenum)-1][1])) + #txt=pages[int(pagenum)-1][1].data.decode('utf-8') + txt=pages[int(pagenum)-1][1].data + #print txt.encode('utf-8') + return self.xml2html(makeXML(txt),quote="no") else: - - - - return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no") + return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no") def nextPage(self,pagenum,url): pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable @@ -500,7 +562,14 @@ class VLP_collection(ECHO_collection): RESPONSE.write("") files=os.listdir(self.vlp_basis) + i=0 for fileName in files: + if i<100: + i+=1 + else: + i=0 + transaction.get().commit() + RESPONSE.write("

committed

") if fileName[0:3]=="lit": metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta" try: @@ -628,8 +697,8 @@ class VLP_resource(ECHO_resource,Cacheab if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')): return os.path.join(self.vlp_basis,self.resourceID,'pageimg') - elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')): - return os.path.join(self.vlp_basis,self.resourceID,'pagesHi') + elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pages')): + return os.path.join(self.vlp_basis,self.resourceID,'pages') else: return "no images " @@ -647,6 +716,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') @@ -701,17 +798,32 @@ 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))) - self.REQUEST.RESPONSE.redirect(self.REQUEST['URL']+"?pn="+self.file2page(self.REQUEST.get('p',None))) + mt = self.getMediaType() + + 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() - - if hasattr(self,'libraryTemplate.html'): - return getattr(self,'libraryTemplate.html')() + def getVLPTemplate(self,name): + html=name+".html" + if hasattr(self,html): + return getattr(self,html) - pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','library_template.zpt')).__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp',name+'.zpt')).__of__(self) pt.content_type="text/html" - return pt() + return pt def index_html(self): """index_html""" @@ -763,7 +875,7 @@ class VLP_resource(ECHO_resource,Cacheab #size of hi resolution files=[] try: - pathHi=os.path.join(self.vlp_basis,self.resourceID,'pagesHi') + pathHi=os.path.join(self.vlp_basis,self.resourceID,'pages') files=os.listdir(pathHi) hi=0 for f in files: @@ -810,8 +922,8 @@ class VLP_resource(ECHO_resource,Cacheab ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')) self.imagePath='pageimg' except: - ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')) - self.imagePath='pagesHi' + ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pages')) + self.imagePath='pages' temp=[] ret.sort() for x in ret: @@ -823,12 +935,12 @@ class VLP_resource(ECHO_resource,Cacheab def firstPage(self,url=None): """showlink to the first image""" if self.REQUEST.get('pn','1')=="1": #erste seinte dann kein a tag - return """first
first""" + return """first
first""" else: ws=self.REQUEST.get('ws','1') return """ - first
first + first
first
"""%(self.REQUEST['URL']+"?pn=1&ws=%s"%ws) @@ -839,12 +951,12 @@ class VLP_resource(ECHO_resource,Cacheab ln=len(pages) if (self.REQUEST.get('pn')==str(ln)) or (ln==1): #letzte seite dann kein a tag oder nur eine Seite - return """last
last""" + return """last
last""" else: ws=self.REQUEST.get('ws','1') return """ - last
last + last
last
"""%(self.REQUEST['URL']+"?pn="+str(ln)+"&ws="+ws) @@ -854,12 +966,12 @@ class VLP_resource(ECHO_resource,Cacheab nn = int(self.REQUEST.get('pn','1'))-1 if nn < 1: #letzte seite dann kein a tag - return """prev
prev""" + return """prev
prev""" else: ws=self.REQUEST.get('ws','1') return """ - prev
prev + prev
prev
"""%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws) @@ -871,12 +983,12 @@ class VLP_resource(ECHO_resource,Cacheab nn = int(self.REQUEST.get('pn','1'))+1 if (nn>int(ln)) or (ln==1): #letzte seite dann kein a tag - return """next
next""" + return """next
next""" else: ws=self.REQUEST.get('ws','1') return """ - next
next + next
next
"""%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws)