Diff for /ECHO_content/VLPExtension.py between versions 1.60 and 1.95

version 1.60, 2007/06/29 08:21:16 version 1.95, 2012/01/03 13:02:31
Line 2 Line 2
 This module contains extensions which where originally made for the VLP.  This module contains extensions which where originally made for the VLP.
 """  """
 from OFS.Cache import Cacheable  from OFS.Cache import Cacheable
 from Products.ECHO_content.ECHO_collection import *  
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile  from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 from Products.PageTemplates.PageTemplate import PageTemplate  from Products.PageTemplates.PageTemplate import PageTemplate
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate  from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from OFS.Image import File  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 xml.dom.minidom
 import urllib  import urllib
 import xmlrpclib  import xmlrpclib
Line 21  import os Line 15  import os
 from stat import *  from stat import *
 from types import *  from types import *
 from Globals import package_home  from Globals import package_home
   import transaction
   import Acquisition
   import re
   import logging
   
   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):  def lemmatize(str):
Line 47  def makeXML(str): Line 51  def makeXML(str):
                               </page>"""%str                                </page>"""%str
                           
                                             
   def checkXMLfrag(str):
       """checks and returns str as XML fragment"""
       
       xmltempl = """<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
       <txt>%s</txt>"""
   
       try:
           dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str))
           return str
       except:
           str=str.replace("& ","&amp; ")
   
       dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str))
       return str
       
                        
                           
 def getText(nodelist):  def getText(nodelist):
   
Line 144  def manage_addSendMailForm(self, id, toA Line 164  def manage_addSendMailForm(self, id, toA
     return ''      return ''
   
                   
   class VLP_collectionFolder(Folder):
       """klasse fuer folder innerhalb der collection"""
       meta_type="VLP_collectionFolder"
       
 class VLP_essay(Folder):  class VLP_essay(Folder):
     """classe für VLP essays"""      """classe fr VLP essays"""
   
     meta_type="VLP_essay"      meta_type="VLP_essay"
   
Line 217  class VLP_essay(Folder): Line 241  class VLP_essay(Folder):
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              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):      def getPage(self,pagenum):
         """gibt essay page mit num aus"""          """gibt essay page mit num aus"""
Line 232  class VLP_essay(Folder): Line 306  class VLP_essay(Folder):
         #print str(pages[int(pagenum)][1]())          #print str(pages[int(pagenum)][1]())
                   
         if pages[int(pagenum)-1][1].meta_type=='File':          if pages[int(pagenum)-1][1].meta_type=='File':
                   
                 #return makeXML(str(pages[int(pagenum)-1][1]))                  #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.decode('utf-8')
                 txt=pages[int(pagenum)-1][1].data                  txt=pages[int(pagenum)-1][1].data
                 #print txt.encode('utf-8')                  #print txt.encode('utf-8')
                               tmp =makeXML(txt)
                 return self.xml2html(makeXML(txt),quote="no")              logging.debug(txt)
               return self.xml2html(tmp,quote="no")
         else:          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):      def nextPage(self,pagenum,url):
Line 263  class VLP_essay(Folder): Line 334  class VLP_essay(Folder):
             retstr=url+"?p="+str(int(pagenum)+1)              retstr=url+"?p="+str(int(pagenum)+1)
             return retstr              return retstr
                   
       def lastURL(self,pagenum,url):
           # teste ob performance ok, sonst in variable
           pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) 
           
           return url+"?p="+str(pages)
               
     def previousURL(self,pagenum,url):      def previousURL(self,pagenum,url):
                   
         if int(pagenum)-1 > 0:          if int(pagenum)-1 > 0:
Line 410  def manage_addVLP_subCollection(self,id, Line 487  def manage_addVLP_subCollection(self,id,
         if RESPONSE is not None:          if RESPONSE is not None:
                 RESPONSE.redirect('manage_main')                  RESPONSE.redirect('manage_main')
   
   from zope.publisher.interfaces import IPublishTraverse
   from zope.interface import implements
   from zope.publisher.interfaces import NotFound 
   #from zope.app import zapi 
   from zope.component import queryMultiAdapter
   try:
       from ZPublisher.BaseRequest import DefaultPublishTraverse
   except:
       pass
   
 class VLP_collection(ECHO_collection):  class VLP_collection(ECHO_collection,Acquisition.Explicit):
     """VLP spezifische Erweiterung der Collection"""      """VLP spezifische Erweiterung der Collection"""
   
           
       
       implements(IPublishTraverse)
       
       
       def foxridgePath2vlp(self,url,mk,RESPONSE=None):
           """convertiert einen pfad zu einer url in vlp"""
           litRe = re.match(r".*lit([0-9]*)",url)
           logging.debug("foxridgePath2vlp URL:"+repr(url))
           lit = "lit"+litRe.group(1)
           splitted=url.split("/")
           path=splitted[-1].split(".")[0]
           newUrl=lit+"?p=%s&mk=%s"%(path,mk)
           
           if RESPONSE:
               RESPONSE.redirect(newUrl)
               return
               
           return newUrl
         
       def findObjFromLitName(self,fileName):
           if not fileName[0:3]=="lit":
               logging.error("getOrCreateFolder wrong filename: %s"%fileName)
               return None
           
           
           restName="%08d"%int(fileName[3:])
           
           fs=(restName[0:2],restName[0:4],restName[0:6])
           
           current =self
           for f in fs:
               obj = getattr(current,f,None)
               if not obj: #subfolder existiert nicht
                   return None
               current=obj
               
           return getattr(current,fileName,None)
           
       def publishTraverse(self,request,name):
           """change the traversal if literature object"""
           
           actual_url=request['ACTUAL_URL']
           lastActual=actual_url.split("/")[-1]
           logging.debug("pub_trav:"+actual_url)
      
           if name.startswith("lit"): #umleitung wenn lit aufgerufen wirk
               # umleitung auf den eigentlichen folder nur wenn direkt der Folder litXXX oder dessen index_html methode aufgerufen wird
               if lastActual.startswith("lit") or (lastActual=="index_html") or (lastActual=="index_meta") or   (lastActual=="getTitle") or   (lastActual=="getMetaDataLink") or (lastActual=="hasTranscription") or (lastActual=="transcription"): 
                   #obj=self. ZopeFind(self,obj_ids=[name],search_sub=1)
                   ob=self.findObjFromLitName(name)
                   if not ob:
                       return "LIt not found"
                   else:
             
                       logging.debug("request:"+repr(ob))
                       request.response.setStatus(200)
                       #if (lastActual=="index_meta"):
                      #     logging.debug("index_meta requested")
                      #     return ob.index_meta
                       return ob
                   
               else: ## andern falls transversiere zum parent.
                   obj = self.aq_parent
                   return obj
           else: # mache gar nichts falls nicht lit aufgerufen wird
    
              
               tr=DefaultPublishTraverse(self, request)
               ob= tr.publishTraverse(request, name)
          
               return ob
            #raise NotFound(self.context, name, request) 
               #return repr(request)
       
     meta_type="VLP_collection"      meta_type="VLP_collection"
     manage_options=ECHO_collection.manage_options+(      manage_options=ECHO_collection.manage_options+(
         {'label':'Change Path','action':'VLP_path_configForm'},          {'label':'Change Path','action':'VLP_path_configForm'},
         {'label':'Update Library','action':'updateCollection'},          {'label':'Update Library','action':'updateCollection'},
         {'label':'Update Metadata','action':'updateCollectionMD'},          {'label':'Update Metadata','action':'updateCollectionMD'},
         )          )
       def getAllRessources(self):
           """getallressources"""
           res=self.ZopeFind(self,obj_metatypes=['VLP_resource'],search_sub=1)
           ret=[]
           for r in res:
               ret.append([r[0],r[1].absolute_url()])
   
           return ret
   
       def generateSubCollections(self,errorsTXT="",forceUpdate=False,RESPONSE=None):
     def generateSubCollections(self,errorsTXT=""):  
             """erzeuge subcollectionen"""              """erzeuge subcollectionen"""
           logging.debug("generateSubCollections")
             founds=self.ZSQLSimpleSearch("select * from vl_literature where referencetype in ('(Edited Book)','(Book)','(Collection)','(JournalVolume)','(Generic Container)')")              founds=self.ZSQLSimpleSearch("select * from vl_literature where referencetype in ('(Edited Book)','(Book)','(Collection)','(JournalVolume)','(Generic Container)')")
                           
           if RESPONSE is not None:
               RESPONSE.setHeader('Content-Type','text/html')
             self.REQUEST.RESPONSE.write("<h2>Create Subcollections</h2>\n")              self.REQUEST.RESPONSE.write("<h2>Create Subcollections</h2>\n")
             for found in founds:              for found in founds:
   
                     try:                      try:
                             foundCol=self.ZopeFind(self,obj_ids=[found.reference])                  litid = str(found.reference)
                   foundCol=self.findObjFromLitName(litid)
                   #foundCol=self.ZopeFind(self,obj_ids=[litid])
                             if foundCol:                              if foundCol:
                       col = foundCol
                       logging.debug("generateSubCollections: subcollection %s exists (%s)"%(repr(col),found.reference))
                       logging.debug(repr([col.title,found.titlerefdisplay,col.label,found.titlerefdisplay]))
                       if (unicodify(col.title) != unicodify(found.titlerefdisplay)) or (unicodify(col.label) != unicodify(found.titlerefdisplay)):
                           # subcollection seems to have changed    
                           logging.debug("generateSubCollections: subcollection has changed, recreating!")
                           col.aq_parent.manage_delObjects([col.getId()])
                           manage_addVLP_subCollection(self.getOrCreateFolderForFile(litid),litid,found.titlerefdisplay,found.titlerefdisplay)
                   else:
                       logging.debug("generateSubCollections: creating new subcollection %s"%found.reference)
                       manage_addVLP_subCollection(self.getOrCreateFolderForFile(litid),litid,found.titlerefdisplay,found.titlerefdisplay)
   
                                     self.manage_delObjects([foundCol[0][0]])  
   
                             manage_addVLP_subCollection(self,found.reference,found.titlerefdisplay,found.titlerefdisplay)  
                             #getattr(self,found.reference).generateSubCollectionFromDB()  
                             #teste ob es Images auf dem Server gibt mit gleichem Namen (frontmatter)                              #teste ob es Images auf dem Server gibt mit gleichem Namen (frontmatter)
                             if os.path.exists(os.path.join(self.vlp_basis,found.reference)):                  if os.path.exists(os.path.join(self.vlp_basis,litid)):
                       logging.debug("generateSubCollections: found frontmatter in %s"%litid)
                       obj=self.findObjFromLitName(litid)
                       if not self.ZopeFind(obj,obj_ids=[litid]):
                           metalink=self.REQUEST['URL1']+"/"+litid+"/"+litid+"/index_meta"
                           newObj=VLP_resource(litid,'',metalink,litid,litid,litid,'generated','book','','','','','','')
                           obj._setObject(litid,newObj)
   
                                     obj=getattr(self,found.reference)                      genObj=getattr(obj,litid)
                                     if not self.ZopeFind(obj,obj_ids=[found.reference]):                      genObj.createIndexFile(forceUpdate=forceUpdate)
                                             metalink=self.REQUEST['URL1']+"/"+found.reference+"/"+found.reference+"/index_meta"  
                                             newObj=VLP_resource(found.reference,'',metalink,found.reference,found.reference,found.reference,'generated','book','','','','','','')                  if RESPONSE is not None:
                                             obj._setObject(found.reference,newObj)                      self.REQUEST.RESPONSE.write("<p>%s</p>\n"%litid)
                                     genObj=getattr(obj,found.reference)                  logging.debug("<p>%s</p>\n"%litid)
                                     genObj.createIndexFile()  
   
                             self.REQUEST.RESPONSE.write("<p>%s</p>\n"%found.reference)  
                     except:                      except:
                             error=sys.exc_info()[0:2]                              error=sys.exc_info()[0:2]
                             RESPONSE.write("(ERROR (%s): %s %s)\n"%(found.reference,error[0],error[1]))                  logging.error("generateSubCollections: ERROR in %s"%litid)
                             errorsTXT+="<p>No subcollection of %s  "+"(ERROR: %s %s)</p>"%error                  if RESPONSE is not None:
                       RESPONSE.write("<p>(ERROR  updateII(%s): %s %s  TXT: %s)\n</p>"%(litid,error[0],error[1],sys.exc_info()[2]))
                       RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(litid,error[0],error[1]))
                   logging.error("generateSubCollections: %s %s"%error)
                   self.REQUEST.RESPONSE.write("(ERROR (%s): %s %s)\n"%(litid,repr(error[0]),repr(error[1])))
                   errorsTXT+="<p>ERROR: No subcollection of %s (ERROR: %s %s)</p>\n"%(litid,error[0],error[1])
                   errorsTXT+="<p>No subcollection of %s  "%litid+"(ERROR: %s %s)</p>"%error
   
             return errorsTXT              return errorsTXT
                           
Line 469  class VLP_collection(ECHO_collection): Line 656  class VLP_collection(ECHO_collection):
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
     def updateCollection(self,RESPONSE=None):      
         """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""      def getOrCreateFolderForFile(self,fileName):
           
           if not fileName[0:3]=="lit":
               logging.error("getOrCreateFolder wrong filename: %s"%fileName)
               return None
           
           try:
               restName="%08d"%int(fileName[3:])
           except:
               logging.error("getOrCreateFolder wrong filename: %s"%fileName)
               return None
           
           fs=(restName[0:2],restName[0:4],restName[0:6])
           
           current =self
           for f in fs:
               obj = getattr(current,f,None)
               if not obj:
                    newObj=VLP_collectionFolder(f)
                    current._setObject(f,newObj)
                    obj = getattr(current,f)
               current=obj
               
           return current
           
       def changeOrAddResources(self,forceUpdate=False,RESPONSE=None):
           """changes ord updates all resources found in the file system"""
           
         errorsTXT="<h2>Errors</h2>"          errorsTXT="<h2>Errors</h2>"
           if RESPONSE is not None:
               RESPONSE.setHeader('Content-Type','text/html')
         RESPONSE.write("<html><body>")          RESPONSE.write("<html><body>")
         files=os.listdir(self.vlp_basis)  
   
         errorsTXT+="<h3>New Ressources</h3>"  
   
           files=os.listdir(self.vlp_basis)
           i=0
         for fileName in files:          for fileName in files:
               if i<100:
                   i+=1
               else:
                   i=0
                   j=0
                   while j<5:
                       try:
                           transaction.get().commit()  
                           j=6
                       except:
                           logging.error("Commit: %s"%j)
                           j+=1
                           
                   RESPONSE.write("<p>committed</p>")
             if fileName[0:3]=="lit":              if fileName[0:3]=="lit":
                   
                 metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta"                  metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta"
                   
                   folder=self.getOrCreateFolderForFile(fileName) #get the folder where fileName lives or should live
                   if not folder: #folder gave an error
                       continue
                 try:                  try:
                         if not hasattr(self,fileName):                      if not hasattr(folder,fileName):
                           # create new resource
                           logging.debug("updateCollection: new %s"%fileName)
                           if RESPONSE is not None:
                               RESPONSE.write("<p>new: %s</p>\n"%fileName)
                           logging.debug("new: %s \n"%fileName)
                                 newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','')                                  newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','')
                                 self._setObject(fileName,newObj)  
                                   
                         RESPONSE.write("<p>got: %s\n</p>"%fileName)                          folder._setObject(fileName,newObj)
                         genObj=getattr(self,fileName)                  
                       if RESPONSE is not None:
                           RESPONSE.write("<p>got: %s "%fileName)
   
                       genObj=getattr(folder,fileName)
                       logging.debug("got: %s "%fileName)
   
                       logging.debug("updateCollection: inspecting %s"%fileName)
                       # create index
                         if hasattr(genObj,'createIndexFile'):                          if hasattr(genObj,'createIndexFile'):
                                 try:                                  try:
                                         genObj.createIndexFile()                              logging.debug("updateCollection: creating index for %s"%fileName)
                               msg = genObj.createIndexFile(forceUpdate=forceUpdate)
                               if msg and RESPONSE is not None:
                                   RESPONSE.write(msg)
                                 except:                                  except:
                                         error=sys.exc_info()[0:2]                                          error=sys.exc_info()[0:2]
                                         RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(fileName,error[0],error[1]))                              if RESPONSE is not None:
                                         errorsTXT+="<p>No indexfile of %s  "+"(ERROR: %s %s)</p>"%error                                  RESPONSE.write("(ERROR Update(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2]))
                               errorsTXT+="<p>ERROR creating index for %s "%fileName+"(ERROR: %s %s)</p>\n"%error
   
                       # update pageSizeSum for subcollections
                         if genObj.meta_type=="VLP_subcollection":                          if genObj.meta_type=="VLP_subcollection":
                           if RESPONSE is not None:
                               RESPONSE.write(" is subcollection")
                           logging.debug("updateCollection: %s is subcollection"%fileName)
                                 genObj.pageSizeSum=getattr(genObj,fileName).getPageSizeSum()                                  genObj.pageSizeSum=getattr(genObj,fileName).getPageSizeSum()
                         else:                          else:
                                 genObj.pageSizeSum=genObj.getPageSizeSum()                                  genObj.pageSizeSum=genObj.getPageSizeSum()
                                                   
                       if RESPONSE is not None:
                           RESPONSE.write("</p>\n")
                          
                 except:                  except:
                         error=sys.exc_info()[0:2]                          error=sys.exc_info()[0:2]
                         RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(fileName,error[0],error[1]))                      logging.error("updateCollection: ERROR in %s (%s %s)"%(fileName,error[0],error[1]))
                         errorsTXT+="<p>File not created:%s  (ERROR: %s %s)</p>"%(fileName,error[0],error[1])                      if RESPONSE is not None:
                            RESPONSE.write("(ERROR  updateII(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2]))
                       errorsTXT+="<p>File not created:%s  (ERROR: %s %s)</p>\n"%(fileName,error[0],error[1])
           return errorsTXT
        
       def updateCollection(self,forceUpdate=True,RESPONSE=None):
           """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
                                                                   
         errorsTXT+=self.generateSubCollections()          # update subcollections 
           errorsTXT=""   
           errorsTXT+=self.changeOrAddResources(forceUpdate, RESPONSE);
           errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE)
         errorsTXT+="\n"          errorsTXT+="\n"
         RESPONSE.write(errorsTXT)  
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.write(errorsTXT)
               RESPONSE.write("</body></html>")
   
     def updateCollectionMD(self,RESPONSE=None):      def updateCollectionMD(self,RESPONSE=None):
         """updateMD"""          """updateMD"""
Line 568  class VLP_resource(ECHO_resource,Cacheab Line 831  class VLP_resource(ECHO_resource,Cacheab
   
     meta_type="VLP_resource"      meta_type="VLP_resource"
   
       def _p_resolveConflict(self,oldstate,savedstate,newstate):
           logging.debug("updateCollection: Have to resolve conflict!")
           return newstate
   
     #vlp_basis="/mpiwg/online/permanent/vlp"      #vlp_basis="/mpiwg/online/permanent/vlp"
   
           
       
     referencetypes=[]      referencetypes=[]
   
     manage_options=ECHO_resource.manage_options+Cacheable.manage_options+(      manage_options=ECHO_resource.manage_options+Cacheable.manage_options+(
Line 580  class VLP_resource(ECHO_resource,Cacheab Line 848  class VLP_resource(ECHO_resource,Cacheab
         {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},          {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
         )          )
   
       def getMetaDataLink(self):
           """link auf die metatdaten"""
           return self.absolute_url()+"/index_meta"
   
   
       def getTitle(self):
           """Title der Ressource"""
           title= self.ZSQLSimpleSearch("""select title from vl_literature where reference= \'%s\'  """ %self.getId())[0].title
           logging.debug(title)
           return title
       
    
   
     def getImagePath(self):      def getImagePath(self):
             """Pfad zu den Images"""              """Pfad zu den Images"""
               path=None
                           
             if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')):              if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')):
                     return os.path.join(self.vlp_basis,self.resourceID,'pageimg')                      path= os.path.join(self.vlp_basis,self.resourceID,'pageimg')
             elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')):              elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pages')):
                       path = os.path.join(self.vlp_basis,self.resourceID,'pages')
               # workaround in some cases there seem to be no pictures in pages
               
               if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')):
   
           
           pagesHi = os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))
           if path is None:
                     return os.path.join(self.vlp_basis,self.resourceID,'pagesHi')                      return os.path.join(self.vlp_basis,self.resourceID,'pagesHi')
   
               pages = os.listdir(path)
   
                   if len (pagesHi) > len(pages):
   
               countHi=0
               for p in pagesHi:
               dat,ext = os.path.splitext(p)
               if ext.lower() in [".tiff",".tif",".jpg"]:
                   countHi+=1
               count=0
               for p in pages:
               dat,ext = os.path.splitext(p)
               if ext.lower() in [".tiff",".tif",".jpg"]:
                   count+=1
               
               if countHi > count:
                           path=os.path.join(self.vlp_basis,self.resourceID,'pagesHi')
               
                           logging.error("pages < pagesHi:  %s"%self.resourceID)
               if path is None:
   
               
                   if len (os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))) > len(os.listdir(path)):
                       
                       
                       
                       path=os.path.join(self.vlp_basis,self.resourceID,'pagesHi')
                       logging.error("pages < pagesHi:  %s"%self.resourceID)
             else:              else:
                     return "<error>no images </error>"  
           
                       logging.error("no images:  %s"%self.resourceID)
                       return None   
   
           return path 
   
                           
     def transcription(self):      def transcription(self):
Line 605  class VLP_resource(ECHO_resource,Cacheab Line 926  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):      def copyTranscriptionFromDB(self):
             """checks if transcription exits in DB"""              """checks if transcription exits in DB"""
             founds=self.ZSQLSimpleSearch('select * from vl_transcript where source=\''+self.resourceID+'\' order by id')              founds=self.ZSQLSimpleSearch('select * from vl_transcript where source=\''+self.resourceID+'\' order by id')
Line 623  class VLP_resource(ECHO_resource,Cacheab Line 972  class VLP_resource(ECHO_resource,Cacheab
   
                     ret+="</text>"                      ret+="</text>"
                     re2=ret[0:]                      re2=ret[0:]
                     re3=re2.decode('latin-1').encode('utf-8')                      re3=self.unicodify(re2)
                     #re3=re2                      #re3=re2
                     ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText'])                      ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText'])
                                           
Line 633  class VLP_resource(ECHO_resource,Cacheab Line 982  class VLP_resource(ECHO_resource,Cacheab
                                                   
                     else:                      else:
                   
                             self._setObject('fulltext',ECHO_fullText(id,''))                              self._setObject('fulltext',ECHO_fullText('fulltext',''))
   
                             try:                              try:
                                 getattr(self,'fulltext').pt_edit(re3.encode('utf-8','ignore'),'text/xml')                                  getattr(self,'fulltext').pt_edit(re3.encode('utf-8','ignore'),'text/xml')
Line 644  class VLP_resource(ECHO_resource,Cacheab Line 993  class VLP_resource(ECHO_resource,Cacheab
             else:              else:
                     return "no: %s"%self.getId()                      return "no: %s"%self.getId()
                           
       def hasTranscription(self):
           """transcription"""
          
           if not hasattr(self,'fulltext'):
               self.copyTranscriptionFromDB()
           if not hasattr(self,'fulltext'): #still not
               return False
           
           return True 
               
     def resetMetaLink(self,all="no",RESPONSE=None):      def resetMetaLink(self,all="no",RESPONSE=None):
         """resets metalink to standard resp. in case of server change it sets to the new server url"""          """resets metalink to standard resp. in case of server change it sets to the new server url"""
         if all=="yes":          if all=="yes":
Line 659  class VLP_resource(ECHO_resource,Cacheab Line 1018  class VLP_resource(ECHO_resource,Cacheab
     def show(self):      def show(self):
         """show the rendered file"""          """show the rendered file"""
   
         if 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)))              #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)))                  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'):      def getVLPTemplate(self,name):
                 return getattr(self,'libraryTemplate.html')()          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"          pt.content_type="text/html"
         return pt()          return pt
   
     def index_html(self):      def index_html(self):
             """index_html"""              """index_html"""
Line 697  class VLP_resource(ECHO_resource,Cacheab Line 1071  class VLP_resource(ECHO_resource,Cacheab
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
   
     def index_meta(self):      def index_meta(self,RESPONSE=None):
         """index_meta"""          """index_meta"""
                   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_meta.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_meta.zpt')).__of__(self)
         pt.content_type="text/html"          pt.content_type="text/xml"      
         return pt()          x= pt.pt_render()
           #logging.debug("index_meta 4:"+x)
           if RESPONSE:
               RESPONSE.setHeader("Content-Type","text/xml")
           return x
     def file2page(self,p):      def file2page(self,p):
         """converts filename to pagenumber"""          """converts filename to pagenumber"""
         dom=xml.dom.minidom.parse(ECHO_helpers.urlopen(getattr(self,'index.xml').absolute_url()))          
           #dom=xml.dom.minidom.parse(ECHO_helpers.urlopen(getattr(self,'index.xml').absolute_url()))
           index=getattr(self,'index.xml')
    
           txt=index.pt_render()
           dom=xml.dom.minidom.parseString(txt)
                   
         for page in dom.getElementsByTagName('page'):          for page in dom.getElementsByTagName('page'):
                  # pageummer mit lo oder hi sind aequivalent                   # pageummer mit lo oder hi sind aequivalent
                  if (page.getAttribute('file')==p) or ("%slo"%page.getAttribute('file')==p) or ("%shi"%page.getAttribute('file')==p):                   if (page.getAttribute('file')==p) or ("%slo"%page.getAttribute('file')==p) or ("%shi"%page.getAttribute('file')==p):
                          return page.getAttribute('nr')                       nr=page.getAttribute('nr')
                       
                        return nr
                           
         return 0          return 0
   
Line 721  class VLP_resource(ECHO_resource,Cacheab Line 1105  class VLP_resource(ECHO_resource,Cacheab
             #size of hi resolution              #size of hi resolution
             files=[]              files=[]
             try:              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)                      files=os.listdir(pathHi)
                     hi=0                      hi=0
                     for f in files:                      for f in files:
Line 756  class VLP_resource(ECHO_resource,Cacheab Line 1140  class VLP_resource(ECHO_resource,Cacheab
     def dir2index(self):      def dir2index(self):
         """dir to index"""          """dir to index"""
   
         excludeNames=['Icon',':2eD']          excludeNames=['Icon']
                                   
                   
         def calculateName(str):          def calculateName(str):
Line 764  class VLP_resource(ECHO_resource,Cacheab Line 1148  class VLP_resource(ECHO_resource,Cacheab
             ret="%s: %s"%(str[0],name)              ret="%s: %s"%(str[0],name)
             return ret              return ret
   
         try:          self.imagePathFull=self.getImagePath();
             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))      self.imagePath=self.imagePathFull.split("/")[-1]
             self.imagePath='pageimg'          if (self.imagePath is None):
         except:              return None
             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))          
             self.imagePath='pagesHi'  
         temp=[]          temp=[]
           ret = os.listdir(self.imagePathFull)
           
         ret.sort()          ret.sort()
         for x in ret:          for x in ret:
             if (not (x[0]==".")) and (not x[0:4] in excludeNames):              if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames):
                   
                 temp.append((calculateName(x),os.path.splitext(x)[0]))                  temp.append((calculateName(x),os.path.splitext(x)[0]))
         return temp          return temp
   
Line 782  class VLP_resource(ECHO_resource,Cacheab Line 1166  class VLP_resource(ECHO_resource,Cacheab
     def firstPage(self,url=None):      def firstPage(self,url=None):
         """showlink to the first image"""          """showlink to the first image"""
         if self.REQUEST.get('pn','1')=="1": #erste seinte dann kein a tag          if self.REQUEST.get('pn','1')=="1": #erste seinte dann kein a tag
             return """<img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""              return """<img src="/images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""
   
         else:          else:
                 ws=self.REQUEST.get('ws','1')                  ws=self.REQUEST.get('ws','1')
                 return """<a href=%s>                  return """<a href=%s>
                          <img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first                           <img src="/images/first.gif" alt="first" width="14" height="14" border="0"><br>first
                          </a>                           </a>
                          """%(self.REQUEST['URL']+"?pn=1&ws=%s"%ws)                           """%(self.REQUEST['URL']+"?pn=1&ws=%s"%ws)
   
Line 798  class VLP_resource(ECHO_resource,Cacheab Line 1182  class VLP_resource(ECHO_resource,Cacheab
             ln=len(pages)              ln=len(pages)
                   
         if (self.REQUEST.get('pn')==str(ln)) or (ln==1): #letzte seite dann kein a tag oder nur eine Seite          if (self.REQUEST.get('pn')==str(ln)) or (ln==1): #letzte seite dann kein a tag oder nur eine Seite
             return """<img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""              return """<img src="/images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""
   
         else:          else:
                 ws=self.REQUEST.get('ws','1')                  ws=self.REQUEST.get('ws','1')
                 return """<a href=%s>                  return """<a href=%s>
                          <img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last                           <img src="/images/last.gif" alt="last" width="14" height="14" border="0"><br>last
                          </a>                           </a>
                          """%(self.REQUEST['URL']+"?pn="+str(ln)+"&ws="+ws)                           """%(self.REQUEST['URL']+"?pn="+str(ln)+"&ws="+ws)
                           
Line 813  class VLP_resource(ECHO_resource,Cacheab Line 1197  class VLP_resource(ECHO_resource,Cacheab
   
         nn = int(self.REQUEST.get('pn','1'))-1          nn = int(self.REQUEST.get('pn','1'))-1
         if nn < 1: #letzte  seite dann kein a tag          if nn < 1: #letzte  seite dann kein a tag
             return """<img src="../../images/lisePrev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""              return """<img src="/images/lisePrev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""
   
         else:          else:
                 ws=self.REQUEST.get('ws','1')                  ws=self.REQUEST.get('ws','1')
                 return """<a href=%s>                  return """<a href=%s>
                          <img src="../../images/lisePrev.gif" alt="prev" width="14" height="14" border="0"><br>prev                           <img src="/images/lisePrev.gif" alt="prev" width="14" height="14" border="0"><br>prev
                          </a>                           </a>
                          """%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws)                           """%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws)
   
Line 830  class VLP_resource(ECHO_resource,Cacheab Line 1214  class VLP_resource(ECHO_resource,Cacheab
   
         nn = int(self.REQUEST.get('pn','1'))+1          nn = int(self.REQUEST.get('pn','1'))+1
         if (nn>int(ln)) or (ln==1): #letzte  seite dann kein a tag          if (nn>int(ln)) or (ln==1): #letzte  seite dann kein a tag
             return """<img src="../../images/liseNext.gif" alt="next" width="14" height="14" border="0"><br>next"""              return """<img src="/images/liseNext.gif" alt="next" width="14" height="14" border="0"><br>next"""
   
         else:          else:
                 ws=self.REQUEST.get('ws','1')                  ws=self.REQUEST.get('ws','1')
                 return """<a href=%s>                  return """<a href=%s>
                          <img src="../../images/liseNext.gif" alt="next" width="14" height="14" border="0"><br>next                           <img src="/images/liseNext.gif" alt="next" width="14" height="14" border="0"><br>next
                          </a>                           </a>
                          """%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws)                           """%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws)
                   
Line 881  class VLP_resource(ECHO_resource,Cacheab Line 1265  class VLP_resource(ECHO_resource,Cacheab
            pageinfo=self.readIndexFile()[pn-1]             pageinfo=self.readIndexFile()[pn-1]
            return pageinfo[2]             return pageinfo[2]
         
     def createIndexFile(self,RESPONSE=None):      def createIndexFile(self,forceUpdate=False,RESPONSE=None):
         """create index file"""          """create index file"""
           logging.debug("createindexfile of %s"%self.id)
   
           if hasattr(self,'index.xml'):
               # index exists
               zt=getattr(self,'index.xml')
               if not forceUpdate:
                   # check if directory is newer (self.imagePath sould be set by now)
                   path = self.getImagePath()
                   if (path is None):
                       return "CREATE INDEX FILE NOT POSSIBLE"
                   imgdir = os.path.join(path)
                   dirtime = os.path.getmtime(imgdir)
                   zttime = zt.bobobase_modification_time()
                   logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime))
                   if dirtime < zttime:
                       # nothing to do
                       logging.debug("createindexfile: dir %s older than index"%(imgdir))
                       return "index is up to date"
                   
         pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_template.zpt')).__of__(self)()          else:
               # create new index template
   
           
         if not hasattr(self,'index.xml'):  
             zt=ZopePageTemplate('index.xml')              zt=ZopePageTemplate('index.xml')
             self._setObject('index.xml',zt)              self._setObject('index.xml',zt)
         else:  
             zt=getattr(self,'index.xml')  
               
                           
           # fill index template
           pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_template.zpt')).__of__(self)()
           #logging.debug("createindexfile uses %s"%pt)
         zt.pt_edit(pt, 'text/xml')          zt.pt_edit(pt, 'text/xml')
           transaction.get().commit()
   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')

Removed from v.1.60  
changed lines
  Added in v.1.95


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>