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