Annotation of ImageArchive/ImageArchive.py, revision 1.91
1.69 dwinter 1: genericServerPath="http://www.mpiwg-berlin.mpg.de/zogilib_images" #can be changed with main config
1.65 dwinter 2:
3:
1.87 dwinter 4: from Ft.Xml.Domlette import NonvalidatingReader
1.1 dwinter 5: from OFS.Folder import Folder
1.77 dwinter 6: from OFS.OrderedFolder import OrderedFolder
1.1 dwinter 7: from OFS.SimpleItem import SimpleItem
1.36 dwinter 8: from Globals import Persistent,package_home
1.1 dwinter 9: from Acquisition import Implicit
10: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
11: from Products.PageTemplates.PageTemplate import PageTemplate
1.61 dwinter 12: from xmlrpclib import ServerProxy
1.1 dwinter 13: import re
14: import os
15: import os.path
16: import urllib
17: import xml.dom.minidom
1.27 dwinter 18: import operator
1.31 dwinter 19: import tempfile
20: import shutil
1.41 dwinter 21: from types import *
1.46 dwinter 22: import time
1.53 dwinter 23: from threading import Thread
24: import Queue
1.61 dwinter 25: import cgi
1.77 dwinter 26: import sys
1.75 casties 27: import zLOG
1.64 dwinter 28:
1.77 dwinter 29:
1.68 dwinter 30: from AccessControl import ClassSecurityInfo, getSecurityManager
1.64 dwinter 31:
1.60 dwinter 32: try:
33: from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
34: except:
35: print "ZSQL Extend Folder nicht importiert"
36: print "Metadatendfolder funktioniert nicht!!!"
1.70 casties 37: class ZSQLExtendFolder:
38: """leer"""
39: manage_options=()
1.64 dwinter 40:
41:
42:
1.38 dwinter 43: try:
44: from Products.ECHO_content.ECHO_collection import ECHO_basis
45: except:
46: print "ECHO Elements not imported"
1.40 dwinter 47: class ECHO_basis:
48: """leer"""
1.44 dwinter 49:
1.40 dwinter 50: manage_options=()
51:
52:
1.55 dwinter 53: tdir = "/mpiwg/temp/tmp/archivesImageServer/"
54: #tdir="/tmp/archivesImageServer/"
1.41 dwinter 55:
1.77 dwinter 56: imageExtensions=['jpg','jpeg','tif','tiff','png']
57:
1.30 dwinter 58: def splitPath(str):
1.64 dwinter 59: str2=str.replace("\\","/")
60: return os.path.split(str2)[1]
1.30 dwinter 61:
1.1 dwinter 62: def getText(nodelist):
63:
64: rc = ""
65: for node in nodelist:
66:
1.64 dwinter 67: if node.nodeType == node.TEXT_NODE:
1.1 dwinter 68: rc = rc + node.data
69: return rc
70:
1.44 dwinter 71: def getTextFromNode(nodename):
72: nodelist=nodename.childNodes
73: rc = ""
74: for node in nodelist:
1.64 dwinter 75: if node.nodeType == node.TEXT_NODE:
1.44 dwinter 76: rc = rc + node.data
77: return rc
78:
1.53 dwinter 79: class generateSet:
80: """generateSetThread"""
81:
1.55 dwinter 82:
1.56 dwinter 83: def __init__(self,filenames,filenamesIds,ImageViewerPath,ids,url,local=None,version="working"):
1.53 dwinter 84: """init generateSet"""
85: self.filenames=filenames
86: self.filenamesIds=filenamesIds
87: self.ImageViewerPath=ImageViewerPath
88: self.ids=ids
89: self.local=local
90: self.url=url
91: self.version=version
92: self.done=None
1.60 dwinter 93:
1.55 dwinter 94:
1.53 dwinter 95: def __call__(self):
96: """call generate Set"""
97:
98: storeTempDir=tempfile.tempdir
1.64 dwinter 99: tempfile.tempdir=tdir
1.54 dwinter 100:
1.53 dwinter 101: tmpPath=tempfile.mktemp()
1.56 dwinter 102: tmpZip=tempfile.mktemp()+".gtz"
1.53 dwinter 103: tmpFn=os.path.split(tmpZip)[1]
104:
105: if not os.path.exists(tempfile.tempdir):
106: os.mkdir(tempfile.tempdir)
107:
108: if not os.path.exists(tmpPath):
1.64 dwinter 109: os.mkdir(tmpPath)
110:
111: self.response=""
1.53 dwinter 112:
113:
114: self.response="<h3>1. step: getting the images</h3>"
115:
116: for id in self.filenames:
117:
1.64 dwinter 118: if self.filenamesIds.has_key(id[0]):
119: filename=self.filenamesIds[id[0]][0]+"_"+id[0]
120: else:
121: filename=id[0]
1.53 dwinter 122:
123: self.response+=str("<p>Get File: %s<br>\n"%filename)
124:
1.63 dwinter 125:
1.64 dwinter 126: if self.local:
127:
128: if self.version=="working":
129:
130: sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+os.path.splitext(id[0])[0]+".jpg"
131: else:
132: sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]
133: targetPath=tmpPath+"/"+filename
134: try:
1.53 dwinter 135: shutil.copyfile(sourcePath,targetPath)
1.64 dwinter 136: except:
1.53 dwinter 137: self.response+=(str("<p>Error in File: %s (possible missing)<br>\n"%filename))
1.64 dwinter 138: else:
139: if self.version=="working":
1.65 dwinter 140: requestString=self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"
141: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
142:
1.64 dwinter 143: else:
1.65 dwinter 144: requestString=self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&mo=rawfile,hires"
145: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
146:
147:
1.64 dwinter 148: image=urllib.urlopen(path).read()
149:
150:
151: fh=file(tmpPath+"/"+filename,"w")
152:
153:
154: fh.write(image)
155: fh.close()
1.53 dwinter 156:
157: #folgeseiten
1.64 dwinter 158:
159: if int(self.filenamesIds[id[0]][1])>1:
160: #ids=self.show_thumbs()
161:
162: try:
1.53 dwinter 163: nr=self.ids.index(id[0])
1.64 dwinter 164: except:
1.56 dwinter 165: self.response+=str("<p>Error in File: %s (possible missing)<br>\n"%id[0])
1.53 dwinter 166:
167:
168: nr=0
169:
1.64 dwinter 170: numberOfPages=self.filenamesIds[id[0]][1]
171: for k in range(int(numberOfPages)-1):
172: i=k+1
173: if self.filenamesIds.has_key(id[0]):
174: filename=self.filenamesIds[id[0]][0]+"_"+self.ids[nr+i]
175: else:
176: filename=id[0]
1.53 dwinter 177:
178: self.response+=str("<p>Get File: %s<br>\n"%filename)
179:
1.64 dwinter 180: if self.local:
181: sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+self.ids[nr+i]
182: targetPath=tmpPath+"/"+filename
183: try:
184: shutil.copyfile(sourcePath,targetPath)
185:
186: except:
1.53 dwinter 187: self.response+=str("<p>Error in File: %s (missing?)<br>\n"%filename)
1.64 dwinter 188:
189: else:
1.65 dwinter 190:
191: requestString=self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires"
192: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
1.64 dwinter 193:
194: image=urllib.urlopen(path).read()
195:
196:
197: fh=file(tmpPath+"/"+filename,"w")
198: fh.write(image)
199: fh.close()
1.53 dwinter 200:
201: self.response+="<h3>2. step: creating the downloadable file</h3>"
1.64 dwinter 202: self.response+="<p>Create gtar<br>"
1.53 dwinter 203: self.response+="<p>This can take a while....<br>\n"
204:
1.56 dwinter 205: fh=os.popen2("gnutar zcvf %s %s/*"%(tmpZip,tmpPath),1)[1]
1.53 dwinter 206: self.response+="<br>"
207: for c in fh.read():
208: self.response+=c
209: if c==")":
210: self.response+="<br>\n"
1.64 dwinter 211:
212:
1.53 dwinter 213:
214:
215: shutil.rmtree(tmpPath)
216:
217: self.response+="<p>finished<br>\n"
218:
219: len=os.stat(tmpZip)[6]
220: downloadUrl=self.url+"/downloadSet"
221: self.response+="""<h1><a href="downloadSet?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len)
222: self.response+="""<p>The file will be stored for a while, you can download it later, the URL is:</p>
1.64 dwinter 223: <p><a href="downloadSet?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn)
1.53 dwinter 224:
225: self.done=True
226: def getResult(self):
227: """get result"""
228: return self.response
229:
230: def isDone(self):
231: if self.done:
232: return True
233: else:
234: return False
235:
1.44 dwinter 236: class metaData(SimpleItem):
237: """Klasse fuer metadaten"""
238: meta_type="metaData"
239:
240: def __init__(self,xmlurl,container=None):
241: """__init__"""
242: return self.update(xmlurl,container)
1.1 dwinter 243:
1.44 dwinter 244:
245: def update(self,xmlurl,container=None):
246: """update"""
247:
248: try:
249: xmlfh=urllib.urlopen(xmlurl)
250: dom=xml.dom.minidom.parse(xmlfh)
251: except:
252: return None
253:
254: md=dom.getElementsByTagName(container)
255: mlist=[]
256: if md:
257: for node in md[0].childNodes:
258: if node.nodeType==dom.ELEMENT_NODE:
259: name=node.tagName
260: content=getTextFromNode(node)
261: setattr(self,name,content)
262: mlist.append(name)
263: self.mlist=mlist[0:]
264: else:
265: self.mlist=[]
266:
267: def index_html(self):
268: """index"""
269: ret="<html><body>"
270: for tag in self.mlist:
271: ret+="<p>%s=%s</p>"%(tag,getattr(self,tag))
272: return ret+"</body></html>"
273:
1.61 dwinter 274:
275:
276:
1.6 dwinter 277: class ImageDigilib(Folder,Persistent,Implicit):
1.1 dwinter 278: """Anzeige object fuer digilib"""
279: meta_type="ImageDigilib"
1.63 dwinter 280: security=ClassSecurityInfo()
1.6 dwinter 281: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
282:
283: manage_options = Folder.manage_options+(
284:
285: {'label':'Add Metadata','action':'addMetaObjectForm'},
286:
287: )
288:
1.90 dwinter 289:
290:
1.68 dwinter 291: def getAccessRight(self):
292: """get the accessright, return is string "extern" or "intern" """
293: return self.getRights(self.filename.split('.')[0])
294:
1.72 dwinter 295: security.declarePublic('isAccessible')
296:
1.68 dwinter 297: def isAccessible(self):
298: """gives true if obejct is accessible taking the rights of the user into account"""
299:
300: #TODO: implement rights, currently true if external and false if internal, and true if user has role authenticated
301:
302: username=self.REQUEST['AUTHENTICATED_USER']
303: #print username
304: #print self.acl_users.getUserNames()
305: user=getSecurityManager().getUser()
306:
307: roles=user.getRoles()
1.76 dwinter 308:
1.77 dwinter 309:
310: if self.getRightsQuery()=="":
1.76 dwinter 311: #query empty then always true
312: return True
313:
1.77 dwinter 314:
1.68 dwinter 315: if 'Authenticated' in roles:
316: return True
317:
318: if self.getAccessRight()=="extern":
319: return True
320: else:
321: return False
322:
1.6 dwinter 323: def addMetaObject(self,id,RESPONSE=None):
324: """Add an MetaObject"""
325: objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
326:
327: request=self.REQUEST
328: objectCreate=objectType.createObjectManager(id,request)
1.24 dwinter 329:
1.6 dwinter 330: self._setObject(id,objectCreate)
331:
332: objectCreate.propertysheets.meta.manage_editProperties(request)
333:
334: if RESPONSE is not None:
335: RESPONSE.redirect('manage_main')
336:
337:
338:
339:
340: def addMetaObjectForm(self):
341: """Add Form"""
1.36 dwinter 342: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetaObject.zpt')).__of__(self)
1.6 dwinter 343: return pt()
344:
345:
1.3 dwinter 346: def __init__(self,id,filename,meta=None):
1.1 dwinter 347: self.id=id
348: self.title=filename
349: self.filename=filename
1.3 dwinter 350: self.meta=meta
1.1 dwinter 351:
1.70 casties 352: def getBasename(self):
353: """returns base filename (sans extension)"""
354: return os.path.splitext(self.filename)[0]
1.65 dwinter 355:
1.3 dwinter 356: def getMeta(self):
357: """ausgabe der metadaten"""
358: return self.meta
1.44 dwinter 359:
360: def manageMetaData(self,strict=None):
361: """create or updateMetadata"""
362:
363: md=self.ZopeFind(self,obj_metatypes=["metaData"])
364:
365: if not md:
366: self._setObject("metaData",metaData(self.meta,"ROW"))
367:
368: else:
369: if not strict:
370: md[0][1].update(self.meta,"ROW")
371: else:
372: print "strict"
373: if len(md[0][1].mlist)==0:
374: print " +++",self.getId()
375: md[0][1].update(self.meta,"ROW")
376: else:
377: print " ---",self.getId()
378:
1.1 dwinter 379: def uploadImage(self,fileupload,path_name):
380: """upload an Image from an Requast"""
381: #path_name=self.ImageStoragePath
1.74 casties 382: fn = self.filename or splitPath(fileupload.filename)
1.29 dwinter 383: filename=path_name+"/"+fn
1.1 dwinter 384: filedata=fileupload.read()
385: f=open(filename,"w")
386: f.write(filedata)
387: f.close()
1.74 casties 388: self.filename = fn
1.23 dwinter 389: try:
1.41 dwinter 390: os.chmod(filename,0664)
1.23 dwinter 391: except:
392: """hack"""
1.90 dwinter 393: #< thumb
1.64 dwinter 394:
1.89 dwinter 395: self.scaleThumbs()
1.35 dwinter 396:
1.64 dwinter 397: #scale standard
1.23 dwinter 398:
1.89 dwinter 399: self.scaleWorkingVersions()
1.3 dwinter 400:
1.64 dwinter 401:
402:
1.35 dwinter 403: def downloadWorkingVersion(self):
1.64 dwinter 404: """download working version (2000 pixel)"""
405:
406: return self.download(fmt="&dw=2000&dh=2000",suffix=".jpg")
1.7 dwinter 407:
1.35 dwinter 408: def download(self,fmt="&mo=rawfile,hires",suffix=None):
1.1 dwinter 409: """download"""
1.65 dwinter 410:
411: requestString=self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+fmt
412: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
413:
1.64 dwinter 414:
415: if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(self.filename):
416: filename=self.REQUEST.SESSION['filenamesIds'][self.filename][0]+"_"+self.filename
417: else:
418: filename=self.filename
419:
420: if suffix:
421: filename=os.path.splitext(filename)[0]+suffix
422:
423: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%filename)
424: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
1.44 dwinter 425: #print path
1.64 dwinter 426: imagefh=urllib.urlopen(path,'rb')
1.44 dwinter 427:
1.64 dwinter 428: self.REQUEST.RESPONSE.write(imagefh.read())
429: self.REQUEST.RESPONSE.close()
1.31 dwinter 430: #return self.REQUEST.RESPONSE.redirect(path)
1.36 dwinter 431:
432: def updateImageForm(self):
1.65 dwinter 433: """form"""
434: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateImageForm.zpt')).__of__(self)
435: return pt()
1.64 dwinter 436:
437:
1.63 dwinter 438: security.declareProtected('View management screens','renameImageForm')
1.43 dwinter 439: def renameImageForm(self):
1.65 dwinter 440: """form"""
441: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','renameImageForm.zpt')).__of__(self)
442: return pt()
1.63 dwinter 443:
444: security.declareProtected('View management screens','renameImage')
1.43 dwinter 445: def renameImage(self,newname,RESPONSE=None):
1.64 dwinter 446: """umbenennen"""
447: #umbennen des files im folder
448: oldname=self.getId()
449: self.aq_parent.manage_renameObjects(ids=[oldname],new_ids=[newname])
450: self.title=newname[0:]
451: self.filename=newname[0:]
1.43 dwinter 452: #umbennen des files auf dem server
1.64 dwinter 453: oldpath=os.path.join(self.ImageStoragePath,oldname)
454: newpath=os.path.join(self.ImageStoragePath,newname)
1.43 dwinter 455: os.rename(oldpath,newpath)
1.64 dwinter 456:
457: #umbenennen des versionsfolders
458: oldfolder=os.path.join(self.ImageStoragePath,"."+oldname+".dir")
1.46 dwinter 459: newfolder=os.path.join(self.ImageStoragePath,"."+newname+".dir")
1.64 dwinter 460: if os.path.exists(oldfolder):
1.46 dwinter 461: os.rename(oldfolder,newfolder)
462: else:
463: os.mkdir(newfolder)
464:
1.64 dwinter 465: #schreibe info uber umbennenung
1.46 dwinter 466:
467: renameName=os.path.join(newfolder,"renamed")
468: if os.path.exists(renameName):
469: fh=file(renameName,'a')
470: else:
471: fh=file(renameName,'w')
472:
473: tm=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
474: try:
475: user=self.REQUEST['AUTHENTICATED_USER']
476: except:
477: user="unknown"
478:
479: str="""%s %s %s %s\n"""%(tm,user,oldname,newname)
480: fh.write(str)
481: fh.close()
482:
1.43 dwinter 483: #scale thumb
1.64 dwinter 484:
1.89 dwinter 485: self.scaleThumbs()
1.64 dwinter 486:
487: #scale standard
1.43 dwinter 488:
1.89 dwinter 489: self.scaleWorkingVersions()
1.43 dwinter 490:
1.90 dwinter 491: self.scaleToJpg()
1.43 dwinter 492: if RESPONSE:
1.64 dwinter 493: RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
494:
1.90 dwinter 495: def scaleToJpg(self,RESPONSE=None):
496: """create a jpg"""
497:
498: #create backup of the original file
499:
500: imagePath=os.path.join(self.ImageStoragePath,self.filename)
501: path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
502:
503: if not os.path.exists(path):
504: os.mkdir(path,0775)
505: os.chmod(path,0775)
506:
507: newName=os.path.join(path,self.getId())
1.43 dwinter 508:
1.90 dwinter 509: if os.path.exists(newName):
510: zLOG.LOG("ImageArchive:scaleToJpg", zLOG.INFO, "%s already exists"%newName)
511: else:
512: try:
513: os.rename(imagePath,newName)
514: except:
515: zLOG.LOG("ImageArchive:scaleToJpg", zLOG.ERROR, "%s "%newName)
516: return False
517:
518:
519:
1.91 ! dwinter 520: dest="/Volumes/paviaExtern/docuserver/images/exhibitionImages/"
! 521: dir=self.getId()
! 522: src=path
! 523: self.scale(dest=dest,dir=dir,src=path,scaleBy=1,RESPONSE=RESPONSE)
1.90 dwinter 524: return True
525:
1.81 dwinter 526: def updateImage(self,_fileupload,_rename=None,RESPONSE=None):
527: """lade neues Version des Bildes"""
528: #teste ob Dokumenten ordner schon vorhanden
529: #imagePath=os.path.join(self.ImageStoragePath,self.getId())
530:
531: identifyField="filename"
532:
533: if _fileupload and _fileupload.filename!="":
1.75 casties 534: imagePath=os.path.join(self.ImageStoragePath,self.filename)
1.64 dwinter 535: path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
1.81 dwinter 536:
1.64 dwinter 537: if not os.path.exists(path):
1.81 dwinter 538: os.mkdir(path,0775)
539: os.chmod(path,0775)
540:
1.64 dwinter 541: versionNumber=getattr(self,'versionNumber',0)+1
1.81 dwinter 542:
1.64 dwinter 543: #teste ob version schon existiert
1.81 dwinter 544:
1.75 casties 545: while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.filename))):
1.81 dwinter 546: versionNumber+=1
547:
1.64 dwinter 548: #kopieren der bestehenden Version in den Versions ordner.
1.75 casties 549: imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))
1.81 dwinter 550: try:
551: #zLOG.LOG("ImageArchive:updateImage", zLOG.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))
552: os.rename(imagePath,imageNewPath)
553: except:
554: zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))
555:
1.64 dwinter 556: #lesen des upload files und schreiben
1.89 dwinter 557: filedata=_fileupload.read()
1.75 casties 558: f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!
1.64 dwinter 559: f.write(filedata)
560: f.close()
561: try:
1.81 dwinter 562: os.chmod(imagePath,0664)
1.64 dwinter 563: except:
1.81 dwinter 564: pass
1.64 dwinter 565: #scale thumb
1.81 dwinter 566:
1.89 dwinter 567: self.scaleThumbs()
1.81 dwinter 568:
1.64 dwinter 569: #scale standard
1.81 dwinter 570:
1.89 dwinter 571: self.scaleWorkingVersions()
1.90 dwinter 572: self.scaleToJpg()
1.81 dwinter 573: if _rename:
1.89 dwinter 574: self.renameImage(_fileupload.filename)
1.64 dwinter 575:
1.81 dwinter 576:
577: args=self.REQUEST.form
578:
579: args['-identify']=identifyField+"="+args['_identifyField']
580:
581: self.ZSQLChange(args=args)
582:
583: if RESPONSE:
584: RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
1.64 dwinter 585:
1.43 dwinter 586:
1.81 dwinter 587: return "done"
1.72 dwinter 588:
589: security.declarePublic('thumb')
1.45 dwinter 590: def thumb(self,url=None):
1.1 dwinter 591: """show thumb"""
1.3 dwinter 592: thumbname=os.path.splitext(self.filename)[0]+".jpg"
1.65 dwinter 593: requestString=self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
594: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
1.60 dwinter 595:
596:
1.14 dwinter 597: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
1.45 dwinter 598: if url:
599: return "<img border=\"0\" src=\"%s\">"% path
600: else:
601: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
602: return pt()
1.60 dwinter 603:
604:
605: def thumbMD(self,url=None):
606: """show thumb mit Metadaten erwarten image in ImageCollectionMD
607: """
608: thumbname=os.path.splitext(self.filename)[0]+".jpg"
1.65 dwinter 609:
610: requestString=self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
611: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
612:
613:
1.60 dwinter 614:
615: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
616: if url:
617: return "<img border=\"0\" src=\"%s\">"% path
618: else:
619:
620: overview=self.ZopeFind(self.aq_parent,obj_ids=['thumb.html'])
621: if overview:
622: return getattr(self,overview[0][0])()
623: else:
624: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbMD.zpt')).__of__(self)
625: return pt()
626:
627:
1.65 dwinter 628: def image(self,dw=None,dh=None):
629: """show image only with scaler"""
630: str=[]
631: if (not dw) and (not dh):
632: str.append("mo=file")
633: if dw:
634: str.append("dw=%s"%dw)
1.60 dwinter 635:
1.65 dwinter 636: if dh:
637: str.append("dw=%s"%dh)
638:
639: str.append("lv=2&fn=%s"%self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0])
640:
641:
642: requestString="&".join(str)
643:
644: self.REQUEST.RESPONSE.redirect(getattr(self,'serverPath',genericServerPath)+"/scaledImage?"+requestString)
645:
1.1 dwinter 646: def index_html(self):
1.65 dwinter 647: """show image with zogilib"""
1.8 dwinter 648: #DEVELOP: take first one for server
1.61 dwinter 649: #path="http://127.0.0.1:8080/zogilib_images?lv=2&fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]
1.65 dwinter 650: path=getattr(self,'serverPath',genericServerPath)+"?lv=2&fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]
1.1 dwinter 651: return self.REQUEST.RESPONSE.redirect(path)
652:
653:
654: def manage_AddImageDigilibForm(self):
655: """Nothing yet"""
1.36 dwinter 656: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageDigilibForm.zpt')).__of__(self)
1.1 dwinter 657: return pt()
658:
1.3 dwinter 659: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 660: """Add ImageCollection"""
1.41 dwinter 661:
1.1 dwinter 662: #fileupload=self.REQUEST['fileupload']
1.74 casties 663: #fn=splitPath(fileupload.filename)
664: fn = id # filename is the same as id
1.29 dwinter 665: newObj=ImageDigilib(id,fn,meta)
1.1 dwinter 666:
667: self._setObject(id,newObj)
668: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
669:
670: if RESPONSE is not None:
671: RESPONSE.redirect('manage_main')
672:
673:
1.41 dwinter 674:
1.77 dwinter 675: class ImageCollection(OrderedFolder, Persistent, Implicit,ECHO_basis):
1.64 dwinter 676: """Sammelordner fuer Bilder"""
677: meta_type="ImageCollection"
1.41 dwinter 678:
1.6 dwinter 679:
1.64 dwinter 680: security=ClassSecurityInfo()
681:
1.61 dwinter 682: #scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn="
1.65 dwinter 683: #scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="
1.60 dwinter 684:
1.53 dwinter 685: zipThreads={}
1.55 dwinter 686: zipThreads2={}
687:
1.6 dwinter 688: genericMetaDataType="leiden_meta"
689:
690: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
691:
1.90 dwinter 692: scaledBasis="/mpiwg/temp/online/scaled"
1.3 dwinter 693:
694: 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 695:
1.70 casties 696: imgcoll_main = PageTemplateFile('zpt/overview', globals())
1.77 dwinter 697: imgcoll_mainMD = PageTemplateFile('zpt/overviewMD', globals())
1.70 casties 698: imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())
1.77 dwinter 699: imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())
1.70 casties 700:
1.90 dwinter 701: destBasis="/docuserver/scaled/"
702: srcBasis="/docuserver/images"
1.91 ! dwinter 703: def scale(self,dest=None,dir=None,src=None,scaleTo=None,scaleBy=None,RESPONSE=None):
1.90 dwinter 704: """scaler"""
705: #scaleomatStr="ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ %s"
706: scaleomatStr="/docuserver/libs/scaleomat/scaleomat.pl"
707:
708: destBasis=self.destBasis
709: srcBasis=self.srcBasis
1.91 ! dwinter 710: if src:
! 711: srcStr=" -src=%s"%src
! 712: else:
! 713: srcStr=" -src=%s"%srcBasis
! 714:
1.90 dwinter 715: scaleStr=scaleomatStr+srcStr
716: if dir:
717: dirTmp=dir.replace(srcBasis,'')
718: dirStr=" -dir=%s"%dirTmp
719: scaleStr=scaleStr+dirStr
720: elif filename:
721: fileTmp=filename.replace(srcBasis,'')
722: fileStr=" -dir=%s"%fileTmp
723: scaleStr=scaleStr+fileStr
724: else:
725: zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no directory or filename given")
726: return False
727:
728: if dest is not None:
729: destStr=" -dest=%s"%os.path.join(destBasis,dest)
730: scaleStr=scaleStr+destStr
731: else:
732: zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")
733: return False
734:
735: if scaleTo:
736: scaleToStr=" -scaleto=%s"%scaleTo
737: scaleStr=scaleStr+scaleToStr
738: elif scaleBy:
739: scaleByStr=" -scaleby=%s"%scaleBy
740: scaleStr=scaleStr+scaleByStr
741: else:
742: zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")
743: return False
744:
1.91 ! dwinter 745:
! 746: #ret=scaleStr
! 747: ret=os.popen2(scaleStr,1)[1].read()
1.90 dwinter 748:
749: if RESPONSE:
750: RESPONSE.write(ret)
751: return True
752:
1.77 dwinter 753: def getImageObject(self,name):
754: """gibt objeckt name zurueck"""
755: if hasattr(self,name):
756: return getattr(self,name)
757:
758: name=os.path.splitext(name)[0]
759: for extension in imageExtensions:
760: nameExt=name+"."+extension
761:
762: if hasattr(self,nameExt):
763: return getattr(self,nameExt)
764:
765: nameExt=name+"_."+extension
766: if hasattr(self,nameExt):
767: return getattr(self,nameExt)
768:
769: return getattr(self,"defaultImg")
770:
1.69 dwinter 771: def getServerPath(self):
772: """get Server path"""
773: return getattr(self,'serverPath',genericServerPath)
774:
1.61 dwinter 775: def getScalerPath(self):
776: """get ScalerPath"""
1.65 dwinter 777: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="
1.61 dwinter 778:
779: def getImageViewerPath(self):
780: """get ImageViewerPath"""
781: return self.ImageViewerPath
782:
783: def getImageStoragePath(self):
784: """get ImageStoragePath"""
785: return self.ImageStoragePath
786:
1.53 dwinter 787: def refreshTxt(self):
788: """txt fuer refresh"""
789: tn=self.REQUEST.SESSION['threadName']
790: return """ 2;url=%s?repeat=%s """%(self.absolute_url()+"/createSet",tn)
791:
792: def createSet(self,RESPONSE=None,local=None,version="working",repeat=None):
1.64 dwinter 793: """download aller gewaehlten files"""
1.31 dwinter 794:
1.53 dwinter 795: threadName=repeat
796:
797:
798: if not threadName or threadName=="":
799: threadStart=generateSet(self.REQUEST.SESSION['filenames'],self.REQUEST.SESSION['filenamesIds'],self.ImageViewerPath,self.show_thumbs(),self.absolute_url(),local=local,version=version)
800: thread=Thread(target=threadStart)
801:
802: thread.start()
1.31 dwinter 803:
1.53 dwinter 804:
805: self.zipThreads[thread.getName()[0:]]=threadStart
1.55 dwinter 806: self.zipThreads2[thread.getName()[0:]]=thread
1.53 dwinter 807: self.REQUEST.SESSION['threadName']=thread.getName()[0:]
808: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['zip_wait_template'])
809: if wait_template:
810: return wait_template[0][1]()
1.54 dwinter 811: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
1.53 dwinter 812: return pt()
813: #xmltrans.run()
814: else:
815: self.REQUEST.SESSION['threadName']=threadName
1.31 dwinter 816:
1.53 dwinter 817: if (self.zipThreads[threadName].getResult()==None):
1.31 dwinter 818:
1.53 dwinter 819: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
820: if wait_template:
1.64 dwinter 821: return wait_template[0][1]()
1.53 dwinter 822:
1.54 dwinter 823: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
1.53 dwinter 824: return pt()
825: else:
826: if self.zipThreads[threadName].isDone():
827: self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
1.55 dwinter 828: self.zipThreads2[threadName].join()
829: del(self.zipThreads2[threadName])
830: del(self.zipThreads[threadName])
1.53 dwinter 831: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_result.zpt')).__of__(self)
832: return pt()
833:
834: else:
835: self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
836: self.REQUEST.SESSION['threadName']=threadName
1.54 dwinter 837: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait_result.zpt')).__of__(self)
1.53 dwinter 838: return pt()
1.31 dwinter 839:
840:
841:
1.33 dwinter 842:
1.55 dwinter 843:
844: def checkThreads(self):
845: """teste running threads"""
846: ret="""<html>
847: <head>
848: <meta http-equiv="REFRESH" content="5;url=%s/checkThreads"
849: <body><h2>Threads of %s</h2>"""%(self.absolute_url(),self.getId())
850:
851: for threadName in self.zipThreads.keys():
852: if self.zipThreads2[threadName].isAlive():
853: ret+="<p>%s --> alive</p>"%threadName
854: else:
855: ret+="<p>%s --> dead</p>"%threadName
856: return ret+"</body></html>"
1.53 dwinter 857:
1.31 dwinter 858: def downloadSet(self,fn):
1.64 dwinter 859: """download prepared set"""
860: filename=os.path.join(tdir,fn)
1.54 dwinter 861:
1.64 dwinter 862:
863: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.tgz")
864: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
865: len=os.stat(filename)[6]
866: self.REQUEST.RESPONSE.setHeader("Content-Length",len)
867: images=file(filename).read()
868: self.REQUEST.RESPONSE.write(images)
869: self.REQUEST.RESPONSE.close()
1.31 dwinter 870:
1.90 dwinter 871:
872: def scaleToJpgs(self,RESPONSE=None):
873: """scale all tifs to jps"""
1.91 ! dwinter 874:
1.90 dwinter 875: for x in self._objects:
876:
877: if (not hasattr(getattr(self,x['id']),'scaleToJpg')) or (not getattr(self,x['id']).scaleToJpg()):
878: if RESPONSE:
879: RESPONSE.write('error:%s'%x)
880:
881:
1.64 dwinter 882:
1.31 dwinter 883: def scaleThumbs(self,RESPONSE=None):
1.7 dwinter 884: """scale thumbs"""
1.64 dwinter 885:
886: #scale thumbs
1.90 dwinter 887: dest=os.path.join(self.scaledBasis,'thumb')
888: self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=100,RESPONSE=RESPONSE)
889: #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 890: if RESPONSE:
891: RESPONSE.write(ret.read())
892: RESPONSE.write("\n")
893:
1.35 dwinter 894: return "RESCALING STARTED"
895:
896: def scaleWorkingVersions(self,RESPONSE=None):
897: """scale working versions"""
1.64 dwinter 898:
899: #scale standard
1.90 dwinter 900:
901: dest=os.path.join(self.scaledBasis,'small')
902: self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=1000,RESPONSE=RESPONSE)
903:
904: dest=os.path.join(self.scaledBasis,'medium')
905: self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=2000,RESPONSE=RESPONSE)
906:
907: #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)
1.64 dwinter 908: if RESPONSE:
909: RESPONSE.write(ret.read())
910: RESPONSE.write("\n")
911: return "rescaling started"
1.35 dwinter 912:
1.3 dwinter 913:
1.65 dwinter 914: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath=genericServerPath):
1.1 dwinter 915: self.id=id
916: self.title=title
917: self.ImageStoragePath=ImageStoragePath
918: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 919: self.defaultMetaString=defaultMetaString
1.65 dwinter 920: self.serverPath=serverPath
1.70 casties 921: self.defaultrows = 6
922: self.defaultcols = 2
1.1 dwinter 923:
1.41 dwinter 924: optTMP= Folder.manage_options
1.38 dwinter 925:
926: manage_options = optTMP+(
1.1 dwinter 927: {'label':'Main Config','action':'ImageCollection_config'},
928: {'label':'Import','action':'ImportFiles'},
1.44 dwinter 929: {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},
930: {'label':'Import Metadata File','action':'importMetaFileForm'},
931: {'label':'Import Metadata','action':'importMetaData'},
1.7 dwinter 932: {'label':'Rescale thumbs','action':'scaleThumbs'},
1.64 dwinter 933: {'label':'Rescale working version','action':'scaleWorkingVersions'},
1.6 dwinter 934: )
935:
1.38 dwinter 936:
1.44 dwinter 937:
938: def importMetaData(self,strict=None):
939: """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""
940:
941: for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):
1.72 dwinter 942:
1.44 dwinter 943: image[1].manageMetaData(strict)
944: return "ok"
1.23 dwinter 945:
1.44 dwinter 946:
947: def importMetaFileForm(self):
1.6 dwinter 948: """import metadata"""
1.36 dwinter 949: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)
1.6 dwinter 950: return pt()
1.3 dwinter 951:
1.44 dwinter 952: def importMetaFile(self,fileupload,tag):
1.6 dwinter 953: """import"""
954: filedata=fileupload.read()
955: dom=xml.dom.minidom.parseString(filedata)
956: rows=dom.getElementsByTagName(tag)
957: #print "ROWS",rows
958: request=self.REQUEST
959: for row in rows:
960:
961: for a in self.leiden_meta_fields:
962: self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
963:
964: image_id=self.REQUEST['image_id']
965: if (not hasattr(self,image_id)) & (not image_id==""):
1.8 dwinter 966: #print image_id
1.6 dwinter 967: newObj=ImageCollection(str(image_id),image_id,'','','')
968: self._setObject(str(image_id),newObj)
969:
970: id="leiden_meta_data_file"
971: self.REQUEST['id']=id
972: #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
973: #objectCreate=objectType.createInObjectManager(id,request)
974: #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
975: try:
976: addID=getattr(self,image_id)
977: objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
978: #getattr(self,image_id)._setObject(id,objectCreate)
979: obj=getattr(addID,id)
980: obj.propertysheets.meta.manage_editProperties(request)
981: except:
982: """nothing"""
983: return "OK"
984:
1.1 dwinter 985:
1.31 dwinter 986: def nextImage(self,request,selected=None,returnFn=None):
1.7 dwinter 987: """show nextimage"""
1.13 dwinter 988: try:
989: ids=self.show_thumbs()
990: if request.SESSION.has_key("filename"):
991: filename=request.SESSION["filename"]
992: try:
993: nr=ids.index(filename)
1.64 dwinter 994:
1.13 dwinter 995: except:
996: nr=0
997: else:
1.7 dwinter 998: nr=0
999:
1.13 dwinter 1000: if nr==len(ids)-1:
1.64 dwinter 1001: return ""
1.13 dwinter 1002: else:
1.64 dwinter 1003: if returnFn:
1004: return ids[nr+1]
1005:
1.13 dwinter 1006: if selected:
1007: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
1008: else:
1009: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
1010: except:
1.7 dwinter 1011: return ""
1.13 dwinter 1012:
1.7 dwinter 1013: def prevImage(self,request,selected=None):
1014: """show nextimage"""
1015: #return self.getId()
1.13 dwinter 1016: try:
1017: ids=self.show_thumbs()
1018: if request.SESSION.has_key("filename"):
1019: filename=request.SESSION["filename"]
1020: try:
1021: nr=ids.index(filename)
1022: except:
1023: nr=0
1024: else:
1.7 dwinter 1025: nr=0
1.3 dwinter 1026:
1.13 dwinter 1027: if nr==0:
1028: return ""
1029: else:
1030: if selected:
1031: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
1032: else:
1033: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
1034: except:
1.7 dwinter 1035: return ""
1.6 dwinter 1036:
1.3 dwinter 1037: def meta_default(self,filename):
1038: """url der metadaten"""
1.44 dwinter 1039: return self.defaultMetaString % urllib.quote(filename)
1.3 dwinter 1040:
1.2 dwinter 1041: def getThumbAttribute(self,id,attr):
1042: if hasattr(self,id):
1043: return getattr(getattr(self,id),attr)
1044: else:
1045: if attr=='title':
1046: return "<b>Missing Image:%s</b>" % id
1047:
1048: def getThumbFunction(self,id,attr):
1049: #return "DUMP"
1050: if hasattr(self,id):
1051: return getattr(getattr(self,id),attr)()
1052:
1053:
1.1 dwinter 1054: def xmlinput(self,url):
1.70 casties 1055: """Anzeige von ausgewaehlten thumbs"""
1.1 dwinter 1056: #return url
1.5 dwinter 1057:
1058: url=urllib.unquote(url)
1.1 dwinter 1059: xmldoc=urllib.urlopen(url).read()
1.39 dwinter 1060: #return xmldoc
1.64 dwinter 1061: try:
1062: dom=xml.dom.minidom.parseString(xmldoc)
1.31 dwinter 1063: except:
1.77 dwinter 1064: return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
1065:
1.64 dwinter 1066: images=dom.getElementsByTagName('image')
1.31 dwinter 1067:
1.1 dwinter 1068: rc=[]
1.64 dwinter 1069: fnIds={}
1.1 dwinter 1070: for image in images:
1.64 dwinter 1071: imagename=image.getElementsByTagName('imagename')[0]
1.77 dwinter 1072:
1.39 dwinter 1073:
1074:
1.64 dwinter 1075:
1076: idnr=image.getElementsByTagName('idnr')[0]
1077: id=getText(idnr.childNodes)
1078: try:
1.72 dwinter 1079: numberOfPages=image.getElementsByTagName('numberOfPages')[0]
1.64 dwinter 1080: except:
1.72 dwinter 1081: numberOfPages=None
1082:
1083: if numberOfPages:
1084: nopT=getText(numberOfPages.childNodes)
1085: try:
1086: nop=int(nopT)
1087: except:
1088: nop=0
1089: else:
1090: nop=0
1091:
1.39 dwinter 1092: texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
1093: for text in texts:
1094: if not text=="":
1.77 dwinter 1095: text=self.getImageByName(text,onlyName="yes")
1.64 dwinter 1096: try:
1097: rc.append((str(text),id,nop))
1098: fnIds[str(text)]=(id,nop)
1099: except:
1100: rc.append((repr(text),id,nop))
1101: fnIds[repr(text)]=(id,nop)
1.39 dwinter 1102:
1.37 dwinter 1103:
1.2 dwinter 1104: rc.sort()
1.1 dwinter 1105: self.REQUEST.SESSION['filenames']=rc
1.64 dwinter 1106: self.REQUEST.SESSION['filenamesIds']=fnIds
1107:
1.72 dwinter 1108: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1109:
1110: if overview:
1111: return overview[0][1]()
1112: else:
1113: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1114: return pt()
1115:
1.36 dwinter 1116: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1.1 dwinter 1117: return pt()
1118:
1.44 dwinter 1119: def recalculateMetaLink(self):
1.3 dwinter 1120: """recalculate the metadata"""
1121:
1122: for entryid in self.__dict__:
1123: entry=getattr(self,entryid)
1124: if hasattr(entry,'meta_type'):
1125:
1126: if entry.meta_type=="ImageDigilib":
1127: entry.meta=entry.meta_default(entry.getId())
1128: return "OK"
1.1 dwinter 1129:
1130: def addImage(self):
1131: """Add an Image"""
1.64 dwinter 1132:
1.36 dwinter 1133: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImage.zpt')).__of__(self)
1.1 dwinter 1134: return pt()
1135:
1.66 dwinter 1136: def addImage2(self,fileupload,fileName=None,meta=None,use_default=None,RESPONSE=None):
1.1 dwinter 1137: """Add"""
1.41 dwinter 1138:
1.1 dwinter 1139: #print "FU",fileupload
1.3 dwinter 1140:
1141: if use_default:
1142: try:
1143: meta=self.meta_default(fileupload.filename)
1144: except:
1145: meta=None
1.7 dwinter 1146: else:
1147: meta=None
1.66 dwinter 1148:
1.74 casties 1149: fn=fileName or splitPath(fileupload.filename)
1.64 dwinter 1150:
1.30 dwinter 1151: manage_AddImageDigilib(self,fn,fileupload,meta=meta)
1.66 dwinter 1152:
1153: if RESPONSE:
1154: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
1.1 dwinter 1155: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 1156:
1157: def ImportFiles2(self,RESPONSE=None):
1158: """Import the existing files of a folder"""
1159: files=os.listdir(self.ImageStoragePath)
1160: ret=""
1161: #print self.__dict__
1162: for file in files:
1.91 ! dwinter 1163: fn=os.path.splitext(file)[0]
! 1164: if not (file[0]=="."):
! 1165: if self.__dict__.has_key(file) or self.__dict__.has_key(fn+'.tif') or self.__dict__.has_key(fn+'.tiff') :
1.3 dwinter 1166:
1167: ret=ret+"<br>"+file+" already exists!"
1168: else:
1169: ret=ret+"<br>"+file+" created!"
1170: meta=self.meta_default(file)
1171: newObj=ImageDigilib(file,file,meta)
1172: #print newObj,file
1173: #print newObj
1174: self._setObject(file,newObj)
1175: #print ret
1.36 dwinter 1176: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1.3 dwinter 1177: #print self.ImageStoragePath
1.35 dwinter 1178:
1.64 dwinter 1179: #scale thumb
1180:
1.89 dwinter 1181: self.scaleThumbs()
1.35 dwinter 1182:
1.64 dwinter 1183: #scale standard
1.35 dwinter 1184:
1.89 dwinter 1185: self.scaleWorkingVersions()
1.64 dwinter 1186:
1.31 dwinter 1187:
1.3 dwinter 1188: RESPONSE.redirect('manage_main')
1.50 dwinter 1189:
1.60 dwinter 1190: ## def importStructure(self,path):
1191: ## """import"""
1192: ## splitted=os.path.split(path)
1193: ## if os.path.isDir(path) and (len(splitted[1])>0) and (splitted[1][0]=="."):
1194: ## manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None)
1.50 dwinter 1195:
1.60 dwinter 1196: ## obj=getattr(self,splitted[1])
1197: ## obj.ImportFiles()
1.50 dwinter 1198:
1199: def ImportStructure(self,RESPONSE=None):
1200: """Import the existing files of a folder"""
1201: files=os.listdir(self.ImageStoragePath)
1202: ret=""
1203: #print self.__dict__
1204:
1205:
1206: for file in files:
1.51 dwinter 1207:
1.50 dwinter 1208: if os.path.isdir(os.path.join(self.ImageStoragePath,file)):
1.51 dwinter 1209: imageStoragePath=os.path.join(self.ImageStoragePath,file)
1210: imageViewerPath=os.path.join(self.ImageViewerPath,file)
1211: manage_AddImageCollection(self,file,file,imageStoragePath,imageViewerPath,self.defaultMetaString)
1.50 dwinter 1212:
1213: obj=getattr(self,file)
1214: obj.ImportStructure()
1215: else:
1216: if not file[0]==".":
1217: if self.__dict__.has_key(file):
1218:
1219: ret=ret+"<br>"+file+" already exists!"
1220: else:
1221: ret=ret+"<br>"+file+" created!"
1222: newObj=ImageDigilib(file,file)
1223: #print newObj,file
1224: #print newObj
1225: try:
1226: self._setObject(file,newObj)
1227: except:
1228: """nothing yet"""
1229: #print ret
1230: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1231: #print self.ImageStoragePath
1232:
1.64 dwinter 1233: #scale thumb
1234:
1.89 dwinter 1235: self.scaleThumbs()
1.50 dwinter 1236:
1.64 dwinter 1237: #scale standard
1.50 dwinter 1238:
1.89 dwinter 1239: self.scaleWorkingVersions()
1.64 dwinter 1240:
1241: if RESPONSE:
1242: RESPONSE.redirect('manage_main')
1.1 dwinter 1243:
1244: def ImportFiles(self,RESPONSE=None):
1245: """Import the existing files of a folder"""
1246: files=os.listdir(self.ImageStoragePath)
1247: ret=""
1248: #print self.__dict__
1249: for file in files:
1.91 ! dwinter 1250: fn=os.path.splitext(file)[0]
! 1251: if not (file[0]=="."):
! 1252: if self.__dict__.has_key(file) or self.__dict__.has_key(fn+'.tif') or self.__dict__.has_key(fn+'.tiff') :
1.2 dwinter 1253:
1254: ret=ret+"<br>"+file+" already exists!"
1.91 ! dwinter 1255:
1.2 dwinter 1256: else:
1257: ret=ret+"<br>"+file+" created!"
1258: newObj=ImageDigilib(file,file)
1259: #print newObj,file
1260: #print newObj
1.4 dwinter 1261: try:
1262: self._setObject(file,newObj)
1263: except:
1264: """nothing yet"""
1.1 dwinter 1265: #print ret
1.36 dwinter 1266: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1.3 dwinter 1267: #print self.ImageStoragePath
1.35 dwinter 1268:
1.64 dwinter 1269: #scale thumb
1270:
1.89 dwinter 1271: self.scaleThumbs()
1.35 dwinter 1272:
1.64 dwinter 1273: #scale standard
1.35 dwinter 1274:
1.64 dwinter 1275: self.scaleWorkingVersions()
1276:
1277: if RESPONSE:
1278: RESPONSE.redirect('manage_main')
1.1 dwinter 1279:
1280: def ImageCollection_config(self):
1281: """Nothing yet"""
1.3 dwinter 1282: if not hasattr(self,'defaultMetaString'):
1283: self.defaultMetaString=""
1284:
1.36 dwinter 1285: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)
1.1 dwinter 1286: return pt()
1287:
1.69 dwinter 1288: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath,RESPONSE=None):
1.1 dwinter 1289: """Change"""
1290: self.title=title
1291: self.ImageStoragePath=ImageStoragePath
1292: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 1293: self.defaultMetaString=defaultMetaString
1.69 dwinter 1294: self.serverPath=serverPath
1.3 dwinter 1295:
1.1 dwinter 1296: if RESPONSE is not None:
1297: RESPONSE.redirect('manage_main')
1298:
1299: def show_selected_thumbs(self):
1300: #ids=[]
1.47 dwinter 1301: try:
1302: return self.REQUEST.SESSION['filenames']
1.64 dwinter 1303: except:
1304: return None
1.1 dwinter 1305: def show_thumbs(self):
1306: ids=[]
1307: for entry in self.__dict__:
1308: #print entry
1309: if hasattr(getattr(self,entry),'thumb'):
1310: ids.append(entry)
1.2 dwinter 1311:
1.1 dwinter 1312: #print ids
1.2 dwinter 1313: ids.sort()
1.1 dwinter 1314: return ids
1315:
1.70 casties 1316: def firstSets(self,selected=None,text='first set'):
1.8 dwinter 1317: ids=self.show_thumbs()
1.13 dwinter 1318: if ids:
1319: if selected:
1.70 casties 1320: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[0]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1321: else:
1.70 casties 1322: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[0]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1323:
1.70 casties 1324: def lastSets(self,selected=None,text='last set'):
1.8 dwinter 1325: ids=self.show_thumbs()
1.13 dwinter 1326: if ids:
1327: colRows=self.getColTimesRow()
1328:
1329: if colRows[1]:
1330: nr=len(ids)-colRows[0]*colRows[1]
1331: else:
1332: nr=0
1333:
1334: if nr<0:
1335: nr=0
1336:
1337: if selected:
1.70 casties 1338: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1339: else:
1.70 casties 1340: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1341:
1342:
1343:
1.70 casties 1344: def nextSets(self,selected=None,text='next set'):
1.8 dwinter 1345: """show nextimage"""
1346: ids=self.show_thumbs()
1347: colRows=self.getColTimesRow()
1.70 casties 1348: pagesize = colRows[0] * colRows[1]
1.13 dwinter 1349: if ids:
1350: if colRows[1]:
1351: if self.REQUEST.SESSION.has_key("filename"):
1352: filename=self.REQUEST.SESSION["filename"]
1353: try:
1.70 casties 1354: nr=ids.index(filename)+pagesize
1.13 dwinter 1355: if nr>=len(ids):
1.70 casties 1356: return ""
1.13 dwinter 1357: except:
1.70 casties 1358: nr=pagesize
1.13 dwinter 1359: else:
1.70 casties 1360: nr = pagesize
1.8 dwinter 1361:
1.70 casties 1362: if nr>=len(ids)-1:
1.13 dwinter 1363: return ""
1.8 dwinter 1364: else:
1.13 dwinter 1365: if selected:
1.70 casties 1366: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1367: else:
1.70 casties 1368: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1369:
1.70 casties 1370: def prevSets(self,selected=None,text='previous sets'):
1.8 dwinter 1371:
1372: """show nextimage"""
1373: #return self.getId()
1374: ids=self.show_thumbs()
1375: colRows=self.getColTimesRow()
1.13 dwinter 1376: if ids:
1377: if colRows[1]:
1378: if self.REQUEST.SESSION.has_key("filename"):
1379: filename=self.REQUEST.SESSION["filename"]
1380: try:
1381: nr=ids.index(filename)-colRows[0]*colRows[1]
1382: if nr<0:
1383: nr=0
1384: except:
1385: nr=0
1386: else:
1387: nr=0
1.8 dwinter 1388: try:
1.13 dwinter 1389: num=ids.index(filename)
1.8 dwinter 1390: except:
1.13 dwinter 1391: num=0
1392:
1393: if num==0:
1394: return ""
1395: else:
1396: if selected:
1.70 casties 1397: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1398: else:
1.70 casties 1399: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1400: else:
1401: return ""
1.70 casties 1402:
1403:
1.50 dwinter 1404: def showFolders(self):
1405: """show subfolders"""
1406: ret=""
1407: link=""" <a target="_top" href="%s">%s</a><br>"""
1.24 dwinter 1408:
1.50 dwinter 1409: if self.aq_parent.meta_type=="ImageCollection":
1410: ret+=link%(self.aq_parent.absolute_url(), "back ("+self.aq_parent.title+")")
1411: ret+="<br>"
1412:
1.52 dwinter 1413: iCs=self.ZopeFind(self,obj_metatypes=["ImageCollection"])
1.50 dwinter 1414: if not iCs:
1415: return ret
1416: else:
1417:
1418: link=""" <a target="_top" href="%s">%s</a><br>"""
1419: for iC in iCs:
1420: ret+=link%(iC[1].absolute_url(),iC[0])
1421: ret+="<br>"
1422: return ret
1.70 casties 1423:
1424:
1425: def getSetSelector(self, selected=None):
1426: """returns the HTML select element for the sets"""
1427: actualNr=0
1428: ids=self.show_thumbs()
1429: colRows=self.getColTimesRow()
1430: pagesize = colRows[0]*colRows[1]
1431: numpages = int(len(ids)/pagesize)
1432: if not ((len(ids) % pagesize)==0):
1433: numpages+=1
1434:
1435: ret=""
1436: if numpages>1:
1437: if selected:
1438: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""/selection?filename='+this.options[this.selectedIndex].value">"""
1439: else:
1440: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""?filename='+this.options[this.selectedIndex].value">"""
1441:
1442: for i in range(numpages):
1443: try:
1444: nr=ids.index(self.REQUEST.SESSION['filename'])
1445: except:
1446: nr=0
1447: k=i * pagesize
1448: if (k <= nr) and (nr < i*(pagesize+1)):
1449: actualNr=i
1450: ret+="""<option value="%s" selected>%i</option>"""%(ids[k], i + 1)
1451: else:
1452: ret+="""<option value="%s">%i</option>"""%(ids[k], i + 1)
1453:
1454: ret+="</select>"
1455:
1456: return ret
1457:
1458: def isAllSets(self, showall=None):
1459: """returns if there are any sets"""
1460: ids=self.show_thumbs()
1461: colRows=self.getColTimesRow(showall=showall)
1462: pagesize = colRows[0]*colRows[1]
1463: return (len(ids) <= pagesize)
1464:
1465:
1466: def allSets(self, texton='show all', textoff='show groups'):
1467: """returns HTML to toggle 'show all'"""
1468: if self.isAllSets(showall='No'):
1469: return ""
1470: showall=self.REQUEST.SESSION.get('showall','no')
1471: if showall=='no':
1472: ret='<a href="'+self.REQUEST['URL1']+'?showall=yes" target="_top">'+texton+'</a>'
1473: else:
1474: ret='<a href="'+self.REQUEST['URL1']+'?showall=no" target="_top">'+textoff+'</a>'
1475: return ret
1476:
1477:
1.24 dwinter 1478: def showRuler(self,selected=None):
1479: """show ruler"""
1.70 casties 1480: showall=self.REQUEST.SESSION.get('showall','no')
1.28 dwinter 1481: ids=self.show_thumbs()
1482: if len(ids)==0:
1483: return "<b>No entries</b>"
1484:
1.24 dwinter 1485: if showall=='no':
1.64 dwinter 1486: actualNr=0
1.24 dwinter 1487: ids=self.show_thumbs()
1488: colRows=self.getColTimesRow()
1489: num=int(len(ids)/(colRows[0]*colRows[1]))
1.28 dwinter 1490: if not (operator.mod(len(ids),colRows[0]*colRows[1])==0):
1491: num+=1
1.24 dwinter 1492: a=colRows[0]*colRows[1]
1.26 dwinter 1493: #print num,num+1
1.64 dwinter 1494:
1.28 dwinter 1495: if num>1:
1.24 dwinter 1496:
1.49 dwinter 1497: ret=""
1498: if selected:
1.64 dwinter 1499: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""/selection?filename='+this.options[this.selectedIndex].value">"""
1.49 dwinter 1500: else:
1.64 dwinter 1501: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""?filename='+this.options[this.selectedIndex].value">"""
1502: for i in range(num):
1503: try:
1504: nr=ids.index(self.REQUEST.SESSION['filename'])
1505: except:
1506: nr=0
1507: k=i*a
1508: if (k <= nr) and (nr < i*(a+1)):
1509: actualNr=i
1510: ret+="""<option value="%s" selected>%i</option>"""%(ids[k],i)
1511: else:
1512: ret+="""<option value="%s">%i</option>"""%(ids[k],i)
1513: ret+="</select>"
1.70 casties 1514: anf="<b>Show thumbnail group no: </b></br>"
1.64 dwinter 1515:
1516:
1517: try:
1518: if selected:
1.49 dwinter 1519: href=self.REQUEST['URL1']+"/selection?filename="+ids[(actualNr-1)*a]
1520: else:
1521: href=self.REQUEST['URL1']+"?filename="+ids[int((actualNr-1)*a)]
1.64 dwinter 1522:
1523: anf+="""<a href="%s" target="_top">%s</a> """%(href,"prev")
1524: except:
1525: pass
1526: ret=anf+ret
1527:
1528: try:
1529:
1530: if selected:
1.49 dwinter 1531: href=self.REQUEST['URL1']+"/selection?filename="+ids[(actualNr+1)*a]
1532: else:
1533: href=self.REQUEST['URL1']+"?filename="+ids[int((actualNr+1)*a)]
1.64 dwinter 1534:
1535: end="""<a href="%s" target="_top">%s</a> """%(href,"next")
1536: except:
1537: end=""
1538: ret=ret+end
1.24 dwinter 1539:
1.49 dwinter 1540:
1541: #for i in range(num):
1542: #
1543: # ret +="<br/>" #alle 10 linebreak einfuegen
1544: # k=i*a
1545: # if selected:
1546: # href=self.REQUEST['URL1']+"/selection?filename="+ids[k]
1547: # else:
1548: # href=self.REQUEST['URL1']+"?filename="+ids[int(k)]
1.64 dwinter 1549: #
1.49 dwinter 1550: # ret+="""<a href="%s" target="_top">%i</a> """%(href,i)
1.24 dwinter 1551:
1552: else:
1553: ret=""
1554: ret+="""<a href="%s?showall=yes" target="_top">show all</a> """%self.REQUEST['URL1']
1555: else:
1556: ret="""<a href="%s?showall=no" target="_top">show groups</a> """%self.REQUEST['URL1']
1557:
1558: return ret
1.70 casties 1559:
1.24 dwinter 1560:
1.2 dwinter 1561: def show_thumbs_selected_rows(self,numberOfColumns):
1562: """Ausgabe anzahl"""
1563: ids=self.show_selected_thumbs()
1.48 dwinter 1564:
1.47 dwinter 1565: if not ids:
1.64 dwinter 1566: return None
1.2 dwinter 1567: self.REQUEST.SESSION['ids']=ids
1568: number=int(len(ids)/numberOfColumns)+1
1569: self.REQUEST.SESSION['number']=range(number)
1570: return range(number+1)
1571:
1.8 dwinter 1572: def setColTimesRowForm(self):
1573: """form for matrix setting"""
1.36 dwinter 1574: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','selectColTimesRow.zpt')).__of__(self)
1.8 dwinter 1575: return pt()
1576:
1577: def setDone(self):
1578: """done"""
1579:
1.36 dwinter 1580: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changedColTimesRow.zpt')).__of__(self)
1.8 dwinter 1581: return pt()
1582:
1583: def setColTimesRow(self,cols,rows):
1584: """set coltimes row"""
1585: RESPONSE=self.REQUEST.RESPONSE
1.10 dwinter 1586: if not rows:
1.12 dwinter 1587: rows=None
1.11 dwinter 1588: if rows=="":
1.12 dwinter 1589: rows=None
1590:
1591: if rows:
1592: RESPONSE.setCookie("ImageViewerRows",rows)
1.8 dwinter 1593: RESPONSE.setCookie("ImageViewerCols",cols)
1594:
1595: RESPONSE.redirect(self.REQUEST['URL1']+"/setDone")
1.70 casties 1596:
1597: def setDefaultColTimesRow(self, cols, rows):
1598: """sets default columns and rows"""
1599: self.defaultcols = cols
1600: self.defaultrows = rows
1.71 dwinter 1601:
1.24 dwinter 1602: def getColTimesRow(self,showall='No'):
1.12 dwinter 1603: """coltimesrow"""
1.8 dwinter 1604:
1605: REQUEST=self.REQUEST
1606: """matrix"""
1607: if REQUEST.cookies.has_key("ImageViewerRows"):
1608: try:
1609: rows=int(REQUEST.cookies["ImageViewerRows"])
1610: except:
1.71 dwinter 1611: rows=getattr(self,'defaultrows',6)
1.8 dwinter 1612: else:
1.71 dwinter 1613: rows=getattr(self,'defaultrows',6)
1.8 dwinter 1614:
1615: if REQUEST.cookies.has_key("ImageViewerCols"):
1.12 dwinter 1616: #print "COLS",REQUEST.cookies["ImageViewerCols"]
1.8 dwinter 1617: cols=int(REQUEST.cookies["ImageViewerCols"])
1618: else:
1.71 dwinter 1619: cols=getattr(self,'defaultcols',3)
1620:
1.12 dwinter 1621:
1622: idsnumber=len(self.show_thumbs())
1623: if rows:
1624: if cols*rows >idsnumber:
1625: rows=int(idsnumber/cols)+1
1.23 dwinter 1626:
1.70 casties 1627: if showall is None:
1628: showall=self.REQUEST.SESSION.get('showall', 'No')
1.24 dwinter 1629: if showall=='yes':
1630: rows=int(idsnumber/cols)+1
1631:
1.8 dwinter 1632: return (cols,rows)
1633:
1634:
1.62 dwinter 1635: def show_thumbs_rows(self,numberOfColumns,numberOfRows=None,startId=None,showall="No"):
1.2 dwinter 1636: """Ausgabe anzahl"""
1.8 dwinter 1637:
1638: idsAll=self.show_thumbs()
1.70 casties 1639: if len(idsAll)==0: #keine Eintraege
1.28 dwinter 1640: return 0
1.62 dwinter 1641: if self.REQUEST.SESSION.has_key("filename") and not (showall=="yes"):
1.8 dwinter 1642: filename=self.REQUEST.SESSION["filename"]
1.46 dwinter 1643: filename=self.getImageByName(filename,onlyName="yes")
1.23 dwinter 1644:
1.8 dwinter 1645: try:
1646: startId=filename
1.23 dwinter 1647: if startId=="":
1648: startId=idsAll[0][0:]
1.8 dwinter 1649: except:
1.23 dwinter 1650: startId=idsAll[0][0:]
1.8 dwinter 1651: else:
1.23 dwinter 1652: startId=idsAll[0][0:]
1.8 dwinter 1653:
1654:
1.23 dwinter 1655:
1.8 dwinter 1656:
1657: if numberOfRows:
1.23 dwinter 1658:
1659: startPic=idsAll.index(startId)
1.12 dwinter 1660: try:
1.23 dwinter 1661:
1.12 dwinter 1662: startPic=idsAll.index(startId)
1663: endPic=startPic+numberOfColumns*numberOfRows
1664: ids=idsAll[startPic:endPic]
1665: except:
1666: ids=idsAll
1.8 dwinter 1667: else:
1.23 dwinter 1668:
1.8 dwinter 1669: ids=idsAll
1670:
1.23 dwinter 1671:
1.2 dwinter 1672: self.REQUEST.SESSION['ids']=ids
1673: number=int(len(ids)/numberOfColumns)+1
1.23 dwinter 1674:
1.2 dwinter 1675: return range(number+1)
1676:
1677: def show_thumbs_columns(self,row,numberOfColumns):
1678: """Ausgabe einer Liste der Reihe"""
1679: ids=self.REQUEST.SESSION['ids']
1680: max=len(ids)
1681: if (row*numberOfColumns)<max:
1682: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
1683: else:
1684: return ids[(row-1)*numberOfColumns:]
1.8 dwinter 1685:
1.2 dwinter 1686: def thumblistSelected_old(self):
1687: """main template collection"""
1.36 dwinter 1688: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected.zpt')).__of__(self)
1.2 dwinter 1689: return pt()
1690:
1.1 dwinter 1691: def thumblistSelected(self):
1692: """main template collection"""
1.36 dwinter 1693: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected2.zpt')).__of__(self)
1.2 dwinter 1694: return pt()
1695:
1696: def thumblist_old(self):
1697: """main template collection"""
1.36 dwinter 1698: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self)
1.1 dwinter 1699: return pt()
1700:
1701: def thumblist(self):
1702: """main template collection"""
1.36 dwinter 1703: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb2.zpt')).__of__(self)
1.1 dwinter 1704: return pt()
1705:
1.23 dwinter 1706: def thumblistNewWindow(self):
1707: """Thumbs mit clik neues Fenster oeffnen"""
1.36 dwinter 1708: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbNewWindow.zpt')).__of__(self)
1.23 dwinter 1709: return pt()
1710:
1711:
1.7 dwinter 1712: def navig_selected_html(self):
1713: """navigation"""
1714: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.36 dwinter 1715: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
1.77 dwinter 1716:
1717: return pt().data
1.7 dwinter 1718:
1.1 dwinter 1719: def navig_html(self):
1720: """navigation"""
1.7 dwinter 1721: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.38 dwinter 1722:
1.36 dwinter 1723: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation.zpt')).__of__(self)
1.1 dwinter 1724: return pt()
1725:
1726:
1.7 dwinter 1727: def selection(self):
1728: """show only selected"""
1729: if self.REQUEST.has_key('filename'):
1730: filen=self.REQUEST['filename']
1731: else:
1732: filen=""
1733: self.REQUEST.SESSION['filename']=filen
1.36 dwinter 1734: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected2.zpt')).__of__(self)
1.7 dwinter 1735: return pt()
1.46 dwinter 1736:
1737: def getImageByName(self,filename,onlyName=None):
1738: """get filename"""
1.87 dwinter 1739: #print repr(filename)
1.77 dwinter 1740: #FIXME: umlaute in filename
1741: fn=getattr(self,repr(filename),None)
1.46 dwinter 1742: if not fn:
1743: filenameM=filename.split(".")[0]
1.80 dwinter 1744:
1.46 dwinter 1745: founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
1.80 dwinter 1746:
1747:
1.46 dwinter 1748: for found in founds:
1749: foundM=found[0].split(".")[0]
1.80 dwinter 1750:
1.46 dwinter 1751: if filenameM.lower()==foundM.lower():
1752: if onlyName:
1753: return found[0]
1754: else:
1.80 dwinter 1755: return found[1]
1756: #HACK teste noch ob am ende des filenames eventuell ein "_" und loesche das.
1757: if foundM[-1]=="_":
1758: foundM=foundM[0:-1]
1759:
1760: if filenameM.lower()==foundM.lower():
1761: if onlyName:
1762: return found[0]
1763: else:
1764: return found[1]
1765:
1.46 dwinter 1766: if onlyName:
1767: return filename
1768: else:
1769: return fn
1.64 dwinter 1770:
1771:
1772: security.declareProtected('View','index_html')
1.76 dwinter 1773: def index_html(self,fn=None,generic='No'):
1.1 dwinter 1774: """main template collection"""
1.77 dwinter 1775:
1.58 dwinter 1776: if fn:
1777: ret=[]
1778:
1779: if type(fn) is ListType:
1780: """experimentell mehr als ein filename"""
1781: for filename in fn:
1.59 dwinter 1782: if not (filename == ""):
1783: ret.append((filename,'',1))
1.58 dwinter 1784: else:
1785: ret.append((fn,'',1))
1786:
1787: self.REQUEST.SESSION['filenames']=ret
1788: #self.REQUEST.SESSION['filenamesIds']=fnIds
1.72 dwinter 1789:
1790: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1791:
1.76 dwinter 1792:
1793: if overview and (generic =='No'):
1.72 dwinter 1794: return overview[0][1]()
1795: else:
1796: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1797: return pt()
1.58 dwinter 1798:
1.1 dwinter 1799: if self.REQUEST.has_key('filename'):
1800: filen=self.REQUEST['filename']
1801: else:
1802: filen=""
1.24 dwinter 1803:
1.38 dwinter 1804: self.REQUEST.SESSION['filename']=filen[0:]
1805:
1.25 dwinter 1806: if self.REQUEST.has_key('showall'):
1807:
1808: self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
1809: else:
1810: self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
1811:
1.60 dwinter 1812:
1813: overview=self.ZopeFind(self,obj_ids=['overview.html'])
1.76 dwinter 1814: if overview and (generic == 'No'):
1.60 dwinter 1815: return overview[0][1]()
1.70 casties 1816: elif hasattr(self,'templates'):
1817: pt=self.templates.imgcoll_main.__of__(self)
1818: return pt()
1.60 dwinter 1819: else:
1820: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
1821: return pt()
1.70 casties 1822:
1.77 dwinter 1823: def navigation(self):
1824: """generate navigation bar"""
1825:
1826: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_fragment')).__of__(self)
1827: return pt()
1.1 dwinter 1828:
1829: def manage_AddImageCollectionForm(self):
1830: """Nothing yet"""
1.36 dwinter 1831: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)
1.1 dwinter 1832: return pt()
1833:
1.3 dwinter 1834: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 1835: """Add ImageCollection"""
1.3 dwinter 1836: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.19 dwinter 1837: self._setObject(id,newObj)
1838:
1839: if RESPONSE is not None:
1840: RESPONSE.redirect('manage_main')
1841:
1842:
1.77 dwinter 1843:
1.60 dwinter 1844: class ImageCollectionMD(ImageCollection,ZSQLExtendFolder):
1845: """Imageviewer and Metadata"""
1846: meta_type="ImageCollection MD"
1.61 dwinter 1847: #scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn="
1848: scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="
1.68 dwinter 1849: rightsQueryDefault="SELECT accessibility from vision_main where id_image=(SELECT id from vision_images where filename ~ '%s*' )"
1850: rightsQueryFieldDefault="accessibility"
1851:
1.60 dwinter 1852: manage_options=ImageCollection.manage_options+(
1853: {'label':'ZSQLExtend','action':'changeZSQLExtendForm'},
1.68 dwinter 1854: {'label':'Change Rights Query','action':'changeRightsQueryForm'},
1.60 dwinter 1855: )
1856:
1.65 dwinter 1857: try:
1.77 dwinter 1858: changeZSQLExtendForm=ZSQLExtendFolder.changeZSQLExtendForm
1.63 dwinter 1859: except:
1.77 dwinter 1860: pass
1861:
1.82 dwinter 1862:
1863: def ImportFiles(self,RESPONSE=None):
1864: """Import the existing files of a folder"""
1865: files=os.listdir(self.ImageStoragePath)
1866: ret=""
1867: #print self.__dict__
1868: for file in files:
1.91 ! dwinter 1869:
! 1870: if not (file[0]=="."):
! 1871: fn=os.path.splitext(file)[0]
! 1872: if self.__dict__.has_key(file) or self.__dict__.has_key(fn+'.tif') or self.__dict__.has_key(fn+'.tiff') :
1.82 dwinter 1873:
1874: ret=ret+"<br>"+file+" already exists!"
1.91 ! dwinter 1875:
1.82 dwinter 1876: else:
1877: ret=ret+"<br>"+file+" created!"
1878: newObj=ImageDigilib(file,file)
1879: #print newObj,file
1880: #print newObj
1881: try:
1882: self._setObject(file,newObj)
1883: except:
1884: """nothing yet"""
1885:
1886:
1887: args={}
1888: args['_table']=self.imageCollectionConfig.getTable()
1889: args[self.imageCollectionConfig.getKey()]=file
1890:
1.83 dwinter 1891: if not self.ZSQLInlineSearch(args=args):
1892: self.ZSQLAdd(args=args)
1.82 dwinter 1893: #print ret
1894: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1895: #print self.ImageStoragePath
1896:
1897: #scale thumb
1898:
1899:
1.89 dwinter 1900: self.scaleThumbs()
1.82 dwinter 1901:
1902: #scale standard
1903:
1.89 dwinter 1904: self.scaleWorkingVersions()
1.82 dwinter 1905:
1.90 dwinter 1906: self.scaleToJpgs()
1907:
1.82 dwinter 1908: if RESPONSE:
1909: RESPONSE.redirect('manage_main')
1.77 dwinter 1910:
1911: def addImage(self):
1912: """Add an Image"""
1913:
1914: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImageMD.zpt')).__of__(self)
1915: return pt()
1916:
1.81 dwinter 1917: def addImage2(self,_fileupload,_fileName=None,_meta=None,_use_default=None,RESPONSE=None):
1.77 dwinter 1918: """Add"""
1919:
1920: filenameKey="filename"
1921: #print "FU",fileupload
1922:
1923: if _use_default:
1924: try:
1925: meta=self.meta_default(_fileupload.filename)
1926: except:
1927: meta=None
1928: else:
1929: meta=None
1930:
1931: fn=_fileName or splitPath(_fileupload.filename)
1932:
1933: manage_AddImageDigilib(self,fn,_fileupload,meta=meta)
1934:
1.81 dwinter 1935: args=self.REQUEST.form
1936: args[filenameKey]=fn
1.77 dwinter 1937:
1.81 dwinter 1938: self.ZSQLAdd(args=args)
1.77 dwinter 1939:
1.90 dwinter 1940: self.scaleThumbs()
1941: self.scaleWorkingVersions()
1942:
1943: getattr(self,fn).scaleToJpg()
1.77 dwinter 1944: if RESPONSE:
1945: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
1946: #return self.REQUEST['URL1']+'/'+fileupload.filename
1947:
1948: def navig_html(self):
1949: """navigation"""
1950: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1951:
1952: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigationMD.zpt')).__of__(self)
1953: return pt()
1954:
1955: def navig_selected_html(self):
1956: """navigation"""
1957: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1958: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selectedMD.zpt')).__of__(self)
1959:
1960: return pt()
1961:
1962: def decode(self,str):
1963: """decoder"""
1964: if not str:
1965: return ""
1966: if type(str) is StringType:
1967: try:
1968: return str.decode('utf-8')
1969: except:
1970: return str.decode('latin-1')
1971: else:
1972:
1973: return str
1974:
1975: def standardSearch(self):
1976: """standard search page"""
1977: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','standardSearchPage.zpt')).__of__(self)
1978: return pt()
1979:
1980: def searchResultXML(self):
1981: """xmlformat"""
1982: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','searchResultXML.zpt')).__of__(self)
1983: return pt()
1.63 dwinter 1984:
1.77 dwinter 1985: def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):
1986: """search"""
1987:
1.88 dwinter 1988: rc=[]
1989: fnIds={}
1990: for found in self.ZSQLInlineSearch(args=self.REQUEST.form):
1991: key=getattr(found,self.imageCollectionConfig.getKey())
1992: key=self.getImageByName(key,onlyName="yes")
1993: rc.append((key,'',0))
1994: fnIds[key]=('',0)
1995:
1996: rc.sort()
1997: self.REQUEST.SESSION['filenames']=rc
1998: self.REQUEST.SESSION['filenamesIds']=fnIds
1.87 dwinter 1999:
1.88 dwinter 2000: overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
2001:
2002: if overview:
2003: return overview[0][1]()
1.77 dwinter 2004: else:
1.88 dwinter 2005: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2006: return pt()
2007:
2008: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2009: return pt()
2010:
2011: #urlTmp=REQUEST['URL1']
2012:
2013: #url=urlTmp+'/searchResultXML?-table=%s&'%self.imageCollectionConfig.getTable()+REQUEST['QUERY_STRING']
2014:
2015: #if xml is None:
2016: # RESPONSE.redirect('xmlinput?url='+urllib.quote(url))
2017: #else:
2018: # RESPONSE.redirect(url)
1.77 dwinter 2019:
2020: def index_html(self,fn=None,selection=None,generic='No',REQUEST=None,RESPONSE=None):
2021: """main template collection"""
2022:
2023:
2024: mode=self.REQUEST.get('mode','view')
2025: if fn:
2026: ret=[]
2027:
2028: if type(fn) is ListType:
2029: """experimentell mehr als ein filename"""
2030: for filename in fn:
2031: if not (filename == ""):
2032: ret.append((filename,'',1))
2033: else:
2034: ret.append((fn,'',1))
2035:
2036: self.REQUEST.SESSION['filenames']=ret
2037: #self.REQUEST.SESSION['filenamesIds']=fnIds
2038:
1.79 dwinter 2039: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1.77 dwinter 2040:
2041:
2042: if overview and (generic =='No'):
2043: return overview[0][1]()
2044: else:
2045: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2046: return pt()
2047:
2048:
2049: # filename given, then only display this file
2050: if self.REQUEST.has_key('filename'):
2051:
2052: filen=self.REQUEST['filename']
2053: else:
2054: filen=""
2055:
2056:
2057: self.REQUEST.SESSION['filename']=filen[0:]
2058:
1.85 dwinter 2059: # if not self.REQUEST.SESSION['filename']=="":
2060: # url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()
2061: # if mode=="view":
2062: # self.REQUEST.RESPONSE.redirect(url)
2063: # elif mode=="download":
2064: # self.REQUEST.RESPONSE.redirect(url+"/download")
2065: #
1.77 dwinter 2066: if self.REQUEST.has_key('showall'):
2067:
2068: self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
2069: else:
2070: self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
2071:
2072:
2073: if selection:
2074: #selection i.e. selection already stored at self.REQUEST.SESSION['filenames']
1.79 dwinter 2075: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1.77 dwinter 2076:
2077:
2078: if overview and (generic =='No'):#
1.85 dwinter 2079:
1.77 dwinter 2080: return overview[0][1]()
2081: else:
2082: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2083: return pt()
2084:
2085:
2086: #no filename then show overview
2087:
1.79 dwinter 2088: overview=self.ZopeFind(self,obj_ids=['overview.html'])
1.77 dwinter 2089: if overview and (generic == 'No'):
2090:
2091:
2092: return overview[0][1]()
2093: elif hasattr(self,'templates'):
2094:
2095: pt=self.templates.imgcoll_mainMD.__of__(self)
2096: return pt()
2097: else:
2098:
2099: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overviewMD.zpt')).__of__(self)
2100: return pt()
2101:
2102: def nextImage(self,request,selected=None,returnFn=None):
2103: """show nextimage"""
2104:
2105: if not selected and self.REQUEST.has_key('fn'):
2106: imagename=self.REQUEST['fn'].split('/')[-1]
1.80 dwinter 2107:
2108: imagename=self.getImageByName(imagename,onlyName=True)
2109:
1.77 dwinter 2110: nr=self.getObjectPosition(imagename)
2111:
2112: objects=self.objectIds()
2113: if len(objects)==nr+1:
2114: return ""
2115: else:
2116: fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr+1]
2117: return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">next image</a>"
2118:
2119: def prevImage(self,request,selected=None,returnFn=None):
2120: """show nextimage"""
2121:
2122: if not selected and self.REQUEST.has_key('fn'):
2123: imagename=self.REQUEST['fn'].split('/')[-1]
1.80 dwinter 2124:
2125: imagename=self.getImageByName(imagename,onlyName=True)
2126:
1.77 dwinter 2127: nr=self.getObjectPosition(imagename)
2128:
2129: objects=self.objectIds()
2130: if nr==0:
2131: return ""
2132: else:
2133: fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr-1]
2134: return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">prev image</a>"
2135:
2136:
1.68 dwinter 2137: def changeRightsQueryForm(self):
2138: """change Rights Query"""
2139: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeRightsQueryForm.zpt')).__of__(self)
2140: return pt()
2141:
2142: def changeRightsQuery(self,rightsQuery,rightsQueryField,RESPONSE=None):
2143: """change Rightsquery"""
2144:
2145: self.rightsQuery=rightsQuery
2146: self.rightsQueryField=rightsQueryField
2147:
2148: if RESPONSE is not None:
2149: RESPONSE.redirect('manage_main')
2150:
2151:
2152:
2153: def getRightsQuery(self):
2154: """get Query"""
2155: return getattr(self,'rightsQuery',self.rightsQueryDefault)
2156:
2157: def getRightsQueryField(self):
2158: """get Query Fiueld"""
2159: return getattr(self,'rightsQueryField',self.rightsQueryFieldDefault)
2160:
2161:
2162:
1.60 dwinter 2163: def setGenericSearchStringForm(self):
2164: """form setze generischen search string fuer MD"""
2165: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','setGenericSearchStringForm.zpt')).__of__(self)
2166: return pt()
2167:
2168: def setGenericSearchString(self,searchString):
2169: """setze generischen search string"""
2170: self.searchString=searchString
2171:
2172: def thumblistMD(self):
2173: """main template collection"""
2174: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self)
2175: return pt()
1.68 dwinter 2176:
2177: def getRights(self,id):
2178: """get the rights from a database"""
2179: #print self.rightsQuery%id
2180: results=self.ZSQLSimpleSearch(self.getRightsQuery()%id)
2181: if results:
2182: result = getattr(results[0],self.getRightsQueryField())
2183: else:
2184: result = ''
2185: return result
1.77 dwinter 2186:
2187: def xmlinput(self,url):
2188: """Anzeige von ausgewaehlten thumbs"""
2189: #return url
1.68 dwinter 2190:
1.77 dwinter 2191: url=urllib.unquote(url)
2192: xmldoc=urllib.urlopen(url).read()
2193: #return xmldoc
2194: try:
1.87 dwinter 2195: dom=NonvalidatingReader.parseUri(url)
2196:
1.77 dwinter 2197: except:
2198: return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
2199:
1.60 dwinter 2200:
1.89 dwinter 2201: imagenames=dom.xpath("//imagename")
1.77 dwinter 2202: rc=[]
2203: fnIds={}
1.89 dwinter 2204: for imagename in imagenames:
1.86 dwinter 2205:
1.89 dwinter 2206: #imagename=image.xpath('./imagename')[0]
2207: #print "im",imagename
1.87 dwinter 2208:
1.77 dwinter 2209:
2210:
1.89 dwinter 2211: idnr=imagename.xpath('../idnr')[0]
1.77 dwinter 2212: id=getText(idnr.childNodes)
2213: try:
1.89 dwinter 2214: numberOfPages=imagename.xpath('../numberOfPages')[0]
1.77 dwinter 2215: except:
2216: numberOfPages=None
2217:
2218: if numberOfPages:
2219: nopT=getText(numberOfPages.childNodes)
2220: try:
2221: nop=int(nopT)
2222: except:
2223: nop=0
2224: else:
2225: nop=0
2226:
2227: texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
2228: for text in texts:
2229: if not text=="":
1.89 dwinter 2230: #print "a"
1.77 dwinter 2231: text=self.getImageByName(text,onlyName="yes")
1.89 dwinter 2232: #print "b"
1.77 dwinter 2233: try:
2234: rc.append((str(text),id,nop))
2235: fnIds[str(text)]=(id,nop)
2236: except:
2237: rc.append((repr(text),id,nop))
2238: fnIds[repr(text)]=(id,nop)
2239:
1.89 dwinter 2240: #print "done"
1.77 dwinter 2241: rc.sort()
2242: self.REQUEST.SESSION['filenames']=rc
2243: self.REQUEST.SESSION['filenamesIds']=fnIds
1.87 dwinter 2244:
1.77 dwinter 2245: overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
2246:
2247: if overview:
2248: return overview[0][1]()
2249: else:
2250: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2251: return pt()
2252:
2253: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2254: return pt()
2255:
2256: def selection(self):
2257: """show only selected"""
2258: if self.REQUEST.has_key('filename'):
2259: filen=self.REQUEST['filename']
2260: else:
2261: filen=""
2262: self.REQUEST.SESSION['filename']=filen
2263: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2264: return pt()
2265:
2266: def thumblistSelectedMD(self):
2267: """main template collection"""
2268: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselectedMD.zpt')).__of__(self)
2269: return pt()
2270:
1.60 dwinter 2271: def manage_AddImageCollectionMDForm(self):
2272: """Nothing yet"""
2273: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionFormMD.zpt')).__of__(self)
2274: return pt()
2275:
2276: def manage_AddImageCollectionMD(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
2277: """Add ImageCollection"""
2278: newObj=ImageCollectionMD(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
2279: self._setObject(id,newObj)
2280:
2281: if RESPONSE is not None:
2282: RESPONSE.redirect('manage_main')
2283:
2284:
2285:
2286:
1.19 dwinter 2287: class ImageCollectionIFrame(ImageCollection):
1.20 dwinter 2288: """Class fuer Collection set als IFrame"""
1.19 dwinter 2289:
2290: meta_type="ImageCollectionIFrame"
2291: label=ImageCollection.title
2292:
1.23 dwinter 2293: def getImageTag(self):
2294: """ hack : method needed by echo_content"""
2295: return ""
2296:
1.20 dwinter 2297: def rotate(self,angle,url,RESPONSE):
1.64 dwinter 2298: """rotate"""
2299:
2300: RESPONSE.redirect("javascript:document.domain='mpg.de';parent.iframe.right.rotation(%i)"%int(angle))
2301: RESPONSE.redirect(url)
1.19 dwinter 2302: def request(self):
2303: """request"""
2304: return self.REQUEST
2305:
2306: def index_html(self):
2307: """index"""
2308: if self.REQUEST.has_key('filename'):
2309: filen=self.REQUEST['filename']
2310: else:
2311: filen=""
2312: self.REQUEST.SESSION['filename']=filen
2313:
2314:
1.36 dwinter 2315: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameMain.zpt')).__of__(self)
1.19 dwinter 2316: return pt()
2317:
2318: def iframe_html(self):
2319: """iframe"""
2320: if self.REQUEST.has_key('filename'):
2321: filen=self.REQUEST['filename']
2322: else:
2323: filen=""
2324: self.REQUEST.response.setCookie('filename',filen)
1.36 dwinter 2325: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameOverview.zpt')).__of__(self)
1.19 dwinter 2326: return pt()
2327:
2328:
2329: def manage_AddImageCollectionIFrameForm(self):
2330: """Nothing yet"""
1.36 dwinter 2331: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionIFrameForm.zpt')).__of__(self)
1.19 dwinter 2332: return pt()
2333:
2334: def manage_AddImageCollectionIFrame(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
2335: """Add ImageCollection"""
2336: newObj=ImageCollectionIFrame(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 2337: self._setObject(id,newObj)
2338:
2339: if RESPONSE is not None:
2340: RESPONSE.redirect('manage_main')
2341:
2342:
1.61 dwinter 2343: class ImageZogiLib(ImageDigilib):
2344: """Anzeige Object fuer Bilder ausserhalb von collections
2345: ImageViewerPath und ImageStoragePath und wenn vorhanden Pfad zur Collection
2346: werden zusaetzlich abgespeichert
2347: """
1.65 dwinter 2348: #TODO: scaler path notwendig?
1.61 dwinter 2349: meta_type="ImageZogiLib"
2350:
2351: manage_options=ImageDigilib.manage_options+(
2352: {'label':'Main Config','action':'changeImageZogiLibForm'},
2353: )
2354:
2355: def __init__(self,id,fn,ImageViewerPath,ImageStoragePath,scalerPath,ImageCollectionPath=None,REQUEST=None):
2356: ImageDigilib.__init__(self,id,fn)
2357: self.ImageViewerPath=ImageViewerPath
2358: self.ImageStoragePath=ImageStoragePath
2359: self.ImageCollectionPath=ImageCollectionPath
2360: self.scalerPath=scalerPath
2361:
2362: def changeImageZogiLibForm(self):
2363: """change zogilib Form"""
2364: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeImageZogiLib.zpt')).__of__(self)
2365: return pt()
2366:
2367:
2368: def changeImageZogilib(fn,ImageViewerPath,ImageStoragePath,scalerPath,ImageCollectionPath,REQUEST=None):
2369: """Change it"""
2370: self.ImageViewerPath=ImageViewerPath
2371: self.ImageStoragePath=ImageStoragePath
2372: self.ImageCollectionPath=ImageColectionPath
2373: self.scalerPath=scalerPath
2374:
2375: def manage_AddImageZogiLib(self,id=None,ImageViewerPath=None,ImageStoragePath=None,fileUpload=None,ImageCollectionPath=None,scalerPath=None,libPath=None,caption=None,RESPONSE=None):
2376: """hinzufuegen eineis zogilibImage"""
2377:
2378: if libPath:
2379: splitted=libPath.split("?")
2380: urlSplit=splitted[0].split("/")
2381: params=cgi.parse_qs(splitted[1])
2382: #is LibPath a digilib path?
2383: if urlSplit[-1]=="Scaler":
2384: if type(params['fn']) is ListType:
2385: fnParam=params['fn'][0]
2386: else:
2387: fnParam=params['fn']
2388: fileNameSplit=os.path.split(fnParam)
2389: ImageViewerPath=fileNameSplit[0]
2390: id=fileNameSplit[1]
2391: scalerPath=splitted[0]+"?fn="
2392: else: #assume if not the path is a path to an ImageCollection
2393: if type(params['filename']) is ListType:
2394: id=params['filename'][0]
2395: else:
2396: id=params['filename']
2397:
2398: server=ServerProxy(splitted[0])
2399: ImageCollectionPath=libPath
2400: ImageViewerPath=server.getImageViewerPath()
2401: ImageStoragePath=server.getImageStoragePath()
2402: scalerPath=server.getScalerPath()
2403:
2404:
2405:
2406: if fileUpload:
2407: fn=splitPath(fileUpload.filename)
2408: else:
2409: fn=id
2410:
2411: newObj=ImageZogiLib(id,fn,ImageViewerPath,ImageStoragePath,scalerPath,ImageCollectionPath)
2412:
2413: self._setObject(id,newObj)
2414: getattr(self,id).caption=caption[0:]
2415: if fileUpload:
2416: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
2417:
2418: if RESPONSE is not None:
2419: RESPONSE.redirect('manage_main')
2420:
2421:
2422: def manage_AddImageZogiLibForm(self):
2423: """to be done"""
1.78 dwinter 2424:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>