File:  [Repository] / ImageArchive / ImageArchive.py
Revision 1.57: download - view: text, annotated - select for diffs - revision graph
Fri Apr 29 18:24:04 2005 UTC (19 years, 1 month ago) by dwinter
Branches: MAIN
CVS tags: HEAD
minorCVS: ----------------------------------------------------------------------

    1: from OFS.Folder import Folder
    2: from OFS.SimpleItem import SimpleItem
    3: from Globals import Persistent,package_home
    4: from Acquisition import Implicit
    5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    6: from Products.PageTemplates.PageTemplate import PageTemplate
    7: import re
    8: import os
    9: import os.path
   10: import urllib
   11: import xml.dom.minidom
   12: import operator
   13: import tempfile
   14: import shutil
   15: from types import *
   16: import time
   17: from threading import Thread
   18: import Queue
   19: 
   20: try:
   21:     from Products.ECHO_content.ECHO_collection import ECHO_basis
   22: except:
   23:     print "ECHO Elements not imported"
   24:     class ECHO_basis:
   25:         """leer"""
   26: 
   27:         manage_options=()
   28: 
   29: 
   30: tdir = "/mpiwg/temp/tmp/archivesImageServer/"
   31: #tdir="/tmp/archivesImageServer/"
   32: 
   33: def splitPath(str):
   34: 	str2=str.replace("\\","/")
   35: 	return os.path.split(str2)[1]
   36: 
   37: def getText(nodelist):
   38:     
   39:     rc = ""
   40:     for node in nodelist:
   41:     
   42:     	if node.nodeType == node.TEXT_NODE:
   43:            rc = rc + node.data
   44:     return rc
   45: 
   46: def getTextFromNode(nodename):
   47:     nodelist=nodename.childNodes
   48:     rc = ""
   49:     for node in nodelist:
   50:     	if node.nodeType == node.TEXT_NODE:
   51:            rc = rc + node.data
   52:     return rc
   53: 
   54: class generateSet:
   55:     """generateSetThread"""
   56: 
   57:         
   58:     def __init__(self,filenames,filenamesIds,ImageViewerPath,ids,url,local=None,version="working"):
   59:         """init generateSet"""
   60:         self.filenames=filenames
   61:         self.filenamesIds=filenamesIds
   62:         self.ImageViewerPath=ImageViewerPath
   63:         self.ids=ids
   64:         self.local=local
   65:         self.url=url
   66:         self.version=version
   67:         self.done=None
   68: 
   69: 
   70:     def __call__(self):
   71:         """call generate Set"""
   72: 
   73:         storeTempDir=tempfile.tempdir
   74: 	tempfile.tempdir=tdir
   75: 
   76:         tmpPath=tempfile.mktemp()
   77:         tmpZip=tempfile.mktemp()+".gtz"
   78:         tmpFn=os.path.split(tmpZip)[1]
   79: 
   80:         if not os.path.exists(tempfile.tempdir):
   81:             os.mkdir(tempfile.tempdir) 
   82: 
   83:         if not os.path.exists(tmpPath):
   84: 		    os.mkdir(tmpPath) 
   85: 	    
   86: 	self.response=""
   87: 
   88:         
   89:         self.response="<h3>1. step: getting the images</h3>"
   90: 
   91:         for id in self.filenames:
   92: 
   93: 		    if self.filenamesIds.has_key(id[0]):
   94: 			    filename=self.filenamesIds[id[0]][0]+"_"+id[0]
   95: 		    else:
   96: 			    filename=id[0]
   97: 
   98:                     self.response+=str("<p>Get File: %s<br>\n"%filename)
   99: 
  100: 		    if self.local:
  101: 			    
  102: 			    if self.version=="working":
  103: 
  104: 				    sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg"
  105: 			    else:
  106: 				    sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]
  107: 			    targetPath=tmpPath+"/"+filename
  108: 			    try:
  109:                                 shutil.copyfile(sourcePath,targetPath)
  110: 			    except:
  111:                                 self.response+=(str("<p>Error in File: %s (possible missing)<br>\n"%filename))
  112: 		    else:
  113: 			    if self.version=="working":
  114: 				    path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"
  115: 			    else:
  116: 				    path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&mo=rawfile,hires"
  117: 			    image=urllib.urlopen(path).read()
  118: 		    
  119: 		    
  120: 			    fh=file(tmpPath+"/"+filename,"w")
  121: 
  122: 		    
  123: 			    fh.write(image)
  124: 			    fh.close()
  125: 
  126:                     #folgeseiten
  127: 		    if int(self.filenamesIds[id[0]][1])>1: 
  128: 			    #ids=self.show_thumbs()
  129:                             
  130: 		            try:
  131:                                 nr=self.ids.index(id[0])
  132: 			    except:
  133:                                 self.response+=str("<p>Error in File: %s (possible missing)<br>\n"%id[0])
  134:                 
  135: 
  136:                                 nr=0
  137: 
  138: 			    numberOfPages=self.filenamesIds[id[0]][1]
  139: 			    for k in range(int(numberOfPages)-1):
  140: 				    i=k+1
  141: 				    if self.filenamesIds.has_key(id[0]):
  142: 					    filename=self.filenamesIds[id[0]][0]+"_"+self.ids[nr+i]
  143: 				    else:
  144: 					    filename=id[0]
  145: 
  146:                                     self.response+=str("<p>Get File: %s<br>\n"%filename)
  147: 
  148: 				    if self.local:
  149: 					    sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+self.ids[nr+i]
  150: 					    targetPath=tmpPath+"/"+filename
  151: 					    try:
  152: 						    shutil.copyfile(sourcePath,targetPath)
  153: 					
  154: 					    except:
  155:                                                 self.response+=str("<p>Error in File: %s (missing?)<br>\n"%filename)
  156: 						  
  157: 				    else:
  158: 					    path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires"
  159: 
  160: 					    image=urllib.urlopen(path).read()
  161: 				    
  162: 
  163: 					    fh=file(tmpPath+"/"+filename,"w")
  164: 					    fh.write(image)
  165: 					    fh.close()
  166: 
  167:         self.response+="<h3>2. step: creating the downloadable file</h3>"
  168: 	self.response+="<p>Create gtar<br>"
  169:         self.response+="<p>This can take a while....<br>\n"
  170: 
  171:         fh=os.popen2("gnutar zcvf %s %s/*"%(tmpZip,tmpPath),1)[1]
  172:         self.response+="<br>"
  173:         for c in fh.read():
  174:             self.response+=c
  175:             if c==")":
  176:                 self.response+="<br>\n"
  177: 		    
  178: 			    
  179: 
  180:         
  181:         shutil.rmtree(tmpPath)
  182: 
  183:         self.response+="<p>finished<br>\n"
  184: 
  185:         len=os.stat(tmpZip)[6]
  186:         downloadUrl=self.url+"/downloadSet"
  187:         self.response+="""<h1><a href="downloadSet?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len)
  188:         self.response+="""<p>The file will be stored for a while, you can download it later, the URL is:</p>
  189: 		    <p><a href="downloadSet?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn)
  190: 
  191:         self.done=True
  192:     def getResult(self):
  193:         """get result"""
  194:         return self.response
  195: 
  196:     def isDone(self):
  197:         if self.done:
  198:             return True
  199:         else:
  200:             return False
  201:         
  202: class metaData(SimpleItem):
  203:     """Klasse fuer metadaten"""
  204:     meta_type="metaData"
  205:     
  206:     def __init__(self,xmlurl,container=None):
  207:         """__init__"""
  208:         return self.update(xmlurl,container)
  209: 
  210: 
  211:     def update(self,xmlurl,container=None):
  212:         """update"""
  213: 
  214:         try:
  215:             xmlfh=urllib.urlopen(xmlurl)
  216:             dom=xml.dom.minidom.parse(xmlfh)
  217:         except:
  218:             return None
  219: 
  220:         md=dom.getElementsByTagName(container)
  221:         mlist=[]
  222:         if md:
  223:             for node in md[0].childNodes:
  224:                 if node.nodeType==dom.ELEMENT_NODE:
  225:                     name=node.tagName
  226:                     content=getTextFromNode(node)
  227:                     setattr(self,name,content)
  228:                     mlist.append(name)
  229:             self.mlist=mlist[0:]
  230:         else:
  231:             self.mlist=[]
  232:         
  233:     def index_html(self):
  234:         """index"""
  235:         ret="<html><body>"
  236:         for tag in self.mlist:
  237:             ret+="<p>%s=%s</p>"%(tag,getattr(self,tag))
  238:         return ret+"</body></html>"
  239:                 
  240:         
  241: class ImageDigilib(Folder,Persistent,Implicit):
  242:     """Anzeige object fuer digilib"""
  243:     meta_type="ImageDigilib"
  244: 
  245:     leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
  246: 
  247:     manage_options = Folder.manage_options+(
  248:         
  249:         {'label':'Add Metadata','action':'addMetaObjectForm'},
  250:         
  251:         )
  252: 
  253:     def addMetaObject(self,id,RESPONSE=None):
  254:         """Add an MetaObject"""
  255:         objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
  256: 
  257:         request=self.REQUEST
  258:         objectCreate=objectType.createObjectManager(id,request)
  259: 
  260:         self._setObject(id,objectCreate)
  261:         
  262:         objectCreate.propertysheets.meta.manage_editProperties(request)
  263: 
  264:         if RESPONSE is not None:
  265:             RESPONSE.redirect('manage_main')
  266: 
  267:         
  268: 
  269: 
  270:     def addMetaObjectForm(self):
  271:         """Add Form"""
  272:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetaObject.zpt')).__of__(self)
  273:         return pt()        
  274: 
  275: 
  276:     def __init__(self,id,filename,meta=None):
  277:         self.id=id
  278:         self.title=filename
  279:         self.filename=filename
  280:         self.meta=meta
  281: 
  282:     def getMeta(self):
  283:         """ausgabe der metadaten"""
  284:         return self.meta
  285: 
  286:     def manageMetaData(self,strict=None):
  287:         """create or updateMetadata"""
  288:         
  289:         md=self.ZopeFind(self,obj_metatypes=["metaData"])
  290:         
  291:         if not md:
  292:             self._setObject("metaData",metaData(self.meta,"ROW"))
  293: 
  294:         else:
  295:             if not strict:
  296:                 md[0][1].update(self.meta,"ROW")
  297:             else:
  298:                 print "strict"
  299:                 if len(md[0][1].mlist)==0:
  300:                     print " +++",self.getId()
  301:                     md[0][1].update(self.meta,"ROW")
  302:                 else:
  303:                     print " ---",self.getId()
  304:                     
  305:     def uploadImage(self,fileupload,path_name):
  306:         """upload an Image from an Requast"""
  307:         #path_name=self.ImageStoragePath
  308:         fn=splitPath(fileupload.filename)
  309:         filename=path_name+"/"+fn
  310:         filedata=fileupload.read()
  311:         f=open(filename,"w")
  312:         f.write(filedata)
  313:         f.close()
  314:         try:
  315:             os.chmod(filename,0664)
  316:         except:
  317:             """hack"""
  318: 	#scale thumb
  319: 	
  320:         self.scaleThumbs()
  321: 
  322: 	#scale standard
  323: 
  324: 	self.scaleWorkingVersions()
  325: 
  326: 	
  327: 	
  328:     def downloadWorkingVersion(self):
  329: 	    """download working version (2000 pixel)"""
  330: 	    
  331: 	    return self.download(fmt="&dw=2000&dh=2000",suffix=".jpg")
  332:     
  333:     def download(self,fmt="&mo=rawfile,hires",suffix=None):
  334:         """download"""
  335:         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+fmt
  336: 	
  337: 	if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(self.filename):
  338: 		filename=self.REQUEST.SESSION['filenamesIds'][self.filename][0]+"_"+self.filename
  339: 	else:
  340: 		filename=self.filename
  341: 
  342: 	if suffix:
  343: 		filename=os.path.splitext(filename)[0]+suffix
  344: 		
  345: 	self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%filename)
  346: 	self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
  347:         #print path
  348: 	imagefh=urllib.urlopen(path,'rb')
  349:         
  350: 	self.REQUEST.RESPONSE.write(imagefh.read())
  351: 	self.REQUEST.RESPONSE.close()
  352:         #return self.REQUEST.RESPONSE.redirect(path)
  353: 
  354:     def updateImageForm(self):
  355: 	    """form"""
  356: 	    pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateImageForm.zpt')).__of__(self)
  357: 	    return pt()        
  358: 
  359:     def renameImageForm(self):
  360: 	    """form"""
  361: 	    pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','renameImageForm.zpt')).__of__(self)
  362: 	    return pt()
  363: 
  364:     def renameImage(self,newname,RESPONSE=None):
  365: 	    """umbenennen"""
  366: 	    #umbennen des files im folder
  367: 	    oldname=self.getId()
  368: 	    self.aq_parent.manage_renameObjects(ids=[oldname],new_ids=[newname])
  369: 	    self.title=newname[0:]
  370:             self.filename=newname[0:]	
  371:             #umbennen des files auf dem server
  372: 	    oldpath=os.path.join(self.ImageStoragePath,oldname)
  373: 	    newpath=os.path.join(self.ImageStoragePath,newname)
  374:             os.rename(oldpath,newpath)
  375: 	    
  376: 	    #umbenennen des versionsfolders
  377: 	    oldfolder=os.path.join(self.ImageStoragePath,"."+oldname+".dir")
  378:             newfolder=os.path.join(self.ImageStoragePath,"."+newname+".dir")
  379: 	    if os.path.exists(oldfolder):
  380:                 os.rename(oldfolder,newfolder)
  381:             else:
  382:                 os.mkdir(newfolder)
  383:                 
  384: 	    #schreibe info uber umbennenung
  385: 
  386:             renameName=os.path.join(newfolder,"renamed")
  387:             if os.path.exists(renameName):
  388:                 fh=file(renameName,'a')
  389:             else:
  390:                 fh=file(renameName,'w')
  391: 
  392:             tm=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
  393:             try:
  394:                 user=self.REQUEST['AUTHENTICATED_USER']
  395:             except:
  396:                 user="unknown"
  397: 
  398:             str="""%s %s %s %s\n"""%(tm,user,oldname,newname)
  399:             fh.write(str)
  400:             fh.close()
  401:             
  402:             #scale thumb
  403: 	
  404: 	    self.scaleThumbs()
  405: 	    
  406: 	    #scale standard
  407: 
  408: 	    self.scaleWorkingVersions()
  409: 
  410: 
  411:             if RESPONSE:
  412: 		    RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
  413: 	
  414: 
  415:     def updateImage(self,file,rename=None,RESPONSE=None):
  416: 	    """lade neues Version des Bildes"""
  417: 	    #teste ob Dokumenten ordner schon vorhanden
  418: 	    imagePath=os.path.join(self.ImageStoragePath,self.getId())
  419: 	    path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
  420: 	    
  421: 	    if not os.path.exists(path):
  422: 		    os.mkdir(path,0775)
  423: 		    os.chmod(path,0775)
  424: 		    
  425: 	    versionNumber=getattr(self,'versionNumber',0)+1
  426: 
  427: 	    #teste ob version schon existiert
  428: 
  429: 	    while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))):
  430: 		    versionNumber+=1
  431: 
  432: 	    #kopieren der bestehenden Version in den Versions ordner.
  433: 	    imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))
  434: 	    os.rename(imagePath,imageNewPath)
  435: 
  436: 	    #lesen des upload files und schreiben
  437: 	    filedata=file.read()
  438: 	    f=open(imagePath,"w")
  439: 	    f.write(filedata)
  440: 	    f.close()
  441: 	    try:
  442: 		    os.chmod(imagePath,0664)
  443: 	    except:
  444: 		    """hack"""
  445: 	    #scale thumb
  446: 	
  447: 	    self.scaleThumbs()
  448: 	    
  449: 	    #scale standard
  450: 
  451: 	    self.scaleWorkingVersions()
  452: 
  453: 	    if rename:
  454: 		self.renameImage(file.filename)
  455: 	
  456: 	
  457: 	    if RESPONSE:
  458: 		    RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
  459: 	
  460: 
  461: 	    return "done"
  462: 	    
  463:     def thumb(self,url=None):
  464:         """show thumb"""
  465:         thumbname=os.path.splitext(self.filename)[0]+".jpg"
  466:         ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
  467: ##             image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
  468: ##             f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
  469: ##             f.write(image)
  470: ##             f.close()
  471: ##             os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
  472:             
  473:         #DEVEL:take nausikaa for server solution
  474:         
  475:         path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
  476:         #path="/mpiwg/online/"+self.ImageViewerPath+"/"+thumbname
  477:         self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
  478:         if url:
  479:             return "<img border=\"0\" src=\"%s\">"% path
  480:         else:
  481:             pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
  482:             return pt()
  483:     
  484:     def index_html(self):
  485:         """show image"""
  486:         #DEVELOP: take first one for server
  487:         
  488:         path="http://content.mpiwg-berlin.mpg.de/zogilib_images?lv=2&fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]
  489:         return self.REQUEST.RESPONSE.redirect(path)
  490: 
  491:     
  492: def manage_AddImageDigilibForm(self):
  493:     """Nothing yet"""
  494:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageDigilibForm.zpt')).__of__(self)
  495:     return pt()
  496:     
  497: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
  498:     """Add ImageCollection"""
  499:     
  500:     #fileupload=self.REQUEST['fileupload']
  501:     fn=splitPath(fileupload.filename)
  502:     newObj=ImageDigilib(id,fn,meta)
  503:     
  504:     self._setObject(id,newObj)
  505:     getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
  506:     
  507:     if RESPONSE is not None:
  508:         RESPONSE.redirect('manage_main')
  509: 
  510:                  
  511: 
  512: class ImageCollection(Folder, Persistent, Implicit,ECHO_basis):
  513: 
  514:     """Sammelordner für Bilder"""
  515:     meta_type="ImageCollection"
  516: 
  517:    
  518:     zipThreads={}
  519:     zipThreads2={}
  520:     
  521:     genericMetaDataType="leiden_meta"
  522: 
  523:     leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
  524: 
  525:     
  526:     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
  527: 
  528:    
  529:     def refreshTxt(self):
  530:         """txt fuer refresh"""
  531:         tn=self.REQUEST.SESSION['threadName']
  532:         return """ 2;url=%s?repeat=%s """%(self.absolute_url()+"/createSet",tn)
  533: 
  534:     def createSet(self,RESPONSE=None,local=None,version="working",repeat=None):
  535: 	    """download aller gewaehlten files"""
  536: 
  537:             threadName=repeat
  538:         
  539:                        
  540:             if not threadName or threadName=="":
  541:                 threadStart=generateSet(self.REQUEST.SESSION['filenames'],self.REQUEST.SESSION['filenamesIds'],self.ImageViewerPath,self.show_thumbs(),self.absolute_url(),local=local,version=version)
  542:                 thread=Thread(target=threadStart)
  543:                 
  544:                 thread.start()
  545: 
  546:                     
  547:                 self.zipThreads[thread.getName()[0:]]=threadStart
  548:                 self.zipThreads2[thread.getName()[0:]]=thread
  549:                 self.REQUEST.SESSION['threadName']=thread.getName()[0:]
  550:                 wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['zip_wait_template'])
  551:                 if wait_template:
  552:                     return wait_template[0][1]()
  553:                 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
  554:                 return pt()
  555:                 #xmltrans.run()
  556:             else:
  557:                 self.REQUEST.SESSION['threadName']=threadName
  558: 
  559:                 if (self.zipThreads[threadName].getResult()==None):
  560: 
  561:                     wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
  562:                     if wait_template:
  563:                 	return wait_template[0][1]()
  564:                 
  565:                     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
  566:                     return pt()
  567:                 else:
  568:                     if self.zipThreads[threadName].isDone():
  569:                         self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
  570:                         self.zipThreads2[threadName].join()
  571:                         del(self.zipThreads2[threadName])
  572:                         del(self.zipThreads[threadName])
  573:                         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_result.zpt')).__of__(self)
  574:                         return pt()
  575:                         
  576:                     else:
  577:                         self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
  578:                         self.REQUEST.SESSION['threadName']=threadName
  579:                         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait_result.zpt')).__of__(self)
  580:                         return pt()
  581: 
  582: 
  583: 
  584: 
  585: 
  586:     def checkThreads(self):
  587:         """teste running threads"""
  588:         ret="""<html>
  589:         <head>
  590:         <meta http-equiv="REFRESH" content="5;url=%s/checkThreads"
  591:         <body><h2>Threads of %s</h2>"""%(self.absolute_url(),self.getId())
  592:         
  593:         for threadName in self.zipThreads.keys():
  594:             if self.zipThreads2[threadName].isAlive():
  595:                 ret+="<p>%s --> alive</p>"%threadName
  596:             else:
  597:                 ret+="<p>%s --> dead</p>"%threadName
  598:         return ret+"</body></html>"
  599:     
  600:     def downloadSet(self,fn):
  601: 	    """download prepared set"""
  602: 	    filename=os.path.join(tdir,fn)
  603: 
  604: 	    
  605: 	    self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.tgz")
  606: 	    self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
  607: 	    len=os.stat(filename)[6]
  608: 	    self.REQUEST.RESPONSE.setHeader("Content-Length",len)
  609: 	    images=file(filename).read()
  610: 	    self.REQUEST.RESPONSE.write(images)
  611: 	    self.REQUEST.RESPONSE.close()
  612: 
  613: 		    
  614: 		    
  615:     def scaleThumbs(self,RESPONSE=None):
  616:         """scale thumbs"""
  617: 	
  618: 	#scale thumbs
  619:         ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)
  620: 	if RESPONSE:
  621: 		RESPONSE.write(ret.read())
  622: 		RESPONSE.write("\n")
  623: 		
  624:         return "RESCALING STARTED"
  625: 
  626:     def scaleWorkingVersions(self,RESPONSE=None):
  627:         """scale working versions"""
  628: 	
  629: 	#scale standard
  630: 
  631: 	ret=os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/small -scaleto=2000 &"% self.ImageViewerPath)
  632: 	if RESPONSE:
  633: 		RESPONSE.write(ret.read())
  634: 		RESPONSE.write("\n")
  635: 	return "rescaling started"
  636: 
  637: 
  638:     
  639:     def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
  640:         self.id=id
  641:         self.title=title
  642:         self.ImageStoragePath=ImageStoragePath
  643:         self.ImageViewerPath=ImageViewerPath
  644:         self.defaultMetaString=defaultMetaString
  645: 
  646:     optTMP= Folder.manage_options
  647: 
  648:     manage_options = optTMP+(
  649:         {'label':'Main Config','action':'ImageCollection_config'},
  650:         {'label':'Import','action':'ImportFiles'},
  651:         {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},
  652:         {'label':'Import Metadata File','action':'importMetaFileForm'},
  653:         {'label':'Import Metadata','action':'importMetaData'},
  654:         {'label':'Rescale thumbs','action':'scaleThumbs'},
  655: 	{'label':'Rescale working version','action':'scaleWorkingVersions'},
  656:         )
  657: 
  658:     
  659: 
  660:     def importMetaData(self,strict=None):
  661:         """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""
  662:         
  663:         for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):
  664:             print image[1].getId()
  665:             image[1].manageMetaData(strict)
  666:         return "ok"
  667:         
  668: 
  669:     def importMetaFileForm(self):
  670:         """import metadata"""
  671:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)
  672:         return pt()
  673: 
  674:     def importMetaFile(self,fileupload,tag):
  675:         """import"""
  676:         filedata=fileupload.read()
  677:         dom=xml.dom.minidom.parseString(filedata)
  678:         rows=dom.getElementsByTagName(tag)
  679:         #print "ROWS",rows
  680:         request=self.REQUEST
  681:         for row in rows:
  682:             
  683:             for a in self.leiden_meta_fields:
  684:                 self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
  685: 
  686:             image_id=self.REQUEST['image_id']
  687:             if (not hasattr(self,image_id)) & (not image_id==""):
  688:                 #print image_id
  689:                 newObj=ImageCollection(str(image_id),image_id,'','','')
  690:                 self._setObject(str(image_id),newObj)
  691: 
  692:             id="leiden_meta_data_file"
  693:             self.REQUEST['id']=id
  694:             #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
  695:             #objectCreate=objectType.createInObjectManager(id,request)
  696:             #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
  697:             try:
  698:                 addID=getattr(self,image_id)
  699:                 objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
  700:                 #getattr(self,image_id)._setObject(id,objectCreate)
  701:                 obj=getattr(addID,id)
  702:                 obj.propertysheets.meta.manage_editProperties(request)
  703:             except:
  704:                 """nothing"""
  705:         return "OK"
  706:     
  707: 
  708:     def nextImage(self,request,selected=None,returnFn=None):
  709:         """show nextimage"""
  710:         try:
  711:             ids=self.show_thumbs()
  712:             if request.SESSION.has_key("filename"):
  713:                 filename=request.SESSION["filename"]
  714:                 try:
  715:                     nr=ids.index(filename)
  716: 		  
  717:                 except:
  718:                     nr=0
  719:             else:
  720:                 nr=0
  721: 
  722:             if nr==len(ids)-1:
  723: 		    return ""
  724:             else:
  725: 	        if returnFn:
  726: 			    return ids[nr+1]
  727: 		    
  728:                 if selected:
  729:                     return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
  730:                 else:
  731:                     return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
  732:         except:
  733:             return ""
  734:         
  735:     def prevImage(self,request,selected=None):
  736:         """show nextimage"""
  737:         #return self.getId()
  738:         try:
  739:             ids=self.show_thumbs()
  740:             if request.SESSION.has_key("filename"):
  741:                 filename=request.SESSION["filename"]
  742:                 try:
  743:                     nr=ids.index(filename)
  744:                 except:
  745:                     nr=0
  746:             else:
  747:                 nr=0
  748: 
  749:             if nr==0:
  750:                 return ""
  751:             else:
  752:                 if selected:
  753:                     return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
  754:                 else:
  755:                     return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
  756:         except:
  757:             return ""
  758:         
  759:     def meta_default(self,filename):
  760:         """url der metadaten"""
  761:         return self.defaultMetaString % urllib.quote(filename)
  762:                      
  763:     def getThumbAttribute(self,id,attr):
  764:         if hasattr(self,id):
  765:             return getattr(getattr(self,id),attr)
  766:         else:
  767:             if attr=='title':
  768:                 return "<b>Missing Image:%s</b>" % id
  769: 
  770:     def getThumbFunction(self,id,attr):
  771:         #return "DUMP"
  772:         if hasattr(self,id):
  773:             return getattr(getattr(self,id),attr)()
  774:         
  775:             
  776:     def xmlinput(self,url):
  777:         """Anzeige von ausgewaehlten thumbs"""
  778:         #return url
  779:         
  780:         url=urllib.unquote(url)
  781:         xmldoc=urllib.urlopen(url).read()
  782:         #return xmldoc
  783: 	try:
  784: 		dom=xml.dom.minidom.parseString(xmldoc)
  785:         except:
  786: 		return xmldoc
  787: 	images=dom.getElementsByTagName('image')
  788: 
  789:         rc=[]
  790: 	fnIds={}
  791:         for image in images:
  792: 		imagename=image.getElementsByTagName('imagename')[0]
  793:                 
  794: 		
  795:                 
  796: 		idnr=image.getElementsByTagName('idnr')[0]
  797: 		id=getText(idnr.childNodes)
  798: 		numberOfPages=image.getElementsByTagName('numberOfPages')[0]
  799: 		nopT=getText(numberOfPages.childNodes)
  800: 		try:
  801: 			nop=int(nopT)
  802: 		except:
  803: 			nop=0
  804:                 texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
  805:                 for text in texts:
  806:                     if not text=="":
  807: 			try:
  808: 				rc.append((str(text),id,nop))
  809: 				fnIds[str(text)]=(id,nop)
  810: 			except:
  811: 				rc.append((repr(text),id,nop))
  812: 				fnIds[repr(text)]=(id,nop)
  813:                 
  814: 
  815:         rc.sort()
  816:         self.REQUEST.SESSION['filenames']=rc
  817: 	self.REQUEST.SESSION['filenamesIds']=fnIds
  818: 	
  819:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
  820:         return pt()        
  821: 
  822:     def recalculateMetaLink(self):
  823:         """recalculate the metadata"""
  824:         
  825:         for entryid in self.__dict__:
  826:             entry=getattr(self,entryid)
  827:             if hasattr(entry,'meta_type'):
  828:                 
  829:                 if entry.meta_type=="ImageDigilib":
  830:                     entry.meta=entry.meta_default(entry.getId())
  831:         return "OK"
  832:     
  833:     def addImage(self):
  834:         """Add an Image"""
  835: 		
  836:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImage.zpt')).__of__(self)
  837:         return pt()
  838:     
  839:     def addImage2(self,fileupload,meta,use_default=None,RESPONSE=None):
  840:         """Add"""
  841: 
  842:         #print "FU",fileupload
  843: 
  844:         if use_default:
  845:             try:
  846:                 meta=self.meta_default(fileupload.filename)
  847:             except:
  848:                 meta=None
  849:         else:
  850:             meta=None
  851:         fn=splitPath(fileupload.filename)
  852: 	
  853:         manage_AddImageDigilib(self,fn,fileupload,meta=meta)
  854:         return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
  855:         #return  self.REQUEST['URL1']+'/'+fileupload.filename
  856: 
  857:     def ImportFiles2(self,RESPONSE=None):
  858:         """Import the existing files of a folder"""
  859:         files=os.listdir(self.ImageStoragePath)
  860:         ret=""
  861:         #print self.__dict__
  862:         for file in files:
  863:             if not file[0]==".":
  864:                 if self.__dict__.has_key(file):
  865: 
  866:                     ret=ret+"<br>"+file+" already exists!"
  867:                 else:
  868:                     ret=ret+"<br>"+file+" created!"
  869:                     meta=self.meta_default(file)
  870:                     newObj=ImageDigilib(file,file,meta)
  871:                     #print newObj,file
  872:                     #print newObj
  873:                     self._setObject(file,newObj)
  874:         #print ret
  875:         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
  876:         #print self.ImageStoragePath
  877: 
  878:  	#scale thumb
  879: 	
  880:         self.scaleThumbs()
  881: 
  882: 	#scale standard
  883: 
  884: 	self.scaleWorkingVersions()
  885: 	
  886: 
  887:         RESPONSE.redirect('manage_main')
  888: 
  889:     def importStructure(self,path):
  890:         """import"""
  891:         splitted=os.path.split(path)
  892:         if os.path.isDir(path) and (len(splitted[1])>0) and (splitted[1][0]=="."):
  893:             manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None)
  894:             
  895:             obj=getattr(self,splitted[1])
  896:             obj.ImportFiles()
  897: 
  898:     def ImportStructure(self,RESPONSE=None):
  899:         """Import the existing files of a folder"""
  900:         files=os.listdir(self.ImageStoragePath)
  901:         ret=""
  902:         #print self.__dict__
  903: 
  904: 
  905:         for file in files:
  906:             
  907:             if os.path.isdir(os.path.join(self.ImageStoragePath,file)):
  908:                 imageStoragePath=os.path.join(self.ImageStoragePath,file)
  909:                 imageViewerPath=os.path.join(self.ImageViewerPath,file)
  910:                 manage_AddImageCollection(self,file,file,imageStoragePath,imageViewerPath,self.defaultMetaString)
  911:             
  912:                 obj=getattr(self,file)
  913:                 obj.ImportStructure()
  914:             else:
  915:                 if not file[0]==".":
  916:                     if self.__dict__.has_key(file):
  917: 
  918:                         ret=ret+"<br>"+file+" already exists!"
  919:                     else:
  920:                         ret=ret+"<br>"+file+" created!"
  921:                         newObj=ImageDigilib(file,file)
  922:                         #print newObj,file
  923:                         #print newObj
  924:                         try:
  925:                             self._setObject(file,newObj)
  926:                         except:
  927:                             """nothing yet"""
  928:         #print ret
  929:         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
  930:         #print self.ImageStoragePath
  931: 
  932: 		#scale thumb
  933: 	
  934:         #self.scaleThumbs()
  935: 
  936: 	#scale standard
  937: 
  938: 	#self.scaleWorkingVersions()
  939: 	
  940: 	if RESPONSE:
  941: 		RESPONSE.redirect('manage_main')
  942:     
  943:     def ImportFiles(self,RESPONSE=None):
  944:         """Import the existing files of a folder"""
  945:         files=os.listdir(self.ImageStoragePath)
  946:         ret=""
  947:         #print self.__dict__
  948:         for file in files:
  949:             if not file[0]==".":
  950:                 if self.__dict__.has_key(file):
  951: 
  952:                     ret=ret+"<br>"+file+" already exists!"
  953:                 else:
  954:                     ret=ret+"<br>"+file+" created!"
  955:                     newObj=ImageDigilib(file,file)
  956:                     #print newObj,file
  957:                     #print newObj
  958:                     try:
  959:                         self._setObject(file,newObj)
  960:                     except:
  961:                         """nothing yet"""
  962:         #print ret
  963:         #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
  964:         #print self.ImageStoragePath
  965: 
  966: 		#scale thumb
  967: 	
  968:         self.scaleThumbs()
  969: 
  970: 	#scale standard
  971: 
  972: 	self.scaleWorkingVersions()
  973: 	
  974: 	if RESPONSE:
  975: 		RESPONSE.redirect('manage_main')
  976:         
  977:     def ImageCollection_config(self):
  978:         """Nothing yet"""
  979:         if not hasattr(self,'defaultMetaString'):
  980:             self.defaultMetaString=""
  981:             
  982:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)
  983:         return pt()
  984: 
  985:     def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
  986:         """Change"""
  987:         self.title=title
  988:         self.ImageStoragePath=ImageStoragePath
  989:         self.ImageViewerPath=ImageViewerPath
  990:         self.defaultMetaString=defaultMetaString
  991:         
  992:         if RESPONSE is not None:
  993:             RESPONSE.redirect('manage_main')
  994: 
  995:     def show_selected_thumbs(self):
  996:         #ids=[]
  997:         try:
  998:          return self.REQUEST.SESSION['filenames']
  999: 	except:
 1000: 	 return None
 1001:     def show_thumbs(self):
 1002:         ids=[]
 1003:         for entry in self.__dict__:
 1004:             #print entry
 1005:             if hasattr(getattr(self,entry),'thumb'):
 1006:                 ids.append(entry)
 1007:                 
 1008:         #print ids
 1009:         ids.sort()
 1010:         return ids
 1011: 
 1012:     def firstSets(self,selected=None):
 1013:         ids=self.show_thumbs()
 1014:         if ids:
 1015:             if selected:
 1016:                 return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[0]+"\" target=\"_top\">first sets</a>"
 1017:             else:
 1018:                 return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[0]+"\" target=\"_top\">first sets</a>"
 1019: 
 1020:     def lastSets(self,selected=None):
 1021:         ids=self.show_thumbs()
 1022:         if ids:
 1023:             colRows=self.getColTimesRow()
 1024: 
 1025:             if colRows[1]:
 1026:                 nr=len(ids)-colRows[0]*colRows[1]
 1027:             else:
 1028:                 nr=0
 1029: 
 1030:             if nr<0:
 1031:                 nr=0
 1032: 
 1033:             if selected:
 1034:                 return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">last set</a>"
 1035:             else:
 1036:                 return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">last sets</a>"
 1037: 
 1038:         
 1039:                 
 1040:     def nextSets(self,selected=None):
 1041:         """show nextimage"""
 1042:         ids=self.show_thumbs()
 1043:         colRows=self.getColTimesRow()
 1044:         if ids:
 1045:             if colRows[1]:
 1046: 
 1047:                 if self.REQUEST.SESSION.has_key("filename"):
 1048:                     filename=self.REQUEST.SESSION["filename"]
 1049:                     try:
 1050:                         nr=ids.index(filename)+colRows[0]*colRows[1]
 1051:                         if nr>=len(ids):
 1052:                             nr=len(ids)-1
 1053:                     except:
 1054:                         nr=0
 1055:                 else:
 1056:                     nr=0
 1057: 
 1058:                 if nr==len(ids)-1:
 1059:                     return ""
 1060:                 else:
 1061:                     if selected:
 1062:                         return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">next set</a>"
 1063:                     else:
 1064:                         return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">next set</a>"
 1065: 
 1066:     def prevSets(self,selected=None):
 1067:         
 1068:         """show nextimage"""
 1069:         #return self.getId()
 1070:         ids=self.show_thumbs()
 1071:         colRows=self.getColTimesRow()
 1072:         if ids:
 1073:             if colRows[1]:
 1074:                 if self.REQUEST.SESSION.has_key("filename"):
 1075:                     filename=self.REQUEST.SESSION["filename"]
 1076:                     try:
 1077:                         nr=ids.index(filename)-colRows[0]*colRows[1]
 1078:                         if nr<0:
 1079:                             nr=0
 1080:                     except:
 1081:                         nr=0
 1082:                 else:
 1083:                     nr=0
 1084:                 try:
 1085:                     num=ids.index(filename)
 1086:                 except:
 1087:                     num=0
 1088: 
 1089:                 if num==0:
 1090:                     return ""
 1091:                 else:
 1092:                     if selected:
 1093:                         return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">previous sets</a>"
 1094:                     else:
 1095:                         return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">previous sets</a>"
 1096:             else:
 1097:                 return ""
 1098:     def showFolders(self):
 1099:         """show subfolders"""
 1100:         ret=""
 1101:         link=""" <a target="_top" href="%s">%s</a><br>"""
 1102: 
 1103:         if self.aq_parent.meta_type=="ImageCollection":
 1104:             ret+=link%(self.aq_parent.absolute_url(), "back ("+self.aq_parent.title+")")
 1105:             ret+="<br>"
 1106:             
 1107:         iCs=self.ZopeFind(self,obj_metatypes=["ImageCollection"])
 1108:         if not iCs:
 1109:             return ret
 1110:         else:
 1111:             
 1112:             link=""" <a target="_top" href="%s">%s</a><br>"""
 1113:             for iC in iCs:
 1114:                 ret+=link%(iC[1].absolute_url(),iC[0])
 1115:             ret+="<br>"
 1116:             return ret
 1117:     def showRuler(self,selected=None):
 1118:         """show ruler"""
 1119:         showall =self.REQUEST.SESSION.get('showall','no')
 1120:         ids=self.show_thumbs()
 1121:         if len(ids)==0:
 1122:             return "<b>No entries</b>"
 1123:         
 1124:         if showall=='no':
 1125: 	    actualNr=0
 1126:             ids=self.show_thumbs()
 1127:             colRows=self.getColTimesRow()
 1128:             num=int(len(ids)/(colRows[0]*colRows[1]))
 1129:             if not (operator.mod(len(ids),colRows[0]*colRows[1])==0):
 1130:                 num+=1
 1131:             a=colRows[0]*colRows[1]
 1132:             #print num,num+1
 1133: 		
 1134:             if num>1:
 1135: 
 1136:                 ret=""
 1137:                 if selected:
 1138: 	    		ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""/selection?filename='+this.options[this.selectedIndex].value">"""
 1139:                 else:
 1140: 			ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""?filename='+this.options[this.selectedIndex].value">"""
 1141: 		for i in range(num):
 1142: 			try:
 1143: 			  nr=ids.index(self.REQUEST.SESSION['filename'])
 1144: 			except:
 1145: 			  nr=0
 1146: 		        k=i*a	
 1147: 			if (k <= nr) and (nr < i*(a+1)):
 1148: 			   actualNr=i
 1149: 			   ret+="""<option value="%s" selected>%i</option>"""%(ids[k],i)
 1150: 			else:
 1151: 	    		   ret+="""<option value="%s">%i</option>"""%(ids[k],i)
 1152: 		ret+="</select>"	
 1153: 		anf="<b>Show thumbnail group no:</b></br>"
 1154: 		
 1155: 		
 1156: 		try:
 1157: 		  if selected:                
 1158:                         href=self.REQUEST['URL1']+"/selection?filename="+ids[(actualNr-1)*a]
 1159:                   else:
 1160:                         href=self.REQUEST['URL1']+"?filename="+ids[int((actualNr-1)*a)]
 1161: 		
 1162: 		  anf+="""<a href="%s" target="_top">%s</a>&nbsp;&nbsp;"""%(href,"prev")
 1163: 		except:
 1164: 		  pass
 1165: 		ret=anf+ret
 1166: 		
 1167: 		try:
 1168: 		  
 1169: 		  if selected:                
 1170:                         href=self.REQUEST['URL1']+"/selection?filename="+ids[(actualNr+1)*a]
 1171:                   else:
 1172:                         href=self.REQUEST['URL1']+"?filename="+ids[int((actualNr+1)*a)]
 1173: 		
 1174: 		  end="""<a href="%s" target="_top">%s</a>&nbsp;&nbsp;"""%(href,"next")
 1175: 		except:
 1176: 		  end=""
 1177: 		ret=ret+end
 1178: 
 1179: 
 1180:                 #for i in range(num):
 1181:                 #    
 1182:                 #        ret +="<br/>" #alle 10 linebreak einfuegen
 1183:                 #    k=i*a
 1184:                 #    if selected:                
 1185:                 #        href=self.REQUEST['URL1']+"/selection?filename="+ids[k]
 1186:                 #    else:
 1187:                 #        href=self.REQUEST['URL1']+"?filename="+ids[int(k)]
 1188: 	        #
 1189:                 #    ret+="""<a href="%s" target="_top">%i</a>&nbsp;&nbsp;"""%(href,i)
 1190: 
 1191:             else:
 1192:                 ret=""
 1193:             ret+="""<a href="%s?showall=yes" target="_top">show all</a> """%self.REQUEST['URL1']
 1194:         else:
 1195:             ret="""<a href="%s?showall=no" target="_top">show groups</a> """%self.REQUEST['URL1']
 1196: 
 1197:         return ret
 1198:     
 1199:     def show_thumbs_selected_rows(self,numberOfColumns):
 1200:         """Ausgabe anzahl"""
 1201:         ids=self.show_selected_thumbs()
 1202: 
 1203:         if not ids:
 1204: 		return None
 1205:         self.REQUEST.SESSION['ids']=ids
 1206:         number=int(len(ids)/numberOfColumns)+1
 1207:         self.REQUEST.SESSION['number']=range(number)
 1208:         return range(number+1)
 1209: 
 1210:     def setColTimesRowForm(self):
 1211:         """form for matrix setting"""
 1212:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','selectColTimesRow.zpt')).__of__(self)
 1213:         return pt()
 1214: 
 1215:     def setDone(self):
 1216:         """done"""
 1217:         
 1218:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changedColTimesRow.zpt')).__of__(self)
 1219:         return pt()
 1220: 
 1221:     def setColTimesRow(self,cols,rows):
 1222:         """set coltimes row"""
 1223:         RESPONSE=self.REQUEST.RESPONSE
 1224:         if not rows:
 1225:             rows=None
 1226:         if rows=="":
 1227:             rows=None
 1228: 
 1229:         if rows:
 1230:             RESPONSE.setCookie("ImageViewerRows",rows)
 1231:         RESPONSE.setCookie("ImageViewerCols",cols)
 1232: 
 1233:         RESPONSE.redirect(self.REQUEST['URL1']+"/setDone")
 1234:         
 1235:     def getColTimesRow(self,showall='No'):
 1236:         """coltimesrow"""
 1237:         
 1238:         REQUEST=self.REQUEST
 1239:         """matrix"""
 1240:         if REQUEST.cookies.has_key("ImageViewerRows"):
 1241:             
 1242:             try:
 1243:                 rows=int(REQUEST.cookies["ImageViewerRows"])
 1244:             except:
 1245:                 rows=6
 1246:         else:
 1247:             rows=6
 1248:             
 1249:         if REQUEST.cookies.has_key("ImageViewerCols"):
 1250:             #print "COLS",REQUEST.cookies["ImageViewerCols"]
 1251:             cols=int(REQUEST.cookies["ImageViewerCols"])
 1252:         else:
 1253:             cols=2
 1254: 
 1255:         idsnumber=len(self.show_thumbs())
 1256:         if rows:
 1257:             if cols*rows >idsnumber:
 1258:                 rows=int(idsnumber/cols)+1
 1259: 
 1260:         #print cols,rows
 1261:         if showall=='yes':
 1262:             rows=int(idsnumber/cols)+1
 1263:             
 1264:         return (cols,rows)
 1265:                 
 1266:         
 1267:     def show_thumbs_rows(self,numberOfColumns,numberOfRows=None,startId=None):
 1268:         """Ausgabe anzahl"""
 1269: 
 1270:         idsAll=self.show_thumbs()
 1271:         if len(idsAll)==0: #keine Einträge
 1272:             return 0
 1273:         if self.REQUEST.SESSION.has_key("filename"):
 1274:             filename=self.REQUEST.SESSION["filename"]
 1275:             filename=self.getImageByName(filename,onlyName="yes")
 1276:                 
 1277:             try:
 1278:                 startId=filename
 1279:                 if startId=="":
 1280:                     startId=idsAll[0][0:]    
 1281:             except:
 1282:                 startId=idsAll[0][0:]    
 1283:         else:
 1284:             startId=idsAll[0][0:]
 1285:             
 1286: 
 1287:         
 1288: 
 1289:         if numberOfRows:
 1290:            
 1291:             startPic=idsAll.index(startId)
 1292:             try:
 1293:                 
 1294:                 startPic=idsAll.index(startId)
 1295:                 endPic=startPic+numberOfColumns*numberOfRows
 1296:                 ids=idsAll[startPic:endPic]
 1297:             except:
 1298:                 ids=idsAll
 1299:         else:
 1300: 
 1301:             ids=idsAll
 1302: 
 1303:           
 1304:         self.REQUEST.SESSION['ids']=ids
 1305:         number=int(len(ids)/numberOfColumns)+1
 1306:     
 1307:         return range(number+1)
 1308: 
 1309:     def show_thumbs_columns(self,row,numberOfColumns):
 1310:         """Ausgabe einer Liste der Reihe"""
 1311:         ids=self.REQUEST.SESSION['ids']
 1312:         max=len(ids)
 1313:         if (row*numberOfColumns)<max:
 1314:             return ids[(row-1)*numberOfColumns:row*numberOfColumns]
 1315:         else:
 1316:             return ids[(row-1)*numberOfColumns:]
 1317:         
 1318:     def thumblistSelected_old(self):
 1319:         """main template collection"""
 1320:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected.zpt')).__of__(self)
 1321:         return pt()
 1322: 
 1323:     def thumblistSelected(self):
 1324:         """main template collection"""
 1325:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected2.zpt')).__of__(self)
 1326:         return pt()
 1327:     
 1328:     def thumblist_old(self):
 1329:         """main template collection"""
 1330:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self)
 1331:         return pt()
 1332: 
 1333:     def thumblist(self):
 1334:         """main template collection"""
 1335:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb2.zpt')).__of__(self)
 1336:         return pt()
 1337: 
 1338:     def thumblistNewWindow(self):
 1339:         """Thumbs mit clik neues Fenster oeffnen"""
 1340:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbNewWindow.zpt')).__of__(self)
 1341:         return pt()
 1342:         
 1343: 
 1344:     def navig_selected_html(self):
 1345:         """navigation"""
 1346:         #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
 1347:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
 1348:         return pt()
 1349: 
 1350:     def navig_html(self):
 1351:         """navigation"""
 1352:         #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
 1353:        
 1354:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation.zpt')).__of__(self)
 1355:         return pt()
 1356: 
 1357: 
 1358:     def selection(self):
 1359:         """show only selected"""
 1360:         if self.REQUEST.has_key('filename'):
 1361:             filen=self.REQUEST['filename']
 1362:         else:
 1363:             filen=""
 1364:         self.REQUEST.SESSION['filename']=filen
 1365:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected2.zpt')).__of__(self)
 1366:         return pt()  
 1367: 
 1368:     def getImageByName(self,filename,onlyName=None):
 1369:         """get filename"""
 1370:         
 1371:         fn=getattr(self,filename,None)
 1372:         if not fn:
 1373:             filenameM=filename.split(".")[0]
 1374:             founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
 1375:             for found in founds:
 1376:                 foundM=found[0].split(".")[0]
 1377:                 if filenameM.lower()==foundM.lower():
 1378:                     if onlyName:
 1379:                         return found[0]
 1380:                     else:
 1381:                         return found[1]
 1382:         if onlyName:
 1383:             return filename
 1384:         else:
 1385:             return fn
 1386:     def index_html(self):
 1387:         """main template collection"""
 1388:         if self.REQUEST.has_key('filename'):
 1389:             filen=self.REQUEST['filename']
 1390:         else:
 1391:             filen=""
 1392: 
 1393:         self.REQUEST.SESSION['filename']=filen[0:]
 1394: 
 1395:         if self.REQUEST.has_key('showall'):
 1396: 
 1397:             self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
 1398:         else:
 1399:             self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
 1400:             
 1401:      
 1402:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
 1403:         return pt()
 1404:     
 1405: def manage_AddImageCollectionForm(self):
 1406:     """Nothing yet"""
 1407:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)
 1408:     return pt()
 1409:     
 1410: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
 1411:     """Add ImageCollection"""
 1412:     newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
 1413:     self._setObject(id,newObj)
 1414:     
 1415:     if RESPONSE is not None:
 1416:         RESPONSE.redirect('manage_main')
 1417: 
 1418: 
 1419: class ImageCollectionIFrame(ImageCollection):
 1420:     """Class fuer Collection set als IFrame"""
 1421: 
 1422:     meta_type="ImageCollectionIFrame"
 1423:     label=ImageCollection.title
 1424: 
 1425:     def getImageTag(self):
 1426:         """ hack : method needed by echo_content"""
 1427:         return ""
 1428:     
 1429:     def rotate(self,angle,url,RESPONSE):
 1430: 	"""rotate"""
 1431: 	
 1432: 	RESPONSE.redirect("javascript:document.domain='mpg.de';parent.iframe.right.rotation(%i)"%int(angle))
 1433: 	RESPONSE.redirect(url)
 1434:     def request(self):
 1435:         """request"""
 1436:         return self.REQUEST
 1437:         
 1438:     def index_html(self):
 1439:         """index"""
 1440:         if self.REQUEST.has_key('filename'):
 1441:             filen=self.REQUEST['filename']
 1442:         else:
 1443:             filen=""
 1444:         self.REQUEST.SESSION['filename']=filen
 1445:         
 1446:     
 1447:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameMain.zpt')).__of__(self)
 1448:         return pt()
 1449: 
 1450:     def iframe_html(self):
 1451:         """iframe"""
 1452:         if self.REQUEST.has_key('filename'):
 1453:             filen=self.REQUEST['filename']
 1454:         else:
 1455:             filen=""
 1456:         self.REQUEST.response.setCookie('filename',filen)
 1457:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameOverview.zpt')).__of__(self)
 1458:         return pt()
 1459: 
 1460: 
 1461: def manage_AddImageCollectionIFrameForm(self):
 1462:     """Nothing yet"""
 1463:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionIFrameForm.zpt')).__of__(self)
 1464:     return pt()
 1465:     
 1466: def manage_AddImageCollectionIFrame(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
 1467:     """Add ImageCollection"""
 1468:     newObj=ImageCollectionIFrame(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
 1469:     self._setObject(id,newObj)
 1470:     
 1471:     if RESPONSE is not None:
 1472:         RESPONSE.redirect('manage_main')
 1473: 
 1474: 

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