Annotation of ImageArchive/ImageArchive.py, revision 1.90
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:
! 520:
! 521:
! 522: self.scale(dest=self.srcBasis,filename=newName,scaleBy=1,RESPONSE=RESPONSE)
! 523: return True
! 524:
1.81 dwinter 525: def updateImage(self,_fileupload,_rename=None,RESPONSE=None):
526: """lade neues Version des Bildes"""
527: #teste ob Dokumenten ordner schon vorhanden
528: #imagePath=os.path.join(self.ImageStoragePath,self.getId())
529:
530: identifyField="filename"
531:
532: if _fileupload and _fileupload.filename!="":
1.75 casties 533: imagePath=os.path.join(self.ImageStoragePath,self.filename)
1.64 dwinter 534: path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
1.81 dwinter 535:
1.64 dwinter 536: if not os.path.exists(path):
1.81 dwinter 537: os.mkdir(path,0775)
538: os.chmod(path,0775)
539:
1.64 dwinter 540: versionNumber=getattr(self,'versionNumber',0)+1
1.81 dwinter 541:
1.64 dwinter 542: #teste ob version schon existiert
1.81 dwinter 543:
1.75 casties 544: while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.filename))):
1.81 dwinter 545: versionNumber+=1
546:
1.64 dwinter 547: #kopieren der bestehenden Version in den Versions ordner.
1.75 casties 548: imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))
1.81 dwinter 549: try:
550: #zLOG.LOG("ImageArchive:updateImage", zLOG.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))
551: os.rename(imagePath,imageNewPath)
552: except:
553: zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))
554:
1.64 dwinter 555: #lesen des upload files und schreiben
1.89 dwinter 556: filedata=_fileupload.read()
1.75 casties 557: f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!
1.64 dwinter 558: f.write(filedata)
559: f.close()
560: try:
1.81 dwinter 561: os.chmod(imagePath,0664)
1.64 dwinter 562: except:
1.81 dwinter 563: pass
1.64 dwinter 564: #scale thumb
1.81 dwinter 565:
1.89 dwinter 566: self.scaleThumbs()
1.81 dwinter 567:
1.64 dwinter 568: #scale standard
1.81 dwinter 569:
1.89 dwinter 570: self.scaleWorkingVersions()
1.90 ! dwinter 571: self.scaleToJpg()
1.81 dwinter 572: if _rename:
1.89 dwinter 573: self.renameImage(_fileupload.filename)
1.64 dwinter 574:
1.81 dwinter 575:
576: args=self.REQUEST.form
577:
578: args['-identify']=identifyField+"="+args['_identifyField']
579:
580: self.ZSQLChange(args=args)
581:
582: if RESPONSE:
583: RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
1.64 dwinter 584:
1.43 dwinter 585:
1.81 dwinter 586: return "done"
1.72 dwinter 587:
588: security.declarePublic('thumb')
1.45 dwinter 589: def thumb(self,url=None):
1.1 dwinter 590: """show thumb"""
1.3 dwinter 591: thumbname=os.path.splitext(self.filename)[0]+".jpg"
1.65 dwinter 592: requestString=self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
593: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
1.60 dwinter 594:
595:
1.14 dwinter 596: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
1.45 dwinter 597: if url:
598: return "<img border=\"0\" src=\"%s\">"% path
599: else:
600: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
601: return pt()
1.60 dwinter 602:
603:
604: def thumbMD(self,url=None):
605: """show thumb mit Metadaten erwarten image in ImageCollectionMD
606: """
607: thumbname=os.path.splitext(self.filename)[0]+".jpg"
1.65 dwinter 608:
609: requestString=self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
610: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="+requestString
611:
612:
1.60 dwinter 613:
614: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
615: if url:
616: return "<img border=\"0\" src=\"%s\">"% path
617: else:
618:
619: overview=self.ZopeFind(self.aq_parent,obj_ids=['thumb.html'])
620: if overview:
621: return getattr(self,overview[0][0])()
622: else:
623: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbMD.zpt')).__of__(self)
624: return pt()
625:
626:
1.65 dwinter 627: def image(self,dw=None,dh=None):
628: """show image only with scaler"""
629: str=[]
630: if (not dw) and (not dh):
631: str.append("mo=file")
632: if dw:
633: str.append("dw=%s"%dw)
1.60 dwinter 634:
1.65 dwinter 635: if dh:
636: str.append("dw=%s"%dh)
637:
638: str.append("lv=2&fn=%s"%self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0])
639:
640:
641: requestString="&".join(str)
642:
643: self.REQUEST.RESPONSE.redirect(getattr(self,'serverPath',genericServerPath)+"/scaledImage?"+requestString)
644:
1.1 dwinter 645: def index_html(self):
1.65 dwinter 646: """show image with zogilib"""
1.8 dwinter 647: #DEVELOP: take first one for server
1.61 dwinter 648: #path="http://127.0.0.1:8080/zogilib_images?lv=2&fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]
1.65 dwinter 649: path=getattr(self,'serverPath',genericServerPath)+"?lv=2&fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]
1.1 dwinter 650: return self.REQUEST.RESPONSE.redirect(path)
651:
652:
653: def manage_AddImageDigilibForm(self):
654: """Nothing yet"""
1.36 dwinter 655: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageDigilibForm.zpt')).__of__(self)
1.1 dwinter 656: return pt()
657:
1.3 dwinter 658: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 659: """Add ImageCollection"""
1.41 dwinter 660:
1.1 dwinter 661: #fileupload=self.REQUEST['fileupload']
1.74 casties 662: #fn=splitPath(fileupload.filename)
663: fn = id # filename is the same as id
1.29 dwinter 664: newObj=ImageDigilib(id,fn,meta)
1.1 dwinter 665:
666: self._setObject(id,newObj)
667: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
668:
669: if RESPONSE is not None:
670: RESPONSE.redirect('manage_main')
671:
672:
1.41 dwinter 673:
1.77 dwinter 674: class ImageCollection(OrderedFolder, Persistent, Implicit,ECHO_basis):
1.64 dwinter 675: """Sammelordner fuer Bilder"""
676: meta_type="ImageCollection"
1.41 dwinter 677:
1.6 dwinter 678:
1.64 dwinter 679: security=ClassSecurityInfo()
680:
1.61 dwinter 681: #scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn="
1.65 dwinter 682: #scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="
1.60 dwinter 683:
1.53 dwinter 684: zipThreads={}
1.55 dwinter 685: zipThreads2={}
686:
1.6 dwinter 687: genericMetaDataType="leiden_meta"
688:
689: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
690:
1.90 ! dwinter 691: scaledBasis="/mpiwg/temp/online/scaled"
1.3 dwinter 692:
693: 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 694:
1.70 casties 695: imgcoll_main = PageTemplateFile('zpt/overview', globals())
1.77 dwinter 696: imgcoll_mainMD = PageTemplateFile('zpt/overviewMD', globals())
1.70 casties 697: imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())
1.77 dwinter 698: imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())
1.70 casties 699:
1.90 ! dwinter 700: destBasis="/docuserver/scaled/"
! 701: srcBasis="/docuserver/images"
! 702: def scale(self,dest=None,dir=None,filename=None,scaleTo=None,scaleBy=None,RESPONSE=None):
! 703: """scaler"""
! 704: #scaleomatStr="ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl -src=/mpiwg/online/ %s"
! 705: scaleomatStr="/docuserver/libs/scaleomat/scaleomat.pl"
! 706:
! 707: destBasis=self.destBasis
! 708: srcBasis=self.srcBasis
! 709:
! 710: srcStr=" -src=%s"%srcBasis
! 711: scaleStr=scaleomatStr+srcStr
! 712: if dir:
! 713: dirTmp=dir.replace(srcBasis,'')
! 714: dirStr=" -dir=%s"%dirTmp
! 715: scaleStr=scaleStr+dirStr
! 716: elif filename:
! 717: fileTmp=filename.replace(srcBasis,'')
! 718: fileStr=" -dir=%s"%fileTmp
! 719: scaleStr=scaleStr+fileStr
! 720: else:
! 721: zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no directory or filename given")
! 722: return False
! 723:
! 724: if dest is not None:
! 725: destStr=" -dest=%s"%os.path.join(destBasis,dest)
! 726: scaleStr=scaleStr+destStr
! 727: else:
! 728: zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")
! 729: return False
! 730:
! 731: if scaleTo:
! 732: scaleToStr=" -scaleto=%s"%scaleTo
! 733: scaleStr=scaleStr+scaleToStr
! 734: elif scaleBy:
! 735: scaleByStr=" -scaleby=%s"%scaleBy
! 736: scaleStr=scaleStr+scaleByStr
! 737: else:
! 738: zLOG.LOG("ImageCollection:scale",zLOG.ERROR,"no destionation given")
! 739: return False
! 740:
! 741: print scaleStr
! 742: ret=scaleStr
! 743: #ret=os.popen(scaleStr)
! 744:
! 745: if RESPONSE:
! 746: RESPONSE.write(ret)
! 747: return True
! 748:
1.77 dwinter 749: def getImageObject(self,name):
750: """gibt objeckt name zurueck"""
751: if hasattr(self,name):
752: return getattr(self,name)
753:
754: name=os.path.splitext(name)[0]
755: for extension in imageExtensions:
756: nameExt=name+"."+extension
757:
758: if hasattr(self,nameExt):
759: return getattr(self,nameExt)
760:
761: nameExt=name+"_."+extension
762: if hasattr(self,nameExt):
763: return getattr(self,nameExt)
764:
765: return getattr(self,"defaultImg")
766:
1.69 dwinter 767: def getServerPath(self):
768: """get Server path"""
769: return getattr(self,'serverPath',genericServerPath)
770:
1.61 dwinter 771: def getScalerPath(self):
772: """get ScalerPath"""
1.65 dwinter 773: path=getattr(self,'serverPath',genericServerPath)+"/scaledImage?fn="
1.61 dwinter 774:
775: def getImageViewerPath(self):
776: """get ImageViewerPath"""
777: return self.ImageViewerPath
778:
779: def getImageStoragePath(self):
780: """get ImageStoragePath"""
781: return self.ImageStoragePath
782:
1.53 dwinter 783: def refreshTxt(self):
784: """txt fuer refresh"""
785: tn=self.REQUEST.SESSION['threadName']
786: return """ 2;url=%s?repeat=%s """%(self.absolute_url()+"/createSet",tn)
787:
788: def createSet(self,RESPONSE=None,local=None,version="working",repeat=None):
1.64 dwinter 789: """download aller gewaehlten files"""
1.31 dwinter 790:
1.53 dwinter 791: threadName=repeat
792:
793:
794: if not threadName or threadName=="":
795: threadStart=generateSet(self.REQUEST.SESSION['filenames'],self.REQUEST.SESSION['filenamesIds'],self.ImageViewerPath,self.show_thumbs(),self.absolute_url(),local=local,version=version)
796: thread=Thread(target=threadStart)
797:
798: thread.start()
1.31 dwinter 799:
1.53 dwinter 800:
801: self.zipThreads[thread.getName()[0:]]=threadStart
1.55 dwinter 802: self.zipThreads2[thread.getName()[0:]]=thread
1.53 dwinter 803: self.REQUEST.SESSION['threadName']=thread.getName()[0:]
804: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['zip_wait_template'])
805: if wait_template:
806: return wait_template[0][1]()
1.54 dwinter 807: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
1.53 dwinter 808: return pt()
809: #xmltrans.run()
810: else:
811: self.REQUEST.SESSION['threadName']=threadName
1.31 dwinter 812:
1.53 dwinter 813: if (self.zipThreads[threadName].getResult()==None):
1.31 dwinter 814:
1.53 dwinter 815: wait_template=self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['wait_template'])
816: if wait_template:
1.64 dwinter 817: return wait_template[0][1]()
1.53 dwinter 818:
1.54 dwinter 819: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait.zpt')).__of__(self)
1.53 dwinter 820: return pt()
821: else:
822: if self.zipThreads[threadName].isDone():
823: self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
1.55 dwinter 824: self.zipThreads2[threadName].join()
825: del(self.zipThreads2[threadName])
826: del(self.zipThreads[threadName])
1.53 dwinter 827: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_result.zpt')).__of__(self)
828: return pt()
829:
830: else:
831: self.REQUEST.SESSION['result']=self.zipThreads[threadName].getResult()
832: self.REQUEST.SESSION['threadName']=threadName
1.54 dwinter 833: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','zip_wait_result.zpt')).__of__(self)
1.53 dwinter 834: return pt()
1.31 dwinter 835:
836:
837:
1.33 dwinter 838:
1.55 dwinter 839:
840: def checkThreads(self):
841: """teste running threads"""
842: ret="""<html>
843: <head>
844: <meta http-equiv="REFRESH" content="5;url=%s/checkThreads"
845: <body><h2>Threads of %s</h2>"""%(self.absolute_url(),self.getId())
846:
847: for threadName in self.zipThreads.keys():
848: if self.zipThreads2[threadName].isAlive():
849: ret+="<p>%s --> alive</p>"%threadName
850: else:
851: ret+="<p>%s --> dead</p>"%threadName
852: return ret+"</body></html>"
1.53 dwinter 853:
1.31 dwinter 854: def downloadSet(self,fn):
1.64 dwinter 855: """download prepared set"""
856: filename=os.path.join(tdir,fn)
1.54 dwinter 857:
1.64 dwinter 858:
859: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.tgz")
860: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
861: len=os.stat(filename)[6]
862: self.REQUEST.RESPONSE.setHeader("Content-Length",len)
863: images=file(filename).read()
864: self.REQUEST.RESPONSE.write(images)
865: self.REQUEST.RESPONSE.close()
1.31 dwinter 866:
1.90 ! dwinter 867:
! 868: def scaleToJpgs(self,RESPONSE=None):
! 869: """scale all tifs to jps"""
! 870: print self._objects
! 871: for x in self._objects:
! 872:
! 873: if (not hasattr(getattr(self,x['id']),'scaleToJpg')) or (not getattr(self,x['id']).scaleToJpg()):
! 874: if RESPONSE:
! 875: RESPONSE.write('error:%s'%x)
! 876:
! 877:
1.64 dwinter 878:
1.31 dwinter 879: def scaleThumbs(self,RESPONSE=None):
1.7 dwinter 880: """scale thumbs"""
1.64 dwinter 881:
882: #scale thumbs
1.90 ! dwinter 883: dest=os.path.join(self.scaledBasis,'thumb')
! 884: self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=100,RESPONSE=RESPONSE)
! 885: #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 886: if RESPONSE:
887: RESPONSE.write(ret.read())
888: RESPONSE.write("\n")
889:
1.35 dwinter 890: return "RESCALING STARTED"
891:
892: def scaleWorkingVersions(self,RESPONSE=None):
893: """scale working versions"""
1.64 dwinter 894:
895: #scale standard
1.90 ! dwinter 896:
! 897: dest=os.path.join(self.scaledBasis,'small')
! 898: self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=1000,RESPONSE=RESPONSE)
! 899:
! 900: dest=os.path.join(self.scaledBasis,'medium')
! 901: self.scale(dir=self.ImageStoragePath,dest=dest,scaleTo=2000,RESPONSE=RESPONSE)
! 902:
! 903: #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 904: if RESPONSE:
905: RESPONSE.write(ret.read())
906: RESPONSE.write("\n")
907: return "rescaling started"
1.35 dwinter 908:
1.3 dwinter 909:
1.65 dwinter 910: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath=genericServerPath):
1.1 dwinter 911: self.id=id
912: self.title=title
913: self.ImageStoragePath=ImageStoragePath
914: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 915: self.defaultMetaString=defaultMetaString
1.65 dwinter 916: self.serverPath=serverPath
1.70 casties 917: self.defaultrows = 6
918: self.defaultcols = 2
1.1 dwinter 919:
1.41 dwinter 920: optTMP= Folder.manage_options
1.38 dwinter 921:
922: manage_options = optTMP+(
1.1 dwinter 923: {'label':'Main Config','action':'ImageCollection_config'},
924: {'label':'Import','action':'ImportFiles'},
1.44 dwinter 925: {'label':'Recalculate MetadataLink','action':'recalculateMetaLink'},
926: {'label':'Import Metadata File','action':'importMetaFileForm'},
927: {'label':'Import Metadata','action':'importMetaData'},
1.7 dwinter 928: {'label':'Rescale thumbs','action':'scaleThumbs'},
1.64 dwinter 929: {'label':'Rescale working version','action':'scaleWorkingVersions'},
1.6 dwinter 930: )
931:
1.38 dwinter 932:
1.44 dwinter 933:
934: def importMetaData(self,strict=None):
935: """import metadata, if strict ist not None then only metadata will be rebuild where metadata is empty"""
936:
937: for image in self.ZopeFind(self,obj_metatypes=["ImageDigilib"]):
1.72 dwinter 938:
1.44 dwinter 939: image[1].manageMetaData(strict)
940: return "ok"
1.23 dwinter 941:
1.44 dwinter 942:
943: def importMetaFileForm(self):
1.6 dwinter 944: """import metadata"""
1.36 dwinter 945: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)
1.6 dwinter 946: return pt()
1.3 dwinter 947:
1.44 dwinter 948: def importMetaFile(self,fileupload,tag):
1.6 dwinter 949: """import"""
950: filedata=fileupload.read()
951: dom=xml.dom.minidom.parseString(filedata)
952: rows=dom.getElementsByTagName(tag)
953: #print "ROWS",rows
954: request=self.REQUEST
955: for row in rows:
956:
957: for a in self.leiden_meta_fields:
958: self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
959:
960: image_id=self.REQUEST['image_id']
961: if (not hasattr(self,image_id)) & (not image_id==""):
1.8 dwinter 962: #print image_id
1.6 dwinter 963: newObj=ImageCollection(str(image_id),image_id,'','','')
964: self._setObject(str(image_id),newObj)
965:
966: id="leiden_meta_data_file"
967: self.REQUEST['id']=id
968: #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
969: #objectCreate=objectType.createInObjectManager(id,request)
970: #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
971: try:
972: addID=getattr(self,image_id)
973: objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
974: #getattr(self,image_id)._setObject(id,objectCreate)
975: obj=getattr(addID,id)
976: obj.propertysheets.meta.manage_editProperties(request)
977: except:
978: """nothing"""
979: return "OK"
980:
1.1 dwinter 981:
1.31 dwinter 982: def nextImage(self,request,selected=None,returnFn=None):
1.7 dwinter 983: """show nextimage"""
1.13 dwinter 984: try:
985: ids=self.show_thumbs()
986: if request.SESSION.has_key("filename"):
987: filename=request.SESSION["filename"]
988: try:
989: nr=ids.index(filename)
1.64 dwinter 990:
1.13 dwinter 991: except:
992: nr=0
993: else:
1.7 dwinter 994: nr=0
995:
1.13 dwinter 996: if nr==len(ids)-1:
1.64 dwinter 997: return ""
1.13 dwinter 998: else:
1.64 dwinter 999: if returnFn:
1000: return ids[nr+1]
1001:
1.13 dwinter 1002: if selected:
1003: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
1004: else:
1005: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
1006: except:
1.7 dwinter 1007: return ""
1.13 dwinter 1008:
1.7 dwinter 1009: def prevImage(self,request,selected=None):
1010: """show nextimage"""
1011: #return self.getId()
1.13 dwinter 1012: try:
1013: ids=self.show_thumbs()
1014: if request.SESSION.has_key("filename"):
1015: filename=request.SESSION["filename"]
1016: try:
1017: nr=ids.index(filename)
1018: except:
1019: nr=0
1020: else:
1.7 dwinter 1021: nr=0
1.3 dwinter 1022:
1.13 dwinter 1023: if nr==0:
1024: return ""
1025: else:
1026: if selected:
1027: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
1028: else:
1029: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
1030: except:
1.7 dwinter 1031: return ""
1.6 dwinter 1032:
1.3 dwinter 1033: def meta_default(self,filename):
1034: """url der metadaten"""
1.44 dwinter 1035: return self.defaultMetaString % urllib.quote(filename)
1.3 dwinter 1036:
1.2 dwinter 1037: def getThumbAttribute(self,id,attr):
1038: if hasattr(self,id):
1039: return getattr(getattr(self,id),attr)
1040: else:
1041: if attr=='title':
1042: return "<b>Missing Image:%s</b>" % id
1043:
1044: def getThumbFunction(self,id,attr):
1045: #return "DUMP"
1046: if hasattr(self,id):
1047: return getattr(getattr(self,id),attr)()
1048:
1049:
1.1 dwinter 1050: def xmlinput(self,url):
1.70 casties 1051: """Anzeige von ausgewaehlten thumbs"""
1.1 dwinter 1052: #return url
1.5 dwinter 1053:
1054: url=urllib.unquote(url)
1.1 dwinter 1055: xmldoc=urllib.urlopen(url).read()
1.39 dwinter 1056: #return xmldoc
1.64 dwinter 1057: try:
1058: dom=xml.dom.minidom.parseString(xmldoc)
1.31 dwinter 1059: except:
1.77 dwinter 1060: return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
1061:
1.64 dwinter 1062: images=dom.getElementsByTagName('image')
1.31 dwinter 1063:
1.1 dwinter 1064: rc=[]
1.64 dwinter 1065: fnIds={}
1.1 dwinter 1066: for image in images:
1.64 dwinter 1067: imagename=image.getElementsByTagName('imagename')[0]
1.77 dwinter 1068:
1.39 dwinter 1069:
1070:
1.64 dwinter 1071:
1072: idnr=image.getElementsByTagName('idnr')[0]
1073: id=getText(idnr.childNodes)
1074: try:
1.72 dwinter 1075: numberOfPages=image.getElementsByTagName('numberOfPages')[0]
1.64 dwinter 1076: except:
1.72 dwinter 1077: numberOfPages=None
1078:
1079: if numberOfPages:
1080: nopT=getText(numberOfPages.childNodes)
1081: try:
1082: nop=int(nopT)
1083: except:
1084: nop=0
1085: else:
1086: nop=0
1087:
1.39 dwinter 1088: texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
1089: for text in texts:
1090: if not text=="":
1.77 dwinter 1091: text=self.getImageByName(text,onlyName="yes")
1.64 dwinter 1092: try:
1093: rc.append((str(text),id,nop))
1094: fnIds[str(text)]=(id,nop)
1095: except:
1096: rc.append((repr(text),id,nop))
1097: fnIds[repr(text)]=(id,nop)
1.39 dwinter 1098:
1.37 dwinter 1099:
1.2 dwinter 1100: rc.sort()
1.1 dwinter 1101: self.REQUEST.SESSION['filenames']=rc
1.64 dwinter 1102: self.REQUEST.SESSION['filenamesIds']=fnIds
1103:
1.72 dwinter 1104: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1105:
1106: if overview:
1107: return overview[0][1]()
1108: else:
1109: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1110: return pt()
1111:
1.36 dwinter 1112: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1.1 dwinter 1113: return pt()
1114:
1.44 dwinter 1115: def recalculateMetaLink(self):
1.3 dwinter 1116: """recalculate the metadata"""
1117:
1118: for entryid in self.__dict__:
1119: entry=getattr(self,entryid)
1120: if hasattr(entry,'meta_type'):
1121:
1122: if entry.meta_type=="ImageDigilib":
1123: entry.meta=entry.meta_default(entry.getId())
1124: return "OK"
1.1 dwinter 1125:
1126: def addImage(self):
1127: """Add an Image"""
1.64 dwinter 1128:
1.36 dwinter 1129: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImage.zpt')).__of__(self)
1.1 dwinter 1130: return pt()
1131:
1.66 dwinter 1132: def addImage2(self,fileupload,fileName=None,meta=None,use_default=None,RESPONSE=None):
1.1 dwinter 1133: """Add"""
1.41 dwinter 1134:
1.1 dwinter 1135: #print "FU",fileupload
1.3 dwinter 1136:
1137: if use_default:
1138: try:
1139: meta=self.meta_default(fileupload.filename)
1140: except:
1141: meta=None
1.7 dwinter 1142: else:
1143: meta=None
1.66 dwinter 1144:
1.74 casties 1145: fn=fileName or splitPath(fileupload.filename)
1.64 dwinter 1146:
1.30 dwinter 1147: manage_AddImageDigilib(self,fn,fileupload,meta=meta)
1.66 dwinter 1148:
1149: if RESPONSE:
1150: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
1.1 dwinter 1151: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 1152:
1153: def ImportFiles2(self,RESPONSE=None):
1154: """Import the existing files of a folder"""
1155: files=os.listdir(self.ImageStoragePath)
1156: ret=""
1157: #print self.__dict__
1158: for file in files:
1159: if not file[0]==".":
1160: if self.__dict__.has_key(file):
1161:
1162: ret=ret+"<br>"+file+" already exists!"
1163: else:
1164: ret=ret+"<br>"+file+" created!"
1165: meta=self.meta_default(file)
1166: newObj=ImageDigilib(file,file,meta)
1167: #print newObj,file
1168: #print newObj
1169: self._setObject(file,newObj)
1170: #print ret
1.36 dwinter 1171: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1.3 dwinter 1172: #print self.ImageStoragePath
1.35 dwinter 1173:
1.64 dwinter 1174: #scale thumb
1175:
1.89 dwinter 1176: self.scaleThumbs()
1.35 dwinter 1177:
1.64 dwinter 1178: #scale standard
1.35 dwinter 1179:
1.89 dwinter 1180: self.scaleWorkingVersions()
1.64 dwinter 1181:
1.31 dwinter 1182:
1.3 dwinter 1183: RESPONSE.redirect('manage_main')
1.50 dwinter 1184:
1.60 dwinter 1185: ## def importStructure(self,path):
1186: ## """import"""
1187: ## splitted=os.path.split(path)
1188: ## if os.path.isDir(path) and (len(splitted[1])>0) and (splitted[1][0]=="."):
1189: ## manage_AddImageCollection(self,splitted[1],splitted[1],path,self.ImageViewerPath,self.defaultMetaString,RESPONSE=None)
1.50 dwinter 1190:
1.60 dwinter 1191: ## obj=getattr(self,splitted[1])
1192: ## obj.ImportFiles()
1.50 dwinter 1193:
1194: def ImportStructure(self,RESPONSE=None):
1195: """Import the existing files of a folder"""
1196: files=os.listdir(self.ImageStoragePath)
1197: ret=""
1198: #print self.__dict__
1199:
1200:
1201: for file in files:
1.51 dwinter 1202:
1.50 dwinter 1203: if os.path.isdir(os.path.join(self.ImageStoragePath,file)):
1.51 dwinter 1204: imageStoragePath=os.path.join(self.ImageStoragePath,file)
1205: imageViewerPath=os.path.join(self.ImageViewerPath,file)
1206: manage_AddImageCollection(self,file,file,imageStoragePath,imageViewerPath,self.defaultMetaString)
1.50 dwinter 1207:
1208: obj=getattr(self,file)
1209: obj.ImportStructure()
1210: else:
1211: if not file[0]==".":
1212: if self.__dict__.has_key(file):
1213:
1214: ret=ret+"<br>"+file+" already exists!"
1215: else:
1216: ret=ret+"<br>"+file+" created!"
1217: newObj=ImageDigilib(file,file)
1218: #print newObj,file
1219: #print newObj
1220: try:
1221: self._setObject(file,newObj)
1222: except:
1223: """nothing yet"""
1224: #print ret
1225: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1226: #print self.ImageStoragePath
1227:
1.64 dwinter 1228: #scale thumb
1229:
1.89 dwinter 1230: self.scaleThumbs()
1.50 dwinter 1231:
1.64 dwinter 1232: #scale standard
1.50 dwinter 1233:
1.89 dwinter 1234: self.scaleWorkingVersions()
1.64 dwinter 1235:
1236: if RESPONSE:
1237: RESPONSE.redirect('manage_main')
1.1 dwinter 1238:
1239: def ImportFiles(self,RESPONSE=None):
1240: """Import the existing files of a folder"""
1241: files=os.listdir(self.ImageStoragePath)
1242: ret=""
1243: #print self.__dict__
1244: for file in files:
1.2 dwinter 1245: if not file[0]==".":
1246: if self.__dict__.has_key(file):
1247:
1248: ret=ret+"<br>"+file+" already exists!"
1249: else:
1250: ret=ret+"<br>"+file+" created!"
1251: newObj=ImageDigilib(file,file)
1252: #print newObj,file
1253: #print newObj
1.4 dwinter 1254: try:
1255: self._setObject(file,newObj)
1256: except:
1257: """nothing yet"""
1.1 dwinter 1258: #print ret
1.36 dwinter 1259: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1.3 dwinter 1260: #print self.ImageStoragePath
1.35 dwinter 1261:
1.64 dwinter 1262: #scale thumb
1263:
1.89 dwinter 1264: self.scaleThumbs()
1.35 dwinter 1265:
1.64 dwinter 1266: #scale standard
1.35 dwinter 1267:
1.64 dwinter 1268: self.scaleWorkingVersions()
1269:
1270: if RESPONSE:
1271: RESPONSE.redirect('manage_main')
1.1 dwinter 1272:
1273: def ImageCollection_config(self):
1274: """Nothing yet"""
1.3 dwinter 1275: if not hasattr(self,'defaultMetaString'):
1276: self.defaultMetaString=""
1277:
1.36 dwinter 1278: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)
1.1 dwinter 1279: return pt()
1280:
1.69 dwinter 1281: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,serverPath,RESPONSE=None):
1.1 dwinter 1282: """Change"""
1283: self.title=title
1284: self.ImageStoragePath=ImageStoragePath
1285: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 1286: self.defaultMetaString=defaultMetaString
1.69 dwinter 1287: self.serverPath=serverPath
1.3 dwinter 1288:
1.1 dwinter 1289: if RESPONSE is not None:
1290: RESPONSE.redirect('manage_main')
1291:
1292: def show_selected_thumbs(self):
1293: #ids=[]
1.47 dwinter 1294: try:
1295: return self.REQUEST.SESSION['filenames']
1.64 dwinter 1296: except:
1297: return None
1.1 dwinter 1298: def show_thumbs(self):
1299: ids=[]
1300: for entry in self.__dict__:
1301: #print entry
1302: if hasattr(getattr(self,entry),'thumb'):
1303: ids.append(entry)
1.2 dwinter 1304:
1.1 dwinter 1305: #print ids
1.2 dwinter 1306: ids.sort()
1.1 dwinter 1307: return ids
1308:
1.70 casties 1309: def firstSets(self,selected=None,text='first set'):
1.8 dwinter 1310: ids=self.show_thumbs()
1.13 dwinter 1311: if ids:
1312: if selected:
1.70 casties 1313: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[0]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1314: else:
1.70 casties 1315: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[0]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1316:
1.70 casties 1317: def lastSets(self,selected=None,text='last set'):
1.8 dwinter 1318: ids=self.show_thumbs()
1.13 dwinter 1319: if ids:
1320: colRows=self.getColTimesRow()
1321:
1322: if colRows[1]:
1323: nr=len(ids)-colRows[0]*colRows[1]
1324: else:
1325: nr=0
1326:
1327: if nr<0:
1328: nr=0
1329:
1330: if selected:
1.70 casties 1331: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1332: else:
1.70 casties 1333: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1334:
1335:
1336:
1.70 casties 1337: def nextSets(self,selected=None,text='next set'):
1.8 dwinter 1338: """show nextimage"""
1339: ids=self.show_thumbs()
1340: colRows=self.getColTimesRow()
1.70 casties 1341: pagesize = colRows[0] * colRows[1]
1.13 dwinter 1342: if ids:
1343: if colRows[1]:
1344: if self.REQUEST.SESSION.has_key("filename"):
1345: filename=self.REQUEST.SESSION["filename"]
1346: try:
1.70 casties 1347: nr=ids.index(filename)+pagesize
1.13 dwinter 1348: if nr>=len(ids):
1.70 casties 1349: return ""
1.13 dwinter 1350: except:
1.70 casties 1351: nr=pagesize
1.13 dwinter 1352: else:
1.70 casties 1353: nr = pagesize
1.8 dwinter 1354:
1.70 casties 1355: if nr>=len(ids)-1:
1.13 dwinter 1356: return ""
1.8 dwinter 1357: else:
1.13 dwinter 1358: if selected:
1.70 casties 1359: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1360: else:
1.70 casties 1361: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1362:
1.70 casties 1363: def prevSets(self,selected=None,text='previous sets'):
1.8 dwinter 1364:
1365: """show nextimage"""
1366: #return self.getId()
1367: ids=self.show_thumbs()
1368: colRows=self.getColTimesRow()
1.13 dwinter 1369: if ids:
1370: if colRows[1]:
1371: if self.REQUEST.SESSION.has_key("filename"):
1372: filename=self.REQUEST.SESSION["filename"]
1373: try:
1374: nr=ids.index(filename)-colRows[0]*colRows[1]
1375: if nr<0:
1376: nr=0
1377: except:
1378: nr=0
1379: else:
1380: nr=0
1.8 dwinter 1381: try:
1.13 dwinter 1382: num=ids.index(filename)
1.8 dwinter 1383: except:
1.13 dwinter 1384: num=0
1385:
1386: if num==0:
1387: return ""
1388: else:
1389: if selected:
1.70 casties 1390: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.13 dwinter 1391: else:
1.70 casties 1392: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">"+text+"</a>"
1.8 dwinter 1393: else:
1394: return ""
1.70 casties 1395:
1396:
1.50 dwinter 1397: def showFolders(self):
1398: """show subfolders"""
1399: ret=""
1400: link=""" <a target="_top" href="%s">%s</a><br>"""
1.24 dwinter 1401:
1.50 dwinter 1402: if self.aq_parent.meta_type=="ImageCollection":
1403: ret+=link%(self.aq_parent.absolute_url(), "back ("+self.aq_parent.title+")")
1404: ret+="<br>"
1405:
1.52 dwinter 1406: iCs=self.ZopeFind(self,obj_metatypes=["ImageCollection"])
1.50 dwinter 1407: if not iCs:
1408: return ret
1409: else:
1410:
1411: link=""" <a target="_top" href="%s">%s</a><br>"""
1412: for iC in iCs:
1413: ret+=link%(iC[1].absolute_url(),iC[0])
1414: ret+="<br>"
1415: return ret
1.70 casties 1416:
1417:
1418: def getSetSelector(self, selected=None):
1419: """returns the HTML select element for the sets"""
1420: actualNr=0
1421: ids=self.show_thumbs()
1422: colRows=self.getColTimesRow()
1423: pagesize = colRows[0]*colRows[1]
1424: numpages = int(len(ids)/pagesize)
1425: if not ((len(ids) % pagesize)==0):
1426: numpages+=1
1427:
1428: ret=""
1429: if numpages>1:
1430: if selected:
1431: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""/selection?filename='+this.options[this.selectedIndex].value">"""
1432: else:
1433: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""?filename='+this.options[this.selectedIndex].value">"""
1434:
1435: for i in range(numpages):
1436: try:
1437: nr=ids.index(self.REQUEST.SESSION['filename'])
1438: except:
1439: nr=0
1440: k=i * pagesize
1441: if (k <= nr) and (nr < i*(pagesize+1)):
1442: actualNr=i
1443: ret+="""<option value="%s" selected>%i</option>"""%(ids[k], i + 1)
1444: else:
1445: ret+="""<option value="%s">%i</option>"""%(ids[k], i + 1)
1446:
1447: ret+="</select>"
1448:
1449: return ret
1450:
1451: def isAllSets(self, showall=None):
1452: """returns if there are any sets"""
1453: ids=self.show_thumbs()
1454: colRows=self.getColTimesRow(showall=showall)
1455: pagesize = colRows[0]*colRows[1]
1456: return (len(ids) <= pagesize)
1457:
1458:
1459: def allSets(self, texton='show all', textoff='show groups'):
1460: """returns HTML to toggle 'show all'"""
1461: if self.isAllSets(showall='No'):
1462: return ""
1463: showall=self.REQUEST.SESSION.get('showall','no')
1464: if showall=='no':
1465: ret='<a href="'+self.REQUEST['URL1']+'?showall=yes" target="_top">'+texton+'</a>'
1466: else:
1467: ret='<a href="'+self.REQUEST['URL1']+'?showall=no" target="_top">'+textoff+'</a>'
1468: return ret
1469:
1470:
1.24 dwinter 1471: def showRuler(self,selected=None):
1472: """show ruler"""
1.70 casties 1473: showall=self.REQUEST.SESSION.get('showall','no')
1.28 dwinter 1474: ids=self.show_thumbs()
1475: if len(ids)==0:
1476: return "<b>No entries</b>"
1477:
1.24 dwinter 1478: if showall=='no':
1.64 dwinter 1479: actualNr=0
1.24 dwinter 1480: ids=self.show_thumbs()
1481: colRows=self.getColTimesRow()
1482: num=int(len(ids)/(colRows[0]*colRows[1]))
1.28 dwinter 1483: if not (operator.mod(len(ids),colRows[0]*colRows[1])==0):
1484: num+=1
1.24 dwinter 1485: a=colRows[0]*colRows[1]
1.26 dwinter 1486: #print num,num+1
1.64 dwinter 1487:
1.28 dwinter 1488: if num>1:
1.24 dwinter 1489:
1.49 dwinter 1490: ret=""
1491: if selected:
1.64 dwinter 1492: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""/selection?filename='+this.options[this.selectedIndex].value">"""
1.49 dwinter 1493: else:
1.64 dwinter 1494: ret+="""<select onChange="parent.location.href='"""+self.REQUEST['URL1']+"""?filename='+this.options[this.selectedIndex].value">"""
1495: for i in range(num):
1496: try:
1497: nr=ids.index(self.REQUEST.SESSION['filename'])
1498: except:
1499: nr=0
1500: k=i*a
1501: if (k <= nr) and (nr < i*(a+1)):
1502: actualNr=i
1503: ret+="""<option value="%s" selected>%i</option>"""%(ids[k],i)
1504: else:
1505: ret+="""<option value="%s">%i</option>"""%(ids[k],i)
1506: ret+="</select>"
1.70 casties 1507: anf="<b>Show thumbnail group no: </b></br>"
1.64 dwinter 1508:
1509:
1510: try:
1511: if selected:
1.49 dwinter 1512: href=self.REQUEST['URL1']+"/selection?filename="+ids[(actualNr-1)*a]
1513: else:
1514: href=self.REQUEST['URL1']+"?filename="+ids[int((actualNr-1)*a)]
1.64 dwinter 1515:
1516: anf+="""<a href="%s" target="_top">%s</a> """%(href,"prev")
1517: except:
1518: pass
1519: ret=anf+ret
1520:
1521: try:
1522:
1523: if selected:
1.49 dwinter 1524: href=self.REQUEST['URL1']+"/selection?filename="+ids[(actualNr+1)*a]
1525: else:
1526: href=self.REQUEST['URL1']+"?filename="+ids[int((actualNr+1)*a)]
1.64 dwinter 1527:
1528: end="""<a href="%s" target="_top">%s</a> """%(href,"next")
1529: except:
1530: end=""
1531: ret=ret+end
1.24 dwinter 1532:
1.49 dwinter 1533:
1534: #for i in range(num):
1535: #
1536: # ret +="<br/>" #alle 10 linebreak einfuegen
1537: # k=i*a
1538: # if selected:
1539: # href=self.REQUEST['URL1']+"/selection?filename="+ids[k]
1540: # else:
1541: # href=self.REQUEST['URL1']+"?filename="+ids[int(k)]
1.64 dwinter 1542: #
1.49 dwinter 1543: # ret+="""<a href="%s" target="_top">%i</a> """%(href,i)
1.24 dwinter 1544:
1545: else:
1546: ret=""
1547: ret+="""<a href="%s?showall=yes" target="_top">show all</a> """%self.REQUEST['URL1']
1548: else:
1549: ret="""<a href="%s?showall=no" target="_top">show groups</a> """%self.REQUEST['URL1']
1550:
1551: return ret
1.70 casties 1552:
1.24 dwinter 1553:
1.2 dwinter 1554: def show_thumbs_selected_rows(self,numberOfColumns):
1555: """Ausgabe anzahl"""
1556: ids=self.show_selected_thumbs()
1.48 dwinter 1557:
1.47 dwinter 1558: if not ids:
1.64 dwinter 1559: return None
1.2 dwinter 1560: self.REQUEST.SESSION['ids']=ids
1561: number=int(len(ids)/numberOfColumns)+1
1562: self.REQUEST.SESSION['number']=range(number)
1563: return range(number+1)
1564:
1.8 dwinter 1565: def setColTimesRowForm(self):
1566: """form for matrix setting"""
1.36 dwinter 1567: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','selectColTimesRow.zpt')).__of__(self)
1.8 dwinter 1568: return pt()
1569:
1570: def setDone(self):
1571: """done"""
1572:
1.36 dwinter 1573: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changedColTimesRow.zpt')).__of__(self)
1.8 dwinter 1574: return pt()
1575:
1576: def setColTimesRow(self,cols,rows):
1577: """set coltimes row"""
1578: RESPONSE=self.REQUEST.RESPONSE
1.10 dwinter 1579: if not rows:
1.12 dwinter 1580: rows=None
1.11 dwinter 1581: if rows=="":
1.12 dwinter 1582: rows=None
1583:
1584: if rows:
1585: RESPONSE.setCookie("ImageViewerRows",rows)
1.8 dwinter 1586: RESPONSE.setCookie("ImageViewerCols",cols)
1587:
1588: RESPONSE.redirect(self.REQUEST['URL1']+"/setDone")
1.70 casties 1589:
1590: def setDefaultColTimesRow(self, cols, rows):
1591: """sets default columns and rows"""
1592: self.defaultcols = cols
1593: self.defaultrows = rows
1.71 dwinter 1594:
1.24 dwinter 1595: def getColTimesRow(self,showall='No'):
1.12 dwinter 1596: """coltimesrow"""
1.8 dwinter 1597:
1598: REQUEST=self.REQUEST
1599: """matrix"""
1600: if REQUEST.cookies.has_key("ImageViewerRows"):
1601: try:
1602: rows=int(REQUEST.cookies["ImageViewerRows"])
1603: except:
1.71 dwinter 1604: rows=getattr(self,'defaultrows',6)
1.8 dwinter 1605: else:
1.71 dwinter 1606: rows=getattr(self,'defaultrows',6)
1.8 dwinter 1607:
1608: if REQUEST.cookies.has_key("ImageViewerCols"):
1.12 dwinter 1609: #print "COLS",REQUEST.cookies["ImageViewerCols"]
1.8 dwinter 1610: cols=int(REQUEST.cookies["ImageViewerCols"])
1611: else:
1.71 dwinter 1612: cols=getattr(self,'defaultcols',3)
1613:
1.12 dwinter 1614:
1615: idsnumber=len(self.show_thumbs())
1616: if rows:
1617: if cols*rows >idsnumber:
1618: rows=int(idsnumber/cols)+1
1.23 dwinter 1619:
1.70 casties 1620: if showall is None:
1621: showall=self.REQUEST.SESSION.get('showall', 'No')
1.24 dwinter 1622: if showall=='yes':
1623: rows=int(idsnumber/cols)+1
1624:
1.8 dwinter 1625: return (cols,rows)
1626:
1627:
1.62 dwinter 1628: def show_thumbs_rows(self,numberOfColumns,numberOfRows=None,startId=None,showall="No"):
1.2 dwinter 1629: """Ausgabe anzahl"""
1.8 dwinter 1630:
1631: idsAll=self.show_thumbs()
1.70 casties 1632: if len(idsAll)==0: #keine Eintraege
1.28 dwinter 1633: return 0
1.62 dwinter 1634: if self.REQUEST.SESSION.has_key("filename") and not (showall=="yes"):
1.8 dwinter 1635: filename=self.REQUEST.SESSION["filename"]
1.46 dwinter 1636: filename=self.getImageByName(filename,onlyName="yes")
1.23 dwinter 1637:
1.8 dwinter 1638: try:
1639: startId=filename
1.23 dwinter 1640: if startId=="":
1641: startId=idsAll[0][0:]
1.8 dwinter 1642: except:
1.23 dwinter 1643: startId=idsAll[0][0:]
1.8 dwinter 1644: else:
1.23 dwinter 1645: startId=idsAll[0][0:]
1.8 dwinter 1646:
1647:
1.23 dwinter 1648:
1.8 dwinter 1649:
1650: if numberOfRows:
1.23 dwinter 1651:
1652: startPic=idsAll.index(startId)
1.12 dwinter 1653: try:
1.23 dwinter 1654:
1.12 dwinter 1655: startPic=idsAll.index(startId)
1656: endPic=startPic+numberOfColumns*numberOfRows
1657: ids=idsAll[startPic:endPic]
1658: except:
1659: ids=idsAll
1.8 dwinter 1660: else:
1.23 dwinter 1661:
1.8 dwinter 1662: ids=idsAll
1663:
1.23 dwinter 1664:
1.2 dwinter 1665: self.REQUEST.SESSION['ids']=ids
1666: number=int(len(ids)/numberOfColumns)+1
1.23 dwinter 1667:
1.2 dwinter 1668: return range(number+1)
1669:
1670: def show_thumbs_columns(self,row,numberOfColumns):
1671: """Ausgabe einer Liste der Reihe"""
1672: ids=self.REQUEST.SESSION['ids']
1673: max=len(ids)
1674: if (row*numberOfColumns)<max:
1675: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
1676: else:
1677: return ids[(row-1)*numberOfColumns:]
1.8 dwinter 1678:
1.2 dwinter 1679: def thumblistSelected_old(self):
1680: """main template collection"""
1.36 dwinter 1681: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected.zpt')).__of__(self)
1.2 dwinter 1682: return pt()
1683:
1.1 dwinter 1684: def thumblistSelected(self):
1685: """main template collection"""
1.36 dwinter 1686: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected2.zpt')).__of__(self)
1.2 dwinter 1687: return pt()
1688:
1689: def thumblist_old(self):
1690: """main template collection"""
1.36 dwinter 1691: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self)
1.1 dwinter 1692: return pt()
1693:
1694: def thumblist(self):
1695: """main template collection"""
1.36 dwinter 1696: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb2.zpt')).__of__(self)
1.1 dwinter 1697: return pt()
1698:
1.23 dwinter 1699: def thumblistNewWindow(self):
1700: """Thumbs mit clik neues Fenster oeffnen"""
1.36 dwinter 1701: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbNewWindow.zpt')).__of__(self)
1.23 dwinter 1702: return pt()
1703:
1704:
1.7 dwinter 1705: def navig_selected_html(self):
1706: """navigation"""
1707: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.36 dwinter 1708: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
1.77 dwinter 1709:
1710: return pt().data
1.7 dwinter 1711:
1.1 dwinter 1712: def navig_html(self):
1713: """navigation"""
1.7 dwinter 1714: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.38 dwinter 1715:
1.36 dwinter 1716: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation.zpt')).__of__(self)
1.1 dwinter 1717: return pt()
1718:
1719:
1.7 dwinter 1720: def selection(self):
1721: """show only selected"""
1722: if self.REQUEST.has_key('filename'):
1723: filen=self.REQUEST['filename']
1724: else:
1725: filen=""
1726: self.REQUEST.SESSION['filename']=filen
1.36 dwinter 1727: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected2.zpt')).__of__(self)
1.7 dwinter 1728: return pt()
1.46 dwinter 1729:
1730: def getImageByName(self,filename,onlyName=None):
1731: """get filename"""
1.87 dwinter 1732: #print repr(filename)
1.77 dwinter 1733: #FIXME: umlaute in filename
1734: fn=getattr(self,repr(filename),None)
1.46 dwinter 1735: if not fn:
1736: filenameM=filename.split(".")[0]
1.80 dwinter 1737:
1.46 dwinter 1738: founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
1.80 dwinter 1739:
1740:
1.46 dwinter 1741: for found in founds:
1742: foundM=found[0].split(".")[0]
1.80 dwinter 1743:
1.46 dwinter 1744: if filenameM.lower()==foundM.lower():
1745: if onlyName:
1746: return found[0]
1747: else:
1.80 dwinter 1748: return found[1]
1749: #HACK teste noch ob am ende des filenames eventuell ein "_" und loesche das.
1750: if foundM[-1]=="_":
1751: foundM=foundM[0:-1]
1752:
1753: if filenameM.lower()==foundM.lower():
1754: if onlyName:
1755: return found[0]
1756: else:
1757: return found[1]
1758:
1.46 dwinter 1759: if onlyName:
1760: return filename
1761: else:
1762: return fn
1.64 dwinter 1763:
1764:
1765: security.declareProtected('View','index_html')
1.76 dwinter 1766: def index_html(self,fn=None,generic='No'):
1.1 dwinter 1767: """main template collection"""
1.77 dwinter 1768:
1.58 dwinter 1769: if fn:
1770: ret=[]
1771:
1772: if type(fn) is ListType:
1773: """experimentell mehr als ein filename"""
1774: for filename in fn:
1.59 dwinter 1775: if not (filename == ""):
1776: ret.append((filename,'',1))
1.58 dwinter 1777: else:
1778: ret.append((fn,'',1))
1779:
1780: self.REQUEST.SESSION['filenames']=ret
1781: #self.REQUEST.SESSION['filenamesIds']=fnIds
1.72 dwinter 1782:
1783: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1784:
1.76 dwinter 1785:
1786: if overview and (generic =='No'):
1.72 dwinter 1787: return overview[0][1]()
1788: else:
1789: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1790: return pt()
1.58 dwinter 1791:
1.1 dwinter 1792: if self.REQUEST.has_key('filename'):
1793: filen=self.REQUEST['filename']
1794: else:
1795: filen=""
1.24 dwinter 1796:
1.38 dwinter 1797: self.REQUEST.SESSION['filename']=filen[0:]
1798:
1.25 dwinter 1799: if self.REQUEST.has_key('showall'):
1800:
1801: self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
1802: else:
1803: self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
1804:
1.60 dwinter 1805:
1806: overview=self.ZopeFind(self,obj_ids=['overview.html'])
1.76 dwinter 1807: if overview and (generic == 'No'):
1.60 dwinter 1808: return overview[0][1]()
1.70 casties 1809: elif hasattr(self,'templates'):
1810: pt=self.templates.imgcoll_main.__of__(self)
1811: return pt()
1.60 dwinter 1812: else:
1813: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
1814: return pt()
1.70 casties 1815:
1.77 dwinter 1816: def navigation(self):
1817: """generate navigation bar"""
1818:
1819: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_fragment')).__of__(self)
1820: return pt()
1.1 dwinter 1821:
1822: def manage_AddImageCollectionForm(self):
1823: """Nothing yet"""
1.36 dwinter 1824: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)
1.1 dwinter 1825: return pt()
1826:
1.3 dwinter 1827: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 1828: """Add ImageCollection"""
1.3 dwinter 1829: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.19 dwinter 1830: self._setObject(id,newObj)
1831:
1832: if RESPONSE is not None:
1833: RESPONSE.redirect('manage_main')
1834:
1835:
1.77 dwinter 1836:
1.60 dwinter 1837: class ImageCollectionMD(ImageCollection,ZSQLExtendFolder):
1838: """Imageviewer and Metadata"""
1839: meta_type="ImageCollection MD"
1.61 dwinter 1840: #scalerPath="http://127.0.0.1:18080/digitallibrary/servlet/Scaler/?fn="
1841: scalerPath="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="
1.68 dwinter 1842: rightsQueryDefault="SELECT accessibility from vision_main where id_image=(SELECT id from vision_images where filename ~ '%s*' )"
1843: rightsQueryFieldDefault="accessibility"
1844:
1.60 dwinter 1845: manage_options=ImageCollection.manage_options+(
1846: {'label':'ZSQLExtend','action':'changeZSQLExtendForm'},
1.68 dwinter 1847: {'label':'Change Rights Query','action':'changeRightsQueryForm'},
1.60 dwinter 1848: )
1849:
1.65 dwinter 1850: try:
1.77 dwinter 1851: changeZSQLExtendForm=ZSQLExtendFolder.changeZSQLExtendForm
1.63 dwinter 1852: except:
1.77 dwinter 1853: pass
1854:
1.82 dwinter 1855:
1856: def ImportFiles(self,RESPONSE=None):
1857: """Import the existing files of a folder"""
1858: files=os.listdir(self.ImageStoragePath)
1859: ret=""
1860: #print self.__dict__
1861: for file in files:
1862: if not file[0]==".":
1863: if self.__dict__.has_key(file):
1864:
1865: ret=ret+"<br>"+file+" already exists!"
1866: else:
1867: ret=ret+"<br>"+file+" created!"
1868: newObj=ImageDigilib(file,file)
1869: #print newObj,file
1870: #print newObj
1871: try:
1872: self._setObject(file,newObj)
1873: except:
1874: """nothing yet"""
1875:
1876:
1877: args={}
1878: args['_table']=self.imageCollectionConfig.getTable()
1879: args[self.imageCollectionConfig.getKey()]=file
1880:
1.83 dwinter 1881: if not self.ZSQLInlineSearch(args=args):
1882: self.ZSQLAdd(args=args)
1.82 dwinter 1883: #print ret
1884: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1885: #print self.ImageStoragePath
1886:
1887: #scale thumb
1888:
1889:
1.89 dwinter 1890: self.scaleThumbs()
1.82 dwinter 1891:
1892: #scale standard
1893:
1.89 dwinter 1894: self.scaleWorkingVersions()
1.82 dwinter 1895:
1.90 ! dwinter 1896: self.scaleToJpgs()
! 1897:
1.82 dwinter 1898: if RESPONSE:
1899: RESPONSE.redirect('manage_main')
1.77 dwinter 1900:
1901: def addImage(self):
1902: """Add an Image"""
1903:
1904: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImageMD.zpt')).__of__(self)
1905: return pt()
1906:
1.81 dwinter 1907: def addImage2(self,_fileupload,_fileName=None,_meta=None,_use_default=None,RESPONSE=None):
1.77 dwinter 1908: """Add"""
1909:
1910: filenameKey="filename"
1911: #print "FU",fileupload
1912:
1913: if _use_default:
1914: try:
1915: meta=self.meta_default(_fileupload.filename)
1916: except:
1917: meta=None
1918: else:
1919: meta=None
1920:
1921: fn=_fileName or splitPath(_fileupload.filename)
1922:
1923: manage_AddImageDigilib(self,fn,_fileupload,meta=meta)
1924:
1.81 dwinter 1925: args=self.REQUEST.form
1926: args[filenameKey]=fn
1.77 dwinter 1927:
1.81 dwinter 1928: self.ZSQLAdd(args=args)
1.77 dwinter 1929:
1.90 ! dwinter 1930: self.scaleThumbs()
! 1931: self.scaleWorkingVersions()
! 1932:
! 1933: getattr(self,fn).scaleToJpg()
1.77 dwinter 1934: if RESPONSE:
1935: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
1936: #return self.REQUEST['URL1']+'/'+fileupload.filename
1937:
1938: def navig_html(self):
1939: """navigation"""
1940: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1941:
1942: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigationMD.zpt')).__of__(self)
1943: return pt()
1944:
1945: def navig_selected_html(self):
1946: """navigation"""
1947: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1948: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selectedMD.zpt')).__of__(self)
1949:
1950: return pt()
1951:
1952: def decode(self,str):
1953: """decoder"""
1954: if not str:
1955: return ""
1956: if type(str) is StringType:
1957: try:
1958: return str.decode('utf-8')
1959: except:
1960: return str.decode('latin-1')
1961: else:
1962:
1963: return str
1964:
1965: def standardSearch(self):
1966: """standard search page"""
1967: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','standardSearchPage.zpt')).__of__(self)
1968: return pt()
1969:
1970: def searchResultXML(self):
1971: """xmlformat"""
1972: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','searchResultXML.zpt')).__of__(self)
1973: return pt()
1.63 dwinter 1974:
1.77 dwinter 1975: def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):
1976: """search"""
1977:
1.88 dwinter 1978: rc=[]
1979: fnIds={}
1980: for found in self.ZSQLInlineSearch(args=self.REQUEST.form):
1981: key=getattr(found,self.imageCollectionConfig.getKey())
1982: key=self.getImageByName(key,onlyName="yes")
1983: rc.append((key,'',0))
1984: fnIds[key]=('',0)
1985:
1986: rc.sort()
1987: self.REQUEST.SESSION['filenames']=rc
1988: self.REQUEST.SESSION['filenamesIds']=fnIds
1.87 dwinter 1989:
1.88 dwinter 1990: overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
1991:
1992: if overview:
1993: return overview[0][1]()
1.77 dwinter 1994: else:
1.88 dwinter 1995: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
1996: return pt()
1997:
1998: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
1999: return pt()
2000:
2001: #urlTmp=REQUEST['URL1']
2002:
2003: #url=urlTmp+'/searchResultXML?-table=%s&'%self.imageCollectionConfig.getTable()+REQUEST['QUERY_STRING']
2004:
2005: #if xml is None:
2006: # RESPONSE.redirect('xmlinput?url='+urllib.quote(url))
2007: #else:
2008: # RESPONSE.redirect(url)
1.77 dwinter 2009:
2010: def index_html(self,fn=None,selection=None,generic='No',REQUEST=None,RESPONSE=None):
2011: """main template collection"""
2012:
2013:
2014: mode=self.REQUEST.get('mode','view')
2015: if fn:
2016: ret=[]
2017:
2018: if type(fn) is ListType:
2019: """experimentell mehr als ein filename"""
2020: for filename in fn:
2021: if not (filename == ""):
2022: ret.append((filename,'',1))
2023: else:
2024: ret.append((fn,'',1))
2025:
2026: self.REQUEST.SESSION['filenames']=ret
2027: #self.REQUEST.SESSION['filenamesIds']=fnIds
2028:
1.79 dwinter 2029: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1.77 dwinter 2030:
2031:
2032: if overview and (generic =='No'):
2033: return overview[0][1]()
2034: else:
2035: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2036: return pt()
2037:
2038:
2039: # filename given, then only display this file
2040: if self.REQUEST.has_key('filename'):
2041:
2042: filen=self.REQUEST['filename']
2043: else:
2044: filen=""
2045:
2046:
2047: self.REQUEST.SESSION['filename']=filen[0:]
2048:
1.85 dwinter 2049: # if not self.REQUEST.SESSION['filename']=="":
2050: # url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()
2051: # if mode=="view":
2052: # self.REQUEST.RESPONSE.redirect(url)
2053: # elif mode=="download":
2054: # self.REQUEST.RESPONSE.redirect(url+"/download")
2055: #
1.77 dwinter 2056: if self.REQUEST.has_key('showall'):
2057:
2058: self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
2059: else:
2060: self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
2061:
2062:
2063: if selection:
2064: #selection i.e. selection already stored at self.REQUEST.SESSION['filenames']
1.79 dwinter 2065: overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
1.77 dwinter 2066:
2067:
2068: if overview and (generic =='No'):#
1.85 dwinter 2069:
1.77 dwinter 2070: return overview[0][1]()
2071: else:
2072: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2073: return pt()
2074:
2075:
2076: #no filename then show overview
2077:
1.79 dwinter 2078: overview=self.ZopeFind(self,obj_ids=['overview.html'])
1.77 dwinter 2079: if overview and (generic == 'No'):
2080:
2081:
2082: return overview[0][1]()
2083: elif hasattr(self,'templates'):
2084:
2085: pt=self.templates.imgcoll_mainMD.__of__(self)
2086: return pt()
2087: else:
2088:
2089: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overviewMD.zpt')).__of__(self)
2090: return pt()
2091:
2092: def nextImage(self,request,selected=None,returnFn=None):
2093: """show nextimage"""
2094:
2095: if not selected and self.REQUEST.has_key('fn'):
2096: imagename=self.REQUEST['fn'].split('/')[-1]
1.80 dwinter 2097:
2098: imagename=self.getImageByName(imagename,onlyName=True)
2099:
1.77 dwinter 2100: nr=self.getObjectPosition(imagename)
2101:
2102: objects=self.objectIds()
2103: if len(objects)==nr+1:
2104: return ""
2105: else:
2106: fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr+1]
2107: return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">next image</a>"
2108:
2109: def prevImage(self,request,selected=None,returnFn=None):
2110: """show nextimage"""
2111:
2112: if not selected and self.REQUEST.has_key('fn'):
2113: imagename=self.REQUEST['fn'].split('/')[-1]
1.80 dwinter 2114:
2115: imagename=self.getImageByName(imagename,onlyName=True)
2116:
1.77 dwinter 2117: nr=self.getObjectPosition(imagename)
2118:
2119: objects=self.objectIds()
2120: if nr==0:
2121: return ""
2122: else:
2123: fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr-1]
2124: return "<a href=\""+self.REQUEST['URL0']+"?fn="+fn+"\" target=\"_top\">prev image</a>"
2125:
2126:
1.68 dwinter 2127: def changeRightsQueryForm(self):
2128: """change Rights Query"""
2129: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeRightsQueryForm.zpt')).__of__(self)
2130: return pt()
2131:
2132: def changeRightsQuery(self,rightsQuery,rightsQueryField,RESPONSE=None):
2133: """change Rightsquery"""
2134:
2135: self.rightsQuery=rightsQuery
2136: self.rightsQueryField=rightsQueryField
2137:
2138: if RESPONSE is not None:
2139: RESPONSE.redirect('manage_main')
2140:
2141:
2142:
2143: def getRightsQuery(self):
2144: """get Query"""
2145: return getattr(self,'rightsQuery',self.rightsQueryDefault)
2146:
2147: def getRightsQueryField(self):
2148: """get Query Fiueld"""
2149: return getattr(self,'rightsQueryField',self.rightsQueryFieldDefault)
2150:
2151:
2152:
1.60 dwinter 2153: def setGenericSearchStringForm(self):
2154: """form setze generischen search string fuer MD"""
2155: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','setGenericSearchStringForm.zpt')).__of__(self)
2156: return pt()
2157:
2158: def setGenericSearchString(self,searchString):
2159: """setze generischen search string"""
2160: self.searchString=searchString
2161:
2162: def thumblistMD(self):
2163: """main template collection"""
2164: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbListMD.zpt')).__of__(self)
2165: return pt()
1.68 dwinter 2166:
2167: def getRights(self,id):
2168: """get the rights from a database"""
2169: #print self.rightsQuery%id
2170: results=self.ZSQLSimpleSearch(self.getRightsQuery()%id)
2171: if results:
2172: result = getattr(results[0],self.getRightsQueryField())
2173: else:
2174: result = ''
2175: return result
1.77 dwinter 2176:
2177: def xmlinput(self,url):
2178: """Anzeige von ausgewaehlten thumbs"""
2179: #return url
1.68 dwinter 2180:
1.77 dwinter 2181: url=urllib.unquote(url)
2182: xmldoc=urllib.urlopen(url).read()
2183: #return xmldoc
2184: try:
1.87 dwinter 2185: dom=NonvalidatingReader.parseUri(url)
2186:
1.77 dwinter 2187: except:
2188: return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
2189:
1.60 dwinter 2190:
1.89 dwinter 2191: imagenames=dom.xpath("//imagename")
1.77 dwinter 2192: rc=[]
2193: fnIds={}
1.89 dwinter 2194: for imagename in imagenames:
1.86 dwinter 2195:
1.89 dwinter 2196: #imagename=image.xpath('./imagename')[0]
2197: #print "im",imagename
1.87 dwinter 2198:
1.77 dwinter 2199:
2200:
1.89 dwinter 2201: idnr=imagename.xpath('../idnr')[0]
1.77 dwinter 2202: id=getText(idnr.childNodes)
2203: try:
1.89 dwinter 2204: numberOfPages=imagename.xpath('../numberOfPages')[0]
1.77 dwinter 2205: except:
2206: numberOfPages=None
2207:
2208: if numberOfPages:
2209: nopT=getText(numberOfPages.childNodes)
2210: try:
2211: nop=int(nopT)
2212: except:
2213: nop=0
2214: else:
2215: nop=0
2216:
2217: texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
2218: for text in texts:
2219: if not text=="":
1.89 dwinter 2220: #print "a"
1.77 dwinter 2221: text=self.getImageByName(text,onlyName="yes")
1.89 dwinter 2222: #print "b"
1.77 dwinter 2223: try:
2224: rc.append((str(text),id,nop))
2225: fnIds[str(text)]=(id,nop)
2226: except:
2227: rc.append((repr(text),id,nop))
2228: fnIds[repr(text)]=(id,nop)
2229:
1.89 dwinter 2230: #print "done"
1.77 dwinter 2231: rc.sort()
2232: self.REQUEST.SESSION['filenames']=rc
2233: self.REQUEST.SESSION['filenamesIds']=fnIds
1.87 dwinter 2234:
1.77 dwinter 2235: overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
2236:
2237: if overview:
2238: return overview[0][1]()
2239: else:
2240: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2241: return pt()
2242:
2243: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2244: return pt()
2245:
2246: def selection(self):
2247: """show only selected"""
2248: if self.REQUEST.has_key('filename'):
2249: filen=self.REQUEST['filename']
2250: else:
2251: filen=""
2252: self.REQUEST.SESSION['filename']=filen
2253: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
2254: return pt()
2255:
2256: def thumblistSelectedMD(self):
2257: """main template collection"""
2258: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselectedMD.zpt')).__of__(self)
2259: return pt()
2260:
1.60 dwinter 2261: def manage_AddImageCollectionMDForm(self):
2262: """Nothing yet"""
2263: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionFormMD.zpt')).__of__(self)
2264: return pt()
2265:
2266: def manage_AddImageCollectionMD(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
2267: """Add ImageCollection"""
2268: newObj=ImageCollectionMD(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
2269: self._setObject(id,newObj)
2270:
2271: if RESPONSE is not None:
2272: RESPONSE.redirect('manage_main')
2273:
2274:
2275:
2276:
1.19 dwinter 2277: class ImageCollectionIFrame(ImageCollection):
1.20 dwinter 2278: """Class fuer Collection set als IFrame"""
1.19 dwinter 2279:
2280: meta_type="ImageCollectionIFrame"
2281: label=ImageCollection.title
2282:
1.23 dwinter 2283: def getImageTag(self):
2284: """ hack : method needed by echo_content"""
2285: return ""
2286:
1.20 dwinter 2287: def rotate(self,angle,url,RESPONSE):
1.64 dwinter 2288: """rotate"""
2289:
2290: RESPONSE.redirect("javascript:document.domain='mpg.de';parent.iframe.right.rotation(%i)"%int(angle))
2291: RESPONSE.redirect(url)
1.19 dwinter 2292: def request(self):
2293: """request"""
2294: return self.REQUEST
2295:
2296: def index_html(self):
2297: """index"""
2298: if self.REQUEST.has_key('filename'):
2299: filen=self.REQUEST['filename']
2300: else:
2301: filen=""
2302: self.REQUEST.SESSION['filename']=filen
2303:
2304:
1.36 dwinter 2305: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameMain.zpt')).__of__(self)
1.19 dwinter 2306: return pt()
2307:
2308: def iframe_html(self):
2309: """iframe"""
2310: if self.REQUEST.has_key('filename'):
2311: filen=self.REQUEST['filename']
2312: else:
2313: filen=""
2314: self.REQUEST.response.setCookie('filename',filen)
1.36 dwinter 2315: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameOverview.zpt')).__of__(self)
1.19 dwinter 2316: return pt()
2317:
2318:
2319: def manage_AddImageCollectionIFrameForm(self):
2320: """Nothing yet"""
1.36 dwinter 2321: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionIFrameForm.zpt')).__of__(self)
1.19 dwinter 2322: return pt()
2323:
2324: def manage_AddImageCollectionIFrame(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
2325: """Add ImageCollection"""
2326: newObj=ImageCollectionIFrame(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 2327: self._setObject(id,newObj)
2328:
2329: if RESPONSE is not None:
2330: RESPONSE.redirect('manage_main')
2331:
2332:
1.61 dwinter 2333: class ImageZogiLib(ImageDigilib):
2334: """Anzeige Object fuer Bilder ausserhalb von collections
2335: ImageViewerPath und ImageStoragePath und wenn vorhanden Pfad zur Collection
2336: werden zusaetzlich abgespeichert
2337: """
1.65 dwinter 2338: #TODO: scaler path notwendig?
1.61 dwinter 2339: meta_type="ImageZogiLib"
2340:
2341: manage_options=ImageDigilib.manage_options+(
2342: {'label':'Main Config','action':'changeImageZogiLibForm'},
2343: )
2344:
2345: def __init__(self,id,fn,ImageViewerPath,ImageStoragePath,scalerPath,ImageCollectionPath=None,REQUEST=None):
2346: ImageDigilib.__init__(self,id,fn)
2347: self.ImageViewerPath=ImageViewerPath
2348: self.ImageStoragePath=ImageStoragePath
2349: self.ImageCollectionPath=ImageCollectionPath
2350: self.scalerPath=scalerPath
2351:
2352: def changeImageZogiLibForm(self):
2353: """change zogilib Form"""
2354: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeImageZogiLib.zpt')).__of__(self)
2355: return pt()
2356:
2357:
2358: def changeImageZogilib(fn,ImageViewerPath,ImageStoragePath,scalerPath,ImageCollectionPath,REQUEST=None):
2359: """Change it"""
2360: self.ImageViewerPath=ImageViewerPath
2361: self.ImageStoragePath=ImageStoragePath
2362: self.ImageCollectionPath=ImageColectionPath
2363: self.scalerPath=scalerPath
2364:
2365: def manage_AddImageZogiLib(self,id=None,ImageViewerPath=None,ImageStoragePath=None,fileUpload=None,ImageCollectionPath=None,scalerPath=None,libPath=None,caption=None,RESPONSE=None):
2366: """hinzufuegen eineis zogilibImage"""
2367:
2368: if libPath:
2369: splitted=libPath.split("?")
2370: urlSplit=splitted[0].split("/")
2371: params=cgi.parse_qs(splitted[1])
2372: #is LibPath a digilib path?
2373: if urlSplit[-1]=="Scaler":
2374: if type(params['fn']) is ListType:
2375: fnParam=params['fn'][0]
2376: else:
2377: fnParam=params['fn']
2378: fileNameSplit=os.path.split(fnParam)
2379: ImageViewerPath=fileNameSplit[0]
2380: id=fileNameSplit[1]
2381: scalerPath=splitted[0]+"?fn="
2382: else: #assume if not the path is a path to an ImageCollection
2383: if type(params['filename']) is ListType:
2384: id=params['filename'][0]
2385: else:
2386: id=params['filename']
2387:
2388: server=ServerProxy(splitted[0])
2389: ImageCollectionPath=libPath
2390: ImageViewerPath=server.getImageViewerPath()
2391: ImageStoragePath=server.getImageStoragePath()
2392: scalerPath=server.getScalerPath()
2393:
2394:
2395:
2396: if fileUpload:
2397: fn=splitPath(fileUpload.filename)
2398: else:
2399: fn=id
2400:
2401: newObj=ImageZogiLib(id,fn,ImageViewerPath,ImageStoragePath,scalerPath,ImageCollectionPath)
2402:
2403: self._setObject(id,newObj)
2404: getattr(self,id).caption=caption[0:]
2405: if fileUpload:
2406: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
2407:
2408: if RESPONSE is not None:
2409: RESPONSE.redirect('manage_main')
2410:
2411:
2412: def manage_AddImageZogiLibForm(self):
2413: """to be done"""
1.78 dwinter 2414:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>