Diff for /ImageArchive/ImageArchive.py between versions 1.67 and 1.78

version 1.67, 2005/10/17 19:20:49 version 1.78, 2006/05/15 13:14:16
Line 1 Line 1
   genericServerPath="http://www.mpiwg-berlin.mpg.de/zogilib_images" #can be changed with main config
   
 genericServerPath="http://content.mpiwg-berlin.mpg.de/zogilib_images"  
 #genericServerPath="http://127.0.0.1:8080/zogilib_images"  
   
   
 from OFS.Folder import Folder  from OFS.Folder import Folder
   from OFS.OrderedFolder import OrderedFolder
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from Globals import Persistent,package_home  from Globals import Persistent,package_home
 from Acquisition import Implicit  from Acquisition import Implicit
Line 23  import time Line 23  import time
 from threading import Thread  from threading import Thread
 import Queue  import Queue
 import cgi  import cgi
   import sys
   import zLOG
   
 from AccessControl import ClassSecurityInfo  
   from AccessControl import ClassSecurityInfo, getSecurityManager
   
 try:  try:
     from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder      from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
 except:  except:
     print "ZSQL Extend Folder nicht importiert"      print "ZSQL Extend Folder nicht importiert"
     print "Metadatendfolder funktioniert nicht!!!"      print "Metadatendfolder funktioniert nicht!!!"
       class ZSQLExtendFolder:
           """leer"""
           manage_options=()
   
   
   
Line 47  except: Line 53  except:
 tdir = "/mpiwg/temp/tmp/archivesImageServer/"  tdir = "/mpiwg/temp/tmp/archivesImageServer/"
 #tdir="/tmp/archivesImageServer/"  #tdir="/tmp/archivesImageServer/"
   
   imageExtensions=['jpg','jpeg','tif','tiff','png']
   
 def splitPath(str):  def splitPath(str):
         str2=str.replace("\\","/")          str2=str.replace("\\","/")
         return os.path.split(str2)[1]          return os.path.split(str2)[1]
Line 278  class ImageDigilib(Folder,Persistent,Imp Line 286  class ImageDigilib(Folder,Persistent,Imp
                   
         )          )
   
       def getAccessRight(self):
           """get the accessright, return is string "extern" or "intern" """
           return self.getRights(self.filename.split('.')[0])
            
       security.declarePublic('isAccessible')
       
       def isAccessible(self):
           """gives true if obejct is accessible taking the rights of the user into account"""
           
           #TODO: implement rights, currently  true if external and false if internal, and true if user has role authenticated
       
           username=self.REQUEST['AUTHENTICATED_USER']
           #print username
           #print self.acl_users.getUserNames()
           user=getSecurityManager().getUser()
   
           roles=user.getRoles()
   
           
           if self.getRightsQuery()=="":
               #query empty then always true
           return True
   
   
           if 'Authenticated' in roles:
               return True
           
           if self.getAccessRight()=="extern":
               return True
           else:
               return False
           
     def addMetaObject(self,id,RESPONSE=None):      def addMetaObject(self,id,RESPONSE=None):
         """Add an MetaObject"""          """Add an MetaObject"""
         objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)          objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
Line 307  class ImageDigilib(Folder,Persistent,Imp Line 347  class ImageDigilib(Folder,Persistent,Imp
         self.filename=filename          self.filename=filename
         self.meta=meta          self.meta=meta
   
       def getBasename(self):
           """returns base filename (sans extension)"""
           return os.path.splitext(self.filename)[0]
   
     def getMeta(self):      def getMeta(self):
         """ausgabe der metadaten"""          """ausgabe der metadaten"""
Line 334  class ImageDigilib(Folder,Persistent,Imp Line 377  class ImageDigilib(Folder,Persistent,Imp
     def uploadImage(self,fileupload,path_name):      def uploadImage(self,fileupload,path_name):
         """upload an Image from an Requast"""          """upload an Image from an Requast"""
         #path_name=self.ImageStoragePath          #path_name=self.ImageStoragePath
         fn=splitPath(fileupload.filename)          fn = self.filename or splitPath(fileupload.filename)
         filename=path_name+"/"+fn          filename=path_name+"/"+fn
         filedata=fileupload.read()          filedata=fileupload.read()
         f=open(filename,"w")          f=open(filename,"w")
         f.write(filedata)          f.write(filedata)
         f.close()          f.close()
           self.filename = fn
         try:          try:
             os.chmod(filename,0664)              os.chmod(filename,0664)
         except:          except:
Line 450  class ImageDigilib(Folder,Persistent,Imp Line 494  class ImageDigilib(Folder,Persistent,Imp
     def updateImage(self,file,rename=None,RESPONSE=None):      def updateImage(self,file,rename=None,RESPONSE=None):
             """lade neues Version des Bildes"""              """lade neues Version des Bildes"""
             #teste ob Dokumenten ordner schon vorhanden              #teste ob Dokumenten ordner schon vorhanden
             imagePath=os.path.join(self.ImageStoragePath,self.getId())              #imagePath=os.path.join(self.ImageStoragePath,self.getId())
               imagePath=os.path.join(self.ImageStoragePath,self.filename)
             path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")              path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
                           
             if not os.path.exists(path):              if not os.path.exists(path):
Line 461  class ImageDigilib(Folder,Persistent,Imp Line 506  class ImageDigilib(Folder,Persistent,Imp
   
             #teste ob version schon existiert              #teste ob version schon existiert
   
             while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))):              while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.filename))):
                     versionNumber+=1                      versionNumber+=1
   
             #kopieren der bestehenden Version in den Versions ordner.              #kopieren der bestehenden Version in den Versions ordner.
             imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))              imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))
           try:
           #zLOG.LOG("ImageArchive:updateImage", zLOG.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))
             os.rename(imagePath,imageNewPath)              os.rename(imagePath,imageNewPath)
           except:
           zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))  
   
             #lesen des upload files und schreiben              #lesen des upload files und schreiben
             filedata=file.read()              filedata=file.read()
             f=open(imagePath,"w")              f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!
             f.write(filedata)              f.write(filedata)
             f.close()              f.close()
             try:              try:
Line 495  class ImageDigilib(Folder,Persistent,Imp Line 544  class ImageDigilib(Folder,Persistent,Imp
   
             return "done"              return "done"
                           
       security.declarePublic('thumb')
     def thumb(self,url=None):      def thumb(self,url=None):
         """show thumb"""          """show thumb"""
         thumbname=os.path.splitext(self.filename)[0]+".jpg"          thumbname=os.path.splitext(self.filename)[0]+".jpg"
Line 568  def manage_AddImageDigilib(self,id,fileu Line 618  def manage_AddImageDigilib(self,id,fileu
     """Add ImageCollection"""      """Add ImageCollection"""
           
     #fileupload=self.REQUEST['fileupload']      #fileupload=self.REQUEST['fileupload']
     fn=splitPath(fileupload.filename)      #fn=splitPath(fileupload.filename)
       fn = id # filename is the same as id
     newObj=ImageDigilib(id,fn,meta)      newObj=ImageDigilib(id,fn,meta)
           
     self._setObject(id,newObj)      self._setObject(id,newObj)
Line 579  def manage_AddImageDigilib(self,id,fileu Line 630  def manage_AddImageDigilib(self,id,fileu
   
                                     
   
 class ImageCollection(Folder, Persistent, Implicit,ECHO_basis):  class ImageCollection(OrderedFolder, Persistent, Implicit,ECHO_basis):
     """Sammelordner fuer Bilder"""      """Sammelordner fuer Bilder"""
     meta_type="ImageCollection"      meta_type="ImageCollection"
   
Line 599  class ImageCollection(Folder, Persistent Line 650  class ImageCollection(Folder, Persistent
           
     defaultMetaString="http://fm-web.mpiwg-berlin.mpg.de:8050/FMRes/FMPJS?-db=Wissenschaftlerportraits.fp5&-layID=69&-token=25&-max=1&-format=formvwcss.htm&-mode=browse&images::filename=%s&-find" ## TEST FUER IMAGEDATENBANK WP      defaultMetaString="http://fm-web.mpiwg-berlin.mpg.de:8050/FMRes/FMPJS?-db=Wissenschaftlerportraits.fp5&-layID=69&-token=25&-max=1&-format=formvwcss.htm&-mode=browse&images::filename=%s&-find" ## TEST FUER IMAGEDATENBANK WP
   
       imgcoll_main = PageTemplateFile('zpt/overview', globals())
       imgcoll_mainMD = PageTemplateFile('zpt/overviewMD', globals())
       imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())
       imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())    
   
       def getImageObject(self,name):
           """gibt objeckt name zurueck"""
           if hasattr(self,name):
               return getattr(self,name)
           
           name=os.path.splitext(name)[0]
           for extension in imageExtensions:
               nameExt=name+"."+extension
   
               if hasattr(self,nameExt):
                   return getattr(self,nameExt)
               
               nameExt=name+"_."+extension
               if hasattr(self,nameExt):
                   return getattr(self,nameExt)
           
           return getattr(self,"defaultImg")
           
       def getServerPath(self):
           """get Server path"""
           return getattr(self,'serverPath',genericServerPath)
       
     def getScalerPath(self):      def getScalerPath(self):
         """get ScalerPath"""          """get ScalerPath"""
         path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="          path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="
Line 728  class ImageCollection(Folder, Persistent Line 806  class ImageCollection(Folder, Persistent
         self.ImageViewerPath=ImageViewerPath          self.ImageViewerPath=ImageViewerPath
         self.defaultMetaString=defaultMetaString          self.defaultMetaString=defaultMetaString
         self.serverPath=serverPath          self.serverPath=serverPath
           self.defaultrows = 6
           self.defaultcols = 2
   
     optTMP= Folder.manage_options      optTMP= Folder.manage_options
   
Line 747  class ImageCollection(Folder, Persistent Line 827  class ImageCollection(Folder, Persistent
         """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""          """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""
                   
         for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):          for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):
             print image[1].getId()             
             image[1].manageMetaData(strict)              image[1].manageMetaData(strict)
         return "ok"          return "ok"
                   
Line 860  class ImageCollection(Folder, Persistent Line 940  class ImageCollection(Folder, Persistent
                   
                           
     def xmlinput(self,url):      def xmlinput(self,url):
         """Anzeige <n ausgewaehlten thumbs"""          """Anzeige von ausgewaehlten thumbs"""
         #return url          #return url
                   
         url=urllib.unquote(url)          url=urllib.unquote(url)
Line 869  class ImageCollection(Folder, Persistent Line 949  class ImageCollection(Folder, Persistent
         try:          try:
                 dom=xml.dom.minidom.parseString(xmldoc)                  dom=xml.dom.minidom.parseString(xmldoc)
         except:          except:
                 return xmldoc                  return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
   
         images=dom.getElementsByTagName('image')          images=dom.getElementsByTagName('image')
   
         rc=[]          rc=[]
Line 879  class ImageCollection(Folder, Persistent Line 960  class ImageCollection(Folder, Persistent
                                   
                                   
                                   
                   
                 idnr=image.getElementsByTagName('idnr')[0]                  idnr=image.getElementsByTagName('idnr')[0]
                 id=getText(idnr.childNodes)                  id=getText(idnr.childNodes)
                   try:
                 numberOfPages=image.getElementsByTagName('numberOfPages')[0]                  numberOfPages=image.getElementsByTagName('numberOfPages')[0]
                   except:
                       numberOfPages=None
                       
                   if numberOfPages:
                 nopT=getText(numberOfPages.childNodes)                  nopT=getText(numberOfPages.childNodes)
                 try:                  try:
                         nop=int(nopT)                          nop=int(nopT)
                 except:                  except:
                         nop=0                          nop=0
                   else:
                       nop=0
                               
                 texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste                  texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
                 for text in texts:                  for text in texts:
                     if not text=="":                      if not text=="":
                           text=self.getImageByName(text,onlyName="yes")
                         try:                          try:
                                 rc.append((str(text),id,nop))                                  rc.append((str(text),id,nop))
                                 fnIds[str(text)]=(id,nop)                                  fnIds[str(text)]=(id,nop)
Line 902  class ImageCollection(Folder, Persistent Line 993  class ImageCollection(Folder, Persistent
         self.REQUEST.SESSION['filenames']=rc          self.REQUEST.SESSION['filenames']=rc
         self.REQUEST.SESSION['filenamesIds']=fnIds          self.REQUEST.SESSION['filenamesIds']=fnIds
                   
           overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
               
           if overview:
                   return overview[0][1]()
           else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
                   return pt()        
           
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
         return pt()                  return pt()        
   
Line 935  class ImageCollection(Folder, Persistent Line 1034  class ImageCollection(Folder, Persistent
         else:          else:
             meta=None              meta=None
                   
         if fileName:          fn=fileName or splitPath(fileupload.filename)
             fn=fileName  
         else:  
             fn=splitPath(fileupload.filename)  
                   
         manage_AddImageDigilib(self,fn,fileupload,meta=meta)          manage_AddImageDigilib(self,fn,fileupload,meta=meta)
                   
Line 1074  class ImageCollection(Folder, Persistent Line 1170  class ImageCollection(Folder, Persistent
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)
         return pt()          return pt()
   
     def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):      def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath,RESPONSE=None):
         """Change"""          """Change"""
         self.title=title          self.title=title
         self.ImageStoragePath=ImageStoragePath          self.ImageStoragePath=ImageStoragePath
         self.ImageViewerPath=ImageViewerPath          self.ImageViewerPath=ImageViewerPath
         self.defaultMetaString=defaultMetaString          self.defaultMetaString=defaultMetaString
           self.serverPath=serverPath
                   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
Line 1101  class ImageCollection(Folder, Persistent Line 1198  class ImageCollection(Folder, Persistent
         ids.sort()          ids.sort()
         return ids          return ids
   
     def firstSets(self,selected=None):      def firstSets(self,selected=None,text='first set'):
         ids=self.show_thumbs()          ids=self.show_thumbs()
         if ids:          if ids:
             if selected:              if selected:
                 return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[0]+"\" target=\"_top\">first sets</a>"                  return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[0]+"\" target=\"_top\">"+text+"</a>"
             else:              else:
                 return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[0]+"\" target=\"_top\">first sets</a>"                  return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[0]+"\" target=\"_top\">"+text+"</a>"
   
     def lastSets(self,selected=None):      def lastSets(self,selected=None,text='last set'):
         ids=self.show_thumbs()          ids=self.show_thumbs()
         if ids:          if ids:
             colRows=self.getColTimesRow()              colRows=self.getColTimesRow()
Line 1123  class ImageCollection(Folder, Persistent Line 1220  class ImageCollection(Folder, Persistent
                 nr=0                  nr=0
   
             if selected:              if selected:
                 return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">last set</a>"                  return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
             else:              else:
                 return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">last sets</a>"                  return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
   
                   
                                   
     def nextSets(self,selected=None):      def nextSets(self,selected=None,text='next set'):
         """show nextimage"""          """show nextimage"""
         ids=self.show_thumbs()          ids=self.show_thumbs()
         colRows=self.getColTimesRow()          colRows=self.getColTimesRow()
           pagesize = colRows[0] * colRows[1]
         if ids:          if ids:
             if colRows[1]:              if colRows[1]:
   
                 if self.REQUEST.SESSION.has_key("filename"):                  if self.REQUEST.SESSION.has_key("filename"):
                     filename=self.REQUEST.SESSION["filename"]                      filename=self.REQUEST.SESSION["filename"]
                     try:                      try:
                         nr=ids.index(filename)+colRows[0]*colRows[1]                          nr=ids.index(filename)+pagesize
                         if nr>=len(ids):                          if nr>=len(ids):
                             nr=len(ids)-1                              return ""
                     except:                      except:
                         nr=0                          nr=pagesize
                 else:                  else:
                     nr=0                      nr = pagesize
   
                 if nr==len(ids)-1:                  if nr>=len(ids)-1:
                     return ""                      return ""
                 else:                  else:
                     if selected:                      if selected:
                         return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">next set</a>"                          return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
                     else:                      else:
                         return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">next set</a>"                          return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
   
     def prevSets(self,selected=None):      def prevSets(self,selected=None,text='previous sets'):
                   
         """show nextimage"""          """show nextimage"""
         #return self.getId()          #return self.getId()
Line 1182  class ImageCollection(Folder, Persistent Line 1279  class ImageCollection(Folder, Persistent
                     return ""                      return ""
                 else:                  else:
                     if selected:                      if selected:
                         return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">previous sets</a>"                          return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
                     else:                      else:
                         return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">previous sets</a>"                          return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
             else:              else:
                 return ""                  return ""
   
   
     def showFolders(self):      def showFolders(self):
         """show subfolders"""          """show subfolders"""
         ret=""          ret=""
Line 1206  class ImageCollection(Folder, Persistent Line 1305  class ImageCollection(Folder, Persistent
                 ret+=link%(iC[1].absolute_url(),iC[0])                  ret+=link%(iC[1].absolute_url(),iC[0])
             ret+="<br>"              ret+="<br>"
             return ret              return ret
   
   
       def getSetSelector(self, selected=None):
           """returns the HTML select element for the sets"""
           actualNr=0
           ids=self.show_thumbs()
           colRows=self.getColTimesRow()
           pagesize = colRows[0]*colRows[1]
           numpages = int(len(ids)/pagesize)
           if not ((len(ids) % pagesize)==0):
               numpages+=1
       
           ret=""
           if numpages>1:
               if selected:
                   ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""/selection?filename='+this.options[this.selectedIndex].value">"""
               else:
                   ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""?filename='+this.options[this.selectedIndex].value">"""
                   
               for i in range(numpages):
                   try:
                     nr=ids.index(self.REQUEST.SESSION['filename'])
                   except:
                     nr=0
                   k=i * pagesize
                   if (k <= nr) and (nr < i*(pagesize+1)):
                      actualNr=i
                      ret+="""<option value="%s" selected>%i</option>"""%(ids[k], i + 1)
                   else:
                      ret+="""<option value="%s">%i</option>"""%(ids[k], i + 1)
                      
               ret+="</select>"
               
           return ret
   
       def isAllSets(self, showall=None):
           """returns if there are any sets"""
           ids=self.show_thumbs()
           colRows=self.getColTimesRow(showall=showall)
           pagesize = colRows[0]*colRows[1]
           return (len(ids) <= pagesize)
           
   
       def allSets(self, texton='show all', textoff='show groups'):
           """returns HTML to toggle 'show all'"""
           if self.isAllSets(showall='No'):
               return ""
           showall=self.REQUEST.SESSION.get('showall','no')
           if showall=='no':
               ret='<a href="'+self.REQUEST['URL1']+'?showall=yes" target="_top">'+texton+'</a>'
           else:
               ret='<a href="'+self.REQUEST['URL1']+'?showall=no" target="_top">'+textoff+'</a>'
           return ret
   
   
     def showRuler(self,selected=None):      def showRuler(self,selected=None):
         """show ruler"""          """show ruler"""
         showall =self.REQUEST.SESSION.get('showall','no')          showall =self.REQUEST.SESSION.get('showall','no')
Line 1288  class ImageCollection(Folder, Persistent Line 1442  class ImageCollection(Folder, Persistent
   
         return ret          return ret
           
       
     def show_thumbs_selected_rows(self,numberOfColumns):      def show_thumbs_selected_rows(self,numberOfColumns):
         """Ausgabe anzahl"""          """Ausgabe anzahl"""
         ids=self.show_selected_thumbs()          ids=self.show_selected_thumbs()
Line 1324  class ImageCollection(Folder, Persistent Line 1479  class ImageCollection(Folder, Persistent
   
         RESPONSE.redirect(self.REQUEST['URL1']+"/setDone")          RESPONSE.redirect(self.REQUEST['URL1']+"/setDone")
                   
       def setDefaultColTimesRow(self, cols, rows):
           """sets default columns and rows"""
           self.defaultcols = cols
           self.defaultrows = rows
   
     def getColTimesRow(self,showall='No'):      def getColTimesRow(self,showall='No'):
         """coltimesrow"""          """coltimesrow"""
                   
         REQUEST=self.REQUEST          REQUEST=self.REQUEST
         """matrix"""          """matrix"""
         if REQUEST.cookies.has_key("ImageViewerRows"):          if REQUEST.cookies.has_key("ImageViewerRows"):
               
             try:              try:
                 rows=int(REQUEST.cookies["ImageViewerRows"])                  rows=int(REQUEST.cookies["ImageViewerRows"])
             except:              except:
                 rows=6                  rows=getattr(self,'defaultrows',6)
         else:          else:
             rows=6              rows=getattr(self,'defaultrows',6)
                           
         if REQUEST.cookies.has_key("ImageViewerCols"):          if REQUEST.cookies.has_key("ImageViewerCols"):
             #print "COLS",REQUEST.cookies["ImageViewerCols"]              #print "COLS",REQUEST.cookies["ImageViewerCols"]
             cols=int(REQUEST.cookies["ImageViewerCols"])              cols=int(REQUEST.cookies["ImageViewerCols"])
         else:          else:
             cols=2              cols=getattr(self,'defaultcols',3)
   
   
         idsnumber=len(self.show_thumbs())          idsnumber=len(self.show_thumbs())
         if rows:          if rows:
             if cols*rows >idsnumber:              if cols*rows >idsnumber:
                 rows=int(idsnumber/cols)+1                  rows=int(idsnumber/cols)+1
   
         #print cols,rows          if showall is None:
               showall=self.REQUEST.SESSION.get('showall', 'No')
         if showall=='yes':          if showall=='yes':
             rows=int(idsnumber/cols)+1              rows=int(idsnumber/cols)+1
                           
Line 1360  class ImageCollection(Folder, Persistent Line 1521  class ImageCollection(Folder, Persistent
         """Ausgabe anzahl"""          """Ausgabe anzahl"""
   
         idsAll=self.show_thumbs()          idsAll=self.show_thumbs()
         if len(idsAll)==0: #keine Einträge          if len(idsAll)==0: #keine Eintraege
             return 0              return 0
         if self.REQUEST.SESSION.has_key("filename") and not (showall=="yes"):          if self.REQUEST.SESSION.has_key("filename") and not (showall=="yes"):
             filename=self.REQUEST.SESSION["filename"]              filename=self.REQUEST.SESSION["filename"]
Line 1437  class ImageCollection(Folder, Persistent Line 1598  class ImageCollection(Folder, Persistent
         """navigation"""          """navigation"""
         #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']          #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
         return pt()  
           return pt().data
   
     def navig_html(self):      def navig_html(self):
         """navigation"""          """navigation"""
Line 1459  class ImageCollection(Folder, Persistent Line 1621  class ImageCollection(Folder, Persistent
   
     def getImageByName(self,filename,onlyName=None):      def getImageByName(self,filename,onlyName=None):
         """get filename"""          """get filename"""
                   print repr(filename)
         fn=getattr(self,filename,None)          #FIXME: umlaute in filename
           fn=getattr(self,repr(filename),None)
         if not fn:          if not fn:
             filenameM=filename.split(".")[0]              filenameM=filename.split(".")[0]
             founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])              founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
Line 1478  class ImageCollection(Folder, Persistent Line 1641  class ImageCollection(Folder, Persistent
                   
                   
     security.declareProtected('View','index_html')      security.declareProtected('View','index_html')
     def index_html(self,fn=None):      def index_html(self,fn=None,generic='No'):
         """main template collection"""          """main template collection"""
           
         if fn:          if fn:
Line 1495  class ImageCollection(Folder, Persistent Line 1658  class ImageCollection(Folder, Persistent
             self.REQUEST.SESSION['filenames']=ret              self.REQUEST.SESSION['filenames']=ret
                 #self.REQUEST.SESSION['filenamesIds']=fnIds                  #self.REQUEST.SESSION['filenamesIds']=fnIds
   
               overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
               
   
               if overview and (generic =='No'):
                   return overview[0][1]()
               else:
             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
             return pt()                      return pt()        
   
Line 1513  class ImageCollection(Folder, Persistent Line 1682  class ImageCollection(Folder, Persistent
                           
   
         overview=self.ZopeFind(self,obj_ids=['overview.html'])          overview=self.ZopeFind(self,obj_ids=['overview.html'])
         if overview:          if overview and (generic == 'No'):
             return overview[0][1]()              return overview[0][1]()
           elif hasattr(self,'templates'):
               pt=self.templates.imgcoll_main.__of__(self)
               return pt()
         else:          else:
             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)              pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
             return pt()              return pt()
           
       def navigation(self):
           """generate navigation bar"""
           
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_fragment')).__of__(self)
           return pt()    
       
 def manage_AddImageCollectionForm(self):  def manage_AddImageCollectionForm(self):
     """Nothing yet"""      """Nothing yet"""
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)
Line 1539  class ImageCollectionMD(ImageCollection, Line 1717  class ImageCollectionMD(ImageCollection,
     meta_type="ImageCollection MD"      meta_type="ImageCollection MD"
     #scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn="      #scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn="
     scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="      scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="
       rightsQueryDefault="SELECT accessibility from vision_main where id_image=(SELECT id from vision_images where filename ~ '%s*' )"
       rightsQueryFieldDefault="accessibility"
       
     manage_options=ImageCollection.manage_options+(      manage_options=ImageCollection.manage_options+(
         {'label':'ZSQLExtend','action':'changeZSQLExtendForm'},          {'label':'ZSQLExtend','action':'changeZSQLExtendForm'},
           {'label':'Change Rights Query','action':'changeRightsQueryForm'},
        )         )
   
     try:              try:        
Line 1548  class ImageCollectionMD(ImageCollection, Line 1730  class ImageCollectionMD(ImageCollection,
     except:      except:
       pass        pass
   
     
       def addImage(self):
           """Add an Image"""
                   
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImageMD.zpt')).__of__(self)
           return pt()
       
       def addImage2(self,_fileupload,_fileName=None,_meta=None,_use_default=None,RESPONSE=None,**argv):
           """Add"""
   
           filenameKey="filename"
           #print "FU",fileupload
   
           if _use_default:
               try:
                   meta=self.meta_default(_fileupload.filename)
               except:
                   meta=None
           else:
               meta=None
           
           fn=_fileName or splitPath(_fileupload.filename)
           
           manage_AddImageDigilib(self,fn,_fileupload,meta=meta)
           
           args[key]=_filename
           
           self.ZSQLAdd(args=argv)
           
           if RESPONSE:
               return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
           #return  self.REQUEST['URL1']+'/'+fileupload.filename
   
       def navig_html(self):
           """navigation"""
           #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
          
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigationMD.zpt')).__of__(self)
           return pt()
           
       def navig_selected_html(self):
           """navigation"""
           #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selectedMD.zpt')).__of__(self)
   
           return pt()
   
       def decode(self,str):
           """decoder"""
           if not str:
               return ""
           if type(str) is StringType:
               try:            
                   return str.decode('utf-8')
               except:
                   return str.decode('latin-1')
           else:
               
               return str
   
       def standardSearch(self):
           """standard search page"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','standardSearchPage.zpt')).__of__(self)
           return pt()        
           
       def searchResultXML(self):
           """xmlformat"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','searchResultXML.zpt')).__of__(self)
           return pt()        
   
       def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):
           """search"""
           #context.ZSQLFind(_table='vision_main')
           urlTmp=REQUEST['URL1']
           
           url=urlTmp+'/searchResultXML?-table=vision_main&'+REQUEST['QUERY_STRING']
           
           if xml is None:
               RESPONSE.redirect('xmlinput?url='+urllib.quote(url))
           else:
               RESPONSE.redirect(url)
               
       def index_html(self,fn=None,selection=None,generic='No',REQUEST=None,RESPONSE=None):
           """main template collection"""
   
           
           mode=self.REQUEST.get('mode','view')
           if fn:
               ret=[]
   
               if type(fn) is ListType:
                   """experimentell mehr als ein filename"""
                   for filename in fn:
                       if not (filename == ""):
                           ret.append((filename,'',1))
               else:
                   ret.append((fn,'',1))
   
               self.REQUEST.SESSION['filenames']=ret
                   #self.REQUEST.SESSION['filenamesIds']=fnIds
             
               overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
               
   
               if overview and (generic =='No'):
                   return overview[0][1]()
               else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                   return pt()        
   
           
           # filename given, then only display this file
           if self.REQUEST.has_key('filename'):
   
               filen=self.REQUEST['filename']
           else:
               filen=""
   
   
           self.REQUEST.SESSION['filename']=filen[0:]
           
           if not self.REQUEST.SESSION['filename']=="":
               url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()
               if mode=="view":
                   self.REQUEST.RESPONSE.redirect(url)
               elif mode=="download":
                   self.REQUEST.RESPONSE.redirect(url+"/download")
                   
           if self.REQUEST.has_key('showall'):
   
               self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
           else:
               self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
               
               
           if selection:
               #selection i.e. selection already stored at self.REQUEST.SESSION['filenames']
               overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
               
   
               if overview and (generic =='No'):#
                   print "selected"
                   print repr(overview[0][1])
                   return overview[0][1]()
               else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                   return pt()   
               
               
           #no filename then show overview
   
           overview=self.ZopeFind(self,obj_ids=['overviewMD.html'])
           if overview and (generic == 'No'):
   
             
               return overview[0][1]()
           elif hasattr(self,'templates'):
             
               pt=self.templates.imgcoll_mainMD.__of__(self)
               return pt()
           else:
             
               pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overviewMD.zpt')).__of__(self)
               return pt()
           
       def nextImage(self,request,selected=None,returnFn=None):
           """show nextimage"""
       
           if not selected and self.REQUEST.has_key('fn'):
               imagename=self.REQUEST['fn'].split('/')[-1]
               nr=self.getObjectPosition(imagename)
       
               objects=self.objectIds()
               if len(objects)==nr+1:
                   return ""
               else:
                   fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr+1]
                   return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">next image</a>"                
   
       def prevImage(self,request,selected=None,returnFn=None):
           """show nextimage"""
       
           if not selected and self.REQUEST.has_key('fn'):
               imagename=self.REQUEST['fn'].split('/')[-1]
               nr=self.getObjectPosition(imagename)
       
               objects=self.objectIds()
               if nr==0:
                   return ""
               else:
                   fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr-1]
                   return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">prev image</a>"                
       
           
       def changeRightsQueryForm(self):
           """change Rights Query"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeRightsQueryForm.zpt')).__of__(self)
           return pt()
     
       def changeRightsQuery(self,rightsQuery,rightsQueryField,RESPONSE=None):
           """change Rightsquery"""
           
           self.rightsQuery=rightsQuery
           self.rightsQueryField=rightsQueryField
           
           if RESPONSE is not None:
                   RESPONSE.redirect('manage_main')
   
       
           
       def getRightsQuery(self):
           """get Query"""
           return getattr(self,'rightsQuery',self.rightsQueryDefault)
       
       def getRightsQueryField(self):
           """get Query Fiueld"""
           return getattr(self,'rightsQueryField',self.rightsQueryFieldDefault)
       
       
       
     def setGenericSearchStringForm(self):      def setGenericSearchStringForm(self):
         """form setze generischen search string fuer MD"""          """form setze generischen search string fuer MD"""
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','setGenericSearchStringForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','setGenericSearchStringForm.zpt')).__of__(self)
Line 1562  class ImageCollectionMD(ImageCollection, Line 1964  class ImageCollectionMD(ImageCollection,
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self)
         return pt()          return pt()
   
       def getRights(self,id):
           """get the rights from a database"""
           #print self.rightsQuery%id
           results=self.ZSQLSimpleSearch(self.getRightsQuery()%id)
           if results:
               result = getattr(results[0],self.getRightsQueryField())
           else:
               result = ''
           return result
        
       def xmlinput(self,url):
           """Anzeige von ausgewaehlten thumbs"""
           #return url
           
           url=urllib.unquote(url)
           xmldoc=urllib.urlopen(url).read()
           #return xmldoc
           try:
                   dom=xml.dom.minidom.parseString(xmldoc)
           except:
                   return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
   
           images=dom.getElementsByTagName('image')
   
           rc=[]
           fnIds={}
           for image in images:
                   imagename=image.getElementsByTagName('imagename')[0]
                 
                   
                   
                   
                   idnr=image.getElementsByTagName('idnr')[0]
                   id=getText(idnr.childNodes)
                   try:
                       numberOfPages=image.getElementsByTagName('numberOfPages')[0]
                   except:
                       numberOfPages=None
                       
                   if numberOfPages:
                       nopT=getText(numberOfPages.childNodes)
                       try:
                               nop=int(nopT)
                       except:
                               nop=0
                   else:
                       nop=0
                               
                   texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
                   for text in texts:
                       if not text=="":
                           text=self.getImageByName(text,onlyName="yes")
                           try:
                                   rc.append((str(text),id,nop))
                                   fnIds[str(text)]=(id,nop)
                           except:
                                   rc.append((repr(text),id,nop))
                                   fnIds[repr(text)]=(id,nop)
                   
   
           rc.sort()
           self.REQUEST.SESSION['filenames']=rc
           self.REQUEST.SESSION['filenamesIds']=fnIds
           
           overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
               
           if overview:
                   return overview[0][1]()
           else:
                   pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
                   return pt()        
           
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
           return pt()        
   
       def selection(self):
           """show only selected"""
           if self.REQUEST.has_key('filename'):
               filen=self.REQUEST['filename']
           else:
               filen=""
           self.REQUEST.SESSION['filename']=filen
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
           return pt()  
           
       def thumblistSelectedMD(self):
           """main template collection"""
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselectedMD.zpt')).__of__(self)
           return pt()
   
 def manage_AddImageCollectionMDForm(self):  def manage_AddImageCollectionMDForm(self):
     """Nothing yet"""      """Nothing yet"""

Removed from v.1.67  
changed lines
  Added in v.1.78


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