--- ImageArchive/ImageArchive.py 2005/12/21 08:54:11 1.73
+++ ImageArchive/ImageArchive.py 2006/05/17 19:10:49 1.84
@@ -3,6 +3,7 @@ genericServerPath="http://www.mpiwg-berl
from OFS.Folder import Folder
+from OFS.OrderedFolder import OrderedFolder
from OFS.SimpleItem import SimpleItem
from Globals import Persistent,package_home
from Acquisition import Implicit
@@ -22,6 +23,9 @@ import time
from threading import Thread
import Queue
import cgi
+import sys
+import zLOG
+
from AccessControl import ClassSecurityInfo, getSecurityManager
@@ -49,6 +53,8 @@ except:
tdir = "/mpiwg/temp/tmp/archivesImageServer/"
#tdir="/tmp/archivesImageServer/"
+imageExtensions=['jpg','jpeg','tif','tiff','png']
+
def splitPath(str):
str2=str.replace("\\","/")
return os.path.split(str2)[1]
@@ -297,6 +303,13 @@ class ImageDigilib(Folder,Persistent,Imp
user=getSecurityManager().getUser()
roles=user.getRoles()
+
+
+ if self.getRightsQuery()=="":
+ #query empty then always true
+ return True
+
+
if 'Authenticated' in roles:
return True
@@ -364,12 +377,13 @@ class ImageDigilib(Folder,Persistent,Imp
def uploadImage(self,fileupload,path_name):
"""upload an Image from an Requast"""
#path_name=self.ImageStoragePath
- fn=splitPath(fileupload.filename)
+ fn = self.filename or splitPath(fileupload.filename)
filename=path_name+"/"+fn
filedata=fileupload.read()
f=open(filename,"w")
f.write(filedata)
f.close()
+ self.filename = fn
try:
os.chmod(filename,0664)
except:
@@ -477,53 +491,68 @@ class ImageDigilib(Folder,Persistent,Imp
RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
- def updateImage(self,file,rename=None,RESPONSE=None):
- """lade neues Version des Bildes"""
- #teste ob Dokumenten ordner schon vorhanden
- imagePath=os.path.join(self.ImageStoragePath,self.getId())
+ def updateImage(self,_fileupload,_rename=None,RESPONSE=None):
+ """lade neues Version des Bildes"""
+ #teste ob Dokumenten ordner schon vorhanden
+ #imagePath=os.path.join(self.ImageStoragePath,self.getId())
+
+ identifyField="filename"
+
+ if _fileupload and _fileupload.filename!="":
+ imagePath=os.path.join(self.ImageStoragePath,self.filename)
path=os.path.join(self.ImageStoragePath,"."+self.getId()+".dir")
-
+
if not os.path.exists(path):
- os.mkdir(path,0775)
- os.chmod(path,0775)
-
+ os.mkdir(path,0775)
+ os.chmod(path,0775)
+
versionNumber=getattr(self,'versionNumber',0)+1
-
+
#teste ob version schon existiert
-
- while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))):
- versionNumber+=1
-
+
+ while os.path.exists(os.path.join(path,"V%i_%s"%(versionNumber,self.filename))):
+ versionNumber+=1
+
#kopieren der bestehenden Version in den Versions ordner.
- imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.getId()))
- os.rename(imagePath,imageNewPath)
-
+ imageNewPath=os.path.join(path,"V%i_%s"%(versionNumber,self.filename))
+ try:
+ #zLOG.LOG("ImageArchive:updateImage", zLOG.INFO, "rename: %s -> %s"%(imagePath,imageNewPath))
+ os.rename(imagePath,imageNewPath)
+ except:
+ zLOG.LOG("ImageArchive:updateImage", zLOG.ERROR, "rename: %s -> %s didn't work!"%(imagePath,imageNewPath))
+
#lesen des upload files und schreiben
filedata=file.read()
- f=open(imagePath,"w")
+ f=open(imagePath,"w") # if we wanted to have filename=id we should do it here!
f.write(filedata)
f.close()
try:
- os.chmod(imagePath,0664)
+ os.chmod(imagePath,0664)
except:
- """hack"""
+ pass
#scale thumb
-
- self.scaleThumbs()
+ self.scaleThumbs()
+
#scale standard
-
+
self.scaleWorkingVersions()
-
- if rename:
+
+ if _rename:
self.renameImage(file.filename)
-
- if RESPONSE:
- RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
+
+ args=self.REQUEST.form
+
+ args['-identify']=identifyField+"="+args['_identifyField']
+
+ self.ZSQLChange(args=args)
+
+ if RESPONSE:
+ RESPONSE.redirect(self.aq_parent.absolute_url()+"?filename="+self.filename)
- return "done"
+ return "done"
security.declarePublic('thumb')
def thumb(self,url=None):
@@ -599,7 +628,8 @@ def manage_AddImageDigilib(self,id,fileu
"""Add ImageCollection"""
#fileupload=self.REQUEST['fileupload']
- fn=splitPath(fileupload.filename)
+ #fn=splitPath(fileupload.filename)
+ fn = id # filename is the same as id
newObj=ImageDigilib(id,fn,meta)
self._setObject(id,newObj)
@@ -610,7 +640,7 @@ def manage_AddImageDigilib(self,id,fileu
-class ImageCollection(Folder, Persistent, Implicit,ECHO_basis):
+class ImageCollection(OrderedFolder, Persistent, Implicit,ECHO_basis):
"""Sammelordner fuer Bilder"""
meta_type="ImageCollection"
@@ -631,8 +661,28 @@ class ImageCollection(Folder, Persistent
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
imgcoll_main = PageTemplateFile('zpt/overview', globals())
+ imgcoll_mainMD = PageTemplateFile('zpt/overviewMD', globals())
imgcoll_thumb = PageTemplateFile('zpt/thumb', globals())
+ imgcoll_thumbMD = PageTemplateFile('zpt/thumbMD', globals())
+
+ def getImageObject(self,name):
+ """gibt objeckt name zurueck"""
+ if hasattr(self,name):
+ return getattr(self,name)
+
+ name=os.path.splitext(name)[0]
+ for extension in imageExtensions:
+ nameExt=name+"."+extension
+ if hasattr(self,nameExt):
+ return getattr(self,nameExt)
+
+ nameExt=name+"_."+extension
+ if hasattr(self,nameExt):
+ return getattr(self,nameExt)
+
+ return getattr(self,"defaultImg")
+
def getServerPath(self):
"""get Server path"""
return getattr(self,'serverPath',genericServerPath)
@@ -739,7 +789,7 @@ class ImageCollection(Folder, Persistent
"""scale thumbs"""
#scale thumbs
- 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)
+ ret=os.popen("/docuserver/lib/scaleomat/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/docuserver/scaled/thumb -scaleto=100 &"% self.ImageViewerPath)
if RESPONSE:
RESPONSE.write(ret.read())
RESPONSE.write("\n")
@@ -751,7 +801,7 @@ class ImageCollection(Folder, Persistent
#scale standard
- 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)
+ ret=os.popen("/docuserver/lib/scaleomat/scaleomat.pl -src=/mpiwg/online/ -dir=%s -dest=/mpiwg/temp/online/scaled/small -scaleto=2000 &"% self.ImageViewerPath)
if RESPONSE:
RESPONSE.write(ret.read())
RESPONSE.write("\n")
@@ -909,13 +959,15 @@ class ImageCollection(Folder, Persistent
try:
dom=xml.dom.minidom.parseString(xmldoc)
except:
- return xmldoc
+ return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
+
images=dom.getElementsByTagName('image')
rc=[]
fnIds={}
for image in images:
imagename=image.getElementsByTagName('imagename')[0]
+
@@ -938,6 +990,7 @@ class ImageCollection(Folder, Persistent
texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
for text in texts:
if not text=="":
+ text=self.getImageByName(text,onlyName="yes")
try:
rc.append((str(text),id,nop))
fnIds[str(text)]=(id,nop)
@@ -991,10 +1044,7 @@ class ImageCollection(Folder, Persistent
else:
meta=None
- if fileName:
- fn=fileName
- else:
- fn=splitPath(fileupload.filename)
+ fn=fileName or splitPath(fileupload.filename)
manage_AddImageDigilib(self,fn,fileupload,meta=meta)
@@ -1025,11 +1075,11 @@ class ImageCollection(Folder, Persistent
#scale thumb
- self.scaleThumbs()
+ #self.scaleThumbs()
#scale standard
- self.scaleWorkingVersions()
+ #self.scaleWorkingVersions()
RESPONSE.redirect('manage_main')
@@ -1113,7 +1163,7 @@ class ImageCollection(Folder, Persistent
#scale thumb
- self.scaleThumbs()
+ #self.scaleThumbs()
#scale standard
@@ -1558,7 +1608,8 @@ class ImageCollection(Folder, Persistent
"""navigation"""
#self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selected.zpt')).__of__(self)
- return pt()
+
+ return pt().data
def navig_html(self):
"""navigation"""
@@ -1580,18 +1631,33 @@ class ImageCollection(Folder, Persistent
def getImageByName(self,filename,onlyName=None):
"""get filename"""
-
- fn=getattr(self,filename,None)
+ print repr(filename)
+ #FIXME: umlaute in filename
+ fn=getattr(self,repr(filename),None)
if not fn:
filenameM=filename.split(".")[0]
+
founds=self.ZopeFind(self,obj_metatypes=['ImageDigilib'])
+
+
for found in founds:
foundM=found[0].split(".")[0]
+
if filenameM.lower()==foundM.lower():
if onlyName:
return found[0]
else:
- return found[1]
+ return found[1]
+ #HACK teste noch ob am ende des filenames eventuell ein "_" und loesche das.
+ if foundM[-1]=="_":
+ foundM=foundM[0:-1]
+
+ if filenameM.lower()==foundM.lower():
+ if onlyName:
+ return found[0]
+ else:
+ return found[1]
+
if onlyName:
return filename
else:
@@ -1599,9 +1665,9 @@ class ImageCollection(Folder, Persistent
security.declareProtected('View','index_html')
- def index_html(self,fn=None,generic=None):
+ def index_html(self,fn=None,generic='No'):
"""main template collection"""
-
+
if fn:
ret=[]
@@ -1618,7 +1684,8 @@ class ImageCollection(Folder, Persistent
overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
- if overview and (generic is None):
+
+ if overview and (generic =='No'):
return overview[0][1]()
else:
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selected.zpt')).__of__(self)
@@ -1639,7 +1706,7 @@ class ImageCollection(Folder, Persistent
overview=self.ZopeFind(self,obj_ids=['overview.html'])
- if overview and (generic is None):
+ if overview and (generic == 'No'):
return overview[0][1]()
elif hasattr(self,'templates'):
pt=self.templates.imgcoll_main.__of__(self)
@@ -1648,6 +1715,11 @@ class ImageCollection(Folder, Persistent
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview.zpt')).__of__(self)
return pt()
+ def navigation(self):
+ """generate navigation bar"""
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_fragment')).__of__(self)
+ return pt()
def manage_AddImageCollectionForm(self):
"""Nothing yet"""
@@ -1663,7 +1735,7 @@ def manage_AddImageCollection(self,id,ti
RESPONSE.redirect('manage_main')
-
+
class ImageCollectionMD(ImageCollection,ZSQLExtendFolder):
"""Imageviewer and Metadata"""
meta_type="ImageCollection MD"
@@ -1678,10 +1750,254 @@ class ImageCollectionMD(ImageCollection,
)
try:
- changeZSQLExtendForm=ZSQLExtendFolder.changeZSQLExtendForm
+ changeZSQLExtendForm=ZSQLExtendFolder.changeZSQLExtendForm
except:
- pass
+ pass
+
+
+ def ImportFiles(self,RESPONSE=None):
+ """Import the existing files of a folder"""
+ files=os.listdir(self.ImageStoragePath)
+ ret=""
+ #print self.__dict__
+ for file in files:
+ if not file[0]==".":
+ if self.__dict__.has_key(file):
+ ret=ret+"
"+file+" already exists!"
+ else:
+ ret=ret+"
"+file+" created!"
+ newObj=ImageDigilib(file,file)
+ #print newObj,file
+ #print newObj
+ try:
+ self._setObject(file,newObj)
+ except:
+ """nothing yet"""
+
+
+ args={}
+ args['_table']=self.imageCollectionConfig.getTable()
+ args[self.imageCollectionConfig.getKey()]=file
+
+ if not self.ZSQLInlineSearch(args=args):
+ self.ZSQLAdd(args=args)
+ #print ret
+ #pt=PageTemplateFile('Products/ImageArchive/out.zpt')).__of__(self)
+ #print self.ImageStoragePath
+
+ #scale thumb
+
+
+ #self.scaleThumbs()
+
+ #scale standard
+
+ #self.scaleWorkingVersions()
+
+ if RESPONSE:
+ RESPONSE.redirect('manage_main')
+
+ def addImage(self):
+ """Add an Image"""
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addImageMD.zpt')).__of__(self)
+ return pt()
+
+ def addImage2(self,_fileupload,_fileName=None,_meta=None,_use_default=None,RESPONSE=None):
+ """Add"""
+
+ filenameKey="filename"
+ #print "FU",fileupload
+
+ if _use_default:
+ try:
+ meta=self.meta_default(_fileupload.filename)
+ except:
+ meta=None
+ else:
+ meta=None
+
+ fn=_fileName or splitPath(_fileupload.filename)
+
+ manage_AddImageDigilib(self,fn,_fileupload,meta=meta)
+
+ args=self.REQUEST.form
+ args[filenameKey]=fn
+
+ self.ZSQLAdd(args=args)
+
+ if RESPONSE:
+ return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fn)
+ #return self.REQUEST['URL1']+'/'+fileupload.filename
+
+ def navig_html(self):
+ """navigation"""
+ #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigationMD.zpt')).__of__(self)
+ return pt()
+
+ def navig_selected_html(self):
+ """navigation"""
+ #self.REQUEST.SESSION['URL']=self.REQUEST['URL0']
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','navigation_selectedMD.zpt')).__of__(self)
+
+ return pt()
+
+ def decode(self,str):
+ """decoder"""
+ if not str:
+ return ""
+ if type(str) is StringType:
+ try:
+ return str.decode('utf-8')
+ except:
+ return str.decode('latin-1')
+ else:
+
+ return str
+
+ def standardSearch(self):
+ """standard search page"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','standardSearchPage.zpt')).__of__(self)
+ return pt()
+
+ def searchResultXML(self):
+ """xmlformat"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','searchResultXML.zpt')).__of__(self)
+ return pt()
+
+ def searchDB(self,REQUEST=None,RESPONSE=None,xml=None):
+ """search"""
+ #context.ZSQLFind(_table='vision_main')
+ urlTmp=REQUEST['URL1']
+
+ url=urlTmp+'/searchResultXML?-table=%s&'%self.imageCollectionConfig.getTable()+REQUEST['QUERY_STRING']
+
+ if xml is None:
+ RESPONSE.redirect('xmlinput?url='+urllib.quote(url))
+ else:
+ RESPONSE.redirect(url)
+
+ def index_html(self,fn=None,selection=None,generic='No',REQUEST=None,RESPONSE=None):
+ """main template collection"""
+
+
+ mode=self.REQUEST.get('mode','view')
+ if fn:
+ ret=[]
+
+ if type(fn) is ListType:
+ """experimentell mehr als ein filename"""
+ for filename in fn:
+ if not (filename == ""):
+ ret.append((filename,'',1))
+ else:
+ ret.append((fn,'',1))
+
+ self.REQUEST.SESSION['filenames']=ret
+ #self.REQUEST.SESSION['filenamesIds']=fnIds
+
+ overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
+
+
+ if overview and (generic =='No'):
+ return overview[0][1]()
+ else:
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
+ return pt()
+
+
+ # filename given, then only display this file
+ if self.REQUEST.has_key('filename'):
+
+ filen=self.REQUEST['filename']
+ else:
+ filen=""
+
+
+ self.REQUEST.SESSION['filename']=filen[0:]
+
+ if not self.REQUEST.SESSION['filename']=="":
+ url=getattr(self.getImageByName(self.REQUEST.SESSION['filename']),'absolute_url')()
+ if mode=="view":
+ self.REQUEST.RESPONSE.redirect(url)
+ elif mode=="download":
+ self.REQUEST.RESPONSE.redirect(url+"/download")
+
+ if self.REQUEST.has_key('showall'):
+
+ self.REQUEST.SESSION['showall']=self.REQUEST.get('showall')
+ else:
+ self.REQUEST.SESSION['showall']=self.REQUEST.SESSION.get('showall','no')
+
+
+ if selection:
+ #selection i.e. selection already stored at self.REQUEST.SESSION['filenames']
+ overview=self.ZopeFind(self,obj_ids=['overview_selected.html'])
+
+
+ if overview and (generic =='No'):#
+ print "selected"
+ print repr(overview[0][1])
+ return overview[0][1]()
+ else:
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
+ return pt()
+
+
+ #no filename then show overview
+
+ overview=self.ZopeFind(self,obj_ids=['overview.html'])
+ if overview and (generic == 'No'):
+
+
+ return overview[0][1]()
+ elif hasattr(self,'templates'):
+
+ pt=self.templates.imgcoll_mainMD.__of__(self)
+ return pt()
+ else:
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overviewMD.zpt')).__of__(self)
+ return pt()
+
+ def nextImage(self,request,selected=None,returnFn=None):
+ """show nextimage"""
+
+ if not selected and self.REQUEST.has_key('fn'):
+ imagename=self.REQUEST['fn'].split('/')[-1]
+
+ imagename=self.getImageByName(imagename,onlyName=True)
+
+ nr=self.getObjectPosition(imagename)
+
+ objects=self.objectIds()
+ if len(objects)==nr+1:
+ return ""
+ else:
+ fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr+1]
+ return "next image"
+
+ def prevImage(self,request,selected=None,returnFn=None):
+ """show nextimage"""
+
+ if not selected and self.REQUEST.has_key('fn'):
+ imagename=self.REQUEST['fn'].split('/')[-1]
+
+ imagename=self.getImageByName(imagename,onlyName=True)
+
+ nr=self.getObjectPosition(imagename)
+
+ objects=self.objectIds()
+ if nr==0:
+ return ""
+ else:
+ fn="/".join(self.REQUEST['fn'].split('/')[0:-1])+"/"+objects[nr-1]
+ return "prev image"
+
+
def changeRightsQueryForm(self):
"""change Rights Query"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ChangeRightsQueryForm.zpt')).__of__(self)
@@ -1731,8 +2047,87 @@ class ImageCollectionMD(ImageCollection,
else:
result = ''
return result
+
+ def xmlinput(self,url):
+ """Anzeige von ausgewaehlten thumbs"""
+ #return url
+ url=urllib.unquote(url)
+ xmldoc=urllib.urlopen(url).read()
+ #return xmldoc
+ try:
+ dom=xml.dom.minidom.parseString(xmldoc)
+ except:
+ return "ERROR: (%s %s) %s"%(sys.exc_info()[0],sys.exc_info()[1],xmldoc)
+ images=dom.getElementsByTagName('image')
+
+ rc=[]
+ fnIds={}
+ for image in images:
+ imagename=image.getElementsByTagName('imagename')[0]
+
+
+
+
+ idnr=image.getElementsByTagName('idnr')[0]
+ id=getText(idnr.childNodes)
+ try:
+ numberOfPages=image.getElementsByTagName('numberOfPages')[0]
+ except:
+ numberOfPages=None
+
+ if numberOfPages:
+ nopT=getText(numberOfPages.childNodes)
+ try:
+ nop=int(nopT)
+ except:
+ nop=0
+ else:
+ nop=0
+
+ texts=getText(imagename.childNodes).split("\n") #mehrere bilder in return getrennter liste
+ for text in texts:
+ if not text=="":
+ text=self.getImageByName(text,onlyName="yes")
+ try:
+ rc.append((str(text),id,nop))
+ fnIds[str(text)]=(id,nop)
+ except:
+ rc.append((repr(text),id,nop))
+ fnIds[repr(text)]=(id,nop)
+
+
+ rc.sort()
+ self.REQUEST.SESSION['filenames']=rc
+ self.REQUEST.SESSION['filenamesIds']=fnIds
+
+ overview=self.ZopeFind(self,obj_ids=['overview_selectedMD.html'])
+
+ if overview:
+ return overview[0][1]()
+ else:
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
+ return pt()
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
+ return pt()
+
+ def selection(self):
+ """show only selected"""
+ if self.REQUEST.has_key('filename'):
+ filen=self.REQUEST['filename']
+ else:
+ filen=""
+ self.REQUEST.SESSION['filename']=filen
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','overview_selectedMD.zpt')).__of__(self)
+ return pt()
+
+ def thumblistSelectedMD(self):
+ """main template collection"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','thumbselectedMD.zpt')).__of__(self)
+ return pt()
+
def manage_AddImageCollectionMDForm(self):
"""Nothing yet"""
pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddImageCollectionFormMD.zpt')).__of__(self)
@@ -1886,4 +2281,4 @@ def manage_AddImageZogiLib(self,id=None,
def manage_AddImageZogiLibForm(self):
"""to be done"""
-
+
\ No newline at end of file