Annotation of ImageArchive/ImageArchive.py, revision 1.36
1.1 dwinter 1: from OFS.Folder import Folder
2: from OFS.SimpleItem import SimpleItem
1.36 ! dwinter 3: from Globals import Persistent,package_home
1.1 dwinter 4: from Acquisition import Implicit
5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
6: from Products.PageTemplates.PageTemplate import PageTemplate
7: import re
8: import os
9: import os.path
10: import urllib
11: import xml.dom.minidom
1.27 dwinter 12: import operator
1.31 dwinter 13: import tempfile
14: import shutil
1.1 dwinter 15:
1.30 dwinter 16: def splitPath(str):
17: str2=str.replace("\\","/")
18: return os.path.split(str2)[1]
19:
1.1 dwinter 20: def getText(nodelist):
21:
22: rc = ""
23: for node in nodelist:
24:
25: if node.nodeType == node.TEXT_NODE:
26: rc = rc + node.data
27: return rc
28:
29:
1.6 dwinter 30: class ImageDigilib(Folder,Persistent,Implicit):
1.1 dwinter 31: """Anzeige object fuer digilib"""
32: meta_type="ImageDigilib"
33:
1.6 dwinter 34: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
35:
36: manage_options = Folder.manage_options+(
37:
38: {'label':'Add Metadata','action':'addMetaObjectForm'},
39:
40: )
41:
42: def addMetaObject(self,id,RESPONSE=None):
43: """Add an MetaObject"""
44: objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
45:
46: request=self.REQUEST
47: objectCreate=objectType.createObjectManager(id,request)
1.24 dwinter 48:
1.6 dwinter 49: self._setObject(id,objectCreate)
50:
51: objectCreate.propertysheets.meta.manage_editProperties(request)
52:
53: if RESPONSE is not None:
54: RESPONSE.redirect('manage_main')
55:
56:
57:
58:
59: def addMetaObjectForm(self):
60: """Add Form"""
1.36 ! dwinter 61: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addMetaObject.zpt')).__of__(self)
1.6 dwinter 62: return pt()
63:
64:
1.3 dwinter 65: def __init__(self,id,filename,meta=None):
1.1 dwinter 66: self.id=id
67: self.title=filename
68: self.filename=filename
1.3 dwinter 69: self.meta=meta
1.1 dwinter 70:
1.3 dwinter 71: def getMeta(self):
72: """ausgabe der metadaten"""
73: return self.meta
74:
1.1 dwinter 75: def uploadImage(self,fileupload,path_name):
76: """upload an Image from an Requast"""
77: #path_name=self.ImageStoragePath
1.30 dwinter 78: fn=splitPath(fileupload.filename)
1.29 dwinter 79: filename=path_name+"/"+fn
1.1 dwinter 80: filedata=fileupload.read()
81: f=open(filename,"w")
82: f.write(filedata)
83: f.close()
1.23 dwinter 84: try:
85: os.chmod(filename,0644)
86: except:
87: """hack"""
1.35 dwinter 88: #scale thumb
89:
90: self.scaleThumbs()
91:
92: #scale standard
1.23 dwinter 93:
1.35 dwinter 94: self.scaleWorkingVersions()
1.3 dwinter 95:
1.35 dwinter 96:
1.36 ! dwinter 97:
1.35 dwinter 98: def downloadWorkingVersion(self):
99: """download working version (2000 pixel)"""
100:
101: return self.download(fmt="&dw=2000&dh=2000",suffix=".jpg")
1.7 dwinter 102:
1.35 dwinter 103: def download(self,fmt="&mo=rawfile,hires",suffix=None):
1.1 dwinter 104: """download"""
1.35 dwinter 105: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+fmt
106:
1.31 dwinter 107: if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(self.filename):
108: filename=self.REQUEST.SESSION['filenamesIds'][self.filename][0]+"_"+self.filename
109: else:
110: filename=self.filename
1.35 dwinter 111:
112: if suffix:
113: filename=os.path.splitext(filename)[0]+suffix
1.31 dwinter 114:
115: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%filename)
116: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
117: image=urllib.urlopen(path).read()
118: self.REQUEST.RESPONSE.write(image)
119: self.REQUEST.RESPONSE.close()
120: #return self.REQUEST.RESPONSE.redirect(path)
1.36 ! dwinter 121:
! 122: def updateImageForm(self):
! 123: """form"""
! 124: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','upDateImageForm.zpt')).__of__(self)
! 125: return pt()
! 126:
! 127: def updateImage(self,file,RESPONSE):
! 128: """lade neues Version des Bildes"""
! 129: #teste ob Dokumenten ordner schon vorhanden
! 130: imagePath=os.path.join(self.ImageStoragePath,self.getId())
! 131: path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
! 132: print "path",path
! 133: if not os.path.exists(path):
! 134: os.mkdir(path,0775)
! 135: os.chmod(path,0775)
! 136:
! 137: versionNumber=getattr(self,'versionNumber',0)+1
! 138:
! 139: #teste ob version schon existiert
! 140:
! 141: while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))):
! 142: versionNumber+=1
! 143:
! 144: #kopieren der bestehenden Version in den Versions ordner.
! 145: imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))
! 146: os.rename(imagePath,imageNewPath)
! 147:
! 148: #lesen des upload files und schreiben
! 149: filedata=file.read()
! 150: f=open(imagePath,"w")
! 151: f.write(filedata)
! 152: f.close()
! 153: try:
! 154: os.chmod(imagePath,0664)
! 155: except:
! 156: """hack"""
! 157: #scale thumb
! 158:
! 159: self.scaleThumbs()
! 160:
! 161: #scale standard
! 162:
! 163: self.scaleWorkingVersions()
! 164:
! 165: if RESPONSE:
! 166: RESPONSE.redirect(self.absolute_url())
! 167:
! 168: return "done"
! 169:
1.1 dwinter 170: def thumb(self):
171: """show thumb"""
1.3 dwinter 172: thumbname=os.path.splitext(self.filename)[0]+".jpg"
173: ## if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname):
174: ## image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:18080/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150&mo=lores").read()
175: ## f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+thumbname,"w")
176: ## f.write(image)
177: ## f.close()
178: ## os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
1.1 dwinter 179:
1.8 dwinter 180: #DEVEL:take nausikaa for server solution
1.1 dwinter 181:
1.35 dwinter 182: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]+"&dw=100&dh=100&mo=lores"
1.8 dwinter 183: #path="/mpiwg/online/"+self.ImageViewerPath+"/"+thumbname
1.14 dwinter 184: self.REQUEST.SESSION['string']="<img border=\"0\" src=\"%s\">"% path
1.36 ! dwinter 185: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb.zpt')).__of__(self)
1.1 dwinter 186: return pt()
187:
188: def index_html(self):
189: """show image"""
1.8 dwinter 190: #DEVELOP: take first one for server
191:
1.36 ! dwinter 192: path="http://content.mpiwg-berlin.mpg.de/zogilib_images?lv=2&fn="+self.ImageViewerPath+"/"+os.path.splitext(self.filename)[0]
1.8 dwinter 193:
194: #path="http://localhost:8080/mpiwg/online/"+self.ImageViewerPath+"/"+self.filename
1.1 dwinter 195: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
1.36 ! dwinter 196: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt')).__of__(self)
1.1 dwinter 197: return self.REQUEST.RESPONSE.redirect(path)
198:
199:
200: def manage_AddImageDigilibForm(self):
201: """Nothing yet"""
1.36 ! dwinter 202: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageDigilibForm.zpt')).__of__(self)
1.1 dwinter 203: return pt()
204:
1.3 dwinter 205: def manage_AddImageDigilib(self,id,fileupload,meta=None,RESPONSE=None):
1.1 dwinter 206: """Add ImageCollection"""
207: #fileupload=self.REQUEST['fileupload']
1.30 dwinter 208: fn=splitPath(fileupload.filename)
1.29 dwinter 209: newObj=ImageDigilib(id,fn,meta)
1.1 dwinter 210:
211: self._setObject(id,newObj)
212: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
213:
214: if RESPONSE is not None:
215: RESPONSE.redirect('manage_main')
216:
217:
218: class ImageCollection(Folder, Persistent, Implicit):
219: """Sammelordner für Bilder"""
220: meta_type="ImageCollection"
1.6 dwinter 221:
222: genericMetaDataType="leiden_meta"
223:
224: leiden_meta_fields=['image_id','date','country','place','people','description','photographer']
225:
1.3 dwinter 226:
227: 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 228:
1.31 dwinter 229:
230:
1.35 dwinter 231: def createSet(self,RESPONSE=None,local=None,version="working"):
1.31 dwinter 232: """download aller gewaehlten files"""
233: tempfile.tempdir="/tmp/archivesImageServer"
234:
235: tmpPath=tempfile.mktemp()
236:
237:
238: tmpZip=tempfile.mktemp()+".zip"
239: tmpFn=os.path.split(tmpZip)[1]
240:
241:
242: if not os.path.exists(tempfile.tempdir):
243: os.mkdir(tempfile.tempdir)
244:
245: if not os.path.exists(tmpPath):
246: os.mkdir(tmpPath)
247:
248:
249: if RESPONSE:
250: RESPONSE.setHeader("Content-Type","text/html")
251: RESPONSE.write("<h1>I am creating the download archive</h1>")
252: RESPONSE.write("<h3>1. step: getting the images</h3>")
253:
254: if not self.REQUEST.SESSION.has_key('filenames'):
255: RESPONSE.write("<h2>ERROR</h2>")
256: RESPONSE.write("<p>I forgot, the selected files. Please reselect.\n")
257: return 0
258:
259: for id in self.REQUEST.SESSION['filenames']:
260:
261: if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(id[0]):
262: filename=self.REQUEST.SESSION['filenamesIds'][id[0]][0]+"_"+id[0]
263: else:
264: filename=id[0]
265:
266: if RESPONSE:
267: RESPONSE.write(str("<p>Get File: %s<br>\n"%filename))
268:
1.33 dwinter 269: if local:
1.35 dwinter 270: if version=="working":
271: sourcePath="/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+id[0]
272: else:
273: sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+id[0]
1.33 dwinter 274: targetPath=tmpPath+"/"+filename
1.34 dwinter 275: try:
276: shutil.copyfile(sourcePath,targetPath)
277: except:
278: if RESPONSE:
279: RESPONSE.write(str("<p>Error in File: %s (possible missing)<br>\n"%filename))
280: else:
281: """nothing"""
1.33 dwinter 282: else:
1.35 dwinter 283: if version=="working":
284: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&dh=2000&dw=2000"
285: else:
286: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(urllib.quote(id[0]))[0]+"&mo=rawfile,hires"
1.33 dwinter 287: image=urllib.urlopen(path).read()
288:
289:
290: fh=file(tmpPath+"/"+filename,"w")
291:
292:
293: fh.write(image)
294: fh.close()
1.31 dwinter 295:
296: #folgeseiten
297: if int(self.REQUEST.SESSION['filenamesIds'][id[0]][1])>1:
298: ids=self.show_thumbs()
299: nr=ids.index(id[0])
300:
301: numberOfPages=self.REQUEST.SESSION['filenamesIds'][id[0]][1]
302: for k in range(int(numberOfPages)-1):
303: i=k+1
304: if self.REQUEST.SESSION.has_key('filenamesIds') and self.REQUEST.SESSION['filenamesIds'].has_key(id[0]):
305: filename=self.REQUEST.SESSION['filenamesIds'][id[0]][0]+"_"+ids[nr+i]
306: else:
307: filename=id[0]
308:
309: if RESPONSE:
310: RESPONSE.write(str("<p>Get File: %s<br>\n"%filename))
311:
1.33 dwinter 312: if local:
313: sourcePath="/mpiwg/online/"+self.ImageViewerPath+"/"+ids[nr+1]
314: targetPath=tmpPath+"/"+filename
1.34 dwinter 315: try:
316: shutil.copyfile(sourcePath,targetPath)
317: except:
318: if RESPONSE:
319: RESPONSE.write(str("<p>Error in File: %s (missing?)<br>\n"%filename))
320: else:
321: """nothing"""
1.33 dwinter 322: else:
1.35 dwinter 323: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+os.path.splitext(ids[nr+i])[0]+"&mo=rawfile,hires"
1.31 dwinter 324:
1.33 dwinter 325: image=urllib.urlopen(path).read()
326:
1.31 dwinter 327:
1.33 dwinter 328: fh=file(tmpPath+"/"+filename,"w")
329: fh.write(image)
330: fh.close()
1.31 dwinter 331:
332: if RESPONSE:
333: RESPONSE.write("<h3>2. step: creating the downloadable file</h3>")
334: RESPONSE.write("<p>Create Zip<br>")
335: RESPONSE.write("<p>This can take a while....<br>\n")
336: if RESPONSE:
337: fh=os.popen2("zip -u %s %s/*"%(tmpZip,tmpPath),1)[1]
338: RESPONSE.write("<br>")
339: for c in fh.read():
340: RESPONSE.write(c)
341:
342: if c==")":
343: RESPONSE.write("<br>\n")
344:
345:
346: else:
347: os.popen("zip -u %s %s/*"%(tmpZip,tmpPath))
348:
349:
350: shutil.rmtree(tmpPath)
351:
352: if RESPONSE:
353: RESPONSE.write("<p>finished<br>\n")
354:
355: if RESPONSE:
356: len=os.stat(tmpZip)[6]
357: downloadUrl=self.absolute_url()+"/downloadSet"
358: RESPONSE.write("""<h1><a href="downloadSet?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len))
359: RESPONSE.write("""<p>The file will be stored for a while, you can download it later, the URL is:</p>
360: <p><a href="downloadSet?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn))
361: RESPONSE.close()
362:
363: def downloadSet(self,fn):
364: """download prepared set"""
365: filename="/tmp/archivesImageServer/"+fn
366:
367: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%"image.zip")
368: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
369: len=os.stat(filename)[6]
370: self.REQUEST.RESPONSE.setHeader("Content-Length",len)
371: images=file(filename).read()
372: self.REQUEST.RESPONSE.write(images)
373: self.REQUEST.RESPONSE.close()
374:
375:
376:
377: def scaleThumbs(self,RESPONSE=None):
1.7 dwinter 378: """scale thumbs"""
1.31 dwinter 379:
1.35 dwinter 380: #scale thumbs
381: 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)
382: if RESPONSE:
383: RESPONSE.write(ret.read())
384: RESPONSE.write("\n")
385:
386: return "RESCALING STARTED"
387:
388: def scaleWorkingVersions(self,RESPONSE=None):
389: """scale working versions"""
1.31 dwinter 390:
1.35 dwinter 391: #scale standard
392:
393: 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)
394: if RESPONSE:
395: RESPONSE.write(ret.read())
396: RESPONSE.write("\n")
397: return "rescaling started"
398:
399:
1.3 dwinter 400:
401: def __init__(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString):
1.1 dwinter 402: self.id=id
403: self.title=title
404: self.ImageStoragePath=ImageStoragePath
405: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 406: self.defaultMetaString=defaultMetaString
1.1 dwinter 407:
408: manage_options = Folder.manage_options+(
409: {'label':'Main Config','action':'ImageCollection_config'},
410: {'label':'Import','action':'ImportFiles'},
1.6 dwinter 411: {'label':'Recalculate Metadata','action':'recalculateMeta'},
412: {'label':'Import Metadata','action':'importMetaForm'},
1.7 dwinter 413: {'label':'Rescale thumbs','action':'scaleThumbs'},
1.35 dwinter 414: {'label':'Rescale working version','action':'scaleWorkingVersions'},
1.23 dwinter 415: {'label':'Weight (ECHO)','action':'weightForm'},
1.6 dwinter 416: )
417:
1.23 dwinter 418: def weightForm(self):
419: """Weight"""
1.36 ! dwinter 420: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeWeight.zpt')).__of__(self)
1.23 dwinter 421: return pt()
1.6 dwinter 422:
1.23 dwinter 423: def changeWeight(self,weight,RESPONSE=None):
424: """Change weight"""
425: self.weight=weight
426:
427: if RESPONSE is not None:
428: RESPONSE.redirect('manage_main')
429:
430:
1.6 dwinter 431: def importMetaForm(self):
432: """import metadata"""
1.36 ! dwinter 433: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','importMeta.zpt')).__of__(self)
1.6 dwinter 434: return pt()
1.3 dwinter 435:
1.6 dwinter 436: def importMeta(self,fileupload,tag):
437: """import"""
438: filedata=fileupload.read()
439: dom=xml.dom.minidom.parseString(filedata)
440: rows=dom.getElementsByTagName(tag)
441: #print "ROWS",rows
442: request=self.REQUEST
443: for row in rows:
444:
445: for a in self.leiden_meta_fields:
446: self.REQUEST[a]=getText(row.getElementsByTagName(a)[0].childNodes)
447:
448: image_id=self.REQUEST['image_id']
449: if (not hasattr(self,image_id)) & (not image_id==""):
1.8 dwinter 450: #print image_id
1.6 dwinter 451: newObj=ImageCollection(str(image_id),image_id,'','','')
452: self._setObject(str(image_id),newObj)
453:
454: id="leiden_meta_data_file"
455: self.REQUEST['id']=id
456: #objectType=getattr(self.Control_Panel.Products.ImageMetaData,self.genericMetaDataType)
457: #objectCreate=objectType.createInObjectManager(id,request)
458: #href="http://localhost:8080/tests/testcollection/manage_addProduct/ImageMetaData/leiden_meta_factory/"
459: try:
460: addID=getattr(self,image_id)
461: objectCreate=addID.manage_addProduct['ImageMetaData'].leiden_meta_add(id)
462: #getattr(self,image_id)._setObject(id,objectCreate)
463: obj=getattr(addID,id)
464: obj.propertysheets.meta.manage_editProperties(request)
465: except:
466: """nothing"""
467: return "OK"
468:
1.1 dwinter 469:
1.31 dwinter 470: def nextImage(self,request,selected=None,returnFn=None):
1.7 dwinter 471: """show nextimage"""
1.13 dwinter 472: try:
473: ids=self.show_thumbs()
474: if request.SESSION.has_key("filename"):
475: filename=request.SESSION["filename"]
476: try:
477: nr=ids.index(filename)
1.31 dwinter 478:
1.13 dwinter 479: except:
480: nr=0
481: else:
1.7 dwinter 482: nr=0
483:
1.13 dwinter 484: if nr==len(ids)-1:
1.31 dwinter 485: return ""
1.13 dwinter 486: else:
1.31 dwinter 487: if returnFn:
488: return ids[nr+1]
489:
1.13 dwinter 490: if selected:
491: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
492: else:
493: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr+1]+"\" target=\"_top\">next image</a>"
494: except:
1.7 dwinter 495: return ""
1.13 dwinter 496:
1.7 dwinter 497: def prevImage(self,request,selected=None):
498: """show nextimage"""
499: #return self.getId()
1.13 dwinter 500: try:
501: ids=self.show_thumbs()
502: if request.SESSION.has_key("filename"):
503: filename=request.SESSION["filename"]
504: try:
505: nr=ids.index(filename)
506: except:
507: nr=0
508: else:
1.7 dwinter 509: nr=0
1.3 dwinter 510:
1.13 dwinter 511: if nr==0:
512: return ""
513: else:
514: if selected:
515: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
516: else:
517: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr-1]+"\" target=\"_top\">previous image</a>"
518: except:
1.7 dwinter 519: return ""
1.6 dwinter 520:
1.3 dwinter 521: def meta_default(self,filename):
522: """url der metadaten"""
523: return self.defaultMetaString % filename
524:
1.2 dwinter 525: def getThumbAttribute(self,id,attr):
526: if hasattr(self,id):
527: return getattr(getattr(self,id),attr)
528: else:
529: if attr=='title':
530: return "<b>Missing Image:%s</b>" % id
531:
532: def getThumbFunction(self,id,attr):
533: #return "DUMP"
534: if hasattr(self,id):
535: return getattr(getattr(self,id),attr)()
536:
537:
1.1 dwinter 538: def xmlinput(self,url):
539: """Anzeige von ausgewaehlten thumbs"""
540: #return url
1.5 dwinter 541:
542: url=urllib.unquote(url)
1.1 dwinter 543: xmldoc=urllib.urlopen(url).read()
1.5 dwinter 544: #print url
1.31 dwinter 545: try:
546: dom=xml.dom.minidom.parseString(xmldoc)
547: except:
548: return xmldoc
549: images=dom.getElementsByTagName('image')
550:
1.1 dwinter 551: rc=[]
1.31 dwinter 552: fnIds={}
1.1 dwinter 553: for image in images:
1.31 dwinter 554: imagename=image.getElementsByTagName('imagename')[0]
555: text=getText(imagename.childNodes)
556: idnr=image.getElementsByTagName('idnr')[0]
557: id=getText(idnr.childNodes)
558: numberOfPages=image.getElementsByTagName('numberOfPages')[0]
1.32 dwinter 559: nopT=getText(numberOfPages.childNodes)
560: try:
561: nop=int(nopT)
562: except:
563: nop=0
1.31 dwinter 564: if not text=="":
565: rc.append((str(text),id,nop))
566: fnIds[str(text)]=(id,nop)
1.2 dwinter 567: rc.sort()
1.1 dwinter 568: self.REQUEST.SESSION['filenames']=rc
1.31 dwinter 569: self.REQUEST.SESSION['filenamesIds']=fnIds
570:
1.36 ! dwinter 571: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
1.1 dwinter 572: return pt()
573:
1.3 dwinter 574: def recalculateMeta(self):
575: """recalculate the metadata"""
576:
577: for entryid in self.__dict__:
578: entry=getattr(self,entryid)
579: if hasattr(entry,'meta_type'):
580:
581: if entry.meta_type=="ImageDigilib":
582: entry.meta=entry.meta_default(entry.getId())
583: return "OK"
1.1 dwinter 584:
585: def addImage(self):
586: """Add an Image"""
1.36 ! dwinter 587: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImage.zpt')).__of__(self)
1.1 dwinter 588: return pt()
589:
1.7 dwinter 590: def addImage2(self,fileupload,meta,use_default=None,RESPONSE=None):
1.1 dwinter 591: """Add"""
592: #print "FU",fileupload
1.3 dwinter 593:
594: if use_default:
595: try:
596: meta=self.meta_default(fileupload.filename)
597: except:
598: meta=None
1.7 dwinter 599: else:
600: meta=None
1.30 dwinter 601: fn=splitPath(fileupload.filename)
602:
603: manage_AddImageDigilib(self,fn,fileupload,meta=meta)
604: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
1.1 dwinter 605: #return self.REQUEST['URL1']+'/'+fileupload.filename
1.3 dwinter 606:
607: def ImportFiles2(self,RESPONSE=None):
608: """Import the existing files of a folder"""
609: files=os.listdir(self.ImageStoragePath)
610: ret=""
611: #print self.__dict__
612: for file in files:
613: if not file[0]==".":
614: if self.__dict__.has_key(file):
615:
616: ret=ret+"<br>"+file+" already exists!"
617: else:
618: ret=ret+"<br>"+file+" created!"
619: meta=self.meta_default(file)
620: newObj=ImageDigilib(file,file,meta)
621: #print newObj,file
622: #print newObj
623: self._setObject(file,newObj)
624: #print ret
1.36 ! dwinter 625: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1.3 dwinter 626: #print self.ImageStoragePath
1.35 dwinter 627:
628: #scale thumb
629:
630: self.scaleThumbs()
631:
632: #scale standard
633:
634: self.scaleWorkingVersions()
635:
1.31 dwinter 636:
1.3 dwinter 637: RESPONSE.redirect('manage_main')
1.1 dwinter 638:
639: def ImportFiles(self,RESPONSE=None):
640: """Import the existing files of a folder"""
641: files=os.listdir(self.ImageStoragePath)
642: ret=""
643: #print self.__dict__
644: for file in files:
1.2 dwinter 645: if not file[0]==".":
646: if self.__dict__.has_key(file):
647:
648: ret=ret+"<br>"+file+" already exists!"
649: else:
650: ret=ret+"<br>"+file+" created!"
651: newObj=ImageDigilib(file,file)
652: #print newObj,file
653: #print newObj
1.4 dwinter 654: try:
655: self._setObject(file,newObj)
656: except:
657: """nothing yet"""
1.1 dwinter 658: #print ret
1.36 ! dwinter 659: #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
1.3 dwinter 660: #print self.ImageStoragePath
1.35 dwinter 661:
662: #scale thumb
663:
664: self.scaleThumbs()
665:
666: #scale standard
667:
668: self.scaleWorkingVersions()
669:
670: if RESPONSE:
671: RESPONSE.redirect('manage_main')
1.1 dwinter 672:
673: def ImageCollection_config(self):
674: """Nothing yet"""
1.3 dwinter 675: if not hasattr(self,'defaultMetaString'):
676: self.defaultMetaString=""
677:
1.36 ! dwinter 678: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeImageCollectionForm.zpt')).__of__(self)
1.1 dwinter 679: return pt()
680:
1.3 dwinter 681: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 682: """Change"""
683: self.title=title
684: self.ImageStoragePath=ImageStoragePath
685: self.ImageViewerPath=ImageViewerPath
1.3 dwinter 686: self.defaultMetaString=defaultMetaString
687:
1.1 dwinter 688: if RESPONSE is not None:
689: RESPONSE.redirect('manage_main')
690:
691: def show_selected_thumbs(self):
692: #ids=[]
693:
694: return self.REQUEST.SESSION['filenames']
695:
696: def show_thumbs(self):
697: ids=[]
698: for entry in self.__dict__:
699: #print entry
700: if hasattr(getattr(self,entry),'thumb'):
701: ids.append(entry)
1.2 dwinter 702:
1.1 dwinter 703: #print ids
1.2 dwinter 704: ids.sort()
1.1 dwinter 705: return ids
706:
1.8 dwinter 707: def firstSets(self,selected=None):
708: ids=self.show_thumbs()
1.13 dwinter 709: if ids:
710: if selected:
711: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[0]+"\" target=\"_top\">first sets</a>"
712: else:
713: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[0]+"\" target=\"_top\">first sets</a>"
1.8 dwinter 714:
715: def lastSets(self,selected=None):
716: ids=self.show_thumbs()
1.13 dwinter 717: if ids:
718: colRows=self.getColTimesRow()
719:
720: if colRows[1]:
721: nr=len(ids)-colRows[0]*colRows[1]
722: else:
723: nr=0
724:
725: if nr<0:
726: nr=0
727:
728: if selected:
729: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">last set</a>"
730: else:
731: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">last sets</a>"
1.8 dwinter 732:
733:
734:
735: def nextSets(self,selected=None):
736: """show nextimage"""
737: ids=self.show_thumbs()
738: colRows=self.getColTimesRow()
1.13 dwinter 739: if ids:
740: if colRows[1]:
741:
742: if self.REQUEST.SESSION.has_key("filename"):
743: filename=self.REQUEST.SESSION["filename"]
744: try:
745: nr=ids.index(filename)+colRows[0]*colRows[1]
746: if nr>=len(ids):
747: nr=len(ids)-1
748: except:
749: nr=0
750: else:
1.8 dwinter 751: nr=0
752:
1.13 dwinter 753: if nr==len(ids)-1:
754: return ""
1.8 dwinter 755: else:
1.13 dwinter 756: if selected:
757: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">next set</a>"
758: else:
759: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">next set</a>"
1.8 dwinter 760:
761: def prevSets(self,selected=None):
762:
763: """show nextimage"""
764: #return self.getId()
765: ids=self.show_thumbs()
766: colRows=self.getColTimesRow()
1.13 dwinter 767: if ids:
768: if colRows[1]:
769: if self.REQUEST.SESSION.has_key("filename"):
770: filename=self.REQUEST.SESSION["filename"]
771: try:
772: nr=ids.index(filename)-colRows[0]*colRows[1]
773: if nr<0:
774: nr=0
775: except:
776: nr=0
777: else:
778: nr=0
1.8 dwinter 779: try:
1.13 dwinter 780: num=ids.index(filename)
1.8 dwinter 781: except:
1.13 dwinter 782: num=0
783:
784: if num==0:
785: return ""
786: else:
787: if selected:
788: return "<a href=\""+self.REQUEST['URL1']+"/selection?filename="+ids[nr]+"\" target=\"_top\">previous sets</a>"
789: else:
790: return "<a href=\""+self.REQUEST['URL1']+"?filename="+ids[nr]+"\" target=\"_top\">previous sets</a>"
1.8 dwinter 791: else:
792: return ""
1.24 dwinter 793:
794: def showRuler(self,selected=None):
795: """show ruler"""
796: showall =self.REQUEST.SESSION.get('showall','no')
1.28 dwinter 797: ids=self.show_thumbs()
798: if len(ids)==0:
799: return "<b>No entries</b>"
800:
1.24 dwinter 801: if showall=='no':
802: ids=self.show_thumbs()
803: colRows=self.getColTimesRow()
804: num=int(len(ids)/(colRows[0]*colRows[1]))
1.28 dwinter 805: if not (operator.mod(len(ids),colRows[0]*colRows[1])==0):
806: num+=1
1.24 dwinter 807: a=colRows[0]*colRows[1]
1.26 dwinter 808: #print num,num+1
1.28 dwinter 809: if num>1:
1.24 dwinter 810:
811: ret="<b>Show thumbnail group no:</b></br>"
1.28 dwinter 812: for i in range(num):
1.27 dwinter 813: if (operator.mod(i,10)==0) and i>0:
814: ret +="<br/>" #alle 10 linebreak einfuegen
1.24 dwinter 815: k=i*a
816: if selected:
817: href=self.REQUEST['URL1']+"/selection?filename="+ids[k]
818: else:
1.28 dwinter 819: href=self.REQUEST['URL1']+"?filename="+ids[int(k)]
1.24 dwinter 820:
1.26 dwinter 821: ret+="""<a href="%s" target="_top">%i</a> """%(href,i)
1.24 dwinter 822:
823: else:
824: ret=""
825: ret+="""<a href="%s?showall=yes" target="_top">show all</a> """%self.REQUEST['URL1']
826: else:
827: ret="""<a href="%s?showall=no" target="_top">show groups</a> """%self.REQUEST['URL1']
828:
829: return ret
830:
1.2 dwinter 831: def show_thumbs_selected_rows(self,numberOfColumns):
832: """Ausgabe anzahl"""
833: ids=self.show_selected_thumbs()
834: self.REQUEST.SESSION['ids']=ids
835: number=int(len(ids)/numberOfColumns)+1
836: self.REQUEST.SESSION['number']=range(number)
837: return range(number+1)
838:
1.8 dwinter 839: def setColTimesRowForm(self):
840: """form for matrix setting"""
1.36 ! dwinter 841: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','selectColTimesRow.zpt')).__of__(self)
1.8 dwinter 842: return pt()
843:
844: def setDone(self):
845: """done"""
846:
1.36 ! dwinter 847: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changedColTimesRow.zpt')).__of__(self)
1.8 dwinter 848: return pt()
849:
850: def setColTimesRow(self,cols,rows):
851: """set coltimes row"""
852: RESPONSE=self.REQUEST.RESPONSE
1.10 dwinter 853: if not rows:
1.12 dwinter 854: rows=None
1.11 dwinter 855: if rows=="":
1.12 dwinter 856: rows=None
857:
858: if rows:
859: RESPONSE.setCookie("ImageViewerRows",rows)
1.8 dwinter 860: RESPONSE.setCookie("ImageViewerCols",cols)
861:
862: RESPONSE.redirect(self.REQUEST['URL1']+"/setDone")
863:
1.24 dwinter 864: def getColTimesRow(self,showall='No'):
1.12 dwinter 865: """coltimesrow"""
1.8 dwinter 866:
867: REQUEST=self.REQUEST
868: """matrix"""
869: if REQUEST.cookies.has_key("ImageViewerRows"):
870:
871: try:
872: rows=int(REQUEST.cookies["ImageViewerRows"])
873: except:
1.22 dwinter 874: rows=6
1.8 dwinter 875: else:
1.22 dwinter 876: rows=6
1.8 dwinter 877:
878: if REQUEST.cookies.has_key("ImageViewerCols"):
1.12 dwinter 879: #print "COLS",REQUEST.cookies["ImageViewerCols"]
1.8 dwinter 880: cols=int(REQUEST.cookies["ImageViewerCols"])
881: else:
1.22 dwinter 882: cols=2
1.12 dwinter 883:
884: idsnumber=len(self.show_thumbs())
885: if rows:
886: if cols*rows >idsnumber:
887: rows=int(idsnumber/cols)+1
1.23 dwinter 888:
889: #print cols,rows
1.24 dwinter 890: if showall=='yes':
891: rows=int(idsnumber/cols)+1
892:
1.8 dwinter 893: return (cols,rows)
894:
895:
896: def show_thumbs_rows(self,numberOfColumns,numberOfRows=None,startId=None):
1.2 dwinter 897: """Ausgabe anzahl"""
1.8 dwinter 898:
899: idsAll=self.show_thumbs()
1.28 dwinter 900: if len(idsAll)==0: #keine Einträge
901: return 0
1.8 dwinter 902: if self.REQUEST.SESSION.has_key("filename"):
903: filename=self.REQUEST.SESSION["filename"]
1.23 dwinter 904:
905:
1.8 dwinter 906: try:
907: startId=filename
1.23 dwinter 908: if startId=="":
909: startId=idsAll[0][0:]
1.8 dwinter 910: except:
1.23 dwinter 911: startId=idsAll[0][0:]
1.8 dwinter 912: else:
1.23 dwinter 913: startId=idsAll[0][0:]
1.8 dwinter 914:
915:
1.23 dwinter 916:
1.8 dwinter 917:
918: if numberOfRows:
1.23 dwinter 919:
920: startPic=idsAll.index(startId)
1.12 dwinter 921: try:
1.23 dwinter 922:
1.12 dwinter 923: startPic=idsAll.index(startId)
924: endPic=startPic+numberOfColumns*numberOfRows
925: ids=idsAll[startPic:endPic]
926: except:
927: ids=idsAll
1.8 dwinter 928: else:
1.23 dwinter 929:
1.8 dwinter 930: ids=idsAll
931:
1.23 dwinter 932:
1.2 dwinter 933: self.REQUEST.SESSION['ids']=ids
934: number=int(len(ids)/numberOfColumns)+1
1.23 dwinter 935:
1.2 dwinter 936: return range(number+1)
937:
938: def show_thumbs_columns(self,row,numberOfColumns):
939: """Ausgabe einer Liste der Reihe"""
940: ids=self.REQUEST.SESSION['ids']
941: max=len(ids)
942: if (row*numberOfColumns)<max:
943: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
944: else:
945: return ids[(row-1)*numberOfColumns:]
1.8 dwinter 946:
1.2 dwinter 947: def thumblistSelected_old(self):
948: """main template collection"""
1.36 ! dwinter 949: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected.zpt')).__of__(self)
1.2 dwinter 950: return pt()
951:
1.1 dwinter 952: def thumblistSelected(self):
953: """main template collection"""
1.36 ! dwinter 954: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselected2.zpt')).__of__(self)
1.2 dwinter 955: return pt()
956:
957: def thumblist_old(self):
958: """main template collection"""
1.36 ! dwinter 959: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbs.zpt')).__of__(self)
1.1 dwinter 960: return pt()
961:
962: def thumblist(self):
963: """main template collection"""
1.36 ! dwinter 964: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumb2.zpt')).__of__(self)
1.1 dwinter 965: return pt()
966:
1.23 dwinter 967: def thumblistNewWindow(self):
968: """Thumbs mit clik neues Fenster oeffnen"""
1.36 ! dwinter 969: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbNewWindow.zpt')).__of__(self)
1.23 dwinter 970: return pt()
971:
972:
1.7 dwinter 973: def navig_selected_html(self):
974: """navigation"""
975: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.36 ! dwinter 976: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
1.7 dwinter 977: return pt()
978:
1.1 dwinter 979: def navig_html(self):
980: """navigation"""
1.7 dwinter 981: #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
1.36 ! dwinter 982: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation.zpt')).__of__(self)
1.1 dwinter 983: return pt()
984:
985:
1.7 dwinter 986: def selection(self):
987: """show only selected"""
988: if self.REQUEST.has_key('filename'):
989: filen=self.REQUEST['filename']
990: else:
991: filen=""
992: self.REQUEST.SESSION['filename']=filen
1.36 ! dwinter 993: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected2.zpt')).__of__(self)
1.7 dwinter 994: return pt()
995:
1.1 dwinter 996: def index_html(self):
997: """main template collection"""
998: if self.REQUEST.has_key('filename'):
999: filen=self.REQUEST['filename']
1000: else:
1001: filen=""
1.24 dwinter 1002:
1.1 dwinter 1003: self.REQUEST.SESSION['filename']=filen
1.24 dwinter 1004:
1.25 dwinter 1005: if self.REQUEST.has_key('showall'):
1006:
1007: self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
1008: else:
1009: self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
1010:
1.24 dwinter 1011:
1.36 ! dwinter 1012: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
1.1 dwinter 1013: return pt()
1014:
1015: def manage_AddImageCollectionForm(self):
1016: """Nothing yet"""
1.36 ! dwinter 1017: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionForm.zpt')).__of__(self)
1.1 dwinter 1018: return pt()
1019:
1.3 dwinter 1020: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1.1 dwinter 1021: """Add ImageCollection"""
1.3 dwinter 1022: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.19 dwinter 1023: self._setObject(id,newObj)
1024:
1025: if RESPONSE is not None:
1026: RESPONSE.redirect('manage_main')
1027:
1028:
1029: class ImageCollectionIFrame(ImageCollection):
1.20 dwinter 1030: """Class fuer Collection set als IFrame"""
1.19 dwinter 1031:
1032: meta_type="ImageCollectionIFrame"
1033: label=ImageCollection.title
1034:
1.23 dwinter 1035: def getImageTag(self):
1036: """ hack : method needed by echo_content"""
1037: return ""
1038:
1.20 dwinter 1039: def rotate(self,angle,url,RESPONSE):
1040: """rotate"""
1041:
1042: RESPONSE.redirect("javascript:document.domain='mpg.de';parent.iframe.right.rotation(%i)"%int(angle))
1043: RESPONSE.redirect(url)
1.19 dwinter 1044: def request(self):
1045: """request"""
1046: return self.REQUEST
1047:
1048: def index_html(self):
1049: """index"""
1050: if self.REQUEST.has_key('filename'):
1051: filen=self.REQUEST['filename']
1052: else:
1053: filen=""
1054: self.REQUEST.SESSION['filename']=filen
1055:
1056:
1.36 ! dwinter 1057: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameMain.zpt')).__of__(self)
1.19 dwinter 1058: return pt()
1059:
1060: def iframe_html(self):
1061: """iframe"""
1062: if self.REQUEST.has_key('filename'):
1063: filen=self.REQUEST['filename']
1064: else:
1065: filen=""
1066: self.REQUEST.response.setCookie('filename',filen)
1.36 ! dwinter 1067: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','IFrameOverview.zpt')).__of__(self)
1.19 dwinter 1068: return pt()
1069:
1070:
1071: def manage_AddImageCollectionIFrameForm(self):
1072: """Nothing yet"""
1.36 ! dwinter 1073: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionIFrameForm.zpt')).__of__(self)
1.19 dwinter 1074: return pt()
1075:
1076: def manage_AddImageCollectionIFrame(self,id,title,ImageStoragePath,ImageViewerPath,defaultMetaString,RESPONSE=None):
1077: """Add ImageCollection"""
1078: newObj=ImageCollectionIFrame(id,title,ImageStoragePath,ImageViewerPath,defaultMetaString)
1.1 dwinter 1079: self._setObject(id,newObj)
1080:
1081: if RESPONSE is not None:
1082: RESPONSE.redirect('manage_main')
1083:
1084:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>