1: from OFS.Folder import Folder
2: from OFS.SimpleItem import SimpleItem
3: from Globals import Persistent
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:
13: def getText(nodelist):
14:
15: rc = ""
16: for node in nodelist:
17:
18: if node.nodeType == node.TEXT_NODE:
19: rc = rc + node.data
20: return rc
21:
22:
23: class ImageDigilib(SimpleItem,Persistent,Implicit):
24: """Anzeige object fuer digilib"""
25: meta_type="ImageDigilib"
26:
27: def __init__(self,id,filename):
28: self.id=id
29: self.title=filename
30: self.filename=filename
31:
32: def uploadImage(self,fileupload,path_name):
33: """upload an Image from an Requast"""
34: #path_name=self.ImageStoragePath
35: filename=path_name+"/"+fileupload.filename
36: filedata=fileupload.read()
37: f=open(filename,"w")
38: f.write(filedata)
39: f.close()
40: os.chmod(filename,0644)
41:
42: def download(self):
43: """download"""
44: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&mo=file"
45: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
46: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
47: return self.REQUEST.RESPONSE.redirect(path)
48:
49: def thumb(self):
50: """show thumb"""
51: if not os.path.exists("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+self.filename):
52: #image=urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=150").read()
53: #f=open("/mpiwg/temp/online/scaled/small/"+self.ImageViewerPath+"/"+self.filename,"w")
54: #f.write(image)
55: #f.close()
56: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/small 150 &"% self.ImageViewerPath)
57:
58:
59: #path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/servlet/Scaler/?fn="+self.ImageViewerPath+"/"+self.filename+"&dw=100&dh=100"
60: path="/thumbs"+self.ImageViewerPath+"/"+self.filename
61: self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
62: pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
63: return pt()
64:
65: def index_html(self):
66: """show image"""
67: path="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/digilib.jsp?fn="+self.ImageViewerPath+"/"+self.filename
68: #self.REQUEST.SESSION['string']="<img src=\"%s\">"% path
69: #pt=PageTemplateFile('Products/ImageArchive/thumb.zpt').__of__(self)
70: return self.REQUEST.RESPONSE.redirect(path)
71:
72:
73: def manage_AddImageDigilibForm(self):
74: """Nothing yet"""
75: pt=PageTemplateFile('Products/ImageArchive/AddImageDigilibForm.zpt').__of__(self)
76: return pt()
77:
78: def manage_AddImageDigilib(self,id,fileupload,RESPONSE=None):
79: """Add ImageCollection"""
80: #fileupload=self.REQUEST['fileupload']
81: newObj=ImageDigilib(id,fileupload.filename)
82:
83: self._setObject(id,newObj)
84: getattr(self,id).uploadImage(fileupload,self.ImageStoragePath)
85:
86: if RESPONSE is not None:
87: RESPONSE.redirect('manage_main')
88:
89:
90: class ImageCollection(Folder, Persistent, Implicit):
91: """Sammelordner für Bilder"""
92: meta_type="ImageCollection"
93:
94: def __init__(self,id,title,ImageStoragePath,ImageViewerPath):
95: self.id=id
96: self.title=title
97: self.ImageStoragePath=ImageStoragePath
98: self.ImageViewerPath=ImageViewerPath
99:
100:
101: manage_options = Folder.manage_options+(
102: {'label':'Main Config','action':'ImageCollection_config'},
103: {'label':'Import','action':'ImportFiles'},
104: )
105:
106: def getThumbAttribute(self,id,attr):
107: if hasattr(self,id):
108: return getattr(getattr(self,id),attr)
109: else:
110: if attr=='title':
111: return "<b>Missing Image:%s</b>" % id
112:
113: def getThumbFunction(self,id,attr):
114: #return "DUMP"
115: if hasattr(self,id):
116: return getattr(getattr(self,id),attr)()
117:
118:
119: def xmlinput(self,url):
120: """Anzeige von ausgewaehlten thumbs"""
121: #return url
122: xmldoc=urllib.urlopen(url).read()
123:
124: dom=xml.dom.minidom.parseString(xmldoc)
125:
126: images=dom.getElementsByTagName('imagename')
127: rc=[]
128: for image in images:
129: text=getText(image.childNodes)
130: if not text=="":
131: rc.append(str(text))
132: rc.sort()
133: self.REQUEST.SESSION['filenames']=rc
134: pt=PageTemplateFile('Products/ImageArchive/overview_selected.zpt').__of__(self)
135: return pt()
136:
137:
138: def addImage(self):
139: """Add an Image"""
140: pt=PageTemplateFile('Products/ImageArchive/addImage.zpt').__of__(self)
141: return pt()
142:
143: def addImage2(self,fileupload,RESPONSE=None):
144: """Add"""
145: #print "FU",fileupload
146: manage_AddImageDigilib(self,fileupload.filename,fileupload)
147: return RESPONSE.redirect(self.REQUEST['URL1']+'/'+fileupload.filename)
148: #return self.REQUEST['URL1']+'/'+fileupload.filename
149:
150: def ImportFiles(self,RESPONSE=None):
151: """Import the existing files of a folder"""
152: files=os.listdir(self.ImageStoragePath)
153: ret=""
154: #print self.__dict__
155: for file in files:
156: if not file[0]==".":
157: if self.__dict__.has_key(file):
158:
159: ret=ret+"<br>"+file+" already exists!"
160: else:
161: ret=ret+"<br>"+file+" created!"
162: newObj=ImageDigilib(file,file)
163: #print newObj,file
164: #print newObj
165: self._setObject(file,newObj)
166: #print ret
167: pt=PageTemplateFile('Products/ImageArchive/out.zpt',ret).__of__(self)
168: RESPONSE.redirect('manage_main')
169:
170: def ImageCollection_config(self):
171: """Nothing yet"""
172: pt=PageTemplateFile('Products/ImageArchive/ChangeImageCollectionForm.zpt').__of__(self)
173: return pt()
174:
175: def ChangeImageCollection(self,title,ImageStoragePath,ImageViewerPath,RESPONSE=None):
176: """Change"""
177: self.title=title
178: self.ImageStoragePath=ImageStoragePath
179: self.ImageViewerPath=ImageViewerPath
180:
181: if RESPONSE is not None:
182: RESPONSE.redirect('manage_main')
183:
184: def show_selected_thumbs(self):
185: #ids=[]
186:
187: return self.REQUEST.SESSION['filenames']
188:
189: def show_thumbs(self):
190: ids=[]
191: for entry in self.__dict__:
192: #print entry
193: if hasattr(getattr(self,entry),'thumb'):
194: ids.append(entry)
195:
196: #print ids
197: ids.sort()
198: return ids
199:
200: def show_thumbs_selected_rows(self,numberOfColumns):
201: """Ausgabe anzahl"""
202: ids=self.show_selected_thumbs()
203: self.REQUEST.SESSION['ids']=ids
204: number=int(len(ids)/numberOfColumns)+1
205: self.REQUEST.SESSION['number']=range(number)
206: return range(number+1)
207:
208: def show_thumbs_rows(self,numberOfColumns):
209: """Ausgabe anzahl"""
210: ids=self.show_thumbs()
211: self.REQUEST.SESSION['ids']=ids
212: number=int(len(ids)/numberOfColumns)+1
213:
214: return range(number+1)
215:
216: def show_thumbs_columns(self,row,numberOfColumns):
217: """Ausgabe einer Liste der Reihe"""
218: ids=self.REQUEST.SESSION['ids']
219: max=len(ids)
220: if (row*numberOfColumns)<max:
221: return ids[(row-1)*numberOfColumns:row*numberOfColumns]
222: else:
223: return ids[(row-1)*numberOfColumns:]
224: def thumblistSelected_old(self):
225: """main template collection"""
226: pt=PageTemplateFile('Products/ImageArchive/thumbselected.zpt').__of__(self)
227: return pt()
228:
229: def thumblistSelected(self):
230: """main template collection"""
231: pt=PageTemplateFile('Products/ImageArchive/thumbselected2.zpt').__of__(self)
232: return pt()
233:
234: def thumblist_old(self):
235: """main template collection"""
236: pt=PageTemplateFile('Products/ImageArchive/thumbs.zpt').__of__(self)
237: return pt()
238:
239: def thumblist(self):
240: """main template collection"""
241: pt=PageTemplateFile('Products/ImageArchive/thumb2.zpt').__of__(self)
242: return pt()
243:
244: def navig_html(self):
245: """navigation"""
246: pt=PageTemplateFile('Products/ImageArchive/navigation.zpt').__of__(self)
247: return pt()
248:
249:
250: def index_html(self):
251: """main template collection"""
252: if self.REQUEST.has_key('filename'):
253: filen=self.REQUEST['filename']
254: else:
255: filen=""
256: self.REQUEST.SESSION['filename']=filen
257: pt=PageTemplateFile('Products/ImageArchive/overview.zpt').__of__(self)
258: return pt()
259:
260: def manage_AddImageCollectionForm(self):
261: """Nothing yet"""
262: pt=PageTemplateFile('Products/ImageArchive/AddImageCollectionForm.zpt').__of__(self)
263: return pt()
264:
265: def manage_AddImageCollection(self,id,title,ImageStoragePath,ImageViewerPath,RESPONSE=None):
266: """Add ImageCollection"""
267: newObj=ImageCollection(id,title,ImageStoragePath,ImageViewerPath)
268: self._setObject(id,newObj)
269:
270: if RESPONSE is not None:
271: RESPONSE.redirect('manage_main')
272:
273:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>