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