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