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