1: #BAUSTELLE
2:
3:
4: """Methoden zum hinzufügen von Dokumenten ins Archiv"""
5: import archive
6: import os
7: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
8: from Products.PageTemplates.PageTemplate import PageTemplate
9: import string
10: import urllib
11: import xml.dom.minidom
12:
13: #referencetypes=['Book','Bic','Journal Article','Manuscript','jiji']
14:
15: import re
16: def add(self, no_upload=0):
17: """ Add metadata or metadata and documents to the repository
18: no_upload=0 kein upload sonst upload von documententen"""
19:
20: self.referencetypes=['Book','Journal Article','Manuscript']
21:
22: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_new').__of__(self)
23: self.REQUEST.SESSION['path']=self.REQUEST['path']
24: if no_upload==0:
25: self.REQUEST.SESSION['no_upload']='yes'
26: else:
27: if self.REQUEST.SESSION.has_key('no_upload'):
28: del self.REQUEST.SESSION['no_upload']
29:
30: return newtemplate()
31: return self.referencetypes
32:
33:
34:
35: def getISO():
36: f=file('/Users/dwinter/Documents/Projekte/OSAS/OSA_system/iso639-1.inc','r').readlines()
37: ret={}
38: for lineraw in f:
39: line=lineraw.encode('ascii','replace')
40: value=string.split(line,'\t')[0].encode('ascii','replace')
41: key=string.split(line,'\t')[1].encode('ascii','replace')
42:
43: ret[key]=value
44: return ret
45:
46: def add2(self):
47: self.reftype=self.REQUEST['Reference Type']
48: self.REQUEST.SESSION['reftype']=self.reftype
49: self.bibdata={'Book':['author','year','title','series editor','series title','series volume','number of pages','city','publisher','edition','number of volumes','translator','ISBN ISSN'],
50: 'Journal Article':['author','year','title','journal','volume','issue','pages','alternate journal','call number'],
51: 'Manuscript':['author','year','title','location','signature','pages','editorial remarks','description','keywords']}
52:
53: self.fields=self.bibdata[self.reftype]
54: self.isolist=getISO()
55: #listed=[ x for x in self.isolist.keys()]
56: #print listed
57: #sorted=listed.sort()
58: #print sorted
59:
60: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_bibdata').__of__(self)
61: return newtemplate()
62: #return self.fields
63:
64:
65: def parse_query_string(str):
66: queries={}
67: key=""
68: value=""
69: tmp=""
70: toggle="key"
71: str=urllib.unquote(str)
72: for i in str:
73: if i=="=":
74: key=tmp
75: toggle="value"
76: tmp=""
77: elif i=="&":
78: queries[key]=tmp
79: tmp=""
80: toggle="key"
81: else:
82: if toggle=="key":
83: if i=="+" : i="-"
84: else:
85: if i=="+" : i=" "
86: tmp=tmp+i
87: queries[key]=tmp
88: return queries
89:
90: def add3(self):
91: """Foldername"""
92: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
93: self.REQUEST.SESSION['metadata']=metadata
94: vorschlag_naming=metadata['author'][:5]+"_"+metadata['title'][:5]+"_"+metadata['year']
95: self.vorschlag_naming=vorschlag_naming.decode('ascii','ignore')
96: if self.REQUEST.SESSION.has_key('no_upload'):
97: self.REQUEST.SESSION['folder_name']=self.REQUEST.SESSION['path']
98: return add5(self)
99: else:
100: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_naming').__of__(self)
101: return newtemplate()
102:
103:
104: def add4(self):
105: self.path=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
106:
107: self.folder_name=self.REQUEST['folder_name']
108: # netx has to be changed -> error if back button is used!!
109: self.REQUEST.SESSION['path']=self.REQUEST.SESSION['path']+"/"+self.REQUEST['folder_name']
110:
111:
112: self.REQUEST.SESSION['folder_name']=self.folder_name
113: self.image_folder_name="pageimg"
114: newtemplate=PageTemplateFile('products/OSA_system/OSAS_upload').__of__(self)
115: return newtemplate()
116:
117: def add5(self):
118: """ADD INDEX.META"""
119: newtemplate=PageTemplateFile('products/OSA_system/OSAS_add_metadata').__of__(self)
120: return newtemplate()
121:
122: def add6(self):
123: metadata=parse_query_string(self.REQUEST['QUERY_STRING'])
124: metadata['archive-path']=os.path.split(self.REQUEST.SESSION['path'])[0]
125: #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
126: metadata['folder_name']=os.path.split(self.REQUEST.SESSION['path'])[1]
127: metadata['content-type']="scanned document"
128: self.reftype=self.REQUEST.SESSION['reftype']
129: self.REQUEST.SESSION['add_metadata']=metadata
130: self.add_metadata=metadata
131: self.metadata=self.REQUEST.SESSION['metadata']
132: self.metadataprint=""
133: for tag in self.metadata.keys():
134: self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
135:
136: newtemplate=PageTemplateFile('products/OSA_system/index_meta').__of__(self)
137: newtemplate.content_type="text/plain"
138: renderxml = newtemplate()
139: if self.REQUEST.SESSION.has_key('no_upload'):
140: metapath=self.REQUEST.SESSION['path']+"/index.meta"
141: else:
142: metapath=self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name']+"/index.meta"
143:
144: f=open(metapath,'w')
145: f.writelines(renderxml)
146: f.close()
147: os.chmod(metapath,0644)
148: if self.REQUEST.SESSION.has_key('no_upload'):
149:
150: #newtemplate2=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/done',"text/html").__of__(self)
151: return self.REQUEST.response.redirect(self.REQUEST['URL2']+"?path="+self.REQUEST.SESSION['path'])
152: else:
153: #print self.add_metadata['archive-path']
154: self.viewpath=re.search(r"/mpiwg/online/(.*)",self.add_metadata['archive-path']).group(1)
155: newtemplate2=PageTemplateFile('products/OSA_system/OSAS_saved').__of__(self)
156:
157:
158: newtemplate2.content_type="text/html"
159: self.REQUEST.response.setHeader('Content-Type','text/html')
160:
161:
162: return newtemplate2()
163:
164:
165: from time import localtime,strftime
166:
167: def date(self):
168: return strftime("%d.%m.%Y",localtime())
169:
170:
171: def addPresentation(self,path):
172: """add presentation to the path"""
173:
174: dom=xml.dom.minidom.parse(path+"/index.meta")
175:
176: try:
177: author=archive.getText(dom.getElementsByTagName('author')[0].childNodes)
178: except:
179: author=archive.getText(dom.getElementsByTagName('Author')[0].childNodes)
180: title=archive.getText(dom.getElementsByTagName('title')[0].childNodes)
181: try:
182: date=archive.getText(dom.getElementsByTagName('year')[0].childNodes)
183: except:
184: try:
185: date=archive.getText(dom.getElementsByTagName('Year')[0].childNodes)
186: except:
187: date=archive.getText(dom.getElementsByTagName('date')[0].childNodes)
188: i=1
189: while os.path.exists("%02d-presentation"%i):
190: i+=1
191: self.REQUEST.SESSION['presentationname']="%02d-presentation"%i
192: self.REQUEST.SESSION['path']=path
193: self.REQUEST.SESSION['xmlvorschlag']="""<info>
194: <author>%s</author>
195: <title>%s</title>
196: <date>%s</date>
197: <display>yes</display>
198: </info>"""%(author,title,date)
199:
200: newtemplate=PageTemplateFile('products/OSA_system/addPresentation').__of__(self)
201: return newtemplate()
202:
203: def addPresentation2(self):
204: """add presentation """
205: folder_name=self.REQUEST['folder_name']
206: #print self.REQUEST['folder_name']
207: content_description=self.REQUEST['content_description']
208:
209: path=self.REQUEST.SESSION['path']
210:
211: if not self.REQUEST.has_key('fileupload'):
212: xmlinfo=self.REQUEST['xmltext']
213: file_name="info.xml"
214:
215: else:
216: file_name=self.REQUEST['fileupload'].filename
217: xmlinfo=self.REQUEST.form['fileupload'].read()
218: # hack Multipart auswertung funktioniert nicht ausser bei mozilla
219: file_name="info.xml"
220: xmlinfo=self.REQUEST['xmltext']
221: try:
222: os.mkdir(path+"/"+folder_name)
223: except:
224: """nothing"""
225: print "NAME:",file_name
226: f=open(path+"/"+folder_name+"/"+file_name,"w")
227: f.write(xmlinfo)
228: f.close()
229: os.chmod(path+"/"+folder_name,0755)
230: os.chmod(path+"/"+folder_name+"/"+file_name,0644)
231: addDirsToIndexMeta(path,folder_name,content_description,'presentation')
232:
233: return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
234:
235: def addText(self,path):
236: """add fulltext to the path"""
237: self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing text files
238: self.REQUEST.SESSION['path']=path
239: newtemplate=PageTemplateFile('products/OSA_system/addText').__of__(self)
240: return newtemplate()
241:
242: def addText2(self):
243: folder_name=self.REQUEST['folder_name']
244: #print self.REQUEST['folder_name']
245: content_description=self.REQUEST['content_description']
246: path=self.REQUEST.SESSION['path']
247: file_name=self.REQUEST['fileupload'].filename
248: filedata=self.REQUEST.form['fileupload'].read()
249: os.mkdir(path+"/"+folder_name)
250: f=open(path+"/"+folder_name+"/"+file_name,"w")
251: f.write(filedata)
252: f.close()
253: os.chmod(path+"/"+folder_name,0755)
254: os.chmod(path+"/"+folder_name+"/"+file_name,0644)
255: addDirsToIndexMeta(path,folder_name,content_description,'fulltext')
256:
257: return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
258:
259: def addTextExternal(self,path,texturl,version):
260: """hinzufügen eines externen textes"""
261: try: #neue text version einlesen
262: texttemp=urllib.urlopen(texturl).readlines()
263: text=""
264: for line in texttemp:
265: text=text+line
266: except: #fehler beim lesen des textes
267: return "ERROR: cannot read: %s"%texturl
268: if TextExternalError(text): #kein xml header
269: return "ERROR: cannot read: %s"%texturl, "received:",text
270: textpath=getNewTextPath(path) #erzeuge neuen Ornder für den Text
271: splitted=string.split(texturl,"/")
272: name=splitted[len(splitted)-1] #Name des XML-files
273: try:
274: writefile=file(path+"/"+textpath+"/"+name,"w")
275: except:
276: return"ERROR: cannot write: %s"%path+"/"+textpath+"/"+name
277: writefile.write(text)
278: writefile.close()
279: os.chmod(path+"/"+textpath+"/"+name,0644)
280:
281: #add new file to XML
282: dom=xml.dom.minidom.parse(path+"/index.meta")
283: node=dom.getElementsByTagName('resource')[0] #getNode
284:
285: subnode=dom.createElement('dir')
286:
287: namenode=dom.createElement('name')
288: namenodetext=dom.createTextNode(textpath)
289: namenode.appendChild(namenodetext)
290: subnode.appendChild(namenode)
291:
292: descriptionnode=dom.createElement('description')
293: descriptionnodetext=dom.createTextNode('archimedes text:'+version)
294: descriptionnode.appendChild(descriptionnodetext)
295: subnode.appendChild(descriptionnode)
296:
297: contentnode=dom.createElement('content-type')
298: contentnodetext=dom.createTextNode('fulltext')
299: contentnode.appendChild(contentnodetext)
300: subnode.appendChild(contentnode)
301:
302: node.appendChild(subnode)
303:
304: writefile=file(path+"/index.meta","w")
305: writefile.write(dom.toxml().encode('utf-8'))
306: writefile.close()
307:
308: #change texttool tag
309: dom=xml.dom.minidom.parse(path+"/index.meta")
310: node=dom.getElementsByTagName('meta')[0] #getNode
311:
312: try: #texttool existiert schon
313: subnode=node.getElementsByTagName('texttool')[0]
314: except: #wenn nicht Fehler ausgeben
315: return "ERROR:no presentation configured yet, user Web Front End to do so!"
316:
317:
318: try:
319: texttoolnodelist=subnode.getElementsByTagName('text')
320:
321: if not len(texttoolnodelist)==0: #texttool tag existiert schon, dann löschen
322: subsubnode=subnode.removeChild(texttoolnodelist[0])
323: subsubnode.unlink()
324: except:
325: """nothing"""
326: # text neu anlegen
327: textfoldernode=dom.createElement('text')
328: textfoldernodetext=dom.createTextNode(textpath+"/"+name)
329: textfoldernode.appendChild(textfoldernodetext)
330: subnode.appendChild(textfoldernode)
331:
332: #index.meta ausgeben
333: writefile=file(path+"/index.meta","w")
334: writefile.write(dom.toxml().encode('utf-8'))
335: writefile.close()
336:
337: #registrieren
338: print urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
339:
340: return "DONE:"+textpath+"/"+name
341:
342: def TextExternalError(text):
343: firsts=text[0:10]
344: print firsts
345: try:
346: match=re.search(r".*<?xml.*",firsts)
347: except:
348: return 1
349: return 0
350:
351: def getNewTextPath(path):
352: i=1
353: while os.path.exists(path+"/fulltext%i"%i):
354: i+=1
355: os.mkdir(path+"/fulltext%i"%i)
356: os.chmod(path+"/fulltext%i"%i,0755)
357: return "fulltext%i"%i
358:
359: def addImages(self,path):
360: """Imagesfolder to the path"""
361: self.REQUEST.SESSION['existing_names']=['pageimg'] # to be done generate list of existing pageimages files
362: self.REQUEST.SESSION['path']=path
363: newtemplate=PageTemplateFile('products/OSA_system/OSAS_addImages').__of__(self)
364: return newtemplate()
365:
366: def addImages2(self):
367:
368: self.image_folder_name=self.REQUEST['folder_name']
369: #print self.REQUEST['folder_name']
370: self.content_description=self.REQUEST['content_description']
371: #self.path=self.REQUEST.SESSION['path']
372:
373:
374: self.content_type='images'
375: addDirsToIndexMeta(self.REQUEST.SESSION['path'],self.image_folder_name,self.content_description,self.content_type)
376: self.REQUEST.SESSION['path']=re.search(r"/mpiwg(.*)",self.REQUEST.SESSION['path']).group(1)
377: newtemplate=PageTemplateFile('products/OSA_system/OSAS_upload2').__of__(self)
378: return newtemplate()
379:
380:
381:
382: def addDirsToIndexMeta(path,folder_name,content_description,content_type):
383: #f=file(path+"/index.meta",r)
384: dom=xml.dom.minidom.parse(path+"/index.meta")
385: node=dom.getElementsByTagName('resource')[0] #getNode
386:
387: subnode=dom.createElement('dir')
388:
389: namenode=dom.createElement('name')
390: namenodetext=dom.createTextNode(folder_name)
391: namenode.appendChild(namenodetext)
392: subnode.appendChild(namenode)
393:
394: descriptionnode=dom.createElement('description')
395: descriptionnodetext=dom.createTextNode(content_description)
396: descriptionnode.appendChild(descriptionnodetext)
397: subnode.appendChild(descriptionnode)
398:
399: contentnode=dom.createElement('content-type')
400: contentnodetext=dom.createTextNode(content_type)
401: contentnode.appendChild(contentnodetext)
402: subnode.appendChild(contentnode)
403:
404: node.appendChild(subnode)
405:
406: writefile=file(path+"/index.meta","w")
407: writefile.write(dom.toxml().encode('utf-8'))
408: writefile.close()
409:
410: def combineTextImage(self,path):
411: """gibt input formular zur erstellung des texttools meta tag aus"""
412: files = os.listdir(path)
413:
414: texts=[]
415: imagefolders=[]
416: presentationfolders=[]
417:
418: for filename in files:
419:
420: if archive.isdigilib2(path+"/"+filename):
421: imagefolders.append(filename)
422:
423: if archive.isFullText(path,filename):
424: texts.append(filename)
425: if archive.isPresentation(path,filename):
426: presentationfolders.append(filename)
427:
428: dom=xml.dom.minidom.parse(path+"/index.meta")
429: try:
430: filelanguage=archive.getText(dom.getElementsByTagName('lang')[0].childNodes)
431: except:
432: filelanguage=""
433: self.REQUEST.SESSION['isolist']=getISO()
434: self.REQUEST.SESSION['path']=path
435: self.REQUEST.SESSION['texts']=texts
436: self.REQUEST.SESSION['imagefolders']=imagefolders
437: self.REQUEST.SESSION['presentationfolders']=presentationfolders
438: self.REQUEST.SESSION['filelanguage']=filelanguage
439: newtemplate=PageTemplateFile('products/OSA_system/ImageandText').__of__(self)
440: return newtemplate()
441:
442:
443:
444: def combineTextImage2(self,path):
445: """erstellt bzw. ändert texttool meta tag"""
446: dom=xml.dom.minidom.parse(path+"/index.meta")
447: node=dom.getElementsByTagName('meta')[0] #getNode
448:
449:
450: subnodelist=node.getElementsByTagName('texttool')
451: if not len(subnodelist)==0: #texttool tag existiert schon, dann löschen
452: subnode=node.removeChild(subnodelist[0])
453: subnode.unlink()
454:
455: subnode=dom.createElement('texttool') #neu erzeugen
456:
457:
458: presentfile=os.listdir(path+"/"+self.REQUEST['presentation'])[0]
459:
460:
461: displaynode=dom.createElement('display')
462: displaynodetext=dom.createTextNode('yes')
463: displaynode.appendChild(displaynodetext)
464: subnode.appendChild(displaynode)
465:
466: if self.REQUEST.has_key('image'):
467: namenode=dom.createElement('image')
468: namenodetext=dom.createTextNode(self.REQUEST['image'])
469: namenode.appendChild(namenodetext)
470: subnode.appendChild(namenode)
471:
472: if self.REQUEST.has_key('text'):
473: textfile=os.listdir(path+"/"+self.REQUEST['text'])[0]
474: textfoldernode=dom.createElement('text')
475: textfoldernodetext=dom.createTextNode(self.REQUEST['text']+"/"+textfile)
476: textfoldernode.appendChild(textfoldernodetext)
477: subnode.appendChild(textfoldernode)
478:
479: if self.REQUEST.has_key('pagebreak'):
480: pagebreaknode=dom.createElement('pagebreak')
481: pagebreaknodetext=dom.createTextNode(self.REQUEST['pagebreak'])
482: pagebreaknode.appendChild(pagebreaknodetext)
483: subnode.appendChild(pagebreaknode)
484:
485: if self.REQUEST.has_key('presentation'):
486: presentationnode=dom.createElement('presentation')
487: presentationnodetext=dom.createTextNode(self.REQUEST['presentation']+"/"+presentfile)
488: presentationnode.appendChild(presentationnodetext)
489: subnode.appendChild(presentationnode)
490:
491: node.appendChild(subnode)
492:
493: # node=dom.getElementsByTagName('lang')[0] #getNode
494:
495: writefile=file(path+"/index.meta","w")
496: writefile.write(dom.toxml().encode('utf-8'))
497: writefile.close()
498:
499:
500:
501: urllib.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
502: #return urllib.quote("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path)
503: os.popen("ssh nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/thumb 90 &"% re.sub('mpiwg/online/','',self.REQUEST['path']+"/"+self.REQUEST['image']))
504: return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+self.REQUEST['path'])
505:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>