1: # Methoden und Classen zum Hinzufuegen von Dokumenten
2:
3:
4: from OSAS_helpers import readArchimedesXML, getText
5: import os
6: import xml.dom.minidom
7: import re
8: import urllib
9: import OSAS_add
10: import OSAS_show
11: import string
12: from OFS.Folder import Folder
13: from AccessControl import ClassSecurityInfo
14: from Globals import InitializeClass
15: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
16: from Products.PageTemplates.PageTemplate import PageTemplate
17: import archive # check if this is necessary
18:
19:
20: from xml.sax import make_parser
21: from xml.sax.handler import ContentHandler
22:
23: def spaces(depth):
24: """needed in XMLtoTree"""
25: tmp=""
26: k=0
27: while k<2*depth:
28: k+=1
29: tmp=tmp+" "+" "
30: return tmp
31:
32:
33: class OSAS_add_Document(Folder):
34: """Hinzufuegen eines Dokumentes zum Storage"""
35: security=ClassSecurityInfo()
36:
37: def __init__(self,id):
38: """initialize a new instance"""
39: self.id = id
40:
41:
42: meta_type='OSAS_add_Document'
43: manage_options = Folder.manage_options+(
44: {'label':'Main Config','action':'add_Document_config'},
45: )
46:
47:
48:
49: security.declarePublic('add_Document_config')
50: def add_Document_config(self):
51: """Main configuration"""
52: pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_addDocument.zpt').__of__(self)
53: return pt()
54:
55: security.declarePublic('change_OSAS_add_Document')
56: def change_OSAS_add_Document(self,RESPONSE=None):
57: """Change"""
58: # self.RootFolderName=RootFolderName
59: if RESPONSE is not None:
60: RESPONSE.redirect('manage_main')
61:
62: security.declarePublic('index_html')
63: def index_html(self):
64: """stantard aufruf"""
65: return OSAS_add.add(self.standardMD,no_upload=1)
66:
67:
68: security.declarePublic('add2')
69: def add2(self):
70: """ anlegen naechster schritt"""
71: return OSAS_add.add2(self.standardMD)
72:
73: def add3(self):
74: """Foldername"""
75: return OSAS_add.add3(self)
76:
77: def add4(self):
78: """Applet"""
79:
80: return OSAS_add.add4(self)
81:
82: def add5(self):
83: """Foldername"""
84: return OSAS_add.add5(self)
85:
86: def add6(self):
87: """write new index.meta file"""
88: return OSAS_add.add6(self)
89:
90: def addText2(self):
91: """add only a text"""
92: metadata=OSAS_add.parse_query_string(self.REQUEST['QUERY_STRING'])
93: metadata['archive-creation-date']=OSAS_add.date(self)
94: metadata['creator']=self.REQUEST['creator']
95: metadata['description']=self.REQUEST['content_description']
96: metadata['archive-path']=os.path.split(self.REQUEST.SESSION['pathnew'])[0]
97: #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
98: metadata['folder_name']=os.path.split(self.REQUEST.SESSION['pathnew'])[1]
99: metadata['content-type']="fulltext document"
100: self.reftype=self.REQUEST.SESSION['reftype']
101: self.REQUEST.SESSION['add_metadata']=metadata
102: self.add_metadata=metadata
103: self.metadata=self.REQUEST.SESSION['metadata']
104: self.metadataprint=""
105: for tag in self.metadata.keys():
106:
107: #print str(self.metadata[tag]).decode('utf-8').encode('utf-8')
108: self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
109:
110: newtemplate=PageTemplateFile('Products/OSA_system/zpt/index_meta').__of__(self)
111: newtemplate.content_type="text/plain"
112: renderxml = newtemplate(encoding='utf-8')
113: #return renderxml
114: metapath=self.REQUEST.SESSION['pathnew']+"/index.meta"
115:
116: f=open(metapath,'w')
117:
118: f.write(renderxml)
119: f.close()
120: os.chmod(metapath,0664)
121: os.popen('chmod -R 0775 %s'%self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name'])
122:
123: return OSAS_add.addText2(self)
124:
125: def addPdf2(self):
126: """add only a pdf"""
127: metadata=OSAS_add.parse_query_string(self.REQUEST['QUERY_STRING'])
128: metadata['archive-creation-date']=OSAS_add.date(self)
129: metadata['creator']=self.REQUEST['creator']
130: metadata['description']=self.REQUEST['content_description']
131: metadata['archive-path']=os.path.split(self.REQUEST.SESSION['pathnew'])[0]
132: #metadata['folder_name']=self.REQUEST.SESSION['folder_name']
133: metadata['folder_name']=os.path.split(self.REQUEST.SESSION['pathnew'])[1]
134: metadata['content-type']="fulltext document"
135: self.reftype=self.REQUEST.SESSION['reftype']
136: self.REQUEST.SESSION['add_metadata']=metadata
137: self.add_metadata=metadata
138: self.metadata=self.REQUEST.SESSION['metadata']
139: self.metadataprint=""
140: for tag in self.metadata.keys():
141: self.metadataprint=self.metadataprint+"<"+tag+">"+self.metadata[tag]+"</"+tag+">\n"
142:
143: newtemplate=PageTemplateFile('Products/OSA_system/zpt/index_meta').__of__(self)
144: newtemplate.content_type="text/plain"
145: renderxml = newtemplate(encoding='utf-8')
146: metapath=self.REQUEST.SESSION['pathnew']+"/index.meta"
147:
148:
149: f=open(metapath,'w')
150: f.write(renderxml)
151: f.close()
152: os.chmod(metapath,0664)
153: os.popen('chmod -R 0775 %s'%self.add_metadata['archive-path']+"/"+self.add_metadata['folder_name'])
154:
155: return OSAS_add.addPdf2(self)
156:
157: def addImages(self,path):
158: """Hinzufügen eines neuen Imagesfolders"""
159: return OSAS_add.addImages(self,path)
160:
161: def addImages2(self):
162: """Upload des neuen Imagefolders"""
163: return OSAS_add.addImages2(self)
164:
165:
166: def manage_AddOSAS_add_DocumentForm(self):
167: """interface for adding the OSAS_add_Metadata"""
168: pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_document.zpt').__of__(self)
169: return pt()
170:
171: def manage_AddOSAS_add_Document(self,id,RESPONSE=None):
172: """add the OSAS_root"""
173: newObj=OSAS_add_Document(id)
174: self.Destination()._setObject(id,newObj)
175: if RESPONSE is not None:
176: RESPONSE.redirect('manage_main')
177:
178:
179: InitializeClass(OSAS_add_Document)
180:
181:
182: class OSAS_add_Text(Folder):
183: """Hinzufuegen eines Text-Dokumentes zum Storage"""
184: security=ClassSecurityInfo()
185:
186: def __init__(self,id):
187: """initialize a new instance"""
188: self.id = id
189:
190:
191: meta_type='OSAS_add_Text'
192: manage_options = Folder.manage_options+(
193: {'label':'Main Config','action':'add_Text_config'},
194: )
195:
196:
197:
198: security.declarePublic('add_Text_config')
199: def add_Text_config(self):
200: """Main configuration"""
201: pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_addText.zpt').__of__(self)
202: return pt()
203:
204: security.declarePublic('change_OSAS_add_Text')
205: def change_OSAS_add_Text(self,RESPONSE=None):
206: """Change"""
207: # self.RootFolderName=RootFolderName
208: if RESPONSE is not None:
209: RESPONSE.redirect('manage_main')
210:
211: def addPdf(self,path):
212: """Add a pdf"""
213: return OSAS_add.addPdf(self,path)
214:
215: def addPdf2(self):
216: """Read the file and store it"""
217: return OSAS_add.addPdf2(self)
218:
219: def addText(self,path):
220: """Add a fulltext"""
221: return OSAS_add.addText(self,path)
222:
223: def addText2(self):
224: """Read the file and store it"""
225: return OSAS_add.addText2(self)
226:
227: def manage_AddOSAS_add_TextForm(self):
228: """interface for adding the OSAS_add_Metadata"""
229: pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_text.zpt').__of__(self)
230: return pt()
231:
232: def manage_AddOSAS_add_Text(self,id,RESPONSE=None):
233: """add the OSAS_root"""
234: newObj=OSAS_add_Text(id)
235: self.Destination()._setObject(id,newObj)
236: if RESPONSE is not None:
237: RESPONSE.redirect('manage_main')
238:
239:
240: InitializeClass(OSAS_add_Text)
241:
242:
243: class OSAS_add_contextData(Folder):
244: """Einfuegen eines Documentes in eine Collection"""
245:
246: security=ClassSecurityInfo()
247:
248:
249: meta_type='OSAS_add_contextData'
250:
251: def XmlToTree(self,URL):
252: """Collection XML to Tree"""
253:
254: class requestHandler(ContentHandler):
255: def __init__(self):
256: self.depth=0
257: self.retStr=""
258:
259: def startElement(self,name,attrs):
260: if name=="element":
261: self.depth+=1
262: begin=""
263: end=""
264: if self.depth==1:
265: begin="<b>"
266: end="</b>"
267:
268: self.retStr+=spaces(self.depth)+"<input type='radio' name='collection' value='%s'>%s</input>"%(attrs.get('url'),begin+urllib.unquote(attrs.get('name'))+end)+"<br>\n"
269:
270:
271:
272: def endElement(self,name):
273: if name=="element":
274: self.depth-=1
275:
276:
277: try:
278: URL+="/getCollectionTreeXML"
279: parser=make_parser()
280: curHandler=requestHandler()
281: parser.setContentHandler(curHandler)
282:
283: parser.parse(urllib.urlopen(URL))
284: return curHandler.retStr
285:
286: except:
287: return URL
288: return urllib.urlopen(URL).read()
289:
290:
291: def __init__(self,id,collection):
292: self.id=id
293: self.collection=collection
294:
295:
296:
297:
298: def getPartners(self,URL):
299: """Zeige Partnerliste"""
300: class requestHandler(ContentHandler):
301: def __init__(self):
302: self.ret=[]
303:
304: def startElement(self,name,attrs):
305: if name=="partner":
306: self.ret.append((attrs.get('id'),attrs.get('title').encode('utf-8')))
307:
308:
309: URL+="/getPartnersXML"
310: parser=make_parser()
311: curHandler=requestHandler()
312: parser.setContentHandler(curHandler)
313: parser.parse(urllib.urlopen(URL))
314: try:
315:
316: return curHandler.ret
317: except:
318: return [("",URL)]
319:
320:
321: def addContextData(self,path):
322: """Hinzufuegen zu einer Sammlung"""
323: try:
324: urllib.urlopen(self.REQUEST['SERVER_URL']+path+"/index.meta")
325:
326: except:
327: return self.REQUEST['SERVER_URL']+path+"/index.meta file has to exist!"
328:
329: links=[(path,'standard storage')]
330:
331: links+=OSAS_show.readContexts(path) # auslesen von contexten fuer den link
332: #print "LINK",links
333: #return links
334: self.REQUEST.SESSION['links']=links
335: pt=PageTemplateFile('Products/OSA_system/zpt/contextDataMain.zpt').__of__(self)
336: return pt()
337:
338:
339: def addContextData2(self,path,collection,link,label,description,content_type,responsible,weight,credits=None):
340: """Hinzufuegen der Resource"""
341: splitted=path.split("/")
342: #print "BLU"
343: id=splitted[len(splitted)-1]
344: title=splitted[len(splitted)-1]
345: metalink=self.REQUEST['SERVER_URL']+path+"/index.meta"
346:
347: #link=TOBEDONE"
348: """Hinzufuegen der Ressource"""
349:
350: params=urllib.urlencode({'id':id,'title':title,'link':link,'label':label,'description':description,'contentType':content_type,'responsible':responsible,'weight':weight,'credits':credits,'metalink':metalink})
351:
352:
353:
354: retStr=urllib.urlopen(collection+"/addResource",params).read()
355: #print "added"
356: if not retStr:
357: return "An Error occured adding the resource\n", collection,params
358:
359: #print collection+"/"+id+"/copyIndex_meta2echo_resource"
360:
361: urllib.urlopen(collection+"/"+id+"/copyIndex_meta2echo_resource").read()
362: #print "copy2res"
363: urllib.urlopen(collection+"/"+id+"/generate_label").read()
364: #print "label"
365: urllib.urlopen(collection+"/"+id+"/generate_title").read()
366: #print "title"
367: return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
368:
369: manage_options = Folder.manage_options+(
370: {'label':'Main Config','action':'add_contextData_config'},
371: )
372:
373:
374: def add_contextData_config(self):
375: """Main configuration"""
376: pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_add_contextData.zpt').__of__(self)
377: return pt()
378:
379:
380: def change_OSAS_add_contextData(self,collection,RESPONSE=None):
381: """Change"""
382: self.collection=collection
383: if RESPONSE is not None:
384: RESPONSE.redirect('manage_main')
385:
386: def manage_AddOSAS_add_contextDataForm(self):
387: """interface for adding the OSAS_add_Metadata"""
388: pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_contextData.zpt').__of__(self)
389: return pt()
390:
391: def manage_AddOSAS_add_contextData(self,id,collection,RESPONSE=None):
392: """add the OSAS_root"""
393: newObj=OSAS_add_contextData(id,collection)
394: self.Destination()._setObject(id,newObj)
395: if RESPONSE is not None:
396: RESPONSE.redirect('manage_main')
397:
398:
399: InitializeClass(OSAS_add_contextData)
400:
401: class OSAS_add_Presentation(Folder):
402: """Hinzufügen der Presentationsinformationen"""
403: security=ClassSecurityInfo()
404:
405: def __init__(self,id):
406: """initialize a new instance"""
407: self.id = id
408:
409:
410: meta_type='OSAS_add_Presentation'
411: manage_options = Folder.manage_options+(
412: {'label':'Main Config','action':'add_Presentation_config'},
413: )
414:
415:
416:
417: security.declarePublic('add_Presentation_config')
418: def add_Presentation_config(self):
419: """Main configuration"""
420: pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_addPresentation.zpt').__of__(self)
421: return pt()
422:
423: security.declarePublic('change_OSAS_add_Presentation')
424: def change_OSAS_add_Presentation(self,RESPONSE=None):
425: """Change"""
426: # self.RootFolderName=RootFolderName
427: if RESPONSE is not None:
428: RESPONSE.redirect('manage_main')
429:
430: def addPresentation(self,path):
431: """Hinzufügen der Presenationsinformation"""
432: return OSAS_add.addPresentation(self,path)
433:
434: def addPresentation2(self):
435: """Eingabe von Metadateninformationen"""
436: return OSAS_add.addPresentation2(self)
437:
438: def manage_AddOSAS_add_PresentationForm(self):
439: """interface for adding the OSAS_add_Metadata"""
440: pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_presentation.zpt').__of__(self)
441: return pt()
442:
443: def manage_AddOSAS_add_Presentation(self,id,RESPONSE=None):
444: """add the OSAS_root"""
445: newObj=OSAS_add_Presentation(id)
446: self.Destination()._setObject(id,newObj)
447: if RESPONSE is not None:
448: RESPONSE.redirect('manage_main')
449:
450:
451: InitializeClass(OSAS_add_Presentation)
452:
453: class OSAS_combineTextImage(Folder):
454: """Hinzufüge der Combine Text und Image"""
455: security=ClassSecurityInfo()
456:
457: def __init__(self,id):
458: """initialize a new instance"""
459: self.id = id
460:
461:
462: meta_type='OSAS_combineTextImage'
463: manage_options = Folder.manage_options+(
464: {'label':'Main Config','action':'combineTextImage_config'},
465: )
466:
467:
468:
469: security.declarePublic('combineTextImage_config')
470: def combineTextImage_config(self):
471: """Main configuration"""
472: pt=PageTemplateFile('Products/OSA_system/zpt/ChangeOSAS_combineTextImage.zpt').__of__(self)
473: return pt()
474:
475: security.declarePublic('change_OSAS_combineTextImage')
476: def change_OSAS_combineTextImage(self,RESPONSE=None):
477: """Change"""
478: # self.RootFolderName=RootFolderName
479: if RESPONSE is not None:
480: RESPONSE.redirect('manage_main')
481:
482: security.declarePublic('combineTextImage')
483: def combineTextImage(self,path):
484: """Hinzufügen der Presenationsinformation"""
485: """gibt input formular zur erstellung des texttools meta tag aus"""
486: files = os.listdir(path)
487:
488: texts=[]
489: imagefolders=[]
490: presentationfolders=[]
491:
492: splitted=path.split("/")
493: externxml=readArchimedesXML(splitted[len(splitted)-1])
494:
495: for filename in files:
496: #print "FN",filename
497: if archive.isdigilib2(path+"/"+filename):
498: imagefolders.append(filename)
499:
500: if archive.isFullText(path,filename):
501: #print "HI"
502: texts.append(filename)
503: if archive.isPresentation(path,filename):
504: presentationfolders.append(filename)
505:
506: dom=xml.dom.minidom.parse(path+"/index.meta")
507: try:
508: filelanguage=archive.getText(dom.getElementsByTagName('lang')[0].childNodes)
509: except:
510: filelanguage=""
511:
512: self.REQUEST.SESSION['isolist']=OSAS_add.getISO()
513:
514: tmp=self.REQUEST.SESSION['isolist'].keys()
515: tmp.sort()
516: self.REQUEST.SESSION['isolistsort']=tmp
517: self.REQUEST.SESSION['path']=path
518: self.REQUEST.SESSION['texts']=texts
519: self.REQUEST.SESSION['imagefolders']=imagefolders
520: self.REQUEST.SESSION['presentationfolders']=presentationfolders
521: self.REQUEST.SESSION['filelanguage']=filelanguage
522: self.REQUEST.SESSION['externxml']=externxml
523:
524: newtemplate=PageTemplateFile('Products/OSA_system/zpt/ImageandText').__of__(self)
525: return newtemplate()
526:
527: def getViewerTemplateSets(self,obj_ids=None):
528: """Get the ViewerTemplateSet title for configuration"""
529: ret=[]
530: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
531:
532: try:
533: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
534:
535: for viewerTemplateSet in viewerTemplateSets:
536: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
537:
538: return ret
539:
540: except:
541: return [('no ViewerTemplateSetfolders','')]
542:
543: def getTextToolsField(self,path,name,default=''):
544: """Lese Textoolsfelder aus index.meta im path aus"""
545:
546: try:
547: dom=xml.dom.minidom.parse(path+"/index.meta")
548: node=dom.getElementsByTagName('texttool')[0] #getNode
549: subnode=node.getElementsByTagName(name)[0]
550:
551: # bei text wird nur der Folder gebraucht
552: if name=="text":
553: splitted=getText(subnode.childNodes).split("/")
554: return splitted[len(splitted)-2]
555: else:
556: return getText(subnode.childNodes)
557: except:
558: return default
559:
560:
561: def combineTextImage2(self,path):
562: """Eingabe von Metadateninformationen"""
563:
564: # correct path
565: path=re.sub("//","/",path)
566: OSAS_add.combineTextImage2(self,path) # Add images
567: splitted=path.split("/")
568: linkPath=splitted[len(splitted)-1]
569: linkViewerEnvironmentImages="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir=%s&step=thumb" % linkPath
570: linkViewerEnvironmentOnlyText="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir=%s&step=textonly" % linkPath
571:
572: if self.REQUEST.has_key('image'): # bilder vorhanden
573: linkViewerEnvironment=linkViewerEnvironmentImages
574: else:
575: linkViewerEnvironment=linkViewerEnvironmentOnlyText
576:
577: self.REQUEST.SESSION['linkViewerEnvironment']=linkViewerEnvironment
578:
579: writeToContext(path,linkViewerEnvironment,"ECHO standard environment",unique="yes")
580:
581: pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_combineTextImageFinal.zpt').__of__(self)
582:
583: return pt()
584:
585: def isSelectedViewerTemplateSet(self,obj,id):
586: """is ausgewählt"""
587:
588: if self.REQUEST['viewerTemplateSet']==id:
589: return 1
590: else:
591: return None
592:
593: def writeToContext(path,link,description,unique="no"):
594: """Created an additional entry to the index.meta file of path"""
595: dom=xml.dom.minidom.parse(path+"/index.meta")
596: node=dom.getElementsByTagName('resource')[0]
597:
598: if unique=="yes":
599:
600: contexts=node.getElementsByTagName('context')
601: for context in contexts:
602: nameTag=getText(context.getElementsByTagName('name')[0].childNodes)
603: linkTag=getText(context.getElementsByTagName('link')[0].childNodes)
604:
605:
606: linkTag=re.sub("\:86","",linkTag) # alter port 86 gleich ohne port nummer (hack)
607: if (nameTag==description) and (linkTag==link):
608: node.removeChild(context).unlink()
609:
610: subnode=dom.createElement('context')
611:
612: linknode=dom.createElement('link')
613: namelinknode=dom.createTextNode(link)
614: linknode.appendChild(namelinknode)
615: subnode.appendChild(linknode)
616:
617: linknode=dom.createElement('name')
618: namelinknode=dom.createTextNode(description)
619: linknode.appendChild(namelinknode)
620: subnode.appendChild(linknode)
621:
622: node.appendChild(subnode)
623:
624: writefile=file(path+"/index.meta","w")
625: #print path+"/index.meta"
626: writefile.write(dom.toxml(encoding="UTF-8"))
627: writefile.close()
628:
629: def manage_AddOSAS_combineTextImageForm(self):
630: """interface for adding the OSAS_add_Metadata"""
631: pt=PageTemplateFile('Products/OSA_system/zpt/AddOSAS_combineTextImage.zpt').__of__(self)
632: return pt()
633:
634: def manage_AddOSAS_combineTextImage(self,id,RESPONSE=None):
635: """add the OSAS_root"""
636: newObj=OSAS_combineTextImage(id)
637: self.Destination()._setObject(id,newObj)
638: if RESPONSE is not None:
639: RESPONSE.redirect('manage_main')
640:
641:
642: InitializeClass(OSAS_combineTextImage)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>