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